Formater une clé USB sous GNU/Linux
Rédigé par Marc GUILLAUME | Aucun commentaireSolution en ligne de commandes
On utilise mkfs
qui se trouve sous Debian et ses dérivés (xBuntu et autres Knoppix) dans le paquet dosfstools
qui contient les outils destinés à l'utilisation des systèmes de fichier DOS
.
Pour une clé USB on utilise généralement un formatage VFAT
le plus universellement compatible (le plus souvent FAT 32
). C'est un système de fichier qui date du DOS, qui peut se monter sous tous les Unix, dos, Windows, MacOS etc. Donc si ce n'est pas déjà fait :
# aptitude install dosfstools
Pour formater une clé il faut déjà la trouver dans le système avec la commande fdisk
et son option l
en tant que super utilisateur root (ou avec sudo à la mode Ubuntu).
Voici le résultat de la commande sur mon système sur lequel j'ai monté une clé EMTEC et que je veux récupérer après un formatage malencontreux sous un Mac OS ancien.
# fdisk -l Disk /dev/hda: 6448 MB, 6448619520 bytes 255 heads, 63 sectors/track, 784 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x0004f489 Device Boot Start End Blocks Id System /dev/hda1 * 1 747 6000246 83 Linux /dev/hda2 748 784 297202+ 5 Extended /dev/hda5 748 784 297171 82 Linux swap / Solaris Disk /dev/hdb: 20.0 GB, 20020396032 bytes 255 heads, 63 sectors/track, 2434 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0xde760ca4 Device Boot Start End Blocks Id System /dev/hdb1 1 2434 19551073+ 83 Linux Disk /dev/sdf: 1010 MB, 1010827264 bytes 32 heads, 61 sectors/track, 1011 cylinders Units = cylinders of 1952 * 512 = 999424 bytes Disk identifier: 0x00000000 Disk /dev/sdf doesn't contain a valid partition table
On voit que la clé est sur /dev/sdf
qui indique une capacité de 1010 MB et pas de table de partition valide. On va donc formater /dev/sdf
.
ÉVIDEMMENT IL FAUT RAPPELLER QUE CETTE OPÉRATION S'EFFECTUE EN TANT QUE SUPER UTILISATEUR, DONC SI VOUS VOUS TROMPEZ DE DEVICE VOUS ALLEZ FORMATER UN DE VOS DISQUES, DONC ATTENTION À NE PAS CONFONDRE LES DISQUES !
Pour pouvoir formater la clé il ne faut pas qu'elle soit montée. En général les systèmes linux montent automatiquement les périphériques amovibles dans un répertoire /media.
# ls -l /media/ total 24 lrwxrwxrwx 1 root root 6 déc 11 2008 cdrom -> cdrom0 drwxr-xr-x 2 root root 4096 déc 11 2008 cdrom0 drwxr-xr-x 8 marc root 16384 jan 1 1970 disk lrwxrwxrwx 1 root root 7 déc 11 2008 floppy -> floppy0 drwxr-xr-x 2 root root 4096 déc 11 2008 floppy0
Ici on voit que la clé est montée sur /media/disk
. Si l'on est en environnement fenêtré (KDE, GNOME, Xfce etc.), on ferme toute les fenêtres éventuellement ouvertes sur ce répertoire, puis on démonte la clé :
# umount /media/disk/
Formatage en vfat
On peut alors lancer le formatage. Pour cela on utilise mkfs
dans son sous-ensemble mkfs.vfat
avec quelques options :
- l'option
-n
pour indiquer un nom de volume (qui s'affichera sous la clé quand on la branche au système) - l'option
-F
pour indiquer le type de table d'allocation : 12 16 ou 32
Par exemple ici je veux une clé formatée en FAT 32 et une clé baptisée du nom de la marque EMTEC :
# mkfs.vfat -F 32 -n EMTEC /dev/sdf
Il se peut que vous voyez ce message :
mkfs.vfat: Device partition expected, not making filesystem on entire device '/dev/sdf' (use -I to override)
Il faut alors utiliser l'option -I
comme indiqué dans le message, pour forcer le formatage (voir man mkfs.vfat
)
# mkfs.vfat -F 32 -n EMTEC /dev/sdf -I mkfs.vfat 3.0.1 (23 Nov 2008)
L'opération a réussi et l'on obtient une clé usb formatée en FAT32 fonctionnant aussi bien sur Linux, MSWindows, MacOSX et tout système sachant lire et écrire les partitions FAT32.
Formatage en ext4 (rajout 2019)
Si vous voulez formater votre clé pour n'être utilisée que sur des machines Linux, vous pouvez utiliser un système de fichier plus spécifique. Nous prendrons ici l'exemple du système de fichier ext4.
Attention : cette clé, non seulement ne pourra être montée que sur des systèmes linux, mais comme ext4 respecte les notions de droits unix et les acls, vos fichiers ne seront accessibles qu'aux utilisateurs ayant les mêmes UID et GID que ceux figurant sur la clé. Si vous avez un user toto qui a l'UID 1000 sur votre machine, il va enregistrer ses données sur la clé avec cet UID. Si vous montez cette clé sur une autre machine Linux, les fichiers ne seront lisibles que par l'utilisateur qui aura l'UID 1000 sur cette machine. Le nom toto n'est qu'une facilité pour l'utilisateur humain, le système lui ne tient compte que des UID et GID. Une telle clé est donc loin d'être universelle, et vous ne pourrez la passer utilement que sur des machines où vous aurez un utilisateur de même UID GID. On pourrait donner des droits de lecture universels, mais dans ce cas autant prendre de la FAT 32 !
Depuis la première rédaction de cet article un nouvel utilitaire est apparu permettant d'afficher les périphériques montés : blkid. Voici un exemple du type d'affichage de blkid qui affiche les UUID des disques et qui a un affichage plus compact :
# blkid /dev/sdb: LABEL="GOODRAM" UUID="5DF8-64D0" TYPE="vfat" /dev/sda1: UUID="FE78-735D" TYPE="vfat" PARTUUID="ed4f6891-4ea8-43c5-84a3-17d78e7db519" /dev/sda2: UUID="b4ea6027-223a-4e18-a552-5eed2ef5ef7d" TYPE="jfs" PARTUUID="7ca8fca1-13ff-40e4-be29-5f1454c39c9c" /dev/sda3: UUID="365fdf7d-3d62-4f6d-bf22-522c8a594145" TYPE="swap" PARTUUID="79a7dd79-35b0-4e4e-911b-74516ca44db9" /dev/sda4: UUID="70d2f8c0-0ebf-4eb7-8eb1-36d704a3e10c" TYPE="jfs" PARTUUID="211337d0-2a66-4b85-a41d-f924a13cc1bf"
Ici nous voyons que nous avons une clé USB de nom GOODRAM montée sur /dev/sdb
. C'est elle qu'il va falloir formater. Comme nous voulons installer un système de fichier linux nous allons créer une partition sur cette clé avec fdisk au format linux puis ensuite nous y installerons un système de fichier, comme on le ferait pour un disque dur. Voici la procédure suivie (la machine utilisée ici est sous Debian GNU/Linux 9 Stretch).
Avec p on affiche les partitions de la clé. Avec n on crée une partition, on choisit une partition primaire et on prend toutes les options par défaut, ce qui implique d'utiliser tout l'espace disponible. On pourrait faire un autre partitionnement si l'on voulait, et ainsi avoir différents systèmes de fichiers ou faire un partition chiffrée, mais nous resterons sur une configuration simple. On réaffiche pour vérifier et on enregistre avec w.
# fdisk /dev/sdb Commande (m pour l'aide) : p Disque /dev/sdb : 7,3 GiB, 7801405440 octets, 15237120 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : dos Identifiant de disque : 0x00000000 Commande (m pour l'aide) : n Type de partition p primaire (0 primaire, 0 étendue, 4 libre) e étendue (conteneur pour partitions logiques) Sélectionnez (p par défaut) : p Numéro de partition (1-4, 1 par défaut) : Premier secteur (2048-15237119, 2048 par défaut) : Dernier secteur, +secteurs ou +taille{K,M,G,T,P} (2048-15237119, 15237119 par défaut) : Une nouvelle partition 1 de type « Linux » et de taille 7,3 GiB a été créée. Commande (m pour l'aide) : p Disque /dev/sdb : 7,3 GiB, 7801405440 octets, 15237120 secteurs Unités : secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : dos Identifiant de disque : 0x00000000 Périphérique Amorçage Début Fin Secteurs Taille Id Type /dev/sdb1 2048 15237119 15235072 7,3G 83 Linux Commande (m pour l'aide) : w La table de partitions a été altérée. Appel d'ioctl() pour relire la table de partitions.
Il ne reste plus qu'à installer le sytème de fichier. La commande à lancer est alors :
mkfs.ext4 -LEMTEC /dev/sdb1
Ici c'est l'option -L
qui permet de donner à la clé le nom qui s'affichera lors de son montage. Il existe quantité d'autres options, la plupart ayant peu d'intérêt sur une clé USB, mais vous pouvez les voir dans le manuel : man mkfs.ext4
. On notera que l'on applique le système de fichier non sur le volume /dev/sdb
mais bien sur la partition /dev/sdb1
.