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

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

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

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

$ sudo fdisk -lu sda.img...Units = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytes...  Device Boot      Start         End      Blocks   Id  Systemsda.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/loop0sudo mount /dev/loop0 /mnt

Размонтировать

sudo umount /mntsudo losetup -d /dev/loop0

Обновление для 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 2048add 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

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

$ sudo umount /mnt$ sudo kpartx -d disk_image.raw

Редактировать : работает с >util-linux =2,21. На момент написания статьи ubuntu поставляется с версией 2.20 только

От человек проигрывает :

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

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

gnome-disk-image-mounter sda.img

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

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

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

$ los my.img/dev/loop0/mnt/loop0p1/mnt/loop0p2$ ls /mnt/loop0p1/whatever/files/youhave/there$ sudo losetup -lNAME       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 loop0loop0

Источник:

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

Это достойный метод до 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 устройства.

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

Смотрите также

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

# sudo losetup /dev/loop2 sda.img

Затем используйте mdadm для создания md-устройства, и для всех разделов будут созданы блочные устройства.

# sudo mdadm --build --level=0 --force --raid-devices=1 /dev/md2 /dev/loop2mdadm: 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/md2brw-rw---- 1 root disk 259, 0 Oct 10 12:37 /dev/md2p1

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

fdisk -l $IMAGE# calculate the offset in bytesmount -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

Вот удобный и интерактивный способ, который требует, чтобы превосходный fzf утилита установлена, а также sudo.

Сначала добавьте эту функцию в свой .bashrc или .zshrc:

pmount() { sudo mount -o loop,offset=$(($(sudo fdisk -lu "$1" | sed -n '/^Device/,/^$/p' | tail -n+2 | fzf | sed -E -e 's/[[:blank:]]+/ /g' | cut -d' ' -f2- | sed 's@^[^0-9]*\([0-9]\+\).*@\1@') * 512)) "$1" "$2"; }

Затем перезагрузите свою оболочку (или введите $SHELL).

Затем вы можете установить .img файлы с помощью этой команды:

pmount my.img /mnt

Появится список, в котором вы можете выбрать, какое разрешение вы хотите смонтировать, используя клавиши со стрелками, а затем нажав кнопку возврата.

enter image description here

Размонтировать с помощью sudo umount /mnt.

Вы можете рассмотреть это: Mount DD Image in Linux Using Terminal Commands / или это: Mount DD Image File in Linux - Effective Techniques