扩容OpenWRT带有efi的squashfs X86固件,磁盘空间扩容方法:Overlay扩容

news/2024/9/21 1:56:17

官方扩容的文档

 

1.安装需要的软件:

root@ImmortalWrt:~# opkg install lsblk fdisk resize2fs losetup blkid f2fs-tools
Installing lsblk (2.39-2) to root...
Downloading https://mirrors.vsean.net/openwrt/releases/23.05.3/packages/x86_64/base/lsblk_2.39-2_x86_64.ipk
Installing libmount1 (2.39-2) to root...
Downloading https://mirrors.vsean.net/openwrt/releases/23.05.3/packages/x86_64/base/libmount1_2.39-2_x86_64.ipk
Package fdisk (2.39-2) installed in root is up to date.
Installing resize2fs (1.47.0-2) to root...
Downloading https://mirrors.vsean.net/openwrt/releases/23.05.3/packages/x86_64/base/resize2fs_1.47.0-2_x86_64.ipk
Installing losetup (2.39-2) to root...
Downloading https://mirrors.vsean.net/openwrt/releases/23.05.3/packages/x86_64/base/losetup_2.39-2_x86_64.ipk
Installing blkid (2.39-2) to root...
Downloading https://mirrors.vsean.net/openwrt/releases/23.05.3/packages/x86_64/base/blkid_2.39-2_x86_64.ipk
Installing f2fs-tools (1.16.0-1) to root...
Downloading https://mirrors.vsean.net/openwrt/releases/23.05.3/packages/x86_64/base/f2fs-tools_1.16.0-1_x86_64.ipk
Installing f2fsck (1.16.0-1) to root...
Downloading https://mirrors.vsean.net/openwrt/releases/23.05.3/packages/x86_64/base/f2fsck_1.16.0-1_x86_64.ipk
Configuring f2fsck.
Configuring f2fs-tools.
Configuring resize2fs.
Configuring libmount1.
Configuring lsblk.
Configuring losetup.
Configuring blkid.

2.查看磁盘分区情况

root@ImmortalWrt:~# fdisk -l
Disk /dev/loop0: 291.06 MiB, 305201152 bytes, 596096 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
GPT PMBR size mismatch (680479 != 123091919) will be corrected by write.
The backup GPT table is corrupt, but the primary appears OK, so that will be used.
The backup GPT table is not on the end of the device.Disk /dev/sda: 58.69 GiB, 63023063040 bytes, 123091920 sectors
Disk model: SanDisk SSD i110
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 20C60F33-AFC6-96E2-AE0B-E001AE609500Device      Start    End Sectors  Size Type
/dev/sda1     512  66047   65536   32M Linux filesystem
/dev/sda2   66048 680447  614400  300M Linux filesystem
/dev/sda128    34    511     478  239K BIOS bootPartition table entries are not in disk order.

我们明确了几个点:

1、我们需要操作的整个磁盘叫 /dev/sda ,总容量58.69G(Disk /dev/sda: 58.69 GiB)

2、我们需要扩容的分区是/dev/sda2 ,这里的Start是66048,原始空间300M(/dev/sda2   66048 680447  614400  300M Linux filesystem)

3.使用fdisk命令对磁盘从新分区(扩容)

1、fdisk /dev/sda扩容磁盘

2、输入p回车(打印磁盘信息),观察后确人:将来要删除的是第二个盘 /dev/sda2(以p打印的顺序为准)

root@ImmortalWrt:~# fdisk /dev/sdaWelcome to fdisk (util-linux 2.39).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.GPT PMBR size mismatch (680479 != 123091919) will be corrected by write.
The backup GPT table is corrupt, but the primary appears OK, so that will be used.
The backup GPT table is not on the end of the device. This problem will be corrected by write.
This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.Command (m for help): pDisk /dev/sda: 58.69 GiB, 63023063040 bytes, 123091920 sectors
Disk model: SanDisk SSD i110
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 20C60F33-AFC6-96E2-AE0B-E001AE609500Device      Start    End Sectors  Size Type
/dev/sda1     512  66047   65536   32M Linux filesystem
/dev/sda2   66048 680447  614400  300M Linux filesystem
/dev/sda128    34    511     478  239K BIOS bootPartition table entries are not in disk order.Command (m for help): 

3、输入d回车(删除分区命令),选择2回车(选择删除第二个分区)

Device      Start    End Sectors  Size Type
/dev/sda1     512  66047   65536   32M Linux filesystem
/dev/sda2   66048 680447  614400  300M Linux filesystem
/dev/sda128    34    511     478  239K BIOS bootPartition table entries are not in disk order.Command (m for help): d
Partition number (1,2,128, default 128): 2Partition 2 has been deleted.Command (m for help): 

4、输入n回车(创建一个新分区),输入2回车(设置盘序号还是刚刚的2号盘),然后必须要注意,之前2号盘的Start是66048,所以新创建的盘的Start也必须是66048然后回车。

输入+5g,代表直接新建分区为5GB(这样写方便,不用计算)

Do you want to remove the signature? [Y]es/[N]o: n(移除之前的标识符这里一定要选n

打印分区表,确认无误后,输入w(保存,正式写入,并同步分区表)

Command (m for help): n
Partition number (2-127, default 2): 2
First sector (66048-123091886, default 67584): 66048
Last sector, +/-sectors or +/-size{K,M,G,T,P} (66048-123091886, default 123090943): +5gCreated a new partition 2 of type 'Linux filesystem' and of size 5 GiB.
Partition #2 contains a squashfs signature.Do you want to remove the signature? [Y]es/[N]o: nCommand (m for help): pDisk /dev/sda: 58.69 GiB, 63023063040 bytes, 123091920 sectors
Disk model: SanDisk SSD i110
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 20C60F33-AFC6-96E2-AE0B-E001AE609500Device      Start      End  Sectors  Size Type
/dev/sda1     512    66047    65536   32M Linux filesystem
/dev/sda2   66048 10551295 10485248    5G Linux filesystem
/dev/sda128    34      511      478  239K BIOS bootPartition table entries are not in disk order.Command (m for help): w
The partition table has been altered.
Syncing disks.root@ImmortalWrt:~# 

4.检查新的分区表状态

1、使用fdisk -l列出所有磁盘上的分区表信息,我们看到磁盘分区表已经是5G的空间状态了

root@ImmortalWrt:~# fdisk -l
Disk /dev/loop0: 291.06 MiB, 305201152 bytes, 596096 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytesDisk /dev/sda: 58.69 GiB, 63023063040 bytes, 123091920 sectors
Disk model: SanDisk SSD i110
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 20C60F33-AFC6-96E2-AE0B-E001AE609500Device      Start      End  Sectors  Size Type
/dev/sda1     512    66047    65536   32M Linux filesystem
/dev/sda2   66048 10551295 10485248    5G Linux filesystem
/dev/sda128    34      511      478  239K BIOS bootPartition table entries are not in disk order.

2、使用df -Th查看文件系统磁盘空间使用情况

root@ImmortalWrt:~# df -Th
Filesystem           Type            Size      Used Available Use% Mounted on
/dev/root            squashfs        9.0M      9.0M         0 100% /rom
tmpfs                tmpfs         906.0M      1.1M    904.9M   0% /tmp
/dev/loop0           f2fs          289.1M     63.1M    226.0M  22% /overlay
overlayfs:/overlay   overlay       289.1M     63.1M    226.0M  22% /
/dev/sda1            vfat           31.9M      7.9M     24.1M  25% /boot
/dev/sda1            vfat           31.9M      7.9M     24.1M  25% /boot
tmpfs                tmpfs         512.0K         0    512.0K   0% /dev
/dev/sda1            vfat           31.9M      7.9M     24.1M  25% /mnt/sda1
root@ImmortalWrt:~# 

我们看到,文件系统并没有正确识别到新分配的overlay的 / 根分区的空间,还是289.1M

5.查看当前挂载的循环设备状态

root@ImmortalWrt:~# losetup
NAME       SIZELIMIT  OFFSET AUTOCLEAR RO BACK-FILE  DIO LOG-SEC
/dev/loop0         0 9371648         1  0 /sda2        0     512
root@ImmortalWrt:~# 

结合df-Th命令我们看到,/ 这个挂载点使用了 overlay 文件系统技术,并且要记住“OFFSET的偏移量是9371648”,未来也要一致才可以!

loop 设备 /dev/loop0 被映射到了 /sda2 文件上,也就是说现在/sda2用overlay技术,挂载为/目录

总结

  • 只读层/dev/root(类型为 squashfs)。
  • 可写层/overlay(类型为 f2fs,通过 /dev/loop0 映射到 /sda2 文件)。
  • 最终挂载点/(类型为 overlay,整合了只读层和可写层)。

这就是为什么squashfs的文件系统可以有“恢复到出厂设置”功能,而ext4文件系统没法恢复的原理。(因为这个根目录既可以有只读层的数据,又有安装软件,修改配置文件的数据)

6.现在我们要重新挂载刚刚创建好的循环设备,以实现替换的目的

因为刚刚讲了这个/根目录是混合型的,必须精确指明哪里是只读的,哪里是可写的,所以这个“OFFSET的偏移量是9371648

root@ImmortalWrt:~# losetup -f -o 9371648 /dev/sda2
root@ImmortalWrt:~# losetup
NAME       SIZELIMIT  OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC
/dev/loop1         0 9371648         0  0 /dev/sda2   0     512
/dev/loop0         0 9371648         1  0 /sda2       0     512
root@ImmortalWrt:~# 

这里注意区别,/dev/sda2是分区,没有挂载具体位置,/sda2已经挂载在/根目录,

7.为了确保数据的一致性,我们先挂载一下数据,检查一下数据是否存在,在卸载释放资源。因为磁盘刚刚被全删除了,后面重启可能会丢失数据,这样做保险一些。

root@ImmortalWrt:~# mount /dev/loop1 /mnt
root@ImmortalWrt:/mnt# tree -L 2 /mnt
/mnt
├── upper
│   ├── boot
│   ├── etc
│   ├── lib
│   ├── mnt
│   ├── sbin
│   └── usr
└── work└── work10 directories, 0 files
root@ImmortalWrt:~# umount /dev/loop1

8.确认挂载的循环设备的文件系统格式(是f2fs,还是)

root@ImmortalWrt:/# lsblk -f
NAME     FSTYPE   FSVER LABEL       UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
loop0    f2fs           rootfs_data 1858fcd6-7767-11ef-979c-5fec82ce50f5  225.9M    22% /overlay
loop1    f2fs           rootfs_data 1858fcd6-7767-11ef-979c-5fec82ce50f5                
sda                                                                                     
├─sda1   vfat           kernel      1234-ABCD                              24.1M    25% /mnt/sda1
│                                                                                       /boot
│                                                                                       /boot
├─sda2   squashfs                                                              0   100% /rom
└─sda128                                                                                
root@ImmortalWrt:/# 

9.如果是f2fs的文件系统,执行扩容命令,刷新文件

root@ImmortalWrt:/# resize.f2fs -f /dev/loop1
Info: Force to resize
Info: MKFS version"Linux version 5.15.162 (buildbot@buildbot.infra.immortalwrt.org) (x86_64-openwrt-linux-musl-gcc (OpenWrt GCC 12.3.0 r27917-81a1f98d5b) 12.3.0, GNU ld (GNU Binutils) 2.40.0) #0 SMP Thu Jul 18 06:35:54 2024"
Info: FSCK versionfrom "Linux version 5.15.162 (buildbot@buildbot.infra.immortalwrt.org) (x86_64-openwrt-linux-musl-gcc (OpenWrt GCC 12.3.0 r27917-81a1f98d5b) 12.3.0, GNU ld (GNU Binutils) 2.40.0) #0 SMP Thu Jul 18 06:35:54 2024"to "Linux version 5.15.162 (buildbot@buildbot.infra.immortalwrt.org) (x86_64-openwrt-linux-musl-gcc (OpenWrt GCC 12.3.0 r27917-81a1f98d5b) 12.3.0, GNU ld (GNU Binutils) 2.40.0) #0 SMP Thu Jul 18 06:35:54 2024"
Info: superblock features = 0 : 
Info: superblock encrypt level = 0, salt = 00000000000000000000000000000000
Info: Segments per section = 1
Info: Sections per zone = 1
Info: total FS sectors = 596096 (291 MB)
Info: CKPT version = 43a353a3
Info: Duplicate valid checkpoint to mirror position 512 -> 1024
Info: Write valid nat_bits in checkpoint
[FIX] (move_one_curseg_info:2921)  --> Move curseg[0] 3 -> 10 after 2c00[FIX] (move_one_curseg_info:2921)  --> Move curseg[1] 6 -> 13 after 2c00[FIX] (move_one_curseg_info:2921)  --> Move curseg[2] 4 -> 11 after 2c00[FIX] (move_one_curseg_info:2921)  --> Move curseg[3] 0 -> e after 2c00[FIX] (move_one_curseg_info:2921)  --> Move curseg[4] 1 -> f after 2c00[FIX] (move_one_curseg_info:2921)  --> Move curseg[5] 2 -> 14 after 2c00Info: Write valid nat_bits in checkpoint
Try to do defragement: Done
[migrate_ssa: 272] Info: Done to migrate SSA blocks: sum_blkaddr = 0xe00 -> 0x2200
[migrate_nat: 389] Info: Done to migrate NAT blocks: nat_blkaddr = 0xa00 -> 0xa00
[migrate_sit: 447] Info: Done to restore new SIT blocks: 0x600
[rebuild_checkpoint: 486] Info: Overprovision ratio = 2.150%
[rebuild_checkpoint: 487] Info: Overprovision segments = 55 (GC reserved = 53)
Info: Write valid nat_bits in checkpoint
[rebuild_checkpoint: 603] Info: Done to rebuild checkpoint blocks
[update_superblock: 765] Info: Done to update superblockDone: 0.799958 secs
root@ImmortalWrt:/# 

10.如果是ext4文件系统,执行扩容命令,刷新文件

root@ImmortalWrt:/# resize2fs -f /dev/loop1
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/sdb1 is mounted on /overlay; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 24
The filesystem on /dev/loop1 is now 52428539 (4k) blocks long.

11.扩容后,重启前的最后一件重要的事

如果你的固件是带efi的

# 带-efi的
immortalwrt-23.05.3-x86-64-generic-squashfs-combined-efi.img
immortalwrt-23.05.3-x86-64-generic-ext4-combined-efi.img
# 不带-efi的
immortalwrt-23.05.3-x86-64-generic-squashfs-combined.img
immortalwrt-23.05.3-x86-64-generic-ext4-combined.img

确认你的uuid,是sda2的PARTUUID="cfd7abf3-cf18-4a4a-95e4-46f2013c080f",

root@ImmortalWrt:/# blkid
/dev/loop1: LABEL="rootfs_data" UUID="1858fcd6-7767-11ef-979c-5fec82ce50f5" BLOCK_SIZE="4096" TYPE="f2fs"
/dev/loop0: LABEL="rootfs_data" UUID="1858fcd6-7767-11ef-979c-5fec82ce50f5" BLOCK_SIZE="4096" TYPE="f2fs"
/dev/sda2: BLOCK_SIZE="262144" TYPE="squashfs" PARTUUID="cfd7abf3-cf18-4a4a-95e4-46f2013c080f"
/dev/sda128: PARTUUID="20c60f33-afc6-96e2-ae0b-e001ae609580"
/dev/sda1: SEC_TYPE="msdos" LABEL_FATBOOT="kernel" LABEL="kernel" UUID="1234-ABCD" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="20c60f33-afc6-96e2-ae0b-e001ae609501"
root@ImmortalWrt:/# 

并修改你的系统启动引导

root@ImmortalWrt:/# vim /boot/grub/grub.cfg 

把里面的2个uuid都改成,sda2的PARTUUID cfd7abf3-cf18-4a4a-95e4-46f2013c080f

root@ImmortalWrt:/# cat /boot/grub/grub.cfg
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 --rtscts=off
terminal_input console serial; terminal_output console serialset default="0"
set timeout="3"
search -l kernel -s rootmenuentry "ImmortalWrt" {linux /boot/vmlinuz root=PARTUUID=cfd7abf3-cf18-4a4a-95e4-46f2013c080f rootwait   console=tty0 console=ttyS0,115200n8 noinitrd
}
menuentry "ImmortalWrt (failsafe)" {linux /boot/vmlinuz failsafe=true root=PARTUUID=cfd7abf3-cf18-4a4a-95e4-46f2013c080f rootwait   console=tty0 console=ttyS0,115200n8 noinitrd
}
root@ImmortalWrt:/# 

12.执行reboot,检查最后的分区成果!

 

3.

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/62791.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

游戏技术

目录显示相关的术语每个帧的像素:分辨率多个帧的刷新:刷新率、帧率每个像素的颜色编码码率显卡渲染技术DLSS2 牺牲画质 提高帧率DLSS3 进一步提高帧率 刷新更流畅 显示相关的术语 每个帧的像素:分辨率 分辨率 = 水平宽度的像素数(列数) x 垂直高度的像素数(行数)速记 分辨率…

基于双闭环PI的SMO无速度控制系统simulink建模与仿真

1.课题概述基于双闭环PI的SMO无速度控制系统simulink建模与仿真,基于双闭环PI的SMO无速度控制系统主要由两个闭环组成:一个是电流环,另一个是速度环。电流环作为内环,主要负责电流的快速跟踪控制;速度环作为外环,负责速度的精确控制。这种双闭环结构可以有效提高系统的动…

基于ACO蚁群优化的UAV最优巡检路线规划算法matlab仿真

1.程序功能描述 基于ACO蚁群优化法的UAV最优巡检路线规划。蚁群优化算法源于对自然界蚂蚁寻找食物路径行为的模拟。在无人机巡检路线规划问题中,无人机被认为是“蚂蚁”,巡检点视为“食物源”,目标是找到一条总距离(或总能耗、总时间等)最短的巡检路线。 2.测试软件…

痞子衡嵌入式:如果i.MXRT离线无法启动,试着分析ROM启动日志

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT系列MCU的ROM启动日志。关于 i.MX RT 启动问题解决的文章,痞子衡写过非常多,其中大部分都是具体到某一类启动设备下的具体问题分析,比较依赖经验,这些经验当然是非常有用的。此外也有一篇 《…

基于A律压缩的PCM脉冲编码调制通信系统simulink建模与仿真

1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)4.算法理论概述脉冲编码调制(Pulse Code Modulation, PCM)是一种将模拟信号转换为数字信号的通信技术,广泛应用于电话通信、音频…

室内导航的界面该如何设计

室内导航的界面该如何设计?发点例子你看看

【笔记】机器学习算法在异常网络流量监测中的应用

这段时间在找方向,又看不懂文章,只能先从一些相对简单的综述类看起,顺便学学怎么写摘要相关工作的。机器学习算法在异常网络流量监测中的应用 原文:Detecting Network Anomalies in NetFlow Traffic with Machine Learning Algorithms 原文链接:Detecting Network Anomali…