amouiche / qnap_mtd_resize_for_bullseye

Script for resizing MTD partitions on a QNAP device in order to be able to upgrade from buster to bullseye
GNU General Public License v2.0
51 stars 11 forks source link

Successful with QNAP TS-412. Logs included. #26

Closed fadlytabrani closed 1 year ago

fadlytabrani commented 2 years ago

root@NASC8F1EC:/tmp# cat /proc/mtd dev: size erasesize name mtd0: 00080000 00040000 "U-Boot" mtd1: 00200000 00040000 "Kernel" mtd2: 00900000 00040000 "RootFS1" mtd3: 00300000 00040000 "RootFS2" mtd4: 00040000 00040000 "U-Boot Config" mtd5: 00140000 00040000 "NAS Config" root@NASC8F1EC:/tmp# python3 qnap_mtd_resize.py

[Check of the QNAP model and see if supported] kirkwood-qnap: machine: QNAP TS419 family DTB file: kirkwood-ts419-6281.dtb Partition resize was not tested on this device yet. Do you want to continue ? (y/N) y In case of success, please report the DTB file indication.

Checking: flashcp -V Checking: flash_erase --version Using 'u-boot-tools' package

[find on which MTD device partitions are currently mounted] spi0.0

[Dump current U-boot config'] Current U-boot bootcmd: uart1 0x68;cp.l 0xf8200000 0x800000 0x80000;cp.l 0xf8400000 0xa00000 0x240000;bootm 0x800000 Current U-boot bootargs: console=ttyS0,115200 root=/dev/ram initrd=0xa00000,0x900000 ramdisk=34816

[Prepare new 'bootcmd'] Old: uart1 0x68;cp.l 0xf8200000 0x800000 0x80000;cp.l 0xf8400000 0xa00000 0x240000;bootm 0x800000 New: uart1 0x68;cp.l 0xf8100000 0x800000 0xc0000;cp.l 0xf8400000 0xb00000 0x300000;bootm 0x800000;echo Kernel_legacy layout fallback;bootm 0x900000

[Prepare new 'bootargs'] Old: console=ttyS0,115200 root=/dev/ram initrd=0xa00000,0x900000 ramdisk=34816 New: console=ttyS0,115200 root=/dev/ram initrd=0xb00000,0xc00000 ramdisk=34816 cmdlinepart.mtdparts=spi0.0:512k@0(uboot)ro,3M@0x100000(Kernel),12M@0x400000(RootFS1),2M@0x200000(Kernel_legacy),256k@0x80000(U-Boot_Config),256k@0xc0000(NAS_Config) mtdparts=spi0.0:512k@0(uboot)ro,3M@0x100000(Kernel),12M@0x400000(RootFS1),2M@0x200000(Kernel_legacy),256k@0x80000(U-Boot_Config),256k@0xc0000(NAS_Config)

[Prepare fw_setenv script (/tmp/fw_setenv.script)]

[Dump current 'NAS config' and 'Kernel' images]

[Concatenate first 256K of 'NAS config' with first 1MB of Kernel > /tmp/mtd_nas_config.new]

[Prepare second 1MB of kernel tail > /tmp/mtd_kernel.tail]

!!!! Warning !!!!

Everything is fine up to now.
Next steps will write the flash and may be subject to failures.

It is highly recommended to perform a MTD backup and save the files
somewhere (USB device, PC)

    cat /dev/mtd0 > /tmp/mtd0.uboot.backup
    cat /dev/mtd1 > /tmp/mtd1.kernel.backup
    cat /dev/mtd2 > /tmp/mtd2.rootfs1.backup
    cat /dev/mtd3 > /tmp/mtd3.rootfs2.backup
    cat /dev/mtd4 > /tmp/mtd4.uboot-config.backup
    cat /dev/mtd5 > /tmp/mtd5.nas-config.backup
    fw_printenv -c /tmp/fw_env.config  > /tmp/uboot_config.backup.txt
    cd /tmp
    tar cvzf mtd_backup.tgz mtd?.*.backup uboot_config.backup.txt

    # now use scp / sftp to push/pull mtd_backup.tgz on another PC.

Be sure you will not cut the power until the end of operations.
In case of failure, you way need to recover with a Serial Console 
to run U-boot commands

    https://www.cyrius.com/debian/kirkwood/qnap/ts-219/serial/

Continue and flash the new partitions ? (y/N) y

[Flash 'NAS config' partition content (ie 'NAS config' + head of Kernel) (still a 'safe' op)]

[Change U-boot config with new values)]

[Flash tail of the kernel in old 'Kernel' Partition]

