После того как Raspbian или OSMC на Raspberry Pi приведены к нужному виду, всё настроено как надо и установлены все необходимые приложения самое время сделать резервную копию флешки на случай её краха, что как известно с флешками случается.
В моём случае это медиацентр на основе OSMC и Raspberry PI3.
В интернете витают мануалы вроде использования консольной утилиты dd в Линукс или Win32 Disk Imager в Windows, но они как правило позволяют развернуть образ на флешке того же размера или большего. Как оказалось флешки «одного размера» например на 8 гигабайт совсем неодинаковые, размер одной отличается от другой на несколько килобайт. Если резервная флешка чуть больше исходной, то всё пройдёт гладко и на выходе получится рабочая флешка. Если размер новой флешки на несколько килобайт меньше исходной, то ничего не выйдет.
Утилита dd делает образ тома или всего диска в сыром виде, копируя все ячейки памяти последовательно в файл img независимо от того есть ли там файлы или нет (просто свободное пространство).
На сайте http://robotclass.ru/articles/raspberry-pi-image-downsize/ есть мануал, но к сожалению нерабочий. Может квалифицированный программист и разобрался бы с тем скриптом, но администрация сайта и простые смертные этого сделать вряд ли смогут.
Поэтому я пошёл своим путём, немного поковырявшись в инете и задействовав серые клеточки пришёл к своему рецепту.
Для верности метода были выбраны две флешки: исходная MicroSD 8Gb Transcend Class 6, резервная MicroSD 2Gb Transcend (именно 2 гигабайта).
Файловая система исходной флешки имеет разделы:
0 — 1 Mib (именно так обозначаются мегабайты в программе GParted);
1 — 243 Mib, c флагами boot, lba, c файловой системой vfat (fat32);
2 — не размеченное пространство 1 Mib;
3 — остальное место размечено с файловой системой ext4
И если загрузочный раздел 1 не изменяет своего размера, то размер раздела 3 подстраивается под имеющуюся флешку.
Как оказалось моя система OSMC на разделе 3 занимает всего 1,2 Гб, поэтому я и взял как подопытную флешку на 2 гигабайта для чистоты эксперимента.
Для производства операций по созданию образов и восстановления и разметки новой флешки я применил следующий инструментарий:
- Утилита dcfidd, которая является улучшенной версией dd, так как позволяет видеть процесс создания образа, а не молчит как рыба.
- fsarchiver для создания копии файловой системы ext4 (как оказалось только ею не обойтись, т.к. она не поддерживает vfat).
- GParted удобная графическая утилита для разметки дисков.
Желательно делать образ с флешки через картридер подключенный к компьютеру, т.к. при этом образ будет чистый.
Также можно сделать образ, как делал его я на рабочей системе подключаясь по SSH.
И так, приступим.
Подключаемся по SSH
user@user-pc:~$ ssh osmc@192.168.1.16
Где адрес 192.168.1.xxx вашего RPI3
Убеждаемся в наличии устройств и их именования в системе
osmc@osmc-rpi3:~$ sudo fdisk -l
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 2048 499711 497664 243M c W95 FAT32 (LBA)
/dev/mmcblk0p2 501760 15661055 15159296 7,2G 83 Linux
Устройство /dev/mmcblk0p1 копируем в образ командой
osmc@osmc-rpi3:~$ sudo dcfldd if=/dev/mmcblk0p1 of=/media/osmcrpi3/cloud/28-10-2017_mmcblk0p1.img
где /media/osmcrpi3/cloud/28-10-2017_mmcblk0p1.img место сохранения на внешнем жёстком диске подключенном по USB, вы можете использовать флешку предварительно подключив её к RPI3
Команда lsblk покажет точки монтирования всех дисков
osmc@osmc-rpi3:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 1 15G 0 disk
└─sdb1 8:17 1 15G 0 part /media/backup
sda 8:0 0 698,7G 0 disk
└─sda1 8:1 0 698,7G 0 part /media/osmcrpi3
mmcblk0 179:0 0 7,5G 0 disk
├─mmcblk0p2 179:2 0 7,2G 0 part /
└─mmcblk0p1 179:1 0 243M 0 part /boot
Далее сделаем архив файловой системы раздела mmcblk0p2
osmc@osmc-rpi3:~$ sudo fsarchiver savefs /media/osmcrpi3/cloud/osmc.fsa /dev/mmcblk0p2 -z 1 -A
ключ -z 1 устанавливает минимальную степень сжатия архива;
ключ -А позволяет архивировать раздел смонтированный в режиме чтения/записи
После чего скидываем эти файлы к себе на комп и начинаем готовить флешку.
Берём новую флешку, вставляем её в картридер, запускаем GParted, выбираем нашу флешку, создаём новую Partition Table как msdos, применяем изменения.
Далее размечаем флешку, создаём том размером 243 Mib оставляя до него 1 Мб неразмеченного пространства, с форматированием его в FAT32 по схеме привёденной ранее
0 — 1 Mib
1 — 243 Mib, c флагами boot, lba, c файловой системой vfat (fat32);
2 — не размеченное пространство 1 Mib;
3 — остальное место размечено с файловой системой ext4
Применяем операции.
Выставляем флаги на разделе 243 Mib boot, lba
Флешка готова для заливки данных.
У меня флешка на компе примонтировалась как /dev/sdc1 и /dev/sdc2, поэтому команды имеют следующий вид
test@test-VirtualBox:~$ sudo dcfldd if=/media/sf_vboxfiles/28-10-2017/28-10-2017_mmcblk0p1.img of=/dev/sdc1
Содержимое архива fsa можно проверить так
test@test-VirtualBox:~$fsarchiver archinfo /media/sf_vboxfiles/28-10-2017/osmc.fsa
====================== archive information ======================
Archive type: filesystems
Filesystems count: 1
Archive id: 59fa6787
Archive file format: FsArCh_002
Archive created with: 0.6.19
Archive creation date: 2017-10-28_12-59-35
Archive label: <none>
Minimum fsarchiver version: 0.6.4.0
Compression level: 1 (lzo level 3)
Encryption algorithm: none
===================== filesystem information ====================
Filesystem id in archive: 0
Filesystem format: ext4
Filesystem label:
Filesystem uuid: 6ce47bbe-f702-4bb3-a528-62fda211af09
Original device: /dev/mmcblk0p2
Original filesystem size: 6.99 GB (7505395712 bytes)
Space used in filesystem: 1.21 GB (1294127104 bytes)
Запишем файлы из архива на флешку
test@test-VirtualBox:~$ sudo fsarchiver restfs /media/sf_vboxfiles/28-10-2017/osmc.fsa id=0,dest=/dev/sdc2
ВСЁ Можно проверять
Как можно заметить все операции по записи данных на флешку я выполнил на виртуальной машине. Обезопасил себя на время экспериментов, чтобы не запороть работающую систему одним неловким движением. Чего и вам желаю.
Картинки будут позже.