ntfs-3g
毎朝の散歩のコースと時間は、テロリストや誘拐を考慮して、その都度変えているぞ。って、その筋の小説みたいだけど、事実は違う。
今朝は晴れていて、山が良く見えるから、山に向かって歩こう、女房からあれの注文を受けたので、出発時刻はあのスーパーに品出しが終わる頃に調整しよう、なんてのが真実です。平和ですなあ。
で、某経路で歩いていると、道に佇むおばさん一人。どうしたのかなって思っていると、横から軽自動が出てきた。旦那さんのお見送りタイム。車が行って見えなくなるまで手を振っていた。
通りがかりに、ひと声かけたら、はにかんでいた。 数日して、またその散歩コースを通った。そしたら、また同じ光景に出くわした。今日の出発時間は、早く散歩に行かないと暑くなるよってんで、読書を中断しての事だった。
どんな確率で、こんな光景が見られるのだろう。時空の一致を考慮せにゃなるまい。空間と言う事では、東西南北にルートを持ってるから、1/4の確率。
時間の方は、おばちゃんの見送りタイムが1分間で、一定の時刻を仮定出来るか。そうすると、オイラーの出発時刻によるな。大体2時間の幅があるから、1/120ぐらいか。
両者の積で、遭遇確率が決まる。ざっと計算すると、1年半に一回ぐらい。そんなものなのか。
fdisk
前回は、ほったらかしにしてた160GのHDDを終活した。まだ終活するデバイスが有るぞ。USBステックて奴ね。昔のやつなんで、めっぽう容量が小さいけど、侮れません。で、これを肴にぐちゃぐちゃやってみる。遊び場はリアルDebian機だ。
まず、USBを刺した時の認識状況
debian:~$ sudo dmesg : [ 4576.997594] usb 5-2: new high-speed USB device number 2 using ehci-pci [ 4577.155648] usb 5-2: New USB device found, idVendor=0ea0, idProduct=2168, bcdDevice= 2.00 [ 4577.155651] usb 5-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 4577.155652] usb 5-2: Product: Mass storage [ 4577.155654] usb 5-2: Manufacturer: USB [ 4577.155655] usb 5-2: SerialNumber: 230760A43FD924E9 [ 4577.156702] usb-storage 5-2:1.0: USB Mass Storage device detected [ 4577.160562] scsi host6: usb-storage 5-2:1.0 [ 4578.162398] scsi 6:0:0:0: Direct-Access BUFFALO ClipDrive 2.00 PQ: 0 ANSI: 2 [ 4578.163136] sd 6:0:0:0: Attached scsi generic sg2 type 0 [ 4579.217865] ready [ 4579.218250] sd 6:0:0:0: [sdb] 256000 512-byte logical blocks: (131 MB/125 MiB) [ 4579.218840] sd 6:0:0:0: [sdb] Write Protect is off [ 4579.218842] sd 6:0:0:0: [sdb] Mode Sense: 03 00 00 00 [ 4579.219464] sd 6:0:0:0: [sdb] No Caching mode page found [ 4579.219469] sd 6:0:0:0: [sdb] Assuming drive cache: write through [ 4579.226982] sdb: sdb1 [ 4579.230479] sd 6:0:0:0: [sdb] Attached SCSI removable disk
バッファローの128M大容量(その当時のね)USBメモリーって分かる。
debian:~$ sudo fdisk -l : Disk /dev/sdb: 125 MiB, 131072000 bytes, 256000 sectors Disk model: ClipDrive Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x90909090 Device Boot Start End Sectors Size Id Type /dev/sdb1 * 32 255999 255968 125M 6 FAT16
懐かしいfdiskコマンド発行。FAT16って歴史を感じるな。
debian:~$ mount | grep /dev/sd /dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro) /dev/sdb1 on /media/sakae/AA1E-A360 type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)
OS的にはvfatって扱いなのね。メインHDDはext3から進化してext4になってる。
debian:~$ df -h /dev/sda1 /dev/sdb1 Filesystem Size Used Avail Use% Mounted on /dev/sda1 225G 105G 109G 49% / /dev/sdb1 125M 66M 60M 53% /media/sakae/AA1E-A360 debian:~$ df -i /dev/sda1 /dev/sdb1 Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 15015936 1246275 13769661 9% / /dev/sdb1 0 0 0 - /media/sakae/AA1E-A360
多用するコマンドでも確認。何やら記録されてるなあ。後幾つのファイルを保存出来るねん? vfatだと、そんなの知らんわと言う扱いか。
LinuxでUSBメモリをNTFSにフォーマットにするコマンド
ntfs
LinuxでWindows由来のファイルシステムを読み書きするには、ntfs-3gとか言うパッケージが必要らしい。オイラーのDeskTopは軽いLXDEにしてるけど、ちゃんと入っていた。前回産婆さんなんて書いたけど、撤回するよ。そっち方面は疎いので許してね(sambaさんてWindows用のファイル共有なんだな。プリンター方面の事は全く知らないけど。)。
で、Windows10でntfsした上記のUSBを使ってみる。
debian:tmp$ sudo fdisk -l Disk /dev/sdb: 125 MiB, 131072000 bytes, 256000 sectors Disk model: ClipDrive Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x90909090 Device Boot Start End Sectors Size Id Type /dev/sdb1 * 32 255999 255968 125M 7 HPFS/NTFS/exFAT debian:tmp$ mount | grep sdb /dev/sdb1 on /media/sakae/9AD02B22D02B03DB type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096,uhelper=udisks2)
微妙に応答が異なった。
debian:tmp$ df /dev/sdb1 Filesystem 1K-blocks Used Available Use% Mounted on /dev/sdb1 127980 7976 120004 7% /media/sakae/9AD02B22D02B03DB debian:tmp$ df -i /dev/sdb1 Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sdb1 185540 31 185509 1% /media/sakae/9AD02B22D02B03DB
そして、dfの結果も勿論違う。特筆すべきは、iノードがちゃんと計測されてる事。それはいいんだけど、空のはずなのに7%も使われている。これってファイル名やら、空き領域を示すマップやらが入っている所だよね。
ここまで分かればUSBをいじり倒したいぞ。でも用心して、事前にUSBの内容をdumpしておいて、不慮の事故に備える事にする。
debian:Downloads$ sudo dd if=/dev/sdb1 of=USB128M bs=1M [sudo] password for sakae: 124+1 records in 124+1 records out 131055616 bytes (131 MB, 125 MiB) copied, 25.3512 s, 5.2 MB/s debian:Downloads$ sudo dd if=/dev/sdb of=USB128M bs=1M 125+0 records in 125+0 records out 131072000 bytes (131 MB, 125 MiB) copied, 25.5452 s, 5.1 MB/s
sdbが全ての領域を表し、sdb1は、冒頭部分を飛ばして、32セクター目からの保存なんだな。
ちょいと長い名前のファイルを作成して、どんな所に書き込まれたか確認してみる。 ええ、ファイルの本体部分を森に隠しても、恥ずかしいファイル名が残っていたらいやですからね。長いファイル名で恥ずかしい名前を上書きする作戦。
#!/bin/sh for s in `seq 4` do h=`echo $s | sha256sum - | cut -f1 -d' '` f=`echo AAAA-${h}-ZZZZ` echo $f dd if=/dev/zero of=$f bs=4k count=1 done
gitみたいな名前にしてみた。
AAAA-4355a46b19d348dc2f57c046f8ef63d4538ebb936000f3c9ee954a27460dd865-ZZZZ 1+0 records in 1+0 records out 4096 bytes (4.1 kB, 4.0 KiB) copied, 0.00104977 s, 3.9 MB/s AAAA-53c234e5e8472b6ac51c1ae1cab3fe06fad053beb8ebfd8977b010655bfdd3c3-ZZZZ :
で、このメディアをddでファイルに書き出し、hexeditで検索してみるも、見つからず。
使い方がまずいかと思って、適当にASCIIデータを書き込み、それを検索すると、ちゃんとコンテンツは見つかった。一体どゆ事? これ以上の追及は出来ないか? HungUpか? 待て、BSD系はどうなってる?
ntfs for OpenBSD
BSDと言ったら、オイラー的にはOpenBSDの事を指します。今までNetBSDとか使ってて、最近新しいのが出たけど、パッケージの取り込みが絶望的に遅い! レポジトリはCDNに有るんだけど、どうも海の向こうにしかサポートしてないみたい。 そしてFreeBSDとその派生品は、何だかLinuxっぽくなってきてるんで、ちょいと敬遠中です。
/sysの下に何やらntfsなんて言う不穏なdirが有るのは、昔から気付いていた。意を決して覗いてみると、どうやらWindows用のファイルシステムを扱う物らしい。で、少しググルの顧問に聞いてみたよ。自分で調べるより確かですからね。
HowTo: OpenBSD Mount an NTFS File System
こんなのを紹介された。そして、リナで使えたntfs-3gも有ると言う。
NTFS-3G is a stable, full-featured, read-write NTFS driver for Linux, Android, Mac OS X, FreeBSD, NetBSD, OpenBSD, OpenSolaris, QNX, Haiku, and other operating systems. It provides safe handling of the Windows XP, Windows Server 2003, Windows 2000, Windows Vista, Windows Server 2008 and Windows 7 NTFS file systems.
3gは、第三世代って事らしい。みんなで秘密の扉をこじ開けて、使えるようにしましたって事だな。その集大成が上記のオープンソースになってるとな。
OpenBSDがVMWare上で動いている時にUSBを刺すと、Windows側に振り向ける? それともOpnBSDにするって聞いてくる。迷わずOpenBSDって指定。
ob# dmesg : scsibus4 at umass0: 2 targets, initiator 0 sd0 at scsibus4 targ 1 lun 0: <BUFFALO, ClipDrive, 2.00> removable serial.0ea0216860A43FD924E9 sd0: 125MB, 512 bytes/sector, 256000 sectors
sd0で取り扱いしますと報告が有った。 それのOSから見える素性を確認。
ob# disklabel sd0 # /dev/rsd0c: type: SCSI disk: SCSI disk label: ClipDrive duid: 0000000000000000 flags: bytes/sector: 512 sectors/track: 63 tracks/cylinder: 255 sectors/cylinder: 16065 cylinders: 15 total sectors: 256000 boundstart: 0 boundend: 256000 drivedata: 0 16 partitions: # size offset fstype [fsize bsize cpg] c: 256000 0 unused i: 255968 32 NTFS
cパーテションが全体を表していて、iパーテションがNTFSのエリアなのね。
ob# mount -t ntfs /dev/sd0i /mnt/ntfs ob# df Filesystem 512-blocks Used Avail Capacity Mounted on /dev/wd0a 23710364 17729824 4795024 79% / mfs:31461 2028910 38 1927428 0% /tmp /dev/sd0i 255967 16023 239944 6% /mnt/ntfs
iパーテションをマウントしたよ。
ob$ touch zzz touch: zzz: Read-only file system
残念ながらOSが提供するマウントコマンドはroになってて書き込みは出来ない。良く知らないファイルシステムに手を出して、壊れてしまったら責任取れませんって態度なんだな。
世の中には、事故責任を取れるなら、使ってもいいよってのが提供されてる。sysutilsに有るやつね。上で調べておいた第三世代品を入れる。
ob# pkg_add ntfs_3g quirks-3.183 signed on 2020-03-20T09:07:15Z ntfs_3g-2017.3.23p0:e2fsprogs-1.42.12p5: ok ntfs_3g-2017.3.23p0: ok
ob# ntfs-3g /dev/sd0i /mnt/ntfs ob# df Filesystem 512-blocks Used Avail Capacity Mounted on /dev/wd0a 23710364 17744300 4780548 79% / mfs:31461 2028910 10 1927456 0% /tmp fusefs 255960 16016 239944 6% /mnt/ntfs
自己責任でマウント。
ob$ echo 'From OpenBSD' >zzz ob$ cat zzz From OpenBSD
自己責任で書き込み、読み出し。まあ、動いているね。
自己責任で、色々なおまけプログラムも利用出来ますとな。
NTFSPROGS(8) System Manager's Manual NTFSPROGS(8) NAME ntfsprogs - tools for doing neat things with NTFS OVERVIEW ntfsprogs is a suite of NTFS utilities based around a shared library. The tools are available for free and come with full source code. TOOLS mkntfs(8) - Create an NTFS filesystem. ntfscat(8) - Dump a file's content to the standard output. ntfsundelete(8) - Recover deleted files from NTFS. :
何と、ntfsなファイルシステムまで作れるよ。こういう物を提供されたんじゃ、Windowsの優位性はどんどん下がるばかり。焦ったMSは仕方なくLinux業界にすり寄ってきたとな。これで、ntfs-5gとかが出たら、完全にWindowsとかは要らなくなりますからね。
そう、オイラーのガラパゴス携帯は3G品です。風前の灯火です。今度買う時は4Gをすっ飛ばして5G品にするか。コロナウィルスの影響で消費は滞り中。これを打破して上向き消費を喚起するには、5Gの爆発的発展しかないぞ。
5Gデバイスを買うなら、今がチャンス。半額は政府が補助しますとかって言う大胆な政策を打てよ。>安倍ちゃん。
ntfsundelete(8)
EXAMPLES Look for deleted files on /dev/hda1. ntfsundelete /dev/hda1 Look for deleted documents on /dev/hda1. ntfsundelete /dev/hda1 -s -m '*.doc'
こういう恐ろしい(もとえ、素敵な)コマンドが第三世代でも搭載されますから、5Gになったらどうなるねん。高いボラクルも不要になる世界が待っているに違いない。
at FreeBSD
FreeBSDで試してみる。sysutiliに有るんで入れる。
[1/3] Fetching fusefs-ntfs-2017.3.23.txz: 100% 491 KiB 502.9kB/s 00:01 [2/3] Fetching fusefs-libs-2.9.9_1.txz: 100% 140 KiB 143.2kB/s 00:01 [3/3] Fetching libublio-20070103_2.txz: 100% 14 KiB 14.5kB/s 00:01
使い方は下記に例が有った。
最初にカーネルのモジュールをロードする。
vboxではメニューを操作してUSBを認識させる。
[sakae@fb ~]$ dmesg : ugen0.2: <USB Mass storage> at usbus0 umass0 on uhub0 umass0: <USB Mass storage, class 0/0, rev 2.00/2.00, addr 1> on usbus0 umass0: SCSI over Bulk-Only; quirks = 0xc100 umass0:2:0: Attached to scbus2 da0 at umass-sim0 bus 0 scbus2 target 0 lun 0 da0: <BUFFALO ClipDrive 2.00> Removable Direct Access SCSI-2 device da0: Serial Number 230760A43FD924E9 da0: 40.000MB/s transfers da0: 125MB (256000 512 byte sectors) da0: quirks=0x2<NO_6_BYTE>
次にマウントする。
[sakae@fb ~]$ sudo ntfs-3g /dev/da0s1 /mnt Password: The disk contains an unclean file system (0, 0). The file system wasn't safely closed on Windows. Fixing.
文句を言われた、けど、無視。
[sakae@fb ~]$ df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ada0s1a 15225340 4714644 9292672 34% / devfs 1 1 0 100% /dev tmpfs 1048576 4 1048572 0% /tmp /dev/fuse 127980 7992 119988 6% /mnt
fuseって仮想デバイスだな。
BSD用に、長いファイル名で書き込み
#!/bin/sh for s in `jot 4` do h=`md5 -s $s | sed -e 's/.*= //'` f=`echo Free-${h}-BSD` echo $f dd if=/dev/zero of=$f bs=4k count=1 done
ちゃんと書き込めたよ。
gdb exam list
今さらながら、gdbで単方向リストをトラバースする方法を調べた。
単方向リストを例にして、試してみる。
(gdb) p list1 $8 = {head = 0x4051a0} (gdb) p *$.head $9 = {data = 5, next = 0x405190} (gdb) p *$.next $10 = {data = 4, next = 0x405180} (gdb) $11 = {data = 3, next = 0x405170} (gdb) $12 = {data = 2, next = 0x405160} (gdb) $13 = {data = 1, next = 0x0} (gdb) Cannot access memory at address 0x0
上記のように、一度構造体を表示させ(gdbにアドレスが保存される)、次にリンクのエレメントを指定すれば良い。一度このモードになると後はRETを叩くだけで、辿って行ける。気分は、schemeでリストを追いかけているようで、気持ち良い。(と、scheme子は断言してます)