dmsetup 暂停、重新加载、恢复和重新暂停后数据损坏

dmsetup 暂停、重新加载、恢复和重新暂停后数据损坏

考虑以下一系列事件,这些事件针对的是设备映射器加密目标,test它拥有一个 ext4 文件系统。这三个命令将加密目标的表替换为新的(虚拟)表。这会将加密密钥更改为无效密钥。设备被暂停以防止访问:

# blockdev --flushbufs /dev/mapper/test
# dmsetup suspend test
# dmsetup reload -r --table "$newtable" test

不幸的是,为了真正提交表更改(将表从非活动槽移到活动槽并清除非活动表),必须恢复然后重新挂起设备,因此在短时间内,设备将处于损坏状态(活动表具有错误的加密密钥)但尚未挂起(原因-r上面使用的原因是为了防止灾难性的写道):

# dmsetup resume test
# dmsetup suspend --noflush test
# echo 3 > /proc/sys/vm/drop_caches

删除缓存,以便上次恢复和暂停之间读取和缓存的任何无效数据不会滞留。稍后,将恢复旧表。这使设备可写:

# dmsetup reload --table "$oldtable" test
# dmsetup resume test

这两个表之间的唯一区别是关键:

# echo $oldtable
0 65536 crypt aes-cbc-essiv:sha256 70f91902a1c1fcf7baaf4da03e852960 0 7:1 0
# echo $newtable
0 65536 crypt aes-cbc-essiv:sha256 00000000000000000000000000000000 0 7:1 0

test这个序列在任何情况下都会导致数据损坏吗?

相关内容