Digg StumbleUpon LinkedIn YouTube Flickr Facebook Twitter RSS Reset

Клонирование флешки Raspbian и OSMC

После того как 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 гигабайта для чистоты эксперимента.

Для производства операций по созданию образов и восстановления и разметки новой флешки я применил следующий инструментарий:

  1. Утилита dcfidd, которая является улучшенной версией dd, так как позволяет видеть процесс создания образа, а не молчит как рыба.
  2. fsarchiver для создания копии файловой системы ext4 (как оказалось только ею не обойтись, т.к. она не поддерживает vfat).
  3. 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

ВСЁ Можно проверять

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

Картинки будут позже.