Une clé USB composée d’éléments numériques dans un environnement abstrait de type cyberespace.

Simuler une clé USB dans un environnement virtuel

Depuis plus de 30 ans, les applications de type serveur sont majoritairement conçues pour des environnements Linux. Pourtant, il est étonnant de constater que les développeurs sont encore contraints de travailler sur des workstations Windows.
Cette situation complique le travail des développeurs, surtout lorsque les fonctionnalités à tester dépassent les simples traitements de données. Cependant, il existe des solutions permettant à ce développeur de simuler une clé USB sur sa machine virtuelle Linux. Découvrons ensemble comment résoudre son problème.

Une clé USB est un simple média

Les systèmes d’exploitation tels que LinuxWindows ou macOS considèrent généralement une clé USB comme un simple média de stockage.

Par défaut, l’industrie formate ces clés avec une seule partition en FAT32. Ce format est largement utilisé en raison de sa compatibilité avec la plupart des systèmes d’exploitation.

Lorsqu’une clé USB est connectée à un ordinateur, le préformatage effectué par les fabricants permet au système d’exploitation de la détecter et de la monter automatiquement.

Créer un volume virtuel

Pour simuler une clé USB dans un environnement virtuel, il est nécessaire de créer un volume virtuel de type disque dur avec votre logiciel de virtualisation (VMwareVirtualBoxQEMU KVM, etc.).

Chaque logiciel de virtualisation étant différent, nous ne détaillerons pas la procédure de création et d’ajout d’un volume virtuel à une machine virtuelle. Consultez la documentation officielle de votre logiciel ou demandez à votre administrateur système de le faire pour vous. Un volume de 1Go sera largement suffisant pour notre test.

Une fois le volume ajouté (et la machine virtuelle éventuellement redémarrée), utilisez la commande lsblk (voir la documentation) pour répertorier les informations sur les périphériques connectés à la machine.

$ lsblk
NAME                   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                      8:0    0    20G  0 disk
├─sda1                   8:1    0   500M  0 part /boot/efi
├─sda2                   8:2    0     1G  0 part /boot
...
sdb                      8:16   0     1G  0 disk <1>
sr0                     11:0    1  1024M  0 rom
1

Le volume virtuel est détecté mais n’est pour l’instant pas formaté.

Partitionner le volume avec fdisk

Etape 1 : le partitionnement du volume

Maintenant que le volume est détecté, nous allons le partitionner avec l’utilitaire en ligne de commande fdisk (voir la documentation).

$ sudo fdisk /dev/sdb <1>
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xfa00fe33.

Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table

Command (m for help): o <2>
Created a new DOS disklabel with disk identifier 0x378bb97a.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p <3>
Partition number (1-4, default 1):
First sector (2048-2097151, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-2097151, default 2097151):

Created a new partition 1 of type 'Linux' and of size 1023 MiB.

Command (m for help): w <4>
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
1

Pour modifier un périphérique de stockage, nous devons être super-utilisateur.

2

La commande o crée une nouvelle table de partition DOS.

3

Avec la commande n, nous créons une nouvelle partition primaire qui prendra tout l’espace disponible (utilisation des valeurs par défaut).

4

Nous terminons notre modification en appliquant les changements sur le volume.

Etape 2 : vérifier le partitionnement

Une fois l’invite de commande de fdisk fermée, la table de partition du volume est modifiée. Nous pouvons vérifier les changements avec la commande lsblk.

$ lsblk
NAME                   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                      8:0    0    20G  0 disk
├─sda1                   8:1    0   500M  0 part /boot/efi
├─sda2                   8:2    0     1G  0 part /boot
...
sdb                      8:16   0     1G  0 disk
└─sdb1                   8:17   0  1023M  0 part <1>
sr0                     11:0    1  1024M  0 rom
1

La partition sdb1 est maintenant visible.

Le volume est donc prêt à être formaté.

Formater les partitions du volume

Les fabricants réalisent une dernière étape avant de livrer une clé USB : le formatage.
Pour simuler une clé USB, nous allons formater la partition du volume virtuel en FAT32. Pour cela, nous utilisons la commande mkfs (voir la documentation).

$ sudo mkfs -t vfat /dev/sdb1 <1>
mkfs.fat 4.1 (2017-01-24)
1

Là encore, nous devons être super-utilisateur pour formater un périphérique de stockage.

Cette dernière étape est effectivement plutôt simple. Maintenant que le formatage est terminé, nous allons monter le volume virtuel.

Tester la clé USB virtuelle

Ma machine virtuelle de test est un système Linux de type serveur. Il n’y a donc aucune interface graphique tel que GNOME Desktop pour monter automatiquement le volume. Par conséquent, nous allons utiliser la commande mount pour monter manuellement la clé USB virtuelle (voir la documentation).

$ sudo mount /dev/sdb1 /mnt <1>
$ lsblk
NAME                   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                      8:0    0    20G  0 disk
├─sda1                   8:1    0   500M  0 part /boot/efi
├─sda2                   8:2    0     1G  0 part /boot
...
sdb                      8:16   0     1G  0 disk
└─sdb1                   8:17   0  1023M  0 part /mnt <2>
sr0                     11:0    1  1024M  0 rom
$ ls -a /mnt
. .. <3>
$ sudo touch /mnt/test.txt <4>
$ sudo umount /mnt
$ lsblk
NAME                   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                      8:0    0    20G  0 disk
├─sda1                   8:1    0   500M  0 part /boot/efi
├─sda2                   8:2    0     1G  0 part /boot
...
sdb                      8:16   0     1G  0 disk
└─sdb1                   8:17   0  1023M  0 part <5>
sr0                     11:0    1  1024M  0 rom
$ ls -a /mnt <6>
. ..
$ sudo mount /dev/sdb1 /mnt
$ ls -a /mnt
. .. test.txt <7>
$ sudo umount /mnt
1

La clé USB virtuelle est montée dans le répertoire /mnt.

2

La commande lsblk indique que la clé USB virtuelle est bien montée dans /mnt.

3

Le contenu de la clé USB virtuelle est vide.

4

Nous créons un fichier test.txt dans la clé USB virtuelle.

5

La clé USB virtuelle est démontée.

6

Une fois la clé USB virtuelle démontée, le contenu du répertoire /mnt est vide.

7

Lorsque nous montons de nouveau la clé USB virtuelle, nous retrouvons notre fichier test.txt.

Cette procédure nous permet de simuler l’utilisation manuelle d’une clé USB dans un environnement virtuel. Ici, nous vérifions spécifiquement les fonctionnalités liées au montage/démontage du volume, et celles liées à l’écriture de données sur un média externe.

Pour les besoins d’un logiciel, ces opérations peuvent être gérées automatiquement par l’application. Par exemple, un logiciel de sauvegarde qui copie des données sur un volume externe. Ce volume virtuel est également adapté pour tester ce type de programme.

Conclusion

Simuler une clé USB dans un environnement virtuel est une solution ingénieuse pour les développeurs confrontés à des restrictions matérielles. Avec cette méthode, vous pouvez tester et valider vos applications en toute autonomie, tout en respectant les contraintes de sécurité de votre entreprise.

Grâce aux étapes décrites ici, vous avez les clés pour créer, partitionner, formater et utiliser un volume virtuel comme une clé USB. Que vous testiez des fonctionnalités liées au montage automatique ou à l’écriture de données, cette solution vous garantit une efficacité optimale dans un environnement 100 % virtuel.

Et vous, avez-vous déjà testé cette méthode ? Partagez vos retours, vos astuces ou vos questions dans les commentaires ci-dessous.

Laisser un commentaire