前言
想要把OpenWrt進行功能擴展,比如打造成一臺小型NAS服務器,或者網頁服務器等等,還有一道坎需要邁過。
因為路由器的CPU和內存與電腦甚至是手機相比,都要弱瞭不少。CPU計算慢一些還可以將就,畢竟咱也沒有那麼高的需求,但存儲空間不夠,就裝不瞭插件瞭,再強大的擴展能力也隻能望洋興嘆。
空間已經快滿瞭,再滿的話文件系統就會崩潰,全盤變成read-only狀態,那時就隻能重刷固件瞭
需求
在折騰其它擴展之前,我要在OpenWrt上外接一塊500G的USB硬盤,實現以下需求:
- 硬盤分出一個512M的分區掛載為swap交換分區,可以看作是Windows平臺上的虛擬內存,達到擴容內存的作用。
- 再分出一個5G的分區掛載為系統目錄,擴容系統閃存。
- 剩餘空間留作備用,有需求的時候再建立新分區,掛載到系統目錄的子目錄就可以使用。
安裝需要的工具
要用到
cfdisk:傻瓜式分區工具
e2fsprogs:格式化工具
kmod-fs-ext4:ext4文件系統支持
SSH連接到OpenWrt命令行,輸入命令更新軟件包源:
opkg update
然後安裝工具,輸入命令:
opkg install cfdisk e2fsprogs kmod-fs-ext4
如果有提示“...installed in root is up to date”,說明系統中已經安裝瞭這個工具。
對硬盤進行分區
將USB硬盤連接到路由器。首先要對硬盤進行分區,命令行中輸入:
cfdisk
進入cfdisk程序界面,簡單介紹下cfdisk的界面:
雙指放大查看
swap分區我之前已經做好瞭,接下來在未分區的位置上創建一個5G的新分區。
雙指放大查看
雙指放大查看
雙指放大查看
雙指放大查看
雙指放大查看
雙指放大查看
雙指放大查看
分區建立好以後,還需要進行格式化,因為我之前已經格式化過瞭,這裡不再演示。格式化命令如下:
mkswap /dev/sda1 #把/dev/sda1建立為swap交換分區mkfs.ext4 /dev/sda2 #把/dev/sda2格式化為ext4文件系統
分別執行上面兩條命令,註意/dev/sda1是你的設備名稱,就是前面讓你記下來的。
掛載swap交換分區
進入OpenWrt後臺,系統→掛載點→swap→點擊添加。
雙指放大查看
設備菜單處要選擇之前mkswap的那個分區。
雙指放大查看
顯示已掛載,但還要拉到頁面最底部再點一次“保存並應用”。我之前設置不成功就是因為沒點這裡。
驗證swap是否建立成功,隻需進入狀態→概況,出現“虛擬內存”,表示已經成功瞭。
雙指放大查看
掛載系統根目錄
這裡本來要分兩步,首先是掛載overlayfs,再掛載根目錄。
overlayfs的主要作用有兩個。一是壓縮存儲文件,在磁盤空間緊張的情況下盡量少占用空間;二是加瞭一層對系統底層的保護機制,在折騰不當的情況下可以“還原出廠設置”,避免變磚。
但我們掛載硬盤後,空間是夠用的,路由器上還刷過不死Breed,overlay對我來說沒啥用瞭,反而還增加瞭一個壓縮過程,降低文件效率。
所以我決定直接掛載根目錄,放棄overlayfs。
讓我們再回到“掛載點”的設置頁面。
在頁面下方,swap上方,有個掛載點設置,點擊添加。
雙指放大查看
註意,選擇用UUID掛載識別設備會更準確,UUID下拉菜單,每個選項後面都列出瞭設備名稱,可以幫你辨識設備。做完這幾步後先不要點保存並應用。
回到SSH,執行以下命令:
mkdir -p /tmp/introot #在/tmp目錄下創建introot文件夾 mkdir -p /tmp/extroot #在/tmp目錄下創建extroot文件夾 mount --bind / /tmp/introot #將/根目錄掛載到inroot mount /dev/sda1 /tmp/extroot #將硬盤掛載到extroot tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf - #把introot中的系統鏡像打包並在硬盤中解包 umount /tmp/introot #取消掛載 umount /tmp/extroot #取消掛載
命令中涉及到設備名稱的(/dev/sda1)這些地方,要換成自己的設備名。
這一步是把根目錄復制鏡像到準備掛載的設備中,掛載完成以後,OpenWrt就會從USB硬盤啟動系統,並在閃存中保留備份,硬盤掛瞭的話,還可以從自身閃存啟動系統。
執行完命令,再回到後臺頁面,點擊保存並應用。
重啟路由器。
雙指放大查看
可以看到已經擴容成功瞭。
結語
目前系統分區添加插件也不用擔心空間不夠瞭,添加瞭swap以後,雖然效率不高,但還是顯著提高瞭路由器的穩定性。下一步計劃掛載硬盤的剩餘空間,作為內網共享使用並安裝離線下載,初步實現NAS功能。
[比心]有用的話點個贊唄[比心]