ZFS:回滚快照但保留较新的快照

Vin*_*nce 6 zfs snapshot rollback

我有以下 ZFS 快照:

data/server/dev1@snap1
data/server/dev1@snap2
data/server/dev1@snap3
Run Code Online (Sandbox Code Playgroud)

如果我想回滚到snap1,我会执行以下操作:

zfs rollback data/server/dev1@snap1
Run Code Online (Sandbox Code Playgroud)

但 ZFS 返回:

more recent snapshots or bookmarks exist
use '-r' to force deletion..
Run Code Online (Sandbox Code Playgroud)

我知道有是简单地将文件复制出来的可能性/data/server/dev1/.zfs/snapshot/snap1/data/server/dev1但那要花费更长的时间比zfs rollback

有没有办法进行回滚保留较新的快照snap2& snap3

21/11/2016 更新

看起来有一种方法可以做到这一点。我阅读了有关与zfs promote和一起工作的信息,zfs clone但我无法弄清楚它究竟是如何工作的。

air*_*uff 8

我认为你的评论很接近让你得到你想要的。但是,您可以在克隆之前重命名文件系统,然后克隆到原始文件系统的名称。例如:

zfs rename data/server/dev1 data/server/dev2 
zfs clone data/server/dev2@snap1 data/server/dev1
Run Code Online (Sandbox Code Playgroud)

不用担心升级,直到需要删除data/server/dev2@snap1

zfs 手册页有一个更完整的示例,可能会也可能不会更具体地满足您的需求:

以下命令说明了如何测试对文件系统的更改,然后使用克隆、克隆升级和重命名将原始文件系统替换为更改后的文件系统:

     # zfs create pool/project/production
       populate /pool/project/production with data
     # zfs snapshot pool/project/production@today
     # zfs clone pool/project/production@today pool/project/beta
     make changes to /pool/project/beta and test them
     # zfs promote pool/project/beta
     # zfs rename pool/project/production pool/project/legacy
     # zfs rename pool/project/beta pool/project/production
     once the legacy version is no longer needed, it can be destroyed
     # zfs destroy pool/project/legacy
Run Code Online (Sandbox Code Playgroud)