LINUX.ORG.RU

UBIFS + Factory Reset (overlay)

 , , ,


0

2

Салют!

Господа, поделитесь опытом настройки OverlayFS или подскажите, что у меня не так. Почитал про каскадно-объединенное монтирование и заинтересовался этой темой. Круто же делать Factory Reset, не снося при этом всю систему, а лишь потерев overlay. В качестве эксперимента выбрал OpenWRT. В данной ОС присутствует поддержка UBIFS(что круто для NAND с ее бэдблоками) и OverlayFS. Поставил все галки в менюконфиг:

CONFIG_MTD_NAND=y
CONFIG_MTD_UBI=y
CONFIG_UBIFS_FS=y
CONFIG_UBIFS_FS_ADVANCED_COMPR=y
CONFIG_UBIFS_FS_LZO=y
CONFIG_UBIFS_FS_ZLIB=y
CONFIG_UBIFS_FS_XZ=y
CONFIG_OVERLAY_FS=y
Затем с помощью mkfs.ubifs сделал образ. В бутлоадере установил bootargs:
console=ttyAPP4,115200 rootfstype=ubifs ubi.mtd=5 root=ubi0:rootfs rw mtdparts=gpmi-nand:10m(bootloader)ro,256k(environment),128k(fdt),5m(kernel),40m(test)ro,100m(rootfs),-(rootfs_data)
Заливаем на плату, смотрим лог:
...
[    1.134122] 7 cmdlinepart partitions found on MTD device gpmi-nand
[    1.140343] Creating 7 MTD partitions on "gpmi-nand":
[    1.145561] 0x000000000000-0x000000a00000 : "bootloader"
[    1.153670] 0x000000a00000-0x000000a40000 : "environment"
[    1.161652] 0x000000a40000-0x000000a60000 : "fdt"
[    1.168998] 0x000000a60000-0x000000f60000 : "kernel"
[    1.176687] 0x000000f60000-0x000003760000 : "backupfs"
[    1.184829] 0x000003760000-0x000009b60000 : "rootfs"
[    1.193124] mtd: device 5 (rootfs) set to be root filesystem
[    1.198907] 0x000009b60000-0x000010000000 : "rootfs_data"
...
[    1.394409] ubi0: attaching mtd5
[    1.667582] random: nonblocking pool is initialized
[    2.470717] ubi0: scanning is finished
[    2.496300] ubi0: attached mtd5 (name "rootfs", size 100 MiB)
[    2.502217] ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
[    2.509126] ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
[    2.516023] ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
[    2.523097] ubi0: good PEBs: 800, bad PEBs: 0, corrupted PEBs: 0
[    2.529133] ubi0: user volume: 1, internal volumes: 1, max. volumes count: 128
[    2.536456] ubi0: max/mean erase counter: 2/1, WL threshold: 4096, image sequence number: 0
[    2.544911] ubi0: available PEBs: 0, total reserved PEBs: 800, PEBs reserved for bad PEB handling: 40
[    2.554302] hctosys: unable to open rtc device (rtc0)
[    2.566705] ubi0: background thread "ubi_bgt0d" started, PID 398
[    2.576833] UBIFS (ubi0:0): background thread "ubifs_bgt0_0" started, PID 400
[    2.755247] UBIFS (ubi0:0): UBIFS: mounted UBI device 0, volume 0, name "rootfs"
[    2.762823] UBIFS (ubi0:0): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
[    2.772864] UBIFS (ubi0:0): FS size: 94597120 bytes (90 MiB, 745 LEBs), journal size 9023488 bytes (8 MiB, 72 LEBs)
[    2.783403] UBIFS (ubi0:0): reserved for root: 0 bytes (0 KiB)
[    2.789282] UBIFS (ubi0:0): media format: w4/r0 (latest is w4/r0), UUID 17C375ED-CDDF-48C4-8838-65C460D470B7, small LPT model
[    2.804563] VFS: Mounted root (ubifs filesystem) on device 0:11.
[    2.811284] Freeing unused kernel memory: 132K (c03e1000 - c0402000)
[    3.236962] init: Console is alive
...
[    4.249978] init: - preinit -
Press the [f] key and hit [enter] to enter failsafe mode
Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level
[    7.769877] mount_root: loading kmods from internal overlay
[    7.857823] blk_update_request: I/O error, dev mtdblock0, sector 0
[    7.869474] blk_update_request: I/O error, dev mtdblock0, sector 0
[    7.875708] Buffer I/O error on dev mtdblock0, logical block 0, async page read
[    8.069201] block: attempting to load /etc/config/fstab
[    8.091549] block: extroot: not configured
[    8.097882] mount_root: no usable overlay filesystem found, using tmpfs overlay
And as result overlay is mounted at ram(/tmp). But I expected, that it was in /overlay. 
И в итоге этот гад монтируется в RAM. При перезагрузке все сделанные изменения слетают.
root@OpenWrt:/# mount
ubi0:rootfs on /rom type ubifs (rw,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,noatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime)
devpts on /rom/dev/pts type devpts (rw,nosuid,noexec,noatime,mode=600)
overlayfs:/tmp/root on / type overlay (rw,noatime,lowerdir=/,upperdir=/tmp/root/upper,workdir=/tmp/root/work)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,mode=600)
debugfs on /sys/kernel/debug type debugfs (rw,noatime)
root@OpenWrt:/# df -h
Filesystem                Size      Used Available Use% Mounted on
ubi0:rootfs              82.8M      2.8M     80.0M   3% /rom
overlayfs:/tmp/root      82.8M      2.8M     80.0M   3% /
Получается, оверлей работает, но не так, как надо(

У тебя rootfs_data не монтируется/не может примонтироваться как overlay.

И да, я бы рекомендовал делать rootfs в виде squashfs на ubiblock устройстве, а overlay уже заносить на ubifs. Страхуешь себя от изменений базовой прошивки и вернуться к factory можно всегда.

У меня mtdparts выглядит так: u-boot,u-boot-env(что кстати не оч правильно на nand, надо бы на ubi раздел занести), ubi(тут логические разделы kernel, rootfs, rootfs_data) и opt с одним разделом opt который не вытирается вообще никогда кроме как пользователем.

Dark_SavanT ★★★★★ ()
Ответ на: комментарий от Dark_SavanT

Да, делать разделы ubi лучше на всём доступном пространстве флеша. Суть в том, что у подлежащего уровня который занимается отслеживанием бэдов и перемещением блоков будет больше пространства для манёвра. т.е. вместо отдельных kernel, rootfs,... один ubi раздел, в котором уже логические разделы kernel, rootfs, rootfs_data,....

Dark_SavanT ★★★★★ ()
Последнее исправление: Dark_SavanT (всего исправлений: 1)
Ответ на: комментарий от Dark_SavanT

Большое спасибо за пояснения. Первый ресурс, на котором ответили=) Буду пробовать. Кстати, есть какие-нибудь ссылки на howto про создание squashfs на ubiblock и логических разделов?