[Make a copy of /tmp/fw_env.config into /etc/fw_env.config (if not already existing)]

SUCCESS. 

Now, REBOOT !

Notes: 
- DO NOT PERFORM A KERNEL OR SYSTEM UPDATE before the next reboot !... 
  so don't wait too long.
- Consider compressing initrd with 'xz' to optimize the size with:

    echo "COMPRESS=xz" > /etc/initramfs-tools/conf.d/compress

root@NASC8F1EC:/tmp# cat /proc/mtd dev: size erasesize name mtd0: 00080000 00040000 "U-Boot" mtd1: 00200000 00040000 "Kernel" mtd2: 00900000 00040000 "RootFS1" mtd3: 00300000 00040000 "RootFS2" mtd4: 00040000 00040000 "U-Boot Config" mtd5: 00140000 00040000 "NAS Config" root@NASC8F1EC:/tmp# shutdown -r now root@NASC8F1EC:/tmp# Connection to 10.180.100.106 closed by remote host. Connection to 10.180.100.106 closed. Xxxx ~ % ssh root@10.180.100.106 root@10.180.100.106's password: Linux NASC8F1EC 4.19.0-20-marvell #1 Debian 4.19.235-1 (2022-03-17) armv5tel

The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Jun 14 22:33:24 2022 from 10.180.51.104 root@NASC8F1EC:~# cat /proc/mtd dev: size erasesize name mtd0: 00080000 00040000 "uboot" mtd1: 00300000 00040000 "Kernel" mtd2: 00c00000 00040000 "RootFS1" mtd3: 00200000 00040000 "Kernel_legacy" mtd4: 00040000 00040000 "U-Boot_Config" mtd5: 00040000 00040000 "NAS_Config"

amouiche commented 2 years ago

thank you for you report. Arnaud

On Tue, 2022-06-14 at 05:58 -0700, fadlytabrani wrote:

