iPodのマウント

iPodMacOSXで初期化した場合、ファイルシステムはhfs+になっている。
このため、マウントはroot権限で以下のようにコマンドを実行すれば可能である。

# mount -t hfsplus /dev/sda3 /ipod

これによりiPod内全てのファイルにアクセスが可能である。

stratocaster:~# cd /ipod
stratocaster:/ipod# ls -l
total 1
drwxr--r--  1 root root    2 Nov  1 01:03 Calendars
drwxr--r--  1 root root    5 Nov  1 22:32 Contacts
-rw-r--r--  1   99   99 1024 Nov  1 22:32 Desktop DB
-rw-r--r--  1   99   99    2 Nov  1 22:30 Desktop DF
-rw-r--r--  1   99   99    0 Nov  1 01:17 Icon?
drwxr--r--  1 root root    4 Nov  1 22:32 Notes
drwxrwxrwx  1   99   99    6 Nov  1 01:17 iPod_Control

ちなみにiPodFireWire経由で接続している場合、DebianSCSIのディスクとして自動認識する。これを実現するためには、Kernel構築時に以下のオプションを有効にしておく必要がある。

接続を行うと/var/log/syslogに以下のようなメッセージが出て/dev/sdaが設定される。

Nov  2 02:50:32 stratocaster kernel: ieee1394: Node changed: 0-00:1023 -> 0-01:1023
Nov  2 02:50:34 stratocaster kernel: ieee1394: Node changed: 0-01:1023 -> 0-00:1023
Nov  2 02:50:36 stratocaster kernel: ieee1394: Node changed: 0-00:1023 -> 0-01:1023
Nov  2 02:50:39 stratocaster kernel: ieee1394: Node resumed: ID:BUS[0-00:1023]  GUID[000a2700027ec694]
Nov  2 02:50:39 stratocaster kernel: scsi1 : SCSI emulation for IEEE-1394 SBP-2 Devices
Nov  2 02:50:40 stratocaster kernel: ieee1394: sbp2: Logged into SBP-2 device
Nov  2 02:50:40 stratocaster kernel: ieee1394: Node 0-00:1023: Max speed [S400] - Max payload [2048]
Nov  2 02:50:40 stratocaster kernel:   Vendor: Apple     Model: iPod              Rev: 1.61
Nov  2 02:50:40 stratocaster kernel:   Type:   Direct-Access                      ANSI SCSI revision: 02
Nov  2 02:50:40 stratocaster scsi.agent[3029]: bogus sysfs DEVPATH=/devices/pci0002:20/0002:20:0e.0/fw-host0/000a2700027ec694/000a2700027ec694-0/host1/1:0:0:0
Nov  2 02:50:41 stratocaster kernel: SCSI device sda: 7999488 512-byte hdwr sectors (4096 MB)
Nov  2 02:50:41 stratocaster kernel: sda: Write Protect is off
Nov  2 02:50:41 stratocaster kernel: sda: Mode Sense: 04 00 00 00
Nov  2 02:50:41 stratocaster kernel: SCSI device sda: drive cache: write through
Nov  2 02:50:41 stratocaster kernel:  sda: [mac] sda1 sda2 sda3
Nov  2 02:50:41 stratocaster kernel: Attached scsi removable disk sda at scsi1, channel 0, id 0, lun 0

これで、/dev/sdaが割当たった事になる。例えば、mac-fdiskで見ると以下のようになっている。

stratocaster:~# mac-fdisk /dev/sda
/dev/sda
Command (? for help): p
/dev/sda
        #                    type name                length   base    ( size )  system
/dev/sda1     Apple_partition_map partition map           62 @ 1       ( 31.0k)  Partition map
/dev/sda2              Apple_MDFW firmware             65536 @ 63      ( 32.0M)  Unknown
/dev/sda3               Apple_HFS disk               7933888 @ 65599   (  3.8G)  HFS

Block size=512, Number of Blocks=7999488
DeviceType=0x0, DeviceId=0x0

/dev/sda3がデータ領域である。
マウントは、一般ユーザでもできると便利である。以下のエントリを/etc/fstabに書いておく。

/dev/sda3       /ipod           hfsplus rw,user,noauto,uid=1000,gid=100 0       0

オプションuserで誰でもマウント可能になる。

$ mount /ipod
$ ls -l /ipod
合計 1
drwxr--r--  1 vfr users    2 2004-11-01 01:03 Calendars
drwxr--r--  1 vfr users    5 2004-11-01 22:32 Contacts
-rw-r--r--  1  99    99 1024 2004-11-01 22:32 Desktop DB
-rw-r--r--  1  99    99    2 2004-11-01 22:30 Desktop DF
-rw-r--r--  1  99    99    0 2004-11-01 01:17 Icon?
drwxr--r--  1 vfr users    4 2004-11-01 22:32 Notes
drwxrwxrwx  1  99    99    6 2004-11-01 01:17 iPod_Control

なお、外す際はumountが必要である。

$ umount /ipod

しかし、これでもiPod側は駐禁マークが付きっぱなしである。
これを解除するには、以下のようなコマンドをrootで実行する。

# echo "scsi remove-single-device 0 0 0 0" > /proc/scsi/scsi

上記は1台目の場合、2台目は 1 0 0 0 となる。
もし、これでもダメは場合は、再起動しかない(だめな時が結構あった)。
無理矢理外すと、次回以降マウントの際に以下のエラーが出るようになる。

HFS+-fs warning: Filesystem was not cleanly unmounted, running fsck.hfsplus is recommended.  mounting read-only.

残念なことに Debian(というかLinux)には fsck.hfsplus は存在しない。add hocな対応としては、hfsplusパッケージに含まれるhpmount,hpumountコマンドを発行する。これにより以降エラーが出なくなる。

stratocaster:~# hpmount /dev/sda3
*** Warning: You are about to open '/dev/sda3' for writing ***
*** Do you really want to do that ? (y/n) ***
y
stratocaster:~# hpumount

燃え尽きたので今日はここまで。明日、gtkpodというLinuxiTunesもどきを紹介する予定。