iStoreOS/OpenWRT 軟路由空間不夠?Overlay擴容實作

多數OpenWRT 編譯設定的空間都很小,沒擴容就不能體會玩插件的樂趣,本篇以iStoreOS為例實作如何擴容,本文採取直接擴容根目錄,同時適用squash和ext4兩種文件系統。

多數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

接下來實作會用到 losetupresize2fs 軟件,如果你用的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.如果我要反其道而行,讓使用空間縮小是否可以用此方法?

答:不行,系統會直接出錯無法載入

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *