我正在從舊的 Ubuntu 安裝過渡到新的安裝。在過渡時,我希望能夠使用新舊作業系統中的同一個池。
新作業系統將位於不同的磁碟上。我在啟動時選擇作業系統。在任何特定時間只有一個作業系統會使用該池。
這有可能嗎?我是否會面臨資料損壞或遺失整個池的風險?
答案1
只要池在關閉期間導出,並且一次僅從一個系統使用,你們所討論的應該是沒有問題的。
ZFS 真的真的真的不喜歡同時從多個系統使用同一個池,即使在唯讀模式下(-o readonly=on
給定zpool import
),但這似乎不適用於您的情況。
為了保持兩個版本之間的相容性,您需要非常確定不是運行zpool upgrade
或zfs upgrade
特別是從較新的安裝運行。其中任何一個都可能導致在執行舊安裝時遺失對池或檔案系統的存取權限,但在執行支援升級到的 ZFS 磁碟版本的系統時,兩者都不會導致池或檔案系統遺失。
完成升級後,如果需要,您可以根據需要使用zpool upgrade
和/或將池升級到最新的磁碟格式和功能zfs upgrade
。
答案2
假設您正在談論使用池作為資料存儲,而不是在其中運行系統根目錄,那就沒問題了。
我目前安裝了兩個系統,一個位於 EXT4 分割區上,另一個位於具有sudo zfs set mountpoint=/ tank/my/dataset
.
從 EXT4 系統存取此池很痛苦,因為zfs mount -a
無法掛載到根目錄。所以這裡有三種方法。
對於這兩種方式,您都需要導入池而不自動掛載它。
sudo zpool import tank -N
A) 修改屬性
sudo mkdir /mnt/mydataset
sudo zfs set mountpoint=/mnt/mydataset tank/my/dataset
sudo zfs mount tank/my/dataset
# [do stuff in /mnt/mydataset]
# ...
sudo zfs unmount tank/my/dataset
# restore mountpoint so that the other system is able to boot from it
sudo zfs set mountpoint=/ tank/my/dataset
B)避免zfs mount
如果您發現來回設定安裝點很煩人,我發現以下方法也可以工作。不能保證這有多駭客。
sudo mkdir /mnt/mydataset
sudo mount -t zfs -o zfsutil tank/my/dataset /mnt/mydataset
# [do stuff in /mnt/mydataset]
# ...
sudo umount /mnt/mydataset
請注意,當我使用此選項 B) chroot/mnt/mydataset
然後使用其他系統的 zfs 命令時,我遇到了一些問題。我不知道這些問題是否相關。只要你不做類似的事情,應該沒問題。
C) 替代根
您可以指定altroot
池上的屬性。
替代根
備用根目錄。如果設置,此目錄將添加到池中的任何安裝點之前。當檢查安裝點不可信的未知池時,或在典型路徑無效的備用引導環境中時,可以使用此功能。
altroot
不是持久屬性。僅當系統啟動時有效。設定 altroot 預設為 usingcachefile = none
,但可以使用明確設定覆蓋此設定。