FreeBSD 4.9 の whole disk image を Linux で mount しようとしたんだけど、
BSD は disklabel とか slice とか partition の概念が Linux と違ってるので、
残りのパーティションを簡単には mount 出来ない。
BSD は disklabel とか slice とか partition の概念が Linux と違ってるので、
kpartx -a disk.imgみたいにしても loop[0-9]p1 に partition a: しか拾ってくれず、
残りのパーティションを簡単には mount 出来ない。
まず、MBR (MSDOS) 方式のパーティションテーブルを使っているのは Linux と共通だが、
primary partition の事を slice と言うらしく、slice の中に partition が複数切ってあるらしい。
デフォルトだと partition a: が / で b: が swap、c: が slice 全体なんだそうな。
んで e:, f: g: 辺りが、/var, /tmp, /usr 辺りに mount される。
BSD disklabel なんて言い方もするみたいで、
Linux の fdisk だと b コマンドでこれを表示編集することが可能な他、
disktype コマンドを用いても表示することが可能。
今回の場合、以下のような構成だった。
primary partition の事を slice と言うらしく、slice の中に partition が複数切ってあるらしい。
デフォルトだと partition a: が / で b: が swap、c: が slice 全体なんだそうな。
んで e:, f: g: 辺りが、/var, /tmp, /usr 辺りに mount される。
BSD disklabel なんて言い方もするみたいで、
Linux の fdisk だと b コマンドでこれを表示編集することが可能な他、
disktype コマンドを用いても表示することが可能。
今回の場合、以下のような構成だった。
$ disktype disk.img --- disk.img Regular file, size 111.8 GiB (120034123776 bytes) FreeBSD boot manager (i386 boot0 at sector 0) DOS/MBR partition map Partition 1: 111.8 GiB (120031478784 bytes, 234436482 sectors from 63, bootable) Type 0xA5 (FreeBSD) FreeBSD boot loader (i386 boot1 at sector 0) FreeBSD boot loader (i386 boot2/BTX 1.01 at sector 2) BSD disklabel (at sector 1), 8 partitions Partition a: 128 MiB (134217728 bytes, 262144 sectors from 63) Type 7 (4.2BSD fast file system) Includes the disklabel and boot code UFS file system, 8 KiB offset, little-endian Last mounted at "/" Partition b: 1.954 GiB (2097659904 bytes, 4096992 sectors from 262207) Type 1 (swap) Partition c: 111.8 GiB (120031478784 bytes, 234436482 sectors from 63) Type 0 (Unused) Partition e: 256 MiB (268435456 bytes, 524288 sectors from 4359199) Type 7 (4.2BSD fast file system) UFS file system, 8 KiB offset, little-endian Last mounted at "/var" Partition f: 256 MiB (268435456 bytes, 524288 sectors from 4883487) Type 7 (4.2BSD fast file system) UFS file system, 8 KiB offset, little-endian Last mounted at "/tmp" Partition g: 109.2 GiB (117262730240 bytes, 229028770 sectors from 5407775) Type 7 (4.2BSD fast file system) UFS file system, 8 KiB offset, little-endian Last mounted at "/usr"
これは kpartx が /dev/mapper/loopXpY にぶら下げてくれるのでを比較的簡単で、以下のようにすれば mount 出来た。
「Type 7 (4.2BSD fast file system)」となっていたので、ufstype は old かなと思ったけど 44bsd だった。
sudo kpartx -v -a disk.img sudo mount -r -u ufs -o ufstype=44bsd /dev/mapper/loopXp1 /mnt
「Type 7 (4.2BSD fast file system)」となっていたので、ufstype は old かなと思ったけど 44bsd だった。
こっちは kpartx が認識してくれないので、ちょっと苦労したが、
distype の結果を元に、offset と sizelimit を設定すれば行けた。
具体的には、例えば上記の disktype の例で g: の /usr を mount するには以下のようにすればよかった。
distype の結果を元に、offset と sizelimit を設定すれば行けた。
具体的には、例えば上記の disktype の例で g: の /usr を mount するには以下のようにすればよかった。
sudo mount -r -t ufs -o loop,ufstype=44bsd,offset=$((512*5407775)),sizelimit=117262730240 disk.img /mnt
以下のようなスクリプトを作ってみた
- Gist / kou1okada / mountbsd.sh
タグ
コメントをかく