Монтировать один раздел из образа всего диска (устройства)
Я сделал образ всего моего диска с
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
устройства.
Так что это самый удобный способ, если вы готовы перезагрузиться.
Смотрите также
- https://unix.stackexchange.com/questions/9099/reading-a-filesystem-from-a-whole-disk-image
- https://superuser.com/questions/117136/how-can-i-mount-a-partition-from-dd-created-image-of-a-block-device-e-g-hdd-u
- Монтировать один раздел из образа всего диска (устройства)
- https://stackoverflow.com/questions/1419489/loopback-mounting-individual-partitions-from-within-a-file-that-contains-a-parti
Самым простым способом, на мой взгляд, является использование 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 с радостью скопирует содержимое.
Спасибо, Сальваторе Сантагати. Я всегда любил кофе... и мороженое.
Я надеюсь, что кто-нибудь еще с этой проблемой сможет следовать ссылке из предыдущего вопроса и найти этот ответ, несмотря на неясную регистрацию!