@.:/tmp# cat /proc/mtd dev: size erasesize name mtd0: 00080000 00040000 "U-Boot" mtd1: 00200000 00040000 "Kernel" mtd2: 00900000 00040000 "RootFS1" mtd3: 00300000 00040000 "RootFS2" mtd4: 00040000 00040000 "U-Boot Config" mtd5: 00140000 00040000 "NAS Config" @.:/tmp# python3 qnap_mtd_resize.py [Check of the QNAP model and see if supported] kirkwood-qnap: machine: QNAP TS419 family DTB file: kirkwood-ts419-6281.dtb Partition resize was not tested on this device yet. Do you want to continue ? (y/N) y In case of success, please report the DTB file indication. Checking: flashcp -V Checking: flash_erase --version Using 'u-boot-tools' package [find on which MTD device partitions are currently mounted] spi0.0 [Dump current U-boot config'] Current U-boot bootcmd: uart1 0x68;cp.l 0xf8200000 0x800000 0x80000;cp.l 0xf8400000 0xa00000 0x240000;bootm 0x800000 Current U-boot bootargs: console=ttyS0,115200 root=/dev/ram initrd=0xa00000,0x900000 ramdisk=34816 [Prepare new 'bootcmd'] Old: uart1 0x68;cp.l 0xf8200000 0x800000 0x80000;cp.l 0xf8400000 0xa00000 0x240000;bootm 0x800000 New: uart1 0x68;cp.l 0xf8100000 0x800000 0xc0000;cp.l 0xf8400000 0xb00000 0x300000;bootm 0x800000;echo Kernel_legacy layout fallback;bootm 0x900000 [Prepare new 'bootargs'] Old: console=ttyS0,115200 root=/dev/ram initrd=0xa00000,0x900000 ramdisk=34816 New: console=ttyS0,115200 root=/dev/ram initrd=0xb00000,0xc00000 ramdisk=34816 @.**@*.**@*. @*.**@*.(U- @.(NAS_Config) @.**@*.**@*.(Root @*.**@*.(U- @.(NAS_Config) [Prepare fw_setenv script (/tmp/fw_setenv.script)] [Dump current 'NAS config' and 'Kernel' images]

  • cat /dev/mtd5 [Resize 'NAS config' dump from 1280KB to 256KB.]
  • modprobe loop
  • losetup --show -f /tmp/mtd_nas_config.dump
  • loopdev=/dev/loop0
  • e2fsck -f -p -v /dev/loop0 18 inodes used (14.06%, out of 128) 2 non-contiguous files (11.1%) 0 non-contiguous directories (0.0%)

    of inodes with ind/dind/tind blocks: 0/0/0

    55 blocks used (5.37%, out of 1024) 0 bad blocks 0 large files

    7 regular files 2 directories 0 character device files 0 block device files 0 fifos 0 links 0 symbolic links (0 fast symbolic links) 0 sockets 9 files

  • true
  • e2fsck -f -p -v /dev/loop0 18 inodes used (14.06%, out of 128) 2 non-contiguous files (11.1%) 0 non-contiguous directories (0.0%)

    of inodes with ind/dind/tind blocks: 0/0/0

    55 blocks used (5.37%, out of 1024) 0 bad blocks 0 large files

    7 regular files 2 directories 0 character device files 0 block device files 0 fifos 0 links 0 symbolic links (0 fast symbolic links) 0 sockets 9 files

  • resize2fs /dev/loop0 128 resize2fs 1.44.5 (15-Dec-2018) Resizing the filesystem on /dev/loop0 to 128 (1k) blocks. The filesystem on /dev/loop0 is now 128 (1k) blocks long.
  • losetup -d /dev/loop0 [Concatenate first 256K of 'NAS config' with first 1MB of Kernel > /tmp/mtd_nas_config.new] [Prepare second 1MB of kernel tail > /tmp/mtd_kernel.tail]!!!! Warning !!!! Everything is fine up to now. Next steps will write the flash and may be subject to failures. It is highly recommended to perform a MTD backup and save the files somewhere (USB device, PC) cat /dev/mtd0 > /tmp/mtd0.uboot.backup cat /dev/mtd1 > /tmp/mtd1.kernel.backup cat /dev/mtd2 > /tmp/mtd2.rootfs1.backup cat /dev/mtd3 > /tmp/mtd3.rootfs2.backup cat /dev/mtd4 > /tmp/mtd4.uboot-config.backup cat /dev/mtd5 > /tmp/mtd5.nas-config.backup fw_printenv -c /tmp/fw_env.config > /tmp/uboot_config.backup.txt cd /tmp tar cvzf mtd_backup.tgz mtd?.*.backup uboot_config.backup.txt # now use scp / sftp to push/pull mtd_backup.tgz on another PC. Be sure you will not cut the power until the end of operations. In case of failure, you way need to recover with a Serial Console to run U-boot commands https://www.cyrius.com/debian/kirkwood/qnap/ts-219/serial/ Continue and flash the new partitions ? (y/N) y [Flash 'NAS config' partition content (ie 'NAS config' + head of Kernel) (still a 'safe' op)]
  • flashcp -v /tmp/mtd_nas_config.new /dev/mtd5 Erasing blocks: 5/5 (100%) Writing data: 1280k/1280k (100%) Verifying data: 1280k/1280k (100%) [Change U-boot config with new values)]
  • fw_setenv -c /tmp/fw_env.config -s /tmp/fw_setenv.script [Flash tail of the kernel in old 'Kernel' Partition]
  • flashcp -v /tmp/mtd_kernel.tail /dev/mtd1 Erasing blocks: 4/4 (100%) Writing data: 1024k/1024k (100%) Verifying data: 1024k/1024k (100%) [Make a copy of /tmp/fw_env.config into /etc/fw_env.config (if not already existing)]SUCCESS. Now, REBOOT ! Notes: - DO NOT PERFORM A KERNEL OR SYSTEM UPDATE before the next reboot !... so don't wait too long. - Consider compressing initrd with 'xz' to optimize the size with: echo "COMPRESS=xz" > /etc/initramfs-tools/conf.d/compress @.:/tmp# cat /proc/mtd dev: size erasesize name mtd0: 00080000 00040000 "U-Boot" mtd1: 00200000 00040000 "Kernel" mtd2: 00900000 00040000 "RootFS1" mtd3: 00300000 00040000 "RootFS2" mtd4: 00040000 00040000 "U-Boot Config" mtd5: 00140000 00040000 "NAS Config" @.:/tmp# shutdown -r now @.:/tmp# Connection to 10.180.100.106 closed by remote host. Connection to 10.180.100.106 closed. Xxxx ~ % ssh @. @.'s password: Linux NASC8F1EC 4.19.0-20-marvell #1 Debian 4.19.235-1 (2022-03-17) armv5tel The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc//copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Jun 14 22:33:24 2022 from 10.180.51.104 **@.:~# cat /proc/mtd dev: size erasesize name mtd0: 00080000 00040000 "uboot" mtd1: 00300000 00040000 "Kernel" mtd2: 00c00000 00040000 "RootFS1" mtd3: 00200000 00040000 "Kernel_legacy" mtd4: 00040000 00040000 "U-Boot_Config" mtd5: 00040000 00040000 "NAS_Config" — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.>