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

Я сделал образ всего моего диска с

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

10 ответов

Решение

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

$ 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. Вы можете установить его, смонтировать и т. Д.

sudo fsck -fv /dev/loop0
sudo mount /dev/loop0 /mnt

Размонтируйте

sudo umount /mnt
sudo 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 2048
add map loop0p2 (252:3): 0 17887232 linear /dev/loop0 3084288

Это создано loop0p1 а также loop0p2 под /dev/mapper, Из вывода вы можете увидеть размеры разделов, которые помогут вам идентифицировать их. Вы можете установить тот, который вы хотите с:

$ sudo mount /dev/mapper/loop0p2 /mnt

Кроме того, Nautilus обнаруживает блокирующее устройство, и вы можете установить его с боковой панели:

введите описание здесь

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

$ 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

создать узлы устройства для каждого раздела образа диска на первом неиспользуемом устройстве цикла и распечатать его на стандартный вывод. При использовании /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, как упомянуто на /questions/162448/montirovat-odin-razdel-iz-obraza-vsego-diska-ustrojstva/162464#162464, здесь приведены функции для автоматизации, если это будет продолжаться. Использование:

$ 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

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

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

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

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

Используйте 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

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

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

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

В итоге я написал простое приложение FUSE, чтобы сделать это без необходимости использования root - источник здесь: https://gist.github.com/tchatow/7751287f218a0cc39b2038a8e04c704d

Использование:main -i image.img mountpoint. Протестировано на изображении в формате GPT.

Как мне открыть/смонтировать мой ISO-файл, когда обычные методы выдают эту ошибку? wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error. Я пробовал несколько методов, но все они почему-то терпят неудачу.

На самом деле я отвечаю на эту проблему ( Невозможно смонтировать файл ISO), эта проблема у меня тоже есть, и я только что решил, но исходный вопрос был закрыт и относится к этому вопросу, хотя они кажутся разными.

Я чувствую, что кураторы часто закрывают вопросы по непонятным причинам, однако у меня нет другого выбора, кроме как использовать данное закрытие и ссылку. Если это неправильно, возможно, можно снова открыть предыдущий вопрос и поместить этот ответ туда, где я хотел бы, чтобы он был? Поскольку этот пользователь отредактировал исходный вопрос, я подозреваю, что он мог закрыть исходный вопрос: wjandrea

В любом случае, оставив позади проблемы с файлами, вот пример попытки смонтировать ISO:

      $ sudo mount -o ro,loop -t iso9660 nero.iso /mnt
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error.

Я позвонил в ИСО. nero.isoпотому что с помощью fileкоманда показала, что ISO является артефактом программного обеспечения Nero для записи компакт-дисков, а не тем, что помогает:

      $ sudo file nero.iso
nero.iso: Nero CD image at 0x4B000 UDF filesystem data (version 1.5) 'nero'

Попробовав несколько разных вещей, я наткнулся на ссылку на программное обеспечение iatв котором говорится, что он «преобразует многие форматы образов компакт-дисков в iso9660». Вау. Он сразу и без усилий работает:

      $ sudo apt install iat
$ man iat
$ iat nero.iso out.iso
Iso9660 Analyzer Tool v0.1.3 by Salvatore Santagati
Licensed under GPL v2 or later

Detect Signature ISO9660 START at 339968
Detect Signature ISO9660 END at 342016

 Image offset start at 307200
 Sector header 0 bit
 Sector ECC 0 bit
 Block 2048
Done

Действительно? Теперь команда mount автоматически завершается:

      $ sudo mount -o ro,loop out.iso /mnt

И вот, ISO смонтирован, и теперь Handbrake с радостью скопирует содержимое.

Спасибо, Сальваторе Сантагати. Я всегда любил кофе... и мороженое.

Я надеюсь, что кто-нибудь еще с этой проблемой сможет следовать ссылке из предыдущего вопроса и найти этот ответ, несмотря на неясную регистрацию!

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