Как я могу смонтировать раздел из образа созданного dd блочного устройства (например, HDD) под Linux?


34

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

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

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



Ответы:


49

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

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

mount /dev/loop0p1 /mnt

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

losetup -d /dev/loop0

8
На моей установке Ubuntu 14.04 losttup не предоставляет опцию --partscan.
Резак

1
@Cutter был добавлен в util-linux 2.21, Ubuntu 16.04. :-)
Сиро Сантилли 事件 改造 中心 法轮功 六四 事件

Воспользовавшись kpartxпервым, который монтирует разделы как /dev/mapper/loop3p1, я просто хочу указать, что losetupсоздает устройства как /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 - второй и т. д.


6

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

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 будет работать для вас. но вы действительно должны прочитать упомянутый учебник.


смещение выглядит неправильно; это соответствует началу раздела 63 (<i> 63 * 512 = 32256 </ i>). смещение в ответе Баумгарта выглядит более правильным для этой ситуации. ссылка является хорошей ссылкой, но было бы лучше ответить, если бы вы нашли время, чтобы суммировать шаги или команды, необходимые для этой процедуры. Благодарность!
шарлатан-кихот

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, тогда он даже без правого клика правой кнопкой мыши и откроется с ним.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.