Резервное копирование образа 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, но и для прошивки нескольких микрокомпьютеров после предварительной настройки и отладки программного обеспечения на одном из них.
Благодарю за внимание, доброго здоровья!
Сайт работает на микрокомпьютере