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


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

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


99
2017-10-19 16:36


происхождения




ответы:


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

$ 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

125
2017-10-19 19:55



Спасибо огромное! Работал как шарм! Ты сделал мой день (и спас невиновного Оцелота от жестокого удаления, Р) - Nicola Feltrin
По крайней мере, на bash, оболочка может даже сделать математику для вас: sudo losetup -o $((56*512)) /dev/loop0 sda.img - Enno Gröper
Это не просто полезно, это абсолютно потрясающе. - andho
Что делать, если есть .img1 и .img2? "win8.raw1 * 2048 718847 358400 7" и "win8.raw2 718848 52426751 25853952 7" - Enkouyami
Еще проще: mount -o loop,offset=$((56 * 512)) sda.img /mnt, Источник: madduck.net/blog/... - ostrokach


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

Когда все будет готово, отмонтировать смонтированные устройства и удалить их:

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

89
2017-10-02 12:12



Отличный ответ, быстрый и легкий, избегая шага умножения. - Elder Geek
sudo apt-get install kpartx - получить доступ к kpartx. kpartx ссылка в начале сообщения - это «ловушка», на мой взгляд. Ссылки, которые подразумевают установку программного обеспечения, - нет. - Hannu
@Hannu, ссылки, которые интегрируются с Software Center, являются обычная практика на askubuntu, хотя в этом конкретном случае может быть добавлен обычный значок, и URL-адрес должен быть обновлен. - Joni
losetup -Pf ранее упоминалось askubuntu.com/a/496576/52975 Я рекомендую вам хотя бы ссылку на этот ответ. - Ciro Santilli 新疆改造中心 六四事件 法轮功


редактировать : работает с util-linux> = 2.21, На момент написания кораблей ubuntu с версией 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 что вы сможете монтироваться как обычно.


22
2017-07-11 17:29



Где я могу найти эту версию losetup ? У меня в Ubuntu 14.04 есть manpage с июля 2003 года (util-linux), а опция `-P` (или что-то еще) для сканирования разделов. - Hannu
Извините, я допустил ошибку, я использовал этот вариант в Arch Linux, который поставляется с более новой версией пакета util-linux. Кажется, Ubuntu печально застрял в версии 2.20.1, выпущенной в январе 2012 года! --partscanбыл введен в util-linux 2.21 - Ludovic Ronsin
Что ж, gnome-disks имеет возможность монтировать образ диска и его разделы. (<- для установки и использования bash / Terminal, Disksв тире тоже находит). - Hannu
Это должен быть принятый ответ ... - matthid
@matthid Это даже возможное изменить принятый ответ? Это хорошо (и ответ kpartx на самом деле зависит от этой версии losetup), но это почти на три года новее, чем принятый ответ, - это был способ сделать это в то время. - Auspex


Пытаться gnome-disk-image-mounter:

gnome-disk-image-mounter sda.img

нет sudo обязательный. Он будет установлен на /media/your_user_name/partition_name, так же, как USB-накопители.


7
2017-07-23 22:02



Хорошо работает 16.04. Я только что установил новый 18.04, и инструменты запрашивают пароль sudo для доступа к виртуальному устройству / dev / loopXX :( - Laurent


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 -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 устройства.

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

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


6
2017-09-12 11:04





Используйте losetup для прикрепления всего образа диска.

# 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

4
2017-10-10 12:45



Это забавный трюк :) - Johan Boulé


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

2
2017-11-11 10:13