通常のファイルシステムイメージは簡単にマウントできます。
mount system.img /mnt
調べ、修正しました。しかし、Raspberry Piシステムイメージ(raspbianなど)でこれを試すと、次のようになります。
mount: unknown filesystem type '(null)'
そして、私が何を試しても-t
、それは機能しません。このイメージをマウントするにはどうすればよいですか?
通常のファイルシステムイメージは簡単にマウントできます。
mount system.img /mnt
調べ、修正しました。しかし、Raspberry Piシステムイメージ(raspbianなど)でこれを試すと、次のようになります。
mount: unknown filesystem type '(null)'
そして、私が何を試しても-t
、それは機能しません。このイメージをマウントするにはどうすればよいですか?
回答:
この質問は、他の質問への回答の一部として回答されますが、ここでは正規の扱いに値するため、繰り返し続ける必要はありません。
実際には2つのパーティションと1つのブートセクターが含まれているため、イメージ全体をマウントすることはできません。ただし、ファイル内のオフセットがわかっている場合は、イメージ内の個々のパーティションをマウントできます。それらを見つけるには、でブロックデバイスとして画像を調べfdisk -l whatever.img
ます。出力には、次のような表が含まれている必要があります。
Device Boot Start End Blocks Id System
whatever.img1 8192 122879 57344 c W95 FAT32 (LBA)
whatever.img2 122880 5785599 2831360 83 Linux
これらは2つのパーティションです。最初のラベルは「FAT32」、もう1つのラベルは「Linux」です。この表の上には、次のようなデバイス全体に関するその他の情報があります。
Units: sectors of 1 * 512 = 512 bytes
この単位サイズStart
にパーティションのブロックを掛けることで、バイト単位のオフセットを見つけることができます。
これらoffset
は、mount
コマンドのオプションで使用できます。また、からの各パーティションのタイプについての手がかりがありfdisk
ます。したがって、ディレクトリがあり、マウントポイントとして使用できる/mnt/img/one
と仮定し/mnt/img/two
ます。
mount -v -o offset=4194304 -t vfat whatever.img /mnt/img/one
mount -v -o offset=62914560 -t ext4 whatever.img /mnt/img/two
ここで「重複ループ」エラーが発生した場合、バージョンでmount
は最初のパーティションのサイズとオフセットを指定する必要があります。それをアンマウントし、ブロック数(57344)* 512(= 29360128)を使用します。
mount -v -o offset=4194304,sizelimit=29360128 \
-t vfat whatever.img /mnt/img/one
2番目のパーティションにはサイズ制限は必要ありません。イメージ内には2番目のパーティションがないためです。
これで、2つのパーティションにアクセスできます。それらを変更しない場合は、-r
(読み取り専用)スイッチも使用します。 何かを変更すると、それらの変更が.img
ファイルに含まれます。
/boot
システムの実行中は、おそらく最初のパーティションが2番目のパーティションにマウントされることに注意してください。
sizelimit
オプションでパーティションのサイズを指定するだけです。:詳細情報についてはunix.stackexchange.com/a/342466/9689。(ところで、上記の答えがそのオプションの使用例を提供するために更新されてもよい。)
$((8192*512))
。
losetup
を通じてパーティションのプローブを提供します-P
。これを使用すると、Raspbian SDカードイメージなどのフルディスクイメージのパーティションを非常に簡単にマウントできます。
losetup -P /dev/loop0 raspbian.img
mount /dev/loop0p2 /mnt
mount /dev/loop0p1 /mnt/boot
最初はawk / grepを使用してfdiskを解析し、オフセットを引き出していましたが、少し複雑で、フレークで、後で理解するのが難しいことがわかりました。私が見つけた最も簡単な方法:
IMAGE_FILE="YOUR IMAGE FILE GOES HERE"
TMP=$(mktemp -d)
LOOP=$(sudo losetup --show -fP "${IMAGE_FILE}")
sudo mount ${LOOP}p2 $TMP
sudo mount ${LOOP}p1 $TMP/boot/
# do stuff to ${TMP}/ which is rpi filesystem
# cleanup
umount ${TMP}/boot/
umount ${TMP}
rmdir ${TMP}
これにより、temp-dirが作成され、次のループデバイスが自動的に割り当てられ、デバイスとしてパーティションが作成されp1
、p2
デバイスがパーティション化され、ブートとルートがマウントされます。
クリーンアップ部分を終了トラップに入れることもできるため、何かが失敗してもマウント/ファイルがぶら下がることはありません。
set -e
function cleanup {
sudo umount -f $TMP/boot/
sudo umount -f $TMP
rmdir $TMP
}
trap cleanup EXIT