Raspberry Pi Linuxディストリビューションイメージをマウントするにはどうすればよいですか?


37

通常のファイルシステムイメージは簡単にマウントできます。

mount system.img /mnt

調べ、修正しました。しかし、Raspberry Piシステムイメージ(raspbianなど)でこれを試すと、次のようになります。

mount: unknown filesystem type '(null)'

そして、私が何を試しても-t、それは機能しません。このイメージをマウントするにはどうすればよいですか?


回答:


71

この質問は、他の質問への回答の一部として回答されますが、ここでは正規の扱いに値するため、繰り返し続ける必要はありません。

実際には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にパーティションのブロックを掛けることで、バイト単位のオフセットを見つけることができます。

  • 最初のパーティション512 * 8192 = 4194304
  • 2番目のパーティション512 * 122880 = 62914560

これら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番目のパーティションにマウントされることに注意してください。


12
kpartxを使用すると、さらに簡単になります。kpartx -a whatever.img適切な(ループ)ノードを作成し、後で自由にマウントできます。kpartx -d whatever.img(アンマウントされた)ループノードを削除する実行します。


ルートとブートパーティションを同時にマウントする方法:unix.stackexchange.com/q/342463/9689
グジェゴシWierzowiecki

1
PS「オーバーラップ」エラーを回避するために、両方のパーティションを同時にマウントしたい場合は、sizelimitオプションでパーティションのサイズを指定するだけです。:詳細情報についてはunix.stackexchange.com/a/342466/9689。(ところで、上記の答えがそのオプションの使用例を提供するために更新されてもよい。)
グジェゴシWierzowiecki

2
手動で乗算するのではなく、bashの算術展開を使用できます$((8192*512))
ルスラン

20

losetupを通じてパーティションのプローブを提供します-P。これを使用すると、Raspbian SDカードイメージなどのフルディスクイメージのパーティションを非常に簡単にマウントできます。

losetup -P /dev/loop0 raspbian.img
mount /dev/loop0p2 /mnt
mount /dev/loop0p1 /mnt/boot

これは、人的エラーが発生しにくいようです。マウントコマンドでもラベルを使用できますか?
ctrl-alt-delor

1

最初は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が作成され、次のループデバイスが自動的に割り当てられ、デバイスとしてパーティションが作成されp1p2デバイスがパーティション化され、ブートとルートがマウントされます。

クリーンアップ部分を終了トラップに入れることもできるため、何かが失敗してもマウント/ファイルがぶら下がることはありません。

set -e
function cleanup {
  sudo umount -f $TMP/boot/
  sudo umount -f $TMP
  rmdir $TMP
}
trap cleanup EXIT

0

Arch Linuxでブロックではなくセクターでfdisk -lが表示される場合...「重複ループエラー」の場合にブロック数を見つける別の方法は、2番目のパーティションから最初のパーティションのオフセットをバイト単位で減算することです。そして2で割る。例(62914560-4194304)/ 2 = 29360128

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.