我想为使用dmsetup的现有块设备创建一个COW设备。该块装置是:
# blockdev --getsz /dev/loop0
3534848我正在尝试使用256米的ramdisk作为备份存储:
# blockdev --getsz /dev/zram1
524288# dmsetup create mysnap --table '0 3534848 snapshot /dev/loop0 /dev/zram1 N 4'但它失败了,因为:
device-mapper: reload ioctl on mysnap failed: Invalid argument
Command failed内核提供了以下附加信息:
[ 8372.346442] device-mapper: table: 253:11: snapshot: Couldn't create exception store
[ 8372.346454] device-mapper: ioctl: error adding target to table我希望有人能解释为什么上面的命令会导致错误。
发布于 2018-01-05 17:03:37
显然,它与chunksize值有关。使用4的chunksize (在我的问题中)会导致错误,但是如果我使用8或16等,它就会运行得很好:
dmsetup create mysnap --table '0 3534848 snapshot /dev/loop0 /dev/zram1 N 8'发布于 2019-12-04 12:28:02
在我的情况下,dmesg给了我一个不同的错误:
[ 5473.934324] device-mapper: table: 253:0: len=1953521668 not aligned to h/w logical block size 4096 of sdb
[ 5473.934327] device-mapper: core: Cannot calculate initial queue limits
[ 5473.934331] device-mapper: ioctl: unable to set up device queue for new table.我能够通过将长度降到4096的下一个倍数来修复这个问题(我可以这样做,因为在磁盘的末尾有足够的未使用扇区)。
这个故事的主要寓意可能是,在许多情况下,内核可能会给出一些有用的消息,而dmsetup并不一定会传递这些消息。
https://serverfault.com/questions/890774
复制相似问题