核心邏輯
通過物理克?。?code>dd)將舊分區(qū)的每一個字節(jié)搬運到新分區(qū),通過修改 UUID 解決識別沖突,最后通過修改引導(dǎo)參數(shù)(PARTUUID)強制內(nèi)核切換啟動設(shè)備。
第一階段:準備新硬盤分區(qū)
在操作前,需確保 NVMe 硬盤上的重要數(shù)據(jù)已備份。
-
進入分區(qū)工具:
sudo fdisk /dev/nvme0n1 -
刪除舊分區(qū)(如有): 輸入
d。 -
新建分區(qū):
- 輸入
n(新建) ->p(主分區(qū)) ->1(分區(qū)號)。 - First sector: 直接回車(默認 2048)。
-
Last sector: 輸入
+64G(或其他你想要的大?。?/li>
- 輸入
-
清除特征碼: 如果提示
Contains a zfs_member signature,輸入y確認清除。 -
保存: 輸入
w寫入分區(qū)表并退出。 -
強制內(nèi)核刷新分區(qū):
sudo partprobe /dev/nvme0n1
第二階段:全量克隆系統(tǒng) (Rootfs)
使用 dd 命令進行位對位克隆。
# if 為源(SD/eMMC), of 為目標(biāo)(NVMe)
sudo dd if=/dev/mmcblk0p2 of=/dev/nvme0n1p1 bs=1M conv=noerror,sync status=progress
注意:克隆完成后,兩個分區(qū)的 UUID 將完全一致,此時切勿重啟。
第三階段:解決 UUID 沖突與文件系統(tǒng)優(yōu)化
為了讓系統(tǒng)區(qū)分開新舊兩個“雙胞胎”分區(qū),必須修改新分區(qū)的身份 ID。
-
生成并修改新 UUID:
NEW_UUID=$(uuidgen) sudo btrfstune -U $NEW_UUID /dev/nvme0n1p1 -
修正新系統(tǒng)內(nèi)的掛載表 (fstab):
將sudo mount /dev/nvme0n1p1 /mnt sudo nano /mnt/etc/fstab/掛載點那一行的UUID=修改為剛才生成的新 UUID。 -
擴容文件系統(tǒng):
由于dd只是克隆了原分區(qū)大小,需手動填滿 64G 空間:sudo btrfs filesystem resize max /mnt sudo umount /mnt
第四階段:注入 NVMe 驅(qū)動(可忽略,一般都有驅(qū)動)
這是最容易被忽略的一步。如果內(nèi)核啟動鏡像(initramfs)里沒有 NVMe 驅(qū)動,系統(tǒng)將無法識別硬盤。
-
添加驅(qū)動模塊:
在末尾添加:sudo nano /etc/initramfs-tools/modulesnvme pcie-rockchip -
更新啟動鏡像:
sudo update-initramfs -u
第五階段:修改引導(dǎo)參數(shù) (最關(guān)鍵)
由于 FN-OS 的引導(dǎo)程序比較“固執(zhí)”,我們需要通過 PARTUUID 強制覆蓋啟動路徑。
-
查看 NVMe 的 PARTUUID:
blkid /dev/nvme0n1p1 # 記下 PARTUUID="f972c3cb-..." -
修改引導(dǎo)配置文件:
sudo nano /boot/fnEnv.txt -
設(shè)置強制啟動參數(shù):
在extraargs中加入rootwait和root=PARTUUID=...,確保它位于參數(shù)鏈末尾以獲得最高優(yōu)先級。extraargs=cma=256M rootwait root=PARTUUID=你的新PARTUUID rootdev=UUID=你的新UUID
第六階段:重啟與驗證
執(zhí)行 sudo reboot。
驗證命令:
lsblk
如果根目錄 / 對應(yīng)的設(shè)備是 nvme0n1p1,遷移大功告成!
進階小貼士
-
舊分區(qū)處理: 建議穩(wěn)定運行幾天后再格式化舊的
mmcblk0p2,將其作為數(shù)據(jù)盤或備用系統(tǒng)。 - 性能提升: NVMe 的隨機讀寫性能(IOPS)遠超 SD 卡,你會發(fā)現(xiàn)系統(tǒng)更新、數(shù)據(jù)庫運行和網(wǎng)頁打開速度有質(zhì)的飛躍。