Я создал изображение моей SD-карты Raspberry Pi с помощью dd:
sudo dd if=/dev/sdf of=/home/myusername/raspberry-backup-2014-04-10.img
SD-карта содержит два раздела (один vfat, один ext4), которые автоматически устанавливаются, когда я подключите карту.
Мой вопрос: как смонтировать эти разделы из файла .img?
Подробнее:
Чтобы избежать необходимости создавать отдельные изображения для каждого раздела или устанавливать такую утилиту, как 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/
, если ваша цель - изучить или изменить содержимое раздела (файловой системы), эта командная строка смонтирует файловую систему дампа 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 ]
Работа с изображением целого диска с несколькими разделами довольно сложна. Linux не был предназначен для чтения таблицы разделов из обычного файла, даже если он подключен к устройству loopback, поэтому вы должны тщательно идентифицировать смещения разделов и передать их в команду mount.
[d2 ] Предпочтительным способом было бы создавать отдельные изображения каждого раздела: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
Теперь вы можете легко обрабатывать эти файлы, как если бы они были отдельными разделами на диске, монтируя их, как обычно, на реальном диске раздел, сопоставляя их с довольно сложным . Устройство loop или loopback-устройство - это виртуальное устройство, которое обеспечивает уровень перевода для 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