Linuxでddが作成したブロックデバイス(HDDなど)のイメージからパーティションをマウントするにはどうすればよいですか?


34

ddを使用して作成されたディスク全体のイメージがあります。ディスク構造は次のとおりです。

kent@cow:~$ sudo fdisk -l

Disk /dev/sda: 750.1 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000b8508

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           5       90872   729929303+  83  Linux
/dev/sda2           90873       91201     2642692+   5  Extended
/dev/sda5           90873       91201     2642661   82  Linux swap / Solaris

画像は次を使用して作成されました。

dd if=/dev/sda of=image750.img

可能な場合、コンテンツを読み取ることができるように、イメージから/ dev / sda1をマウントするにはどうすればよいですか?

HDDを再度複製することはできません。単一のパーティションのみを複製した場合の方法を知っています。現在の画像でもそれが可能だと思います。



回答:


48

現在、より良い方法があり、オフセットやkpartxを使用する必要はもうありません。

losetup --partscan --find --show disk.img

mount /dev/loop0p1 /mnt

loop0を解放するには、umountの後に使用します。

losetup -d /dev/loop0

8
Ubuntu 14.04のインストールでは、losetupに--partscanオプションがありません。
カッター14年

1
@Cutterは、util-linux 2.21、Ubuntu 16.04で追加されました。:-)
Ciro Santilli新疆改造中心法轮功六四事件

kpartxようなパーティションをマウントする最初に使用した後、のようなデバイス/dev/mapper/loop3p1losetup作成することを指摘したいだけです/dev/loop0p1。答えはそれを指摘していますが、私はそれをおそらく10回読み直しました。:/
ランディサイリング

13

今日私はこの問題に遭遇し、自分自身へのリマインダーとして答えを更新したかった。独自にオフセットを計算する代わりに、ddイメージからマウント可能なデバイスを提供するツールを使用できます:kpartx

http://robert.penz.name/73/kpartx-a-tool-for-mounting-partitions-within-an-image-file/

http://linux.die.net/man/8/kpartx

与えられた場合、次のようなものが必要です。

sudo kpartx -a image750.img
sudo mount /dev/mapper/loop1p1 /mount/point -o loop,ro

ここで、loop1p1は最初のパーティション、loop1p2は2番目のパーティションなどを表します。


6

最初の部分:開始オフセットを見つけるためのfdisk -lがあります。その数を取り、512を掛けると、マウントするオフセットオプションが得られます。したがって、sda1の場合、5 * 512 = 2560です。その後、マウントを実行します。

mount -o loop,offset=2560 -t auto /path/to/image.dd /mount/point

4

ループマウントは答えの一部にすぎません。

パーティションの指定については、http://wiki.edseek.com/guide: mount_loopback#accessing_specific_partitions_in_the_imageをご覧ください。私が考える、-oループをマウント= 32256 /path/to/image750.img / mntにあなたのために動作しますオフセット。しかし、あなたは本当に言及されたチュートリアルを読むべきです。


オフセットが間違っているように見えます。これは、63のパーティション開始に対応します(<i> 63 * 512 = 32256 </ i>)。baumgartの答えのオフセットは、この状況に対してより正確に見えます。このリンクは参考になりますが、この手順に必要な手順やコマンドを要約するのに時間をかけた方がよい答えになるでしょう。ありがとう!
いんちきキホーテ

1

losetup -P オートメーション

https://superuser.com/a/684707/128124(util-linux v2.21に追加、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

util-linux v2.21以前の適切な方法。

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

モジュールパラメータの設定方法についても、https//askubuntu.com/questions/51226/how-to-add-kernel-module-parametersで説明しています。

再起動後、次のことを行います。

sudo losetup -f --show my.img

イメージを/dev/loopXデバイスにマウントし、パーティションを/dev/loopXpYデバイスに自動的にマウントします。

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

こちらもご覧ください


0

fuseのようなユーザーモードファイルシステムがある場合、デスクトップ環境ではGnomeが好きで、gnome-disk-image-mounterなどのツールをインストールし、右クリックしてルートなしでそれを開きます。


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