Резервное копирование образа NAND Flash




Здравствуйте, уважаемые читатели! Давно пора осветить вопрос сохранения образа внутреннего NAND Flash диска - ведь в случае повреждения системы из-за сбоя или ошибки считать данные можно разве что на программаторе. Да, заводская утилита edcl надёжно раскрпичит микрокомпьютер, но на установку и настройку программного обеспечения микрокомпьютера всё равно уходит немало времени. А в случае изготовления нескольких одинаковых устройств на основе микрокомпьютера, необходимость установки программ и настройки каждого микрокомпьютера выглядит более чем сомнительным техническим решением...


На встроенном NAND Flash диске при прошивке создаётся несколько разделов для загрузчика, ядра Linux, служебных данных,. и наконец корневой файловой системы. Загрузчик используется для первоначального запуска микрокомпьютера, служебные данные и ядро Linux в процессе работы не изменяются. Все изменения затрагиваются только корневой файловой системы, её-то и нужно сохранить. Образ корневой файловой системы находится в файле filesystem.ubifs из комплекта файлов заводской прошивки - при копировании мы получим свой файл filesystem.ubifs, которым можно будет заменить заводской.

Для начала нужно разобраться с зазделами NAND Flash. Для этого нужно просмотреть структуру fdisk -l:

root@shade:~# fdisk -l

Disk /dev/mtdblock0: 256 KiB, 262144 bytes, 512 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 /dev/mtdblock1: 128 KiB, 131072 bytes, 256 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 /dev/mtdblock2: 128 KiB, 131072 bytes, 256 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 /dev/mtdblock3: 4 MiB, 4194304 bytes, 8192 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 /dev/mtdblock4: 1019,5 MiB, 1069023232 bytes, 2087936 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 /dev/mtdblock5: 1 GiB, 1073741824 bytes, 2097152 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

Итак, команда рапортует о наличии у NAND Flash нескольких разделов. Это разделы mtdblock0 - mmtdblock5. Первый раздел mtdblock0 размером 256кб отведён под загрузчик mboot, разделы mtdblock1 - mtdblock2 по 128кб несут служебную информацию, раздел mtdblock3 имеет размер 4Мб для размещения ядра операционной системы Raspbian. А вот раздел mtdblock4 размером 1019,5Мб содержит всё оставшееся место твердотельного накопителя. Кстати, последний раздел mtdblock5 объёмом 1Гб на самом деле не содержит бонусный гигабайт помимо заявленного, он является всего лишь обрамлением для разделов mtdblock0 - mmtdblock4.

Поскольку разделы первые три раздела mtdblock0 - mmtdblock3 скрыты от пользователя, команда df показывает содержимое именно предпоследнего mtdblock4 раздела:

root@shade:~# df
Файловая система 1K-блоков Использовано Доступно Использовано% Cмонтировано в
ubi0:rootfs         914620       739884   174736           81% /
devtmpfs             44228            0    44228            0% /dev
tmpfs                44308            0    44308            0% /dev/shm
tmpfs                44308        12720    31588           29% /run
tmpfs                 5120            4     5116            1% /run/lock
tmpfs                44308            0    44308            0% /sys/fs/cgroup

Именно в раздел mtdblock4 записывается содержимое файла filesystem.ubifs из заводской прошивки! Раздел mtdblock5, копировать вовсе нет смысла, потому что заводская процедура прошивки не предполагает запись прошивки одним монолитным образом - это сделано в том числе для упрощения разработки программного обеспечения для микрокомпьютера.

Чтобы скопировать нужный нам раздел mtdblock4 нужно сперва подключить к микрокомпьютеру USB-флешдиск объёмом не менее 1Гб, форматированный в VFAT и примонтировать его, например в /mnt. После этого можно начать копирование:

root@shade:~# dd if=/dev/mtdblock4 of=/mnt/filesystem.ubifs
2087936+0 записей получено
2087936+0 записей отправлено
 скопировано 1069023232 байта (1,1 GB), 1492,69 c, 716 kB/c

После окончания копирования можно отмонтировать USB Flash диск и использовать файл filesystem.ubifs при последующей прошивке микрокомпьютера взамен штатного образа.


Поздравляю! Сохранённый образ можно применить не только для восстановления работоспособности отечественного микрокомпьютера MB77.07, но и для прошивки нескольких микрокомпьютеров после предварительной настройки и отладки программного обеспечения на одном из них.



Благодарю за внимание, доброго здоровья!



Сайт работает на микрокомпьютере