在 Ubuntu 14.04 中我尝试:
sudo dmsetup create test --table '0 123 flakey 1 0 /dev/loop0'
(或delay
目标),我收到一个错误:
设备映射器:测试失败时重新加载 ioctl:参数无效
命令失败
但是当我使用error
目标时,它就成功了。
如何使用创建一个“不稳定”的设备dmsetup
?
答案1
简短回答:
语法错误(可能这是旧版本),正确格式:
'<logical_start_sector> <num_sectors> flakey <dev path> <offset> <up interval> <down interval>'
dev_path
优先无法访问已挂载的底层文件系统。请避免
mount
:sudo losetup <loop_device> <image_file>
细节:
我使用循环文件系统时遇到了同样的错误
~$ sudo mount -o loop image.iso ~/Desktop/rmme0 mount: /dev/loop4 is write-protected, mounting read-only ~$ sudo dmsetup create test --table '0 123 flakey 1 0 /dev/loop4' device-mapper: reload ioctl on test failed: Invalid argument Command failed
这是错误的语法,可以找到参考:
linux-doc(包):/usr/share/doc/linux-doc/device-mapper/dm-flakey.txt
Table parameters ---------------- <dev path> <offset> <up interval> <down interval> \ [<num_features> [<feature arguments>]] Mandatory parameters: <dev path>: Full pathname to the underlying block-device, or a "major:minor" device-number. <offset>: Starting sector within the device. <up interval>: Number of seconds device is available. <down interval>: Number of seconds device returns errors.
再次强调:
~$ sudo dmsetup -v create test --table '0 123 flakey /dev/loop4 0 10 2' device-mapper: reload ioctl on test failed: Device or resource busy Command failed
找到了这个主题:设备映射器:删除 ioctl 失败:设备或资源繁忙命令失败. 当底层文件系统已经挂载时,就会出现该消息。
因此,检查硬盘分区
~$ sudo dmsetup create test --table '0 123 flakey /dev/sda1 0 10 2' ~$ file /dev/mapper/test /dev/mapper/test: symbolic link to ../dm-0
您可以使用详细标志进行详细验证:
sudo dmsetup -vvv create test --table '0 123 flakey /dev/sda1 0 10 2'
循环设备不应被挂载,因此请避免使用
mount
来创建它。另一种方法是使用losetup
:sudo losetup /dev/loop4 image.iso sudo dmsetup create test --table '0 123 flakey /dev/loop4 0 10 2'
在 Xubuntu 16.04(真机)上测试
答案2
我在之前的工作中尝试过这样做,当时我正在测试一个存储设备。不稳定的问题在于它通常在错误的地方太不稳定,导致错误太严重。你把它设置为每隔一秒就出错一次,这对取证工具以外的任何工具来说都太过苛刻了。
您需要指定设备是如何不稳定的,默认是硬错误,这就是阻止您使用它的原因,还有其他两个选项 - drop_writes 和 corrupt_bio_byte
删除写入- 所有写入都将失败,但读取将成功
损坏的生物字节- 可能是您所需要的,因为它允许工具处理更细微的破损。
dmflakey 的文档在这里 https://www.kernel.org/doc/Documentation/device-mapper/dm-flakey.txt
例如:
这应该会导致每个 READ 的第 32 个字节从 1 变为 0
sudo dmsetup create test --table '0 123 flakey 1 0 /dev/loop0 1 corrupt_bio_byte 32 r 1 0'