vgovseychuk ()
Ответ на: комментарий от Dark_SavanT

В общем, попробовал я делать в логических разделах поверх UBI. Теперь такая штука наблюдается:

1-я загрузка:

[   10.648682] mount_root: loading kmods from internal overlay
[   10.793621] blk_update_request: I/O error, dev mtdblock0, sector 0
[   10.805263] blk_update_request: I/O error, dev mtdblock0, sector 0
[   10.811500] Buffer I/O error on dev mtdblock0, logical block 0, async page read
[   10.998052] block: attempting to load /etc/config/fstab
[   11.011259] block: unable to load configuration (fstab: Entry not found)
[   11.018218] block: no usable configuration
[   11.039325] UBIFS (ubi0:1): background thread "ubifs_bgt0_1" started, PID 431
[   11.136685] UBIFS (ubi0:1): recovery needed
[   11.402104] UBIFS (ubi0:1): recovery completed
[   11.406825] UBIFS (ubi0:1): UBIFS: mounted UBI device 0, volume 1, name "rootfs_data"
[   11.414815] UBIFS (ubi0:1): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
[   11.424860] UBIFS (ubi0:1): FS size: 146403328 bytes (139 MiB, 1153 LEBs), journal size 7364608 bytes (7 MiB, 58 LEBs)
[   11.435670] UBIFS (ubi0:1): reserved for root: 4952683 bytes (4836 KiB)
[   11.442409] UBIFS (ubi0:1): media format: w4/r0 (latest is w4/r0), UUID F56EB63C-E472-48D7-A35F-ABEDC9EA66B3, small LPT model
[   11.476610] blk_update_request: I/O error, dev mtdblock0, sector 0
[   11.488181] blk_update_request: I/O error, dev mtdblock0, sector 0
[   11.494420] Buffer I/O error on dev mtdblock0, logical block 0, async page read
[   11.669014] block: attempting to load /etc/config/fstab
[   11.674761] block: unable to load configuration (fstab: Entry not found)
[   11.681808] block: no usable configuration
[   11.687812] mount_root: overlay filesystem has not been fully initialized yet
[   11.710368] mount_root: switching to jffs2 overlay

2-я:

[   10.277197] mount_root: loading kmods from internal overlay
[   10.422569] blk_update_request: I/O error, dev mtdblock0, sector 0
[   10.434068] blk_update_request: I/O error, dev mtdblock0, sector 0
[   10.440303] Buffer I/O error on dev mtdblock0, logical block 0, async page read
[   10.627096] block: attempting to load /etc/config/fstab
[   10.640288] block: unable to load configuration (fstab: Entry not found)
[   10.647364] block: no usable configuration
[   10.654433] mount_root: failed to mkdir /tmp/overlay: File exists
[   10.679146] blk_update_request: I/O error, dev mtdblock0, sector 0
[   10.690787] blk_update_request: I/O error, dev mtdblock0, sector 0
[   10.697028] Buffer I/O error on dev mtdblock0, logical block 0, async page read
[   10.872127] block: attempting to load /etc/config/fstab
[   10.877750] block: unable to load configuration (fstab: Entry not found)
[   10.884816] block: no usable configuration
[   10.892251] mount_root: overlay filesystem has not been fully initialized yet
[   10.904002] mount_root: switching to jffs2 overlay
[   10.909104] mount_root: switching to jffs2 failed - fallback to ramoverlay
И так до бесконечности: то монтируется в /overlay, то в оперативку

vgovseychuk ()
Ответ на: комментарий от vgovseychuk

Кстати, я немного наврал. При самом первом запуске все выглядит вот так:

[   10.203965] mount_root: loading kmods from internal overlay
[   10.377724] blk_update_request: I/O error, dev mtdblock0, sector 0
[   10.389261] blk_update_request: I/O error, dev mtdblock0, sector 0
[   10.395499] Buffer I/O error on dev mtdblock0, logical block 0, async page read
[   10.515960] ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -16
[   10.583525] block: attempting to load /etc/config/fstab
[   10.597311] block: unable to load configuration (fstab: Entry not found)
[   10.604390] block: no usable configuration
[   10.642952] UBIFS (ubi0:1): default file-system created
[   10.650714] UBIFS (ubi0:1): background thread "ubifs_bgt0_1" started, PID 440
[   10.798395] UBIFS (ubi0:1): UBIFS: mounted UBI device 0, volume 1, name "rootfs_data"
[   10.806407] UBIFS (ubi0:1): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
[   10.816446] UBIFS (ubi0:1): FS size: 129642496 bytes (123 MiB, 1021 LEBs), journal size 6475776 bytes (6 MiB, 51 LEBs)
[   10.827247] UBIFS (ubi0:1): reserved for root: 4952683 bytes (4836 KiB)
[   10.833967] UBIFS (ubi0:1): media format: w4/r0 (latest is w4/r0), UUID BF8A7E6C-24D0-491C-9A9A-8224DDA60EF5, small LPT model
[   10.866012] blk_update_request: I/O error, dev mtdblock0, sector 0
[   10.877513] blk_update_request: I/O error, dev mtdblock0, sector 0
[   10.883747] Buffer I/O error on dev mtdblock0, logical block 0, async page read
[   11.003363] ubi0 error: ubi_open_volume: cannot open device 0, volume 0, error -16
[   11.011371] ubi0 error: ubi_open_volume: cannot open device 0, volume 1, error -16
[   11.074921] block: attempting to load /etc/config/fstab
[   11.080666] block: unable to load configuration (fstab: Entry not found)
[   11.087609] block: no usable configuration
[   11.095075] mount_root: overlay filesystem has not been fully initialized yet
[   11.107220] mount_root: switching to jffs2 overlay
А то, что выше - это начиная с третьего запуска

vgovseychuk ()
Ответ на: комментарий от vgovseychuk

blk_update_request: I/O error, dev mtdblock0, sector 0

У тебя с флешкой что-то не то.

Dark_SavanT ★★★★★ ()
Ответ на: комментарий от Dark_SavanT

На двух платах проверил, все так же.

А не может это быть из-за того, что нет файла /etc/config/fstab ? Или, например, из-за того, что образ у меня ubifs, а оverlay это изначально тема для jffs2 ? Хотя, второе вряд ли...

vgovseychuk ()
Ответ на: комментарий от vgovseychuk

fstab для этого не нужен, вртшники подпилили костылей чтобы ведро знало куда ломиться за rootfs/rootfs_data, нужен он для extroot и если у тебя есть разделы которые надо монтировать при старте.

mtd под ubi раздел назови 'ubi' или 'data' чтобы wrt знал что туда надо ломиться.

У меня оверлей нормально работает на ubifs. overlayfs пофиг что там под ней, главное чтоб rw.

Dark_SavanT ★★★★★ ()
Ответ на: комментарий от Dark_SavanT

Короче, залез я в код своего транка, посмотрел, что там куча кода закомменчено и вообще, судя по всему, работа кипит. Решил поставить обычный Chaos Calmer. Все заработало=/

vgovseychuk ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.