如何在 FreeBSD 中掛載 ZFS 卷以進行複製
我正在嘗試將 FreeBSD 安裝複製到新硬碟驅動器上,需要掛載它,然後找到掛載點才能繼續進行複製過程。
我要複製到的內部驅動器目前具有 Windows 10 安裝和我想要複製的不太優化的 FreeBSD 安裝。
我很高興為 FreeBSD 使用目前的 UFS 分區方案。
我將從一個實時的 FreeBSD USB 記憶棒啟動,以便執行適當的命令。我遇到的問題是我要從中複製的磁碟是使用 ZFS 分區的,我無法弄清楚如何掛載它以及如何找到掛載點。該磁碟使用 USB-SATA 適配器連接到我的電腦。
我將假設您的“源”安裝完全在 ZFS 上,並且直接從 ZFS 池引導。
由於您要在兩種不同的文件系統類型之間進行複製,因此您可能需要使用類似的工具
rsync
來完成此操作。您將在一個掛載點掛載源層次結構(您的 ZFS 池),並在不同的掛載點掛載目標層次結構(一個或多個 UFS 文件系統)。最後,您將使用rsync
將源層次結構複製到目標。從閱讀
zpool
手冊頁開始。zpool
有許多子命令,每個子命令都有自己的手冊頁。對於初學者,請注意以下zpool import
命令:zpool-import(8) Make disks containing ZFS storage pools available for use on the system.
並參考
man zpool-import
:zpool import [-D] [-d dir|device]… Lists pools available to import.
請注意,參數是可選的。您可能不需要它們。明智的做法是從 USB 記憶棒啟動來完成這項工作。從 USB 記憶棒啟動後,
zpool import
將顯示可供您使用的池。首先驗證您的源 ZFS 池,我將tank
在本範例中引用它。# zpool import pool: tank id: 11588110742206048524 state: ONLINE action: The pool can be imported using its name or numeric identifier. config: tank ONLINE gpt/zfs-57SCK7S0FVLC ONLINE gpt/zfs-57SCK7S1FVLC ONLINE
掛載“外部”ZFS 池時要小心——與掛載它們的系統的操作沒有直接關係的池。很容易無意中將外部 ZFS 池或文件系統掛載到正在執行的系統文件系統的頂部,如果不重新啟動,該操作可能不可逆。
一旦您確定您的源 ZFS 池可供您使用,您就可以掛載源 (ZFS) 和目標 (UFS) 文件系統並開始了。
掛載源 ZFS 文件系統
再次來自
man zpool-import
:-R root Sets the cachefile property to none and the altroot property to root.
zpool import -R /mnt tank
允許您將池的整個 ZFS 層次結構tank
掛載在不同的掛載點下,在本例中為/mnt
. 將源池也保持為只讀可能是個好主意。命令# zpool import -o readonly=on -R /mnt tank # zfs list -r tank # zfs mount
將以只讀模式掛載您的源池,
/mnt
然後列出存在的各個 ZFS 文件系統以及已掛載的文件系統。您可能會看到以下消息:cannot import 'tank': pool was previously in use from another system. Last accessed by <unknown> (hostid=0) at Tue Apr 19 03:29:13 2022 The pool can be imported, use 'zpool import -f' to import the pool.
如果發生這種情況,那麼正如它所說,只需將
-f
選項添加到您的zpool import
命令中:# zpool import -f -o readonly=on -R /mnt tank
這就是你的原始碼樹。
掛載目標文件系統
我將
/mnt.new
用作您的目標文件系統的掛載點,您說它可能是 UFS。請注意,如果您將使用非 ZFS 文件系統作為/mnt.new
結構,則需要在您將使用的每個磁碟分區( 、 等)上執行“newfs/dev/ada0p1
”/dev/ada0p2
。與往常一樣,請確保您知道哪個設備是哪個設備,並且確保它們是正確的。使用 使文件系統保持原始狀態後
newfs
,掛載將成為您的/
文件系統的分區,/mnt.new
並創建任何目錄,作為您的 UFS 層次結構的下一級掛載點。然後掛載下一級磁碟分區,每個分區都掛載在正確的位置。例如,如果您的新 UFS 文件系統根目錄是 /dev/ada0p1,/usr
在 /dev/ada0p2上,/usr/home
在 /dev/ada0p3 上,那麼您需要:mkdir /mnt.new mount /dev/ada0p1 /mnt.new mkdir /mnt.new/usr mount /dev/ada0p2 /mnt.new/usr mkdir /mnt.new/usr/home mount /dev/ada0p3 /mnt.new/usr/home
請注意,在完成對
/mnt.new
掛載點的複製後,您同樣需要編輯/mnt.new/etc/fstab
並確保它正確掛載包含文件系統的磁碟分區。這是基本的 UFS 文件系統管理,所以我不會更詳細地介紹。
將您的源層次結構 Rsync 到目標
一旦您將源 ZFS 樹安裝在
/mnt
並安裝在目標 UFS 樹下,/mnt.new
您就可以簡單地將文件從一個複製到另一個。rsync
是一個很好的工具。# rsync -HAXav /mnt/ /mnt.new/
尾部的斜線
/mnt/
很重要,包含在/mnt.new/
“團結一致”中。給定的命令將在複製時列出每個文件名。如果您不想看到該詳細資訊,請v
從命令中省略 。複製文件後,您仍然需要進行一些手動更改。如前所述,您需要檢查
/mnt.new/etc/fstab
並進行任何必要的更改,以確保您的 UFS 文件系統在新系統啟動時正確掛載。您還應該查看/mnt.new/etc/rc.conf
以註釋掉類似的行zfs_enable='yes'
以及類似的條目/mnt.new/boot/loader.conf
。解除安裝源和目標層次結構並重新啟動
當您認為新系統已準備好嘗試時,請導出您的源 ZFS 池:
zpool export tank
並從以下位置解除安裝您的 UFS 設備
/mnt.new
:umount /mnt.new/usr/home umount /mnt.new/usr umount /mnt.new
現在您可以交叉手指並重新啟動到 UFS 驅動器。將 USB 記憶棒放在手邊,以便在您的 UFS 磁碟在第一次嘗試時無法啟動時進行故障排除。