Як я можу змонтувати розділ із створеного в DD зображення блокового пристрою (наприклад, HDD) під Linux?


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 із зображення, щоб я міг прочитати вміст?

Це не можливість знову клонувати жорсткий диск, я знаю, як це зробити, якби я клонував лише один розділ сам. Я сподіваюся, що це все ще можливо з поточним зображенням.



Відповіді:


48

На сьогоднішній день існує кращий спосіб, більше не потрібно використовувати компенсації або kpartx:

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

mount /dev/loop0p1 /mnt

щоб звільнити loop0, використовуйте після umount:

losetup -d /dev/loop0

8
У моїй установці Ubuntu 14.04 losetup не надає опцію --partscan.
Різник

1
@Cutter його додали в util-linux 2.21, Ubuntu 16.04. :-)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Скориставшись 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 -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 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

Якщо у вас є система файлів у режимі користувача, як запобіжник, то в робочих середовищах подобається Gnome і встановлено такий інструмент, як gnome-disk-image-mountter, то він не має навіть кореневого клацання правою кнопкою миші та відкрийте його.


0

Я вважаю , що відповідь на виріб - це відповідь -

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

Вищенаведене має встановити його під цим каталогом.

Це має зняти його:

umount /path/to/dir
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.