Невозможно создать нестабильную файловую систему для тестирования

В Ubuntu 14.04, когда я пытаюсь:

sudo dmsetup create test --table '0 123 flakey 1 0 /dev/loop0'

(или delay цель), я получаю ошибку:

устройство-маппер: перезагрузить ioctl в тесте не удалось: неверный аргумент
Команда не выполнена

Но когда я использую error цель это удается.

Как я могу создать устройство "flakey", используя dmsetup?

2 ответа

Решение

Короткий ответ:

  • Неверный синтаксис (может быть , для старой версии), правильный формат:

    '<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/ устройство-сопоставитель / 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
    

    Найден этот поток: device-mapper: удалить 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 (реальная машина)

Я попытался сделать это на своей предыдущей работе, где я тестировал устройство хранения. Проблема с flakey заключается в том, что он обычно слишком ненадежен в неправильных местах и ​​вызывает слишком грубую ошибку. Вы устанавливаете его на ошибку каждую секунду, что слишком резко для чего-либо, кроме криминалистических инструментов.

Вам нужно указать, как устройство работает некорректно, по умолчанию это тяжелая ошибка, из-за которой вы не можете его использовать, есть два других варианта - drop_writes и поврежден_bio_byte

отбросить записи - все записи не будут выполнены, но чтение выполнено успешно

Поврежденный_bio_byte - это, вероятно, то, что вам нужно, поскольку он допускает более тонкий разрыв, который возможен для инструментов.

Документация для dmflakey находится здесь https://www.kernel.org/doc/Documentation/device-mapper/dm-flakey.txt

например:

Это должно привести к тому, что каждый 32-й байт каждого READ, равный 1, будет равен 0.

sudo dmsetup create test --table '0 123 flakey 1 0 /dev/loop0 1 corrupt_bio_byte 32 r 1 0'
Другие вопросы по тегам