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

Mounting drives with mount(1)

こんなのを紹介された。そして、リナで使えた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.

Open Source: NTFS-3G

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

使い方は下記に例が有った。

USB - NTFS フォーマットのドライブをマウントする

最初にカーネルのモジュールをロードする。

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子は断言してます)

etc

Beyond Linux® From Scratch (System V 版)