頑張ってるルートとブートパーティションのマウント~のラズベリーパイビデオ:
mount -v -o offset="70254592" -t ext4 /mnt/X/raspbian-jessie.img /tmp/raspbian
mount -v -o offset="4194304" -t vfat /mnt/X/raspbian-jessie.img /tmp/boot
ルートがマウントされている場合、ブートをマウントすると、次のような結果になります。
mount: /mnt/X/raspbian-jessie.img: overlapping loop device exists
1つのディスクイメージに複数のパーティションを同時にマウントする方法は? (これは明らかにディスクでは可能ですが、ファイルでは利用できないのはなぜですか?)
答え1
重複を防ぐには、パーティションの長さを指定する必要があります。オプションについてはを参照sizelimit
してくださいman mount
。man losetup
答え2
Lostup 2.21 -P オプション
losetup -P -f --show my.img
/dev/loopXpY
パーティションごとに1つずつ作成します。
利点:実行可能ファイル(util-linuxパッケージ)は、多くのディストリビューションにプリインストールされています。
短所:これは最近のオプションであり、Ubuntu 14.04には存在しません。その前にkpartxを使用してください。https://unix.stackexchange.com/a/405639/32558
losetup -P
オートメーション
使用法:
$ los my.img
/dev/loop0
/mnt/loop0p1
/mnt/loop0p2
$ ls /mnt/loop0p1
/whatever
/files
/youhave
/there
$ sudo losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO
/dev/loop1 0 0 0 0 /full/path/to/my.img
$ # Cleanup.
$ losd 0
$ ls /mnt/loop0p1
$ ls /dev | grep loop0
loop0
源泉:
los() (
img="$1"
dev="$(sudo losetup --show -f -P "$img")"
echo "$dev"
for part in "$dev"?*; do
if [ "$part" = "${dev}p*" ]; then
part="${dev}"
fi
dst="/mnt/$(basename "$part")"
echo "$dst"
sudo mkdir -p "$dst"
sudo mount "$part" "$dst"
done
)
losd() (
dev="/dev/loop$1"
for part in "$dev"?*; do
if [ "$part" = "${dev}p*" ]; then
part="${dev}"
fi
dst="/mnt/$(basename "$part")"
sudo umount "$dst"
done
sudo losetup -d "$dev"
)
答え3
ツールを使用してくださいkpartx
。イメージパーティションをマップし、/dev/mapper
それを使用して直接マウントできます。
$ sudo kpartx -a disk.img
$ sudo mount -o loop /dev/mapper/loop0p2 /mnt
PS。完了したら、マッピングを削除することを忘れないでください。sudo kpartx -d disk.img
答え4
ここの他の答えは正しいと思いますが、私の考えでは簡潔- またはもう少し行く。losetup
いいですね。しかし、始まったばかりの人にとっては混乱する可能性があります。だから - 私の答えは次のとおりです。
OPが質問を始めていないので、fdisk -lu <file.img>
私のRPiを例として使用します。fdisk -lu <file.img>
提供するからです。「数字」例を完了します。
私のパイから:
$ fdisk -lu ./back.img
Disk ./back.img: 2.89 GiB, 3099590656 bytes, 6053888 sectors
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: 0x00f24f4c
Device Boot Start End Sectors Size Id Type
./back.img1 2048 526335 524288 256M c W95 FAT32 (LBA)
./back.img2 526336 6053887 5527552 2.6G 83 Linux
ご覧のとおり、2つのパーティションがあります。 1つはFAT32(2048〜526335)、もう1つはLinux / ext4
(526336〜6053887)または2つのパーティション524,288および5,527,552です。部門(512バイト/セクタ)です。
また、次の2つのパーティションを試すときにmount
「冗長」エラーが発生しました。
$ sudo mount -o loop,offset=1048576 ./back.img /mnt/loopy/boot
$ sudo mount -o loop,offset=269484032 ./back.img /mnt/loopy/root
mount: /mnt/loopy/root: overlapping loop device exists for /home/pi/back.img.
上記の答えからわかるように、解決策は実際にはsizelimit
オプションですが、少なくとも私にとっては少し微妙です。
$ sudo umount /mnt/loopy/boot /mnt/loopy/root
$ sudo mount -o loop,offset=1048576,sizelimit=268435456 ./back.img /mnt/loopy/boot
# NOTE: sizelimit = 512 bytes/sector * 524288 sectors = 268435456 bytes
$ sudo mount -o loop,offset=269484032,sizelimit=2830106624 ./back.img /mnt/loopy/root
# NOTE: sizelimit = 512 bytes/sector * 5527552 sectors = 2830106624 bytes
両方のパーティションが正常にマウントされたので、back.img
必要に応じて変更できます。エディタを使用して/mnt/loopy/root/etc
:hostname
とhosts
の3つのファイルを修正しましたdhcpcd.conf
。完了したら、両方を削除し、変更されたback.img
ファイルをNASに転送しました。
$ sudo umount /mnt/loopy/root /mnt/loopy/boot
$ rsync -avi ./back.img /mnt/SynologyNAS/rpi_share/raspberrypi3a
sending incremental file list
>f.st...... back.img
sent 3,100,347,489 bytes received 35 bytes 10,897,530.84 bytes/sec
total size is 3,099,590,656 speedup is 1.00
# NOTE: don't use `cp` for this!
最後に、すべてがうまくいったという証拠として、新しいSDカードにEtcher
「焼いた」、back.img
それを使って新しいRPi 3A +を起動しました。