Files
IT-Docs/Openwrt系统盘扩容方法.md

195 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Openwrt系统盘扩容方法
## 1 条件和定义
Openwrt版本:24.10.5(据说是目前最新的稳定版)
金士顿NVME M2 512G硬盘:在系统中的名字为nvme0n1(文中都以这个出现,请自行换成你的硬盘名字)
U盘:大于1G
## 2 背景说明
最近有一个需求需要用到软路由,之前用iStoreOS,其实也是基于Openwrt做的,你可以认为就像小米的MIUI一样,基于安卓做的。我写文章前又装了一边,发现开机跑的代码都差不多。小白或不想折腾的建议去看看iStoreOS,真心话好用的多。Openwrt像以前的安卓,想折腾的来。iStoreOS像苹果,没太多折腾的。去iStoreOS的网站你会发现他的版本和Openwrt是一致的。所以Openwrt有的,iStoreOS也有。好了不扯闲篇直入主题。
## 3 吐槽
其实这个过程是自己看了网上的一些教程,我说真的,既然要写就好好写,写个半吊子,让人看的云里雾里的。最后没办法求助Deepseek和豆包,结果这两货每次胸脯拍的叭叭响,结果全是问题。最后好在我自己还是搞定了,下面就说一下关于Openwrt扩容的问题。
## 4 大前提
大前提就是不要试图在系统运行中的硬盘上扩容,什么意思呢?比如你有一块512G的硬盘,但是安装完后实际只有126MB被使用,剩下的都浪费了。那么这会你要扩容就两个方向,第一扩展系统盘,第二扩展为数据盘。扩展数据盘相对简单一点,虽然我没做,但是你可以想象,你在扩容的过程没有操作系统正在使用的部分,这样就像我刚开始说的,并没有在系统运行的硬盘上扩容。这话有点怪,看了下面就知道了。另一种就是扩展系统盘,这下好了,就是要在正在运行的分区上进行操作,一个字难。就这个破事儿我折腾了整整一天。其实道理也很简单,你要在windows的C进行操作也很难,你可以试试,只要你想操作就会提示你进PE去干,为什么呢——因为系统盘空闲了。
## 5 操作步骤
首先将要安装系统的硬盘的分区全部删除后再进来安装,这个步骤怎么弄都可以,PE、外置U盘,反正方法多的很,这里就不赘述了。
### 5.1 准备工作
大于1T的U盘,去Openwrt的官网或者阿里镜像站下载你需要的系统文件,具体下载哪个看你自己。
下载完后,使用Rufus将镜像装在U盘。这里注意一下,我被坑了一下,就是刚开始都是对的,直接烧下载的文件,就是后缀名为.gz的原始下载文件。我搞的时候后面估计是整晕了跑去解压缩成img烧写,然后就无法启动了。
### 5.2 安装系统
#使用制作好的U盘,在bios中设置U盘启动,进入命令行后,这会可以先装系统,也可以先改IP从而使用ssh操作。建议先改IP,用ssh操作,毕竟可以粘贴复制,比自己手敲命令行快多了。
#配置网络
#查看所有网络接口
ip addr show
#或者用OpenWrt专用的查看命令
uci show network
#查看当前LAN口的配置
uci show network.lan
#修改IP地址为局域网的网段(假设是192.168.8.0/24
uci set network.lan.ipaddr='192.168.8.250' #改成你想要的固定IP
#修改子网掩码(一般就是255.255.255.0
uci set network.lan.netmask='255.255.255.0'
#设置网关(你公司主路由的IP,一般是192.168.8.1
uci set network.lan.gateway='192.168.8.1'
#添加DNS服务器(可选,但推荐)
uci set network.lan.dns='114.114.114.114 223.5.5.5'
#提交修改
uci commit network
#重启网络
/etc/init.d/network restart
#现在你就可以使用ssh,连接到系统了。
#通过下面命令看看硬盘分区情况,其实就是看看你的硬盘叫啥
cat /proc/partitions
#安装系统到硬盘
dd if=/dev/sdb of=/dev/nvme0n1 bs=4M
#sdb是现在U盘系统名字,nvme0n1是要安装的硬盘名字,通过前面命令可以看到。这个命令下去是没有进度条的,时间根据你的U盘决定,最多一分钟,你看要是还没回到命令行就ctrl+c就可以返回了。
#同步一下
sync
#这里千万不要重启了,重启了更难搞,其实根据后面的操作,感觉重启了还是在U盘系统还是可以的,但是一旦是进了硬盘的系统太难太难
#看看分区硬盘是否正常(结果肯定不正常)
df -h
#可以看到你的硬盘只有126MB了,接下来就要扩容了。
### 5.3 硬盘扩容
#这里的扩容就是把剩余的硬盘空间扩展到系统盘上
#安装工具
opkg update && opkg install parted resize2fs
#开始扩容,输入以下命令:
parted /dev/nvme0n1 resizepart 2 100%
#这里会出现一个Error: The backup GPT table is corrupt, but the primary appears OK, so that will de used
OK/Cancel?
#输入ok回车
#接着又会出现:Not all of the space available to /dev/nvme0n1 appears to be used, you can fix the GPT to use all of the space (an extra 7897897897)
Fix/Ignore?
#输入fix回车
#接下来又来一个Partition number?
#这里输入2回车(其实就是第二个硬盘分区,也就是系统盘)
#马上又是End[126MB]
#这里输入100%回车(第一次我啥也没输入就回车,然后就悲剧了)
#最后输入quit可以退出,不过我这边是直接退出的。
#在线扩容文件系统(关键一步)
#输入以下命令
resize2fs /dev/nvme0n1p2
#这里会有一个提示“Please run 'e2fsck -f /dev/nvme0n1p2' first.”就是让你先检查以下,没什么好说的,照做:
e2fsck -f /dev/nvme0n1p2
#中间会有三个是否修复的提示,都输入Y回车。
Free blocks count wrong (18634, counted=18641).
Fix<y>? yes
Free inodes count wrong (5075, counted=5080).
Fix<y>? yes
Padding at end of inode bitmap is not set. Fix<y>? yes
#接着再重新扩展(所以可以进行e2fsck)
resize2fs /dev/nvme0n1p2
#第二次复盘的时候是下面的提示(第一次是什么忘记了)
root@OpenWrt:~#resize2fs /dev/nvme0n1p2
resize2fs 1.47.0 (5-Feb-2023)
Resizing the filesystem on /dev/nvme0n1p2 to 122092481 (4k) blocks.
The filesystem on /dev/nvme0n1p2 is now 122092481 (4k) blocks long.
#这个提示实际就是已经扩展到465G的样子,其实就已经成功了。不过由于第一次上面输入100%那个地方我输入回车了,也就是以126MB处结束,说白了就是一点都没动,所以失败了。
#接着用df -h查看,还是104M(不用管?不是,因为你看到的还是U盘的)
#查看是否扩容成功
#输入
parted /dev/nvme0n1
#输入print,看看情况(下面是第一次的结果)
Number Start End Size File system Name Flags
3 17.4kB 262kB 245kB bios_grub
1 262kB 17.0MB 16.8MB fat16 legacy_boot
2 17.0MB 126MB 109MB ext4
#这里17.0MB是个关键数字,意思是从17.0MB之后就是你要扩展的分区的开始位置。
#下面是第二次复盘的结果
Number Start End Size File system Name Flags
3 17.4kB 262kB 245kB bios_grub
1 262kB 17.0MB 16.8MB fat16 legacy_boot
2 17.0MB 500GB 500GB ext4
#这个结果是对的,所以下面的删除旧分区,新建新分区可以不用了,直接到通知内核更新分区表(第二次测试直接到了#验证分区大小已更新lsblk /dev/nvme0n1p2
而第一次搞得就是还得再来一次,结果又引出得别得问题,下面细说。
#下面是针对第一次扩容失败后的操作
#删除旧分区 2(放心,数据不会丢,只是重划边界)
(parted) rm 2
#新建根分区 2(占满剩余所有空间)
mkpart primary ext4 17.0MB 100%
#17.0MB 是你当前 EFI 分区的结束位置(从上面 print 里抄)
#100% 表示用满剩下所有磁盘空间
#接下来会有一个警告,如下:
Warning: The resulting partition is not properly aligned for best performance: 33280s % 2048s != 0s
Ignore/Cancel? Ignore
#选择Ignore
#退出
(parted) quit
#然后出现了下面的提示,意思就是让你刷新以下
Information: You may need to update /etc/fstab.
#通知内核更新分区表
partprobe /dev/nvme0n1
#验证分区大小已更新
lsblk /dev/nvme0n1p2
#这里会提示没有lsblk这个命令,用opkg install lsblk安装一下,安装完后再用上面的命令看看
#这里应该显示 465G 了。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1p2 259:2 0 465.7G 0 part
#上面看着对了之后就可以继续扩容文件系统
resize2fs /dev/nvme0n1p2
#最终验证
df -h
#结果如下:(这个是废话,因为还在U盘系统里面)
Filesystem Size Used Available Use% Mounted on
/dev/root 98.3M 27.5M 68.7M 29% /
tmpfs 3.8G 1.2M 3.8G 0% /tmp
/dev/sda1 16.0M 6.3M 9.7M 39% /boot
/dev/sda1 16.0M 6.3M 9.7M 39% /boot
tmpfs 512.0K 0 512.0K 0% /dev
#下面部分才能真正验证,看到下面结果就是好了
root@OpenWrt:~#mkdir /mnt/nvme
root@OpenWrt:~#mount /dev/nvme0n1p2 /mnt/nvme
root@OpenWrt:~#df -h /mnt/nvme
Filesystem Size Used Available Use% Mounted on
/dev/nvme0n1p2 459.8G 25.5M 459.8G 0% /mnt/nvme
#重启,记得拔掉U盘,我第一次就是忘记拔掉,回来看还是不对
Reboot
#再次进入系统之后使用df -h查看就对了。
#以下内容是因为第一次使用“删除旧分区 2 (parted) rm 2”这一块的操作导致了grub.cfg不对引起的。第二次复盘的时候没有出现,直接进系统了。
#第一次看到扩容的地方正确了,开心啊,就reboot重启了,结果不出意外的又出意外了,重启进不了系统。但是可以看到grub菜单,并且还跑了一会代码,那么就意味着引导程序没有问题,有问题的是引导的内容不对。
这里要感谢自己前端时间搞得Windows时光机,有兴趣可以在我的博客上看到,一台电脑从Win98到Win11,一共装了十几个系统,最后的引导管理就是用Grub4Dos来做,虽然不是Openwrt用的Grub2,但是很接近的。所以就是要改这个Grub2的配置文件。的这里推荐最简单的方案,进PE,在PE里面改。
#用记事本打开 grub.cfg(这个东西路径就在16MB那个盘上,忘记是在boot文件夹还是efi文件夹了,找一下吧,这文件是唯一的,好找)。
看到root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx或者root=/dev/sda2这种的时候直接改成以下内容:
root=/dev/nvme0n1p2(这个根据你的硬盘描述来)
#改完之后保存,重启
#我用的微PE,然后用DG将文件拷贝出来修改,结果拷贝回去说我这个版本好像基础版不得行。当时郁闷的很。不过仔细找了一下 有一个叫显示分区的工具,打开,然后Linux的硬盘分区也出来了。嗯,后面大大方方的复制替换就可以了。
@重启之后
df -h
成功了!