unraid利用缓存盘的btrfs快照当作虚拟机快照使用

因为unraid的阵列默认是xfs格式(可选btrfs格式),unraid的缓存盘默认是btrfs格式。因为xfs格式不支持快照,所以unraid虚拟机没有快照功能。

经过大佬指点可以使用btrfs的快照功能来替代缺失的虚拟机快照功能

查询你的盘是否是btrfs格式,只有btrfs才能进行以下操作

df -hT

在创建虚拟机之前,就需要SSH创建btrfs子卷

注意 要使用/mnt/cache/,才是btrfs文件系统,而 不是/mnt/user/(如果你的阵列不是btrfs的话)

btrfs subvolume create /mnt/cache/domains/Win10_LTSC2022

如果已有虚拟机了,就给目录改个临时名,创建原名的子卷后,再移动临时名目录的全部文件回到原名子卷,删掉临时名的空目录

正常创建虚拟机,虚拟磁盘位置选手动,把路径填成**/mnt/cache/,而不是/mnt/user/**(如果你的阵列不是btrfs的话),
例如 /mnt/cache/domains/Win10_LTSC2022/vdisk1.img

拍摄快照 以日期时间命名,-r是只读,防止被修改、被误改名、误删除

btrfs subvolume snapshot -r /mnt/cache/domains/Win10_LTSC2022 /mnt/cache/domains/Win10_LTSC2022.$(date +%Y-%m-%d_%H-%M-%S).snapshots

正常开启虚拟机,进行你的一些操作,让虚拟机文件发生变化

秒回滚:(瞬间完成的,不需要复制粘贴很长时间)
**解释:**先前拍的快照称作【时刻A】,拍快照后进行了开机修改,当前状态为【时刻B】。现在是【时刻B】想要回滚
**操作:**将当前目录改名留存【时刻B】,然后快照回滚到快照状态【时刻A】,回滚后未修改则当前状态是【时刻A】,再次开机后变成了【时刻C】。

如果【时刻C】不满意,还可以再次回滚到【时刻B】,再次mv改名即可
如果【时刻C】满意,确定不再需要【时刻B】,就rm删除即可

#秒回滚
mv /mnt/cache/domains/Win10_LTSC2022 /mnt/cache/domains/Win10_LTSC2022.$(date +%Y-%m-%d_%H-%M-%S)

btrfs subvolume snapshot /mnt/cache/domains/Win10_LTSC2022.2023-06-12_02-14-19.snapshots /mnt/cache/domains/Win10_LTSC2022

附其他命令:

#查询只读属性
btrfs property get /mnt/cache/domains/Win10_LTSC2022.2023-06-12_02-14-19.snapshots

#设置只读属性为否
btrfs property set -ts /mnt/cache/domains/Win10_LTSC2022.2023-06-12_02-14-19.snapshots ro false

#列出目录下的子卷、快照
btrfs subvolume list /mnt/cache/domains

#删除子卷、快照,可以删除只读的快照
btrfs subvolume delete /mnt/cache/domains/Win10_LTSC2022.2023-06-12_02-14-19.snapshots/

我自己写的综合脚本,来方便执行拍快照、回滚、删除快照的操作
执行命令行有提示,也可以自己看源码

wget https://qiniufile.209902.xyz/Linux/unraid/BtrfsSnapshot/BtrfsSnapshot.sh

chmod +x BtrfsSnapshot.sh

./BtrfsSnapshot.sh