关于如何制作 LVM 卷快照的文档非常丰富,但是我如何制作硬盘分区的快照呢?当我需要以只读方式访问磁盘时,我经常希望能够这样做,但是出于某些原因,在会话结束后写入会被丢弃,因此需要进行写入访问:
- 我想要在磁盘内容上运行的应用程序需要写入它才能访问数据,例如
dovecot
IMAP 服务器更新索引文件和标志(标记为“已读”或“重要”的消息)。 - 我想重播文件系统日志,因为我知道发生了不正常关机,但我也想保持内容不变,以防我需要探索其他数据恢复选项。
有关的:
- https://stackoverflow.com/questions/7582019/lvm-like-snapshot-on-a-normal-block-device(已删除问题;相关性基于 URL 中的问题标题;由于信誉不足,我无法查看问题正文)
答案1
设备映射器的低级接口可以执行以下操作:
NAME=nameofsnapshot
DEVRO=/dev/read-only-backing-device
DEVCOW=/dev/space-for-writing-changes
SECTORS=$(blockdev --getsz $DEVRO)
TABLE=$(mktemp)
echo 0 $SECTORS snapshot $DEVRO $DEVCOW N 16 >> $TABLE
echo "Setting up $NAME with"
head $TABLE
dmsetup create $NAME < $TABLE
rm $TABLE
表格参数解释:
- N = 非持久性,重启后将无法继续存在
- 16 = CoW 的区块大小(以扇区为单位),此处为 8 KiB
查询状态:dmsetup status $NAME
删除快照:dmsetup remove $NAME
参考:
- https://blog.oddbit.com/post/2018-01-25-fun-with-devicemapper-snapshot/
- https://www.kernel.org/doc/Documentation/device-mapper/snapshot.txt
答案复制自https://gist.github.com/jowagner/b36024636140ddf453c12eaf6e590b5d得到许可。