web-dev-qa-db-fra.com

Impossible de créer un système de fichiers floconneux pour les tests

Dans Ubuntu 14.04 lorsque j'essaie:

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

(ou la cible delay), j'obtiens une erreur:

device-mapper: échec du rechargement de l'ioctl lors du test: argument invalide
La commande a échoué

Mais lorsque j'utilise la cible error, elle réussit.

Comment créer un périphérique "floconneux" avec dmsetup?

4
Dennis Williamson

Réponse courte:

  • Mauvaise syntaxe (peut être c'était pour une version plus ancienne ), format correct:

    _'<logical_start_sector> <num_sectors> flakey <dev path> <offset> <up interval> <down interval>'
    _

    _dev_path_ vient en premier

  • Accès impossible au système de fichiers sous-jacent monté. Évitez mount:

    _Sudo losetup <loop_device> <image_file>
    _

Détails:

  • J'ai eu la même erreur, en utilisant le système de fichiers en boucle

    _~$ 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
    _

    C'était une syntaxe erronée car on pouvait trouver une référence:

    linux-doc (paquet): /usr/share/doc/linux-doc/device-mapper/ (m-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.
    _
  • Encore une fois avec:

    _~$ 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
    _

    Trouvé ce fil de discussion: device-mapper: remove ioctl failed: le périphérique ou la ressource occupé a échoué . Ce message a pu être déclenché lorsque le système de fichiers sous-jacent est déjà monté.

    Donc, vérifié avec les partitions du disque dur

    _~$ 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
    _

    Vous pouvez vérifier en détail en utilisant un indicateur détaillé:

    Sudo dmsetup -vvv create test --table '0 123 flakey /dev/sda1 0 10 2'

  • Le périphérique de boucle ne doit pas être monté, évitez donc d'utiliser mount pour le créer. Une autre manière, en utilisant losetup:

    _Sudo losetup /dev/loop4 image.iso
    Sudo dmsetup create test --table '0 123 flakey /dev/loop4 0 10 2'
    _

Testé sur Xubuntu 16.04 (machine réelle)

2
user.dz

j'ai essayé de le faire dans mon travail précédent où je testais un appareil de stockage. Le problème avec flakey est qu’il est généralement trop floconneux aux mauvais endroits et provoque une erreur trop sévère. Vous l'avez paramétré en erreur toutes les deux secondes, ce qui est trop dur pour autre chose que des outils médico-légaux.

Vous devez spécifier comment le périphérique est floconneux. La valeur par défaut est "hard error", ce qui vous empêche de l'utiliser. Il existe deux autres options: drop_writes et corrupt_bio_byte.

drop write - échouera toutes les écritures mais les lectures aboutiront

corrupt_bio_byte - est probablement ce dont vous avez besoin, car il permet une rupture plus subtile que les outils peuvent gérer.

La documentation de dmflakey est ici https://www.kernel.org/doc/Documentation/device-mapper/dm-flakey.txt

par exemple:

Ceci devrait générer une cause sur 0 tous les 32 octets de chaque lecture.

Sudo dmsetup create test --table '0 123 flakey 1 0 /dev/loop0 1 corrupt_bio_byte 32 r 1 0'
0
Amias