擴容實戰(zhàn)指南)
1. 為什么OES Plus刷完Armbian必須做系統(tǒng)擴容網(wǎng)心云OES Plus這臺小機器在二手市場火起來不是沒有道理的。瑞芯微RK3568四核A55、2G/4G內(nèi)存可選、自帶一個SATA位、千兆網(wǎng)口、金屬外殼被動散熱這個配置放在輕量NAS、旁路由、下載機、Docker小主機的場景里性價比確實能打。原廠系統(tǒng)是網(wǎng)心云自己的那套跑量業(yè)務(wù)固件很多人拿到手第一件事就是刷成Armbian把它變成一臺真正自己能掌控的Linux小主機。但刷完Armbian之后幾乎所有人都會撞上同一堵墻系統(tǒng)盤空間不夠用。OES Plus的板載eMMC通常只有8GB到16GB刷完Armbian系統(tǒng)本身加上基礎(chǔ)軟件包可用空間往往只剩幾個GB。你想裝Docker、想跑幾個容器、想放點下載緩存很快就紅了。這時候機器上那個SATA硬盤位就成了救命稻草——但問題在于很多人以為插上SATA硬盤系統(tǒng)就自動用上了實際上Armbian默認并不會把SATA盤掛載到系統(tǒng)關(guān)鍵目錄你插上去的盤只是一個外掛存儲跟系統(tǒng)擴容是兩碼事。這篇內(nèi)容要解決的就是把SATA硬盤真正變成系統(tǒng)的一部分讓根目錄、Docker數(shù)據(jù)目錄、用戶目錄這些吃空間的大戶遷移到SATA盤上實現(xiàn)真正意義上的系統(tǒng)擴容。適合已經(jīng)刷好Armbian、手上有OES Plus和一塊SATA硬盤、但被空間問題卡住的玩家。我會把整個遷移過程拆開講清楚包括分區(qū)方案怎么選、遷移哪些目錄、fstab怎么寫、遷移過程中哪些坑必須避開。先說一個核心認知系統(tǒng)擴容不等于簡單掛載。掛載只是讓硬盤能被訪問擴容是讓系統(tǒng)運行時的讀寫真正落到這塊盤上。這兩者的差別決定了你是多了一塊存儲還是系統(tǒng)真的變大了。2. 遷移前的整體方案設(shè)計與選型考量2.1 三種擴容思路的取舍在動手之前得先想清楚用哪種方式擴容。我實際折騰下來常見的有三條路第一種是整盤掛載到某個目錄比如掛到/mnt/sata然后把Docker的data-root指過去。這種方式最安全系統(tǒng)本身不動只是把吃空間的業(yè)務(wù)數(shù)據(jù)挪過去。缺點是系統(tǒng)根目錄還是那么小apt裝個大點的包照樣爆。第二種是遷移關(guān)鍵目錄把/var/lib/docker、/home、/opt這些大戶通過bind mount或者直接軟鏈接遷到SATA盤。這種方式兼顧了系統(tǒng)盤瘦身和業(yè)務(wù)數(shù)據(jù)外移是絕大多數(shù)人的選擇。第三種是直接把根文件系統(tǒng)整個搬到SATA盤讓系統(tǒng)從SATA啟動。這種方式最徹底但OES Plus的引導(dǎo)鏈對SATA啟動支持并不總是穩(wěn)定而且一旦SATA盤出問題系統(tǒng)直接起不來風(fēng)險太高。除非你有明確的整盤遷移需求否則我不建議新手走這條路。綜合下來第二種方案是性價比最高的風(fēng)險可控、效果明顯、可回退。下面所有操作都圍繞這個思路展開。2.2 分區(qū)方案怎么定一塊SATA盤拿到手第一件事是分區(qū)。這里有個經(jīng)驗不要整塊盤只分一個區(qū)然后全給數(shù)據(jù)。我建議至少分兩個區(qū)一個給Docker和業(yè)務(wù)數(shù)據(jù)一個留給普通文件存儲。原因是Docker的overlay2層在頻繁讀寫時對文件系統(tǒng)壓力比較大單獨分區(qū)能避免它把整個盤的文件系統(tǒng)元數(shù)據(jù)搞亂出問題也好單獨處理。具體分區(qū)大小以一塊500G的盤為例分區(qū)大小用途文件系統(tǒng)/dev/sda1200GDocker數(shù)據(jù)、容器、鏡像ext4/dev/sda2剩余約290G普通文件、下載、備份ext4文件系統(tǒng)選ext4而不是btrfs或者xfs理由很實際Armbian內(nèi)核對這些文件系統(tǒng)的支持都OK但ext4在ARM平臺上的穩(wěn)定性和工具鏈成熟度最好出問題用fsck修起來也最省心。btrfs雖然快照香但在這種小機器上跑內(nèi)存占用和碎片問題反而添亂。提示分區(qū)操作會清空硬盤數(shù)據(jù)動手前務(wù)必確認盤里沒有要保留的東西。新盤無所謂舊盤一定要先備份。2.3 遷移哪些目錄最劃算不是所有目錄都值得遷。我列一下實際遷移收益最高的幾個/var/lib/dockerDocker的鏡像、容器、卷全在這動輒幾十G必遷。/home用戶數(shù)據(jù)、下載、腳本看使用習(xí)慣建議遷。/opt自己裝的一些第三方軟件可選。/var/log日志一般不大但如果你跑了很多服務(wù)日志也能吃掉幾個G可選。/swapfile如果開了swapswap文件也可以放SATA盤減少eMMC寫入。/usr、/etc、/bin這些系統(tǒng)核心目錄絕對不要動遷了必出問題。系統(tǒng)盤保留這些容量壓力其實不大。3. SATA硬盤識別、分區(qū)與格式化實操3.1 確認硬盤被正確識別OES Plus的SATA接口是原生SATA不是USB轉(zhuǎn)的所以識別一般沒問題。插上盤、通電開機后先確認lsblk正常的話你會看到類似這樣的輸出NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT mmcblk0 179:0 0 14.6G 0 disk ├─mmcblk0p1 179:1 0 256M 0 part /boot └─mmcblk0p2 179:2 0 14.3G 0 part / sda 8:0 0 465.8G 0 disksda就是你的SATA盤。如果沒看到先檢查盤有沒有插緊、供電是否正常。OES Plus的SATA供電是板載的一般不用額外接電源但有些大容量機械盤啟動電流大可能會識別不穩(wěn)定這種情況換塊盤或者用帶獨立供電的硬盤盒測試一下。也可以用dmesg | grep -i sata看內(nèi)核日志確認鏈路協(xié)商速率。正常應(yīng)該是SATA link up 6.0 Gbps或者3.0 Gbps。3.2 分區(qū)操作用fdisk或者parted都行我習(xí)慣用parted因為對GPT支持更友好sudo parted /dev/sda進入交互后mklabel gpt mkpart primary ext4 0% 40% mkpart primary ext4 40% 100% quit這里40%對應(yīng)500G盤的200G左右你可以按自己盤的大小調(diào)整比例。分完之后sudo partprobe /dev/sda讓內(nèi)核重新讀取分區(qū)表然后lsblk確認sda1和sda2都出來了。3.3 格式化與掛載點準(zhǔn)備格式化sudo mkfs.ext4 -L docker_data /dev/sda1 sudo mkfs.ext4 -L file_store /dev/sda2-L給分區(qū)打標(biāo)簽后面fstab里可以用LABEL來掛載比用/dev/sda1這種設(shè)備名更穩(wěn)因為設(shè)備名在加盤或者換接口時可能變。創(chuàng)建掛載點sudo mkdir -p /mnt/sata/docker sudo mkdir -p /mnt/sata/files先臨時掛載測試sudo mount /dev/sda1 /mnt/sata/docker sudo mount /dev/sda2 /mnt/sata/files df -h確認容量對得上讀寫正常再往下走。注意格式化前一定用lsblk再確認一遍設(shè)備名別把eMMC給格了。我見過有人手快把mmcblk0當(dāng)sda格了的系統(tǒng)直接沒了。4. 系統(tǒng)目錄遷移的核心操作與細節(jié)4.1 Docker數(shù)據(jù)目錄遷移這是收益最大的一步。先停Dockersudo systemctl stop docker sudo systemctl stop docker.socket確認Docker真的停了ps aux | grep docker沒有殘留進程后開始遷移。用rsync而不是cp因為rsync能保留權(quán)限、屬主、時間戳還能斷點續(xù)傳sudo rsync -avxP /var/lib/docker/ /mnt/sata/docker/-a歸檔模式-x不跨文件系統(tǒng)-P顯示進度并支持續(xù)傳。這一步根據(jù)數(shù)據(jù)量可能要幾分鐘到幾十分鐘耐心等。遷移完成后把原目錄改名備份sudo mv /var/lib/docker /var/lib/docker.bak然后創(chuàng)建新的掛載點并掛載sudo mkdir /var/lib/docker sudo mount /dev/sda1 /var/lib/docker這時候/var/lib/docker里應(yīng)該是空的因為掛載覆蓋了但實際數(shù)據(jù)在SATA盤上。驗證一下ls /var/lib/docker應(yīng)該能看到overlay2、containers、image這些目錄。啟動Dockersudo systemctl start docker sudo systemctl start docker.socket然后docker ps和docker images確認容器和鏡像都在。如果一切正常原來的/var/lib/docker.bak可以保留幾天再刪作為回退保險。4.2 /home目錄遷移/home遷移邏輯類似但要注意如果當(dāng)前有用戶登錄著直接遷會出問題。最好在root下操作或者確保沒有普通用戶會話。sudo rsync -avxP /home/ /mnt/sata/files/home/ sudo mv /home /home.bak sudo mkdir /home sudo mount /dev/sda2 /home這里我把/home掛到了sda2文件存儲分區(qū)因為用戶數(shù)據(jù)更適合放這個區(qū)。你也可以按自己的分區(qū)規(guī)劃調(diào)整。4.3 用fstab固化掛載臨時掛載重啟就沒了必須寫進/etc/fstab。先拿到分區(qū)的UUIDsudo blkid /dev/sda1 sudo blkid /dev/sda2輸出里會有UUIDxxxx-xxxx復(fù)制下來。然后編輯fstabsudo nano /etc/fstab在末尾加上UUID你的sda1_UUID /var/lib/docker ext4 defaults,noatime 0 2 UUID你的sda2_UUID /home ext4 defaults,noatime 0 2noatime是個實用參數(shù)表示不記錄文件訪問時間能減少大量無謂的寫入對SATA盤壽命和性能都有好處。0 2里的2表示開機時fsck檢查順序非根分區(qū)用2。寫完后不要急著重啟先測試sudo mount -a如果沒有報錯說明fstab寫得對。有報錯就趕緊改別帶著錯誤重啟否則可能進不了系統(tǒng)。提示改fstab之前先備份一份sudo cp /etc/fstab /etc/fstab.bak萬一寫錯了還能救。4.4 驗證遷移結(jié)果重啟一次然后逐項檢查df -h看/var/lib/docker和/home是不是掛在SATA分區(qū)上。docker info | grep Docker Root Dir確認Docker根目錄指向正確。systemctl status docker確認Docker服務(wù)正常。如果都OK系統(tǒng)擴容就算完成了。原來的/var/lib/docker.bak和/home.bak確認沒問題后再刪釋放eMMC空間。5. 常見問題排查與避坑經(jīng)驗5.1 遷移后Docker起不來最常見的原因是權(quán)限問題。rsync雖然保留了權(quán)限但如果你中途用了cp或者手動改過目錄可能導(dǎo)致/var/lib/docker屬主不對。Docker要求這個目錄屬主是root:root權(quán)限710sudo chown -R root:root /var/lib/docker sudo chmod 710 /var/lib/docker另一個原因是SELinux或者AppArmor不過Armbian默認一般不開這些遇到概率低。5.2 fstab寫錯導(dǎo)致進不了系統(tǒng)這是最嚇人的情況。如果fstab里UUID寫錯或者掛載點不存在開機可能卡在emergency mode。解決辦法如果能進emergency shell直接nano /etc/fstab改回來。如果進不去用另一臺電腦讀卡器掛載eMMC或者用Armbian的U盤啟動盤進救援模式改。實在不行重刷系統(tǒng)但數(shù)據(jù)在SATA盤上還在損失可控。預(yù)防措施就是前面說的改完fstab先mount -a測試別直接重啟。5.3 SATA盤識別不穩(wěn)定有些機械盤在OES Plus上會出現(xiàn)掉盤、識別慢的問題。排查思路換一根SATA線試試線材質(zhì)量影響很大。看dmesg里有沒有l(wèi)ink reset、ata error之類的報錯。如果是2.5寸盤確認供電夠3.5寸盤一般需要獨立供電OES Plus板載供電可能帶不動。試試在Armbian里關(guān)掉SATA的電源管理hdparm -B 255 /dev/sda防止盤因為省電策略休眠導(dǎo)致掉盤。5.4 遷移后空間沒變化有時候你遷完了df -h看根目錄還是滿的。原因通常是原目錄沒刪干凈或者有進程還占著被刪除的文件。用sudo du -sh /var/lib/docker.bak sudo lsof | grep deleted找到占用已刪除文件的進程重啟對應(yīng)服務(wù)或者重啟系統(tǒng)釋放。5.5 常見問題速查表現(xiàn)象可能原因解決方向Docker啟動失敗目錄權(quán)限不對chown root:root chmod 710開機卡emergencyfstab錯誤救援模式改fstabSATA盤時有時無供電/線材/省電策略換線、關(guān)電源管理根目錄沒釋放舊目錄未刪或進程占用du lsof排查遷移后數(shù)據(jù)丟失rsync未完成就刪源從.bak恢復(fù)6. 幾個提升穩(wěn)定性的進階技巧6.1 給SATA盤加個健康監(jiān)控機械盤最怕突然壞。裝個smartmontools定期看SMARTsudo apt install smartmontools sudo smartctl -a /dev/sda重點看Reallocated_Sector_Ct和Current_Pending_Sector這兩個漲了就說明盤要不行了趕緊備份。6.2 用tmpfs減少eMMC寫入系統(tǒng)盤是eMMC寫入壽命有限??梢园岩恍└哳l寫入的臨時目錄掛到內(nèi)存tmpfs /tmp tmpfs defaults,noatime,size256M 0 0 tmpfs /var/log tmpfs defaults,noatime,size128M 0 0不過/var/log掛tmpfs后重啟日志就沒了看你怎么取舍。我一般只掛/tmp。6.3 定期備份fstab和關(guān)鍵配置系統(tǒng)配置改多了容易忘。我習(xí)慣把/etc/fstab、/etc/docker/daemon.json這些關(guān)鍵文件定期拷到SATA盤上sudo cp /etc/fstab /mnt/sata/files/backup/fstab.$(date %F)出問題的時候直接對照恢復(fù)比回憶改了啥靠譜得多。6.4 關(guān)于飛牛OS和其他系統(tǒng)的兼容性最近不少人問OES Plus刷飛牛OS的事。飛牛OS本質(zhì)也是基于Linux的NAS系統(tǒng)擴容思路和Armbian是相通的都是把數(shù)據(jù)目錄遷到SATA盤。區(qū)別在于飛牛OS有自己的存儲管理界面可能不需要手動改fstab但底層邏輯一樣。如果你是從Armbian轉(zhuǎn)飛牛SATA盤上的數(shù)據(jù)一般能保留但Docker數(shù)據(jù)目錄的路徑可能不同遷移前先確認新系統(tǒng)的目錄結(jié)構(gòu)。至于統(tǒng)信系統(tǒng)能不能給系統(tǒng)盤擴容那是另一套邏輯統(tǒng)信是桌面級系統(tǒng)擴容方式和服務(wù)器場景差別很大不在這次討論范圍內(nèi)。7. 我實際折騰下來的幾點體會OES Plus這臺機器最大的價值就是那個SATA位。eMMC那點空間注定只能裝系統(tǒng)真正干活的數(shù)據(jù)必須外移。我前后折騰過三臺第一臺沒做遷移Docker跑了兩個容器就滿了天天清日志第二臺按上面的方案遷了Docker和home穩(wěn)定跑了小半年沒出過空間問題第三臺試過整盤遷移根文件系統(tǒng)結(jié)果SATA盤一次意外斷電后系統(tǒng)起不來又刷回eMMC了。所以我的建議很明確別貪心遷移關(guān)鍵目錄就夠了根文件系統(tǒng)留在eMMC上。eMMC雖然小但勝在穩(wěn)定系統(tǒng)核心不動出問題也好恢復(fù)。SATA盤負責(zé)數(shù)據(jù)壞了換一塊重新掛載就行系統(tǒng)不受影響。還有一點遷移操作最好在系統(tǒng)剛刷好、還沒裝太多東西的時候做。這時候數(shù)據(jù)量小rsync幾分鐘就完事風(fēng)險也低。等裝了一堆容器再遷數(shù)據(jù)量大、依賴多出問題的概率成倍上升。最后提醒一句任何涉及分區(qū)和fstab的操作動手前先備份、先測試別嫌麻煩。我踩過的坑希望你別再踩一遍。