假设我有一个 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 所花的时间比我想象的要长。
终究是一个可以使用的选项。