我需要访问我的“根”ZFS 数据集来删除“/var”下的文件。但“/var”被另一个 ZFS 数据集覆盖。由于这些是系统数据集,我无法在机器运行时“卸载”它们。而且我想避免在“故障安全”模式下重新启动系统,因为这是一台生产机器。
理论上,ZFS 会拒绝在底层“/var”上挂载“/var”数据集,因为它不为空。但它可以工作,可能是因为它们是在启动过程早期挂载的系统数据集。
但是由于底层“/var”不为空,导致我无法创建 ABE(备用启动环境),因此修补是有风险的,而且我无法使用 Live Upgrade 升级我的系统。
该机器是远程的。我有一个 IP KVM,但如果可以的话,我宁愿避免以“故障安全”模式启动该机器。
我知道“/var/”中有一个文件,因为我可以快照“root”数据集并检查它。但快照是只读的,所以我无法删除该文件。
我尝试了“mkdir /tmp/zzz; mount -F lofs / /tmp/zzz”,但当我转到“/tmp/zzz/var”时,我看到的是“/var”数据集,而不是底层的“root”数据集。也就是说,LOFS 跨越了挂载点。我通常会喜欢它,但这次不喜欢!
除了在“故障安全”模式下重新启动机器并通过 IP KVM 进行操作之外,还有什么建议吗?
答案1
一个老派的技巧是通过 NFS 导出下面的文件系统(我看到您尝试使用 lofs 做了类似的事情,对结果有点惊讶,因此我不能保证在文件系统是 ZFS 的情况下它会起作用。)
答案2
我刚刚以单用户模式重启了机器。似乎没有其他办法了。
谢谢。