假設我有一個 rpool,其中包含 etc/ 作為常規目錄,現在我想建立一個單獨的 zfs rpool/etc,顯然繼承了原始 /etc 中的所有資料。
最正確、最安全的方法是什麼?
答案1
不支援轉/etc
成自己的zfs檔案系統。
原因是/etc
在引導的早期階段(Open)Solaris 開始掛載 zfs 檔案系統之前需要它,因此如果更改它,它將是空的。
我的猜測是您想要拍攝 的快照/etc
,但您可以只拍攝根檔案系統的快照:
zfs snapshot rpool/ROOT/opensolaris
您可能必須替換opensolaris
為當前引導環境的名稱(運行beadm list
以找出哪個)
答案2
沒有內建或自動化的方法來建立新的資料集並將現有資料遷移到其中。要完成它,您需要建立資料集並手動(例如 rsync)將資料新增至其中。
假設您有一個名為 的資料集tank\set
,其中有一個名為 的目錄folder
。您希望將該資料夾「提升」為名為 的子資料集tank\set\folder
:
mv /mnt/tank/set/folder /mnt/tank/set/folder-backup # move this out of the way so the new dataset doesn't mount on top of it
zfs create tank/set/folder
rsync -aAX /mnt/tank/set/folder-backup/ /mnt/tank/set/folder # bring over all the old data including acls and attributes
然後查看數據看起來不錯;為以防萬一,請拍攝父資料集的快照,然後刪除該folder-backup
目錄。
答案3
一個很病態但可能有用的想法:
如果我將現有資料集克隆tank\set
為tank\folder
它將完全tank\set
包含我想要的東西:tank\folder\folder
以及大量其他東西。
然後,我可以刪除任何我不想要的東西tank\folder
,畢竟mv tank\folder\folder\* tank\folder\
,這將僅在檔案系統中移動,並且應該在幾秒鐘內完成。
我會在一兩天內測試它
恐怕 rm -rf 花的時間比我想像的要長。
畢竟是可以使用的選項。