我正在尝试创建一个dmsetup
快照设备能够回滚 fsck 所做的更改。
我想我打电话dmsetup
错了。这是一个例子:
$ truncate -s 4096 real snapshot
$ losetup --show -f real
/dev/loop0
$ losetup --show -f snapshot
/dev/loop1
$ sudo dmsetup -v create snapdev --table '0 8 snapshot /dev/loop0 /dev/loop1 P 1'
device-mapper: reload ioctl on snapdev failed: Input/output error
Command failed
错误消息中后面的两个空格snapdev
有点奇怪。
但是,如果我P
将持久性更改N
为非持久性,则一切正常:
$ sudo dmsetup -v create snapdev --table '0 8 snapshot /dev/loop0 /dev/loop1 N 1'
Name: snapdev
State: ACTIVE
Read Ahead: 256
Tables present: LIVE
Open count: 0
Event number: 0
Major, minor: 254, 4
Number of targets: 1
我究竟做错了什么?
答案1
要用于持久快照,设备的前几个块需要是\0
.这个例子
将前 32 个块清零。
底层设备的第一个块映射到持久快照设备的块 16。 (数据从字节偏移 8192 或 0x2000 开始)。
快照设备需要是(未指定的)最小尺寸。 4MB就足够了。
资源: