Как смонтировать образ sd-карты, созданный с помощью dd?


21

Я создал образ моей SD-карты Raspberry Pi, используя dd:

sudo dd if=/dev/sdf of=/home/myusername/raspberry-backup-2014-04-10.img

SD-карта включает в себя два раздела (один vfat, один ext4), которые автоматически монтируются при подключении карты.

Мой вопрос: как я могу смонтировать эти разделы из файла .img?


Больше деталей:

$ fdisk -l raspberry-backup-2014-04-10.img 

Disk raspberry-backup-2014-04-10.img: 3974 MB, 3974103040 bytes
255 heads, 63 sectors/track, 483 cylinders, total 7761920 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000981cb

                          Device Boot      Start         End      Blocks   Id  System
raspberry-backup-2014-04-10.img1            8192      122879       57344    c  W95 FAT32 (LBA)
raspberry-backup-2014-04-10.img2          122880     7761919     3819520   83  Linux

Вы хотите смонтировать образ, не записывая его на карту SD?
OrangeTux

Да, я хочу иметь полный доступ к файловой системе, хранящейся в файле .img, чтобы я мог копировать / изменять / удалять / и т.д. файлы без SD-карты
MrD

Может быть, этот вопрос поможет вам.
OrangeTux

К сожалению, это не работает, попробовал обе попытки. Первый не создал устройство / dev / loop0p1. Второй (я рассчитал начальную точку соответственно) бросает wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other errorпроблему
MrD

Кроме того, sudo fdisk -l /dev/loop0утверждает: Диск / dev / loop0 не содержит допустимой таблицы разделов.
MrD

Ответы:


33

Чтобы избежать необходимости создавать отдельные образы для каждого раздела или устанавливать подобные утилиты kpartx, вы можете монтировать каждый раздел отдельно, указав offsetв команде mountкоманду.

Сначала изучите разделы в файле изображения и определите смещение, используя fdisk:

$ fdisk -u -l rpi_image280914 

Disk rpi_image280914: 16.0 GB, 16012804096 bytes
255 heads, 63 sectors/track, 1946 cylinders, total 31275008 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000cdac7

           Device Boot      Start         End      Blocks   Id  System
rpi_image280914p1   *        2048      514047      256000    c  W95 FAT32 (LBA)
rpi_image280914p2          540672    31242239    15350784   83  Linux

Возьмите Startсектор раздела, который вы хотите, и умножьте это значение на Unitsразмер. Так что если вы хотите второй раздел, вы получите 540672 * 512 = 276824064.

Теперь создайте папку и смонтируйте раздел:

mkdir rpi_partition2
sudo mount -o loop,offset=276824064 rpi_image280914 rpi_partition2/

Как только вы закончите делать то, что вы хотите с данными раздела:

sudo umount rpi_partition2/
rm -r rpi_partition2/

17

После некоторого дополнительного тестирования я нашел решение самостоятельно: kpartx

sudo kpartx -a raspberry-backup-2014-04-10.img

Эта команда создана /dev/mapper/loop0p1и /dev/mapper/loop0p2. После этого эти перегородки могут быть установлены прямо вперед:

sudo mount -o rw -t ext4 /dev/mapper/loop0p2 mount_target/

1

если ваша цель - изучить или изменить содержимое раздела (файловой системы), эта командная строка смонтирует файловую систему дампа SD- карты my_sdcard_dump.img в каталог mount_dir .

part_id=2; INFILE=my_sdcard_dump.img; MOUNTPT=mount_dir PARTITION=${part_id}; sudo mount "$INFILE" "$MOUNTPT" -o loop,offset=$[ `/sbin/sfdisk -d "$INFILE" | grep "start=" | head -n $PARTITION | tail -n1 | sed 's/.*start=[ ]*//' | sed 's/,.*//'` * 512 ]

0

Работа с образом целого диска с несколькими разделами довольно сложна . Linux не был предназначен для чтения таблицы разделов из обычного файла, даже если он подключен к устройству с обратной связью, поэтому вы должны тщательно определить смещения разделов и передать их mountкоманде.

Предпочтительным способом было бы создать отдельные изображения каждого раздела:

sudo dd if=/dev/sdf1 of=/home/myusername/raspberry-backup-sdf1-2014-04-10.img
sudo dd if=/dev/sdf2 of=/home/myusername/raspberry-backup-sdf2-2014-04-10.img

Теперь вы можете легко обрабатывать эти файлы, как если бы они были отдельными разделами на диске, монтируя их, как обычно, как реальный раздел диска, сопоставляя их с устройством зацикливания . Циклическое устройство или устройство с обратной связью - это виртуальное устройство, которое предоставляет в Linux уровень перевода для обработки файла как блочного устройства (например, диска или раздела).

Петлевые устройства обычно /dev/loop0сквозные /dev/loop8. Определите неиспользуемое устройство цикла с помощью losetupкоманды:

$ sudo losetup /dev/loop0
loop: can't get info on device /dev/loop0: No such device or address

Этот ответ указывает на неназначенное устройство петли. Теперь мы можем назначить устройство цикла одному из наших файлов изображений:

$ sudo losetup /dev/loop0 /home/myusername/raspberry-backup-sdf1-2014-04-10.img

Отсутствие вывода этой команды указывает на успех. Теперь /dev/loop0для большинства целей она функционально эквивалентна /dev/sdf1вашей SD-карте, и вы можете установить ее, как обычно:

sudo mount -t vfat /dev/loop0 /media/sdimage-1

Повторите процесс, используя другое устройство петли, чтобы смонтировать другой раздел. Когда вы закончите, размонтируйте файловые системы и отмените петлевые устройства:

sudo umount /dev/loop0
sudo losetup -d /dev/loop0

Я хотел бы избежать создания двух файлов изображений, потому что - среди прочих незначительных причин - я хотел бы распространять изображение другим людям, чтобы они могли использовать его для инициализации своих SD-карт. Поэтому различные разделы, такие как / boot и т. Д., Должны находиться в одном файле.
MrD
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.