多數OpenWRT 編譯設定的空間都很小,沒擴容就不能體會玩插件的樂趣,因此,iStoreOS是我很欣賞的 OpenWRT分支,overlay預設就是有2GB,這樣已相當實用,但NanoPi R5S安裝完iStoreOS後閒置空間還很多,如果不擴容會導致心靈上的空虛。
本文採取直接擴容根目錄,同時適用squash和ext4兩種文件系統。
*強烈建議看 eSir的影片<OpenWrt擴容Overlay,為妳的固件增加可用空間,從此安裝程序隨心所欲>當成理論知識,韓風的<OpenWrt的空间扩容问题,可以这么直接解决!>當時實務操作的範例。
確認固件種類
OpenWRT固件可以分成squash和ext4,固件在寫入儲存媒體後所管理系統文件方式有所不同:
- squash:有個「只讀」的檔案系統,即下圖中/rom,在你條設定和裝插件把系統搞亂之後,有個【重置】的功能,很類似硬路由。
- ext4:跟一般PC安裝的檔案系統一樣,分區均可寫入,只能依賴資料拷貝來備份設定。
▼圖 squash固件與ext4固件不同,可用多了/rom這個只讀分區,把這當成基礎概念

*本文介紹【直接擴容根目錄法】,可同時適用squash和ext4兩種文件系統。
*下載時可以透過檔名來挑選固件
▼圖 從固件檔名做辨識

*雖然本篇使用的iStoreOS是squash,但玩軟路由仍然建議能夠區分兩者的不同。
ext4固件和Raspberry Pi OS一樣,但squash固件是軟路由OS的特色,包含overlay檔案系統值得特別介紹。
參考下圖,iStoreOS固件再寫入SD卡後,形成64M的/boot裝系統核心,256M的/rom裝載使用者與應用端相關的內容,/boot和/rom皆位於Lower Layer。
overlay檔案系統有「覆蓋」的含意,由Lower Layer和Upper Layer雙層結構所組成,Lower Layer 只能「讀」,Upper Layer則包含了「讀和寫」;加了overlay之後,/rom的資料會被拷貝到Upper Layer來給使用者進行讀寫,而/rom因為只讀所以檔案無法變更,由此一來便形成保護,在歷經使用者一頓胡搞之後提供還原功能。
▼圖 overlay檔案系統圖示

▼圖 用lsblk
指令查詢分區

擴容的方法
擴容的方法大概也分為兩類:
一、直接調整分區增加容量(本文使用此方法)。
二、在閒置空間新增一個分區,修改根目錄的掛載點後,將原來的根目錄資料拷貝過去。
———–理論到這裡講完———–
iStoreOS擴容實作開始
Step 0
接下來實作會用到 losetup 和 resize2fs 軟件,如果你用的iStoreOS應該已經內建,若是其他OpenWRT建議先參考下面指令檢查,如果有缺少的套件請先安裝完成。
opkg list | grep -E "losetup|resize2fs" #查詢軟件庫裡是否有losetup、resize2fs套件 opkg update && opkg install losetup #安裝losetup套件 opkg update && opkg install resize2fs #安裝resize2fs套件
Step 1
我們先查看磁碟及分區,因為我上面已經安裝了一個2TB的SSD,
fdisk -l #查看磁碟及分區
▼查看磁碟及分區

打開 fdisk
fdisk /dev/mmcblk2 #選擇磁碟
▼先確定要擴容的磁碟

Step 2
輸入:p
請拿筆把最後一個磁區的Start值記下來,等等會用到
▼請注意紅色框起來的部分

Step 3
可參考下圖,對照操作結果
輸入:d
#意義為刪除該分區,但不是真的要刪除,而是要修改分區大小
輸入:3
#選定第3分區
輸入:n
#意義為創建新分區,但不是真的創建,目的還是要修改分區大小
輸入;p
輸入:3
#創建第3分區
▼參考下圖操作

*【Partition 3 has been deleted】看到心涼了一下,深怕資料不見~
Step 4
接續上面的設定,還記得Step2那張圖上First sector的紅色框框嗎?我這裡做示範增加3.5 GiB的容量。
*Last sector 輸入有兩種方法。
方法一 透過計算來得到這個值,計算範例:
851968+(3.5×10243÷512)-1=8191999
- 一個磁區(sectors) = 512 byte
- 1KiB=1024 byte
- 1MiB=1024 KiB
- 1GiB=1024 MiB
方法二 直接輸入需要擴容的容量,單位是GiB
First sector 輸入:851968
#輸入起始磁區
Last sector 輸入:8191999 或+3.5g
#將分區變成3.5 GiB
▼參考下圖操作

Step 5
接許
輸入:n
#不要移除Signature
輸入:w
#寫入並離開
▼千萬不要移除Signature

Step 6
輸入:
fdisk -l
▼分區容量已增加

查看分區容量已經增加了,但要注意,系統無法識別這個空間,還需要繼續操作
Step 7
輸入:
losetup
#查看是否有掛載循環設備
通常是沒有掛載循環設備,如果有的話,就不要用那個設備路徑;例如有loop0,就改用loop1,loop 0~N 都可以用。
輸入:
losetup /dev/loop0 /dev/mmcblk2p3 #設置循環設備
▼ 掛載循環設備

Step 8
輸入:
resize2fs -f /dev/loop0 #loop0就是剛掛載上去的循環設備
▼執行 resize2fs 的結果

然後~
reboot
#重開機
到這裡已經完工了!!
查看擴容結果
請去 系統 -> 軟件包 查看擴容結果
▼查看擴容結果

後記
1.【恢復出廠設置】功能是否還有效?
答:有效,而且恢復出廠設置後是擴容後的容量
▼恢復出廠設置

2.擴容之後,如果發現容量還是不夠用,可不可以再次用此方法擴容?
答:可以,只要磁碟還有剩餘空間
3.如果我要反其道而行,讓使用空間縮小是否可以用此方法?
答:不行,系統會直接出錯無法載入