ディスク全体(デバイス)のイメージから単一パーティションをマウントします


117

ディスク全体のイメージを作成しました

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を更新し、そのままにしておきたい)

回答:


142

イメージのパーティションレイアウトを取得する

$ 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)

イメージの開始からパーティションの開始までのオフセットを計算します

セクターサイズ * 開始 =(この場合)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

どうもありがとうございます!魅力のように働いた!あなたは私の日を作りました(そして無実のオセロットが残酷に削除されるのを
防ぎました

8
bashの上に、少なくとも、シェルもあなたのための数学の操作を行うことができますsudo losetup -o $((56*512)) /dev/loop0 sda.img
Enno痴漢

1
これは役立つだけでなく、非常にすばらしいことです。
アンドホ

.img1と.img2がある場合はどうなりますか?「win8.raw1 * 2048 718847 358400 7」および「win8.raw2 718848 52426751 25853952 7」
円光焼

6
さらに簡単:mount -o loop,offset=$((56 * 512)) sda.img /mnt。ソース:madduck.net/blog/…– ostrokach 15
19:33

105

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

素早い答え、迅速かつ簡単、掛け算のステップを回避するのはいいことです
Geek長老

sudo apt-get install kpartx-kpartxへのアクセスを取得します。kpartx私の意見では、投稿の冒頭のリンクは「わな」です。ソフトウェアのインストールを暗示するリンクは不可です。
ハヌ14

1
@ Hannu、Software Centerと統合するリンクはaskubuntuの一般的な慣行ですが、この特定のケースでは典型的なアイコンを追加してURLを更新する必要があります。
ジョニ14

losetup -Pfaskubuntu.com/a/496576/52975で以前に言及されていましたが、少なくともその回答にリンクすることをお勧めします。
Ciro Santilli新疆改造中心法轮功六四事件

1
参考までに、このlosetup -Pf ..コマンドは、/dev/loopXpYまだマウントする必要があるデバイスを作成します。コマンドのX出力を見てから見つけることができますlosetupYパーティション番号です。
ガンチャー

26

編集util-linux> = 2.21で動作します。執筆時点では、ubuntuにはバージョン2.20のみが付属しています。

man 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通常どおりにマウントできるようになります。


2
このバージョンはどこにありlosetupますか?Ubuntu 14.04にあるものには、2003年7月のマンページ(util-linux)があり、パーティションをスキャンするための `-P`オプション(またはその他のもの)はありません。
ハヌ14

1
申し訳ありませんが、間違えました。最新バージョンのutil-linuxパッケージに付属しているArch Linuxでこのオプションを使用しています。Ubuntuは悲しいことに2012年1月にリリースされたバージョン2.20.1でスタックしているようです!この--partscanオプションはutil-linux 2.21で
Ludovic Ronsin 14

1
まあ、gnome-disksディスクイメージとそのパーティションをマウントするオプションがあります。(<-これはインストールとbash / Terminalの使用のためのものDisksで、ダッシュ内でも見つかります)。
ハヌ14

2
これは受け入れられる答えでなければなりません
...-matthid

@matthid 受け入れられた回答を変更することさえ可能ですか?これは良いことです(そしてkpartxの回答は実際にこのバージョンに依存していますlosetup)が、受け入れられた回答よりもほぼ3年新しいです。これは当時の方法でした。
Auspexの

9

試してくださいgnome-disk-image-mounter

gnome-disk-image-mounter sda.img

sudo必要ありません。/media/your_user_name/partition_nameUSBドライブと同様に、にマウントされます。


1
16.04でうまく機能していました。新しい18.04をインストールしたばかりで、ツールは/ dev / loopXX仮想デバイスにアクセスするためにsudoパスワードを要求します:(
Laurent

7

losetup -P オートメーション

losetup -Phttps://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"
)

ループモジュールmax_part config

これは、16.04以前の適切な方法です。

loop Ubuntu 14.04のカーネルに組み込まれているカーネルモジュールです。

適切に設定すると、Linuxは自動的にデバイスを分割します。

cat /sys/module/loop/parameters/max_part

loopデバイスが生成できるパーティションの数を示します。

それは0何の自動分割は起こらない理由であるUbuntuの14.04ではデフォルトで。

変更するには、次のいずれかを追加できます。

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デバイスに自動的にマウントします。

したがって、これはリブートする意思がある場合に最も便利な方法です。

こちらもご覧ください


5

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

それは面白いトリックです:)
ヨハンブール

4

私の意見では、最も簡単な方法はStackOverflowのこの回答でmount -o loop,offset=...述べたよう使用することです。アイデアは次のとおりです。

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

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