Як змонтувати зображення 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претензії: Disk / 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.