如何在btrfs中创建只读快照?

如何在btrfs中创建只读快照?

据我了解,btrfs subvolume snapshot默认情况下创建的快照是可写的,并且在 btrfs 卷挂载点下的某个路径上可见。

如何设置系统以保证系统正常运行期间不向快照写入任何内容?但又不会使其对用户不可见(即,任何用户在其权限范围内都应该可以读取它)。

(目前,我刚刚知道了chmod og-rwx /.snapshots快照映射到的位置。但这并不能满足我的第二个愿望,而且保证也不够强大:具有 root 权限的进程可能会破坏那里的某些内容。)

是否需要采取一些技巧才能mount实现这一目标?

答案1

  • 创建一个只读子卷(作为 root):
    btrfs subvolume snapshot -r /path/to/mounted/subvolume /path/to/snapshot
    
  • 将现有的子卷/快照更改为只读:
    btrfs property set /path/to/snapshot ro true
    
  • 检查现有子卷的当前状态:
    btrfs property get /path/to/snapshot ro
    

(请注意,这不适用于旧版本的 Ubuntu。)

答案2

你用的是Ubuntu吗?

Ubuntu 附带旧版本的 btrfs-tools(又名“btrfs-progs”),因此用户空间工具不支持只读快照。

查看此错误(及其父错误):

https://bugs.launchpad.net/ubuntu/+source/btrfs-tools/+bug/924621

答案3

根据Btrfs 维基,自 Linux 2.6.38 起,只读快照可用。因此,请确保您有最新的内核。除此之外,您应该能够使用ro挂载选项 ( mount -o [other-options],ro ...) 来完成此操作。

相关内容