31

У меня есть образ всего диска, созданного с использованием дд. Структура диска выглядит следующим образом:

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 из образа, чтобы я мог прочитать содержимое?

Невозможно снова клонировать жесткий диск, я знаю, как это сделать, если я клонировал только один раздел. Я надеюсь, что это все еще возможно с текущим изображением.

7 ответов7

44

В настоящее время есть лучший способ, больше не нужно использовать смещения или kpartx:

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

mount /dev/loop0p1 /mnt

чтобы освободить loop0, используйте после umount:

losetup -d /dev/loop0
12

Я столкнулся с этой проблемой сегодня и хотел обновить ответы просто как напоминание для себя. Вместо того, чтобы рассчитывать смещение самостоятельно, вы можете использовать инструмент, который предоставляет вам монтируемые устройства из образа 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 - второй и т. д.

6

У вас есть первая часть: fdisk -l, чтобы найти начальное смещение. Возьмите это число, умножьте на 512, и вы получите опцию смещения для монтирования. Итак, для sda1 в вашем случае 5 * 512 = 2560. Затем запустите крепление:

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

Loopmounting - это только часть ответа.

Посмотрите на http://wiki.edseek.com/guide:mount_loopback#accessing_specific_partitions_in_the_image помощь по указанию раздела. Я думаю, что mount -o loop, offset = 32256 /path/to/image750.img /mnt будет работать для вас. но вы действительно должны прочитать упомянутый учебник.

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

Я считаю, что петлевое крепление является ответом -

sudo mkdir /path/to/dir/
mount -o loop example.img /path/to/dir/

Выше следует смонтировать его в этом каталоге.

Это должно размонтировать его:

umount /path/to/dir
0

Если у вас есть файловая система в пользовательском режиме, например, fuse, то в настольных средах, таких как Gnome, и установленный инструмент, такой как gnome-disk-image-mounter, тогда он даже без правого клика правой кнопкой мыши и откроется с ним.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .