无法创建不稳定的文件系统进行测试

无法创建不稳定的文件系统进行测试

在 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'

相关内容