之前我分享的擴容 overlay 是複製原本 OpenWrt 的 /overlay 分區並且掛載作為外部 overlay 使用,但在最新的 OpenWrt/LEDE 以及基於 LEDE 編譯的 CatWrt 也是擴容不了的,雖然說有的擴容成功了但成功率不高,這次分享的總結於 B 站 UP 主 韓風 Talk 視頻中的第一種方法,成功率也比較高因為第二種我在固件裡沒有刷新成功容量所以就放棄了。
首先非常感謝韓風提供的方法,有需要可以查看他的视频我這裡就做一個總結。
在 v22.11 固件中就有 100M 可用空間強烈不推薦小白作為安裝 OpenWrt 的必選項!是有門檻的而且數據無價有需要可以先做備份再進行操作,甚至你可以給虛擬機創建一個快照。
以前的靠作為外部 overlay 的可以參考我這期博客 OpenWrt 擴容 overlay 分區教程
準備#
首先打開終端 SSH 連接到軟路由,這裡我使用 CatWrt EFI 啟動固件自帶的 ttyd
先看看軟路由的分區情況 fdisk -l
root@CatWrt:~# fdisk -l
Disk /dev/loop0: 184.88 MiB, 193855488 bytes, 378624 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 (852511 != 7129087) will be corrected by write.
Disk /dev/sda: 3.4 GiB, 3650093056 bytes, 7129088 sectors
Disk model: VMware Virtual I
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: 0EAC8D5A-F014-DB49-E8EB-FA846A473B00
Device Start End Sectors Size Type
/dev/sda1 512 33279 32768 16M Linux filesystem
/dev/sda2 33280 852479 819200 400M Linux filesystem
/dev/sda128 34 511 478 239K BIOS boot
Partition table entries are not in disk order.
可以看到 EFI 版固件要比傳統模式下多出一個 239k 的 /dev/sda128,但中止扇區還是在 819200,記住這個中止扇區,後續很多細節都是圍繞這個中止點!
下面進行分區工作,首先需要了解你的固件是否需要升級,在 CatWrt 裡我們強烈建議預留 200M 空閒空間這個空間在現在看需要在 /dev/sda2 後面預留了
首先進入分區管理工具,輸入 fdisk /dev/sda
這裡需要注意一下,扇區不能一定重複!
隨後輸入 n
新建一個分區
root@CatWrt:~# fdisk /dev/sda
Welcome to fdisk (util-linux 2.38).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
GPT PMBR size mismatch (852511 != 7129087) 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): _
這裡讓我們選擇主要分區還是擴展分區,我們選擇主要輸入 p
(這裡我沒遇到,不是所有人都有)
Select (default p): _
這裡讓我們選擇一個分區,因為這個 OpenWrt 沒有進行過任何分區操作,這裡就選擇為 3
Partition number (3-127, default 3): _
這裡讓我們給 /dev/sda3
分區一個開始的扇區,這裡按照未來升級的需要,我們將 /dev/sda2 分區的中止扇區加上 409600;
也就是 2048 x 200 即 200M 分區,從中止點 (≈852479) 860000 到 1269600 預留給升級,也就是我們要從 1270000 扇區開始分區。
這裡把 1270000 填上
First sector (852480-7129054, default 854016): _
新分區的中止分區我們這裡可以直接用我們最熟悉的 g 單位開始了,這裡創建建議填 +2g 起
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1270000-7129054, default 7127039): +2g
這裡輸入 w
回車就算是保存成功了
Created a new partition 3 of type 'Linux filesystem' and of size 2 GiB.
Command (m for help): w
The partition table has been altered.
Syncing disks.
root@CatWrt:~#
這樣就創建成功了可以看看分區是否成功 fdisk -l
root@CatWrt:~# fdisk -l
Disk /dev/loop0: 184.88 MiB, 193855488 bytes, 378624 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/sda: 3.4 GiB, 3650093056 bytes, 7129088 sectors
Disk model: VMware Virtual I
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: 0EAC8D5A-F014-DB49-E8EB-FA846A473B00
Device Start End Sectors Size Type
/dev/sda1 512 33279 32768 16M Linux filesystem
/dev/sda2 33280 852479 819200 400M Linux filesystem
/dev/sda3 1270000 5464063 4194064 2G Linux filesystem
/dev/sda128 34 511 478 239K BIOS boot
Partition table entries are not in disk order.
格式化#
到這裡分區工作就完成了,不過還需要格式化為 ext4,輸入 mkfs.ext4 /dev/sda3
並回車
root@CatWrt:~# mkfs.ext4 /dev/sda3
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 524258 4k blocks and 131072 inodes
Filesystem UUID: ff7a2c4a-fd56-42ad-a9ac-45ade1c5819a
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
掛載#
這樣就算完成了,接下來到 LuCi 網頁後台上操作,以此進入 系統 - 掛載點 找到 掛載點 處點擊 添加
UUID 處選擇剛剛創建好的分區我這裡是 ff7a2c4a-fd56-42ad-a9ac-45ade1c5819a (/dev/sda3, 2047 MB)
掛載點選擇 作為根文件系統使用(/)
打上啟用此掛載點的勾 √
剛剛我們點擊了掛載點選擇根文件系統使用,在 根目錄準備 中彈出一串代碼,這可不是出問題了我們需要把這些指令稍做修改讓根文件複製到掛載點裡
這裡我已經修改好了,其實對比一下就知道只是樣例中的 sda1 改成了 sda3,這裡直接把這些命令打開終端給輸上去就可以了
mkdir -p /tmp/introot
mkdir -p /tmp/extroot
mount --bind / /tmp/introot
mount /dev/sda3 /tmp/extroot
tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf -
umount /tmp/introot
umount /tmp/extroot
reboot
最後一個命令是重啟需要手動按一下回車。如果在接近結尾出現了和我不同的如出現了(find 啥的字樣)不同以下字樣請確保你沒有跳過步驟導致錯誤或者固件問題導致。
按照本篇是一定可以擴容成功的。
……
./www/uuandriod.png
./www/uuios.png
./boot/
./home/
./home/ftp/
./run/
./run/docker/
./run/docker/plugins/
./run/mount/
./run/blkid/
./run/blkid/blkid.tab
./run/blkid/blkid.tab.old
root@CatWrt:~# umount /tmp/introot
root@CatWrt:~# umount /tmp/extroot
root@CatWrt:~# reboot
重啟過後這裡最簡單的方式肯定是查看軟件包裡是否還有多餘的空間,打開 系統 - 軟件包 中如圖擴容成功,如果你沒擴容成功還是建議刪掉 sda3 後重置配置 OpenWrt
Docker#
關於 Docker 分區,這裡就說就不太細了可以結合上述內容,也參考之前擴容 overlay 的那期博文,這裡也可以按照 fdisk 進行操作而不是 cfdisk
輸入 fdisk /dev/sda
新建一個分區 n
選擇主要分區還是擴展分區,我們選擇主要輸入 p
(這裡我沒遇到,不是所有人都有)
Select (default p): _
選擇一個分區,這裡選 4
因為擴容 (/dev/sda3) 後中止扇區在 5464063 我們這裡設置開始扇區為 5466000
回車
下一步則是填寫需要多少空間給 Docker 分區用,這裡選擇 +10g
這裡輸入 w
回車就算是保存成功了
輸入 mkfs.ext4 /dev/sda4
格式化 Docker 分區 (/dev/sda4)
前往系統 - 掛載點,添加剛剛創建好的分區 /dev/sda4
掛載點為 作為 Docker 數據分區使用 (/opt)
勾選 啟用掛載點 √
保存並應用,建議重啟一下即可看到 Docker 分區已經被擴容成功了。
此文由 Mix Space 同步更新至 xLog 原始鏈接為 https://www.miaoer.net/posts/network/expansion-overlay