Монтировать один раздел из образа всего диска (устройства)

Я сделал образ всего своего диска с помощью

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 вернуть образ на исходный диск, но это было бы очень неудобно (я обновил ОС и хотел бы оставь как есть)

118
задан 17 July 2018 в 17:22

7 ответов

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

enter image description here [ 1116]

Когда вы закончите, размонтируйте то, что вы смонтировали, и удалите сопоставление устройства:

$ sudo umount /mnt
$ sudo kpartx -d disk_image.raw
0
ответ дан 17 July 2018 в 17:22

Получить макет раздела изображения

$ 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
0
ответ дан 17 July 2018 в 17:22

Редактирование: работы с util-linux> =2.21. Во время записи человечности поставлется с версией 2.20 только

От человека 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 то, что Вы сможете смонтироваться, как обычно.

26
ответ дан 17 July 2018 в 17:22

Используйте LOSTTUP, чтобы прикрепить весь образ диска.

# 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
0
ответ дан 17 July 2018 в 17:22

Попробуйте gnome-disk-image-mounter:

gnome-disk-image-mounter sda.img

Нет sudo не требуется. Он будет установлен на /media/your_user_name/partition_name, как USB-накопители.

0
ответ дан 17 July 2018 в 17:22

Простейшим способом, на мой взгляд, является использование mount -o loop,offset=..., как упомянуто в этом ответе о StackOverflow . Идея заключается в следующем:

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
0
ответ дан 17 July 2018 в 17:22

losetup -P автоматизация

losetup -P - лучший метод, начиная с Ubuntu 16.04, как упоминалось на https://askubuntu.com/a/496576/52975 1116], вот функции для автоматизации, если дальше. Использование:

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

loop module 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.

Так что это самый удобный метод, если вы хотите перезагрузиться.

См. Также

0
ответ дан 17 July 2018 в 17:22

Другие вопросы по тегам:

Похожие вопросы: