ディスク全体のイメージを作成しました
dd if=/dev/sda of=/media/external_media/sda.img
問題は、そのディスクにあったext4ファイルシステムをマウントしたいのですが、
mount -t ext4 -o loop /media/external_media/sda.img /media/sda_image
イメージには必要なパーティションだけでなくディスク全体(MBR、他のパーティション)が含まれているため、明らかにスーパーブロックエラーが発生します。だから私は/dev/
フォルダにディスクイメージを表示させる方法を見つける必要があると思います...
誰もそれを行う方法を知っていますか?
PS:イメージを元のディスクにいつでもdd
戻すことができますが、それは非常に不便です(OSを更新したので、そのままにしておきたい)
イメージのパーティションレイアウトを取得する
$ Sudo fdisk -lu sda.img
...
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
...
Device Boot Start End Blocks Id System
sda.img1 * 56 6400000 3199972+ c W95 FAT32 (LBA)
イメージの開始からパーティションの開始までのオフセットを計算
セクターサイズ*Start=(この場合)512 * 56 = 28672
オフセットを使用して/ dev/loop0にマウント
Sudo losetup -o 28672 /dev/loop0 sda.img
現在、パーティションは/ dev/loop0にあります。 fsck、マウントなどができます
Sudo fsck -fv /dev/loop0
Sudo mount /dev/loop0 /mnt
アンマウント
Sudo umount /mnt
Sudo losetup -d /dev/loop0
Ubuntu 16.04のアップデート:新しいlosetup
により、これが簡単になりました。
Sudo losetup -Pf disk_image.raw
Ubuntuの古いバージョンについては、残りの回答を参照してください。
簡単な解決策は kpartx を使用することです:パーティションレイアウトを把握し、それぞれをブロックデバイスにマッピングします。その後、必要なものをマウントするだけです。
ターミナルを開き、ディスクイメージを見つけて、次のコマンドを入力します。
$ Sudo kpartx -av disk_image.raw
add map loop0p1 (252:2): 0 3082240 linear /dev/loop0 2048
add map loop0p2 (252:3): 0 17887232 linear /dev/loop0 3084288
これにより、loop0p1
の下にloop0p2
および/dev/mapper
が作成されました。出力から、パーティションを識別するのに役立つパーティションのサイズを確認できます。必要なものをマウントできます:
$ Sudo mount /dev/mapper/loop0p2 /mnt
または、ブロックデバイスはNautilusによって検出され、サイドバーからマウントできます。
完了したら、マウントしたものをアンマウントし、デバイスマッピングを削除します。
$ Sudo umount /mnt
$ Sudo kpartx -d disk_image.raw
編集:util-linux> = 2.21で動作します。執筆時点では、ubuntuにはバージョン2.20のみが付属しています
Fromman losetup:
-P, --partscan
force kernel to scan partition table on newly created loop device
だからただ走る
$ Sudo losetup -f --show -P /path/to/image.img
最初の未使用のループデバイス上のディスクイメージのすべてのパーティションにデバイスノードを作成し、stdoutに出力します。 /dev/loop0
デバイスを使用している場合、少なくとも/dev/loop0p1
が作成され、通常どおりマウントできます。
gnome-disk-image-mounter
を試してください:
gnome-disk-image-mounter sda.img
いいえSudo
は不要です。 USBドライブと同様に、/media/your_user_name/partition_name
にマウントされます。
losetup -P
オートメーション
losetup -P
は、 https://askubuntu.com/a/496576/52975 で説明されているように、Ubuntu 16.04以降の最良の方法です。さらに自動化する機能があります。使用法:
$ 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"
)
loop module max_part config
これは、16.04より前の適切な方法です。
loop
は、Ubuntu 14.04のカーネルに組み込まれているカーネルモジュールです。
適切に設定すると、Linuxは自動的にデバイスを分割します。
cat /sys/module/loop/parameters/max_part
loop
デバイスが生成できるパーティションの数を示します。
Ubuntu 14.04ではデフォルトで0
であるため、自動分割は行われません。
変更するには、次のいずれかを追加できます。
options loop max_part=31
/etc/modprobe
のファイル、または:
GRUB_CMDLINE_LINUX="loop.max_part=31"
/etc/default/grub
に、そしてSudo update-grub
に。
モジュールパラメータの設定方法についても説明します。 カーネルモジュールパラメータの追加方法
再起動後、次のことを行います。
Sudo losetup -f --show my.img
イメージを/dev/loopX
デバイスにマウントし、パーティションを/dev/loopXpY
デバイスに自動的にマウントします。
したがって、これはリブートする場合に最も便利な方法です。
こちらもご覧ください
Losetupを使用して、ディスクイメージ全体を添付します。
# Sudo losetup /dev/loop2 sda.img
次にmdadmを使用してmdデバイスを作成すると、すべてのパーティションに対してブロックデバイスが作成されます。
# Sudo mdadm --build --level=0 --force --raid-devices=1 /dev/md2 /dev/loop2
mdadm: array /dev/md2 built and started.
パーティションデバイスが表示されます。
nile-172-b0fef38-76:/mnt/sdb1 # ls -l /dev/md2*
brw-rw---- 1 root disk 9, 2 Oct 10 12:37 /dev/md2
brw-rw---- 1 root disk 259, 0 Oct 10 12:37 /dev/md2p1
私の意見では、最も簡単な方法は、前述のmount -o loop,offset=...
を使用することです StackOverflowのこの回答で 。アイデアは次のとおりです。
fdisk -l $IMAGE
# calculate the offset in bytes
mount -o loop,offset=$OFFSET $IMAGE $MOUNTPOINT
マウントされたパーティションをアンマウントした後にループデバイスを削除する必要がないため、この方法が最適です。
タスクをさらに単純化するために(頻繁に行う場合に必要です)、私のスクリプトmountimg
を使用してすべてを行うことができます。 https://github.com/AlexanderAmelkin/mountimg から取得して、次のように使用します。
mountimg /media/external_media/sda.img 2 /media/sda_image
必要に応じて、ファイルシステムのタイプとその他の追加マウントオプションを指定することもできます。
mountimg /media/external_media/sda.img 2 /media/sda_image -t vfat -o codepage=866,iocharset=utf-8
パーティションの処理が完了したら、単にumount
it:
umount /media/sda_image