有效地将目录树转变为 zfs 上的新文件系统

有效地将目录树转变为 zfs 上的新文件系统

我“继承”了一个系统的管理,其“/opt”(以及其他一些大型目录树)存储在根文件系统中。

我现在的愿望是在 rpool 中为 /opt 创建一个新的文件系统(足够简单),但我希望有一些 zfs 魔法,将 /-filesystem 的 /opt 目录树有效地移动到新文件系统 - 这意味着:无需复制然后删除原件。

我对 zfs 的天真的理解是它非常棒,并且已经可以在快照之间共享存储的信息,并且我希望它也可以重新排列目录以显示在不同的文件系统中,而无需移动任何批量数据。

有直接的办法吗?如果实在不行,我还可以做“cp & rm”。

PS:如果有人想知道“为什么”?将其从Solaris 上的引导环境中取出。

答案1

与此同时,我可以回答我自己的问题:

假设 /opt(“非常大”)需要移离根文件系统。

重要的!!!关闭所有服务可能在 /opt 上打开文件,例如甲骨文数据库服务器- 如果恰好安装在 /opt 下)

本质上,我所做的是:

  • zfs snapshot -r rpool@opt-out (创建了一个快照 - 一个用于当前启动环境的快照就足够了,但无论如何,快照可能不会有什么坏处)
  • zfs clone rpool/ROOT/11.4.23.69.3@opt-out rpool/opt(从当前引导环境的快照中克隆了一个新的文件系统,该文件系统最初安装到 /rpool/opt - 11.4.23.69.3 是我当前的引导环境,对于后来的读者来说可能是不同的)
  • mv /opt /OPT; mkdir /opt(移走并在根文件系统上重新创建挂载点 /opt - /OPT 可以稍后删除)
  • cd /rpool/opt; mkdir rest; mv * rest; mv rest/opt/* . (“rest”稍后将被删除。请确保还检查“.dot-entries”并在每一步手动移动它们)
  • zfs set mountpoint=/opt rpool/opt (在 /opt 上重新安装新文件系统)

完毕。

最后重新启动之前关闭的那些服务。

相关内容