Utiliser UDF sur un lecteur flash USB

76

Après avoir échoué à copier un fichier plus gros que 4G sur mon lecteur flash USB 8G , je l’ai formaté en ext3. Bien que cela fonctionne bien pour moi jusqu'à présent, cela posera des problèmes si je veux l'utiliser pour copier des fichiers sur une personne qui n'utilise pas Linux.

Je songe plutôt à le formater au format UDF , ce qui, je l’espère, lui permettrait d’être lu (et éventuellement écrit) sur les trois systèmes d’exploitation les plus répandus (Windows, MacOS et Linux), sans avoir à installer de pilotes supplémentaires . Cependant, d'après ce que j'ai trouvé sur le Web, il semble y avoir plusieurs petits pièges liés aux paramètres utilisés pour créer le système de fichiers, ce qui peut réduire la compatibilité (mais la plupart des pages que j'ai trouvées traitent de supports optiques, et non de clés USB). disques).

J'aimerais savoir:

  • Quel utilitaire dois-je utiliser pour créer le système de fichiers? (Jusqu'à présent, j'ai trouvé mkudffset genisoimage, et mkudffssemble être la meilleure option.)
  • Quels paramètres dois-je utiliser avec l'utilitaire choisi pour une compatibilité maximale?
  • Quel est le degré de compatibilité avec les versions les plus courantes de ces trois systèmes d’exploitation UDF?
  • Utiliser UDF est-il réellement la meilleure idée? Existe-t-il un autre système de fichiers qui aurait une meilleure compatibilité, sans aucune restriction problématique, telle que la limite de taille de fichier FAT32 4G, et sans avoir à installer de pilotes spéciaux sur chaque ordinateur le touchant?
CesarB
la source
3
Question connexe: serverfault.com/questions/55089/…
CesarB

Réponses:

58

Tout d’abord, j’ai mis le disque à zéro avant de créer le système de fichiers UDF avec:

dd if=/dev/zero of=/dev/sdx bs=512

Cela évitera tout reste de superblocs ou d’autres métadonnées qui pourrait perturber la détection du type de système de fichiers du système d’exploitation (il faudrait au moins mettre à zéro le premier secteur pour effacer la table de partition; table de partition pourrait vraiment confondre les choses). Vous pouvez également utiliser le count=1commutateur sur la commande dd, afin de mettre à zéro plus rapidement que les 512 premiers octets du lecteur (où se trouve généralement le MBR), bien que cela n'ait pas été testé.

Pour créer le système de fichiers, la commande que j'ai utilisée était la suivante:

mkudffs --media-type=hd --blocksize=512 /dev/sdx

mkudffsCette commande sera disponible sur les distributions Linux basées sur Debian (telles que Ubuntu) après l’installation d’un udftoolspaquet:

sudo apt-get install udftools

La taille de bloc par défaut pour mkudffsest 2048, ce qui est faux pour un lecteur flash USB (qui utilise des secteurs de 512 octets). Étant donné que la taille de bloc est utilisée pour rechercher les métadonnées du système de fichiers, l'utilisation d'une taille de bloc incorrecte peut empêcher son identification comme système de fichiers UDF (car l'ancre ne sera pas à l'emplacement attendu par le pilote du système de fichiers). Notez que la mkudffspage de manuel est incorrecte. 512 est une valeur valide pour la taille du bloc (et le code l'accepte explicitement).

J'ai également utilisé l'ensemble du disque au lieu d'une partition; cela devrait être plus compatible.

Le résultat de mes tests jusqu'à présent:

  • Linux avec le noyau le plus récent (2.6.31, à partir de Ubuntu 9.10): fonctionne.
  • Linux avec un noyau plus ancien: nécessite l' bs=512option to mount, car il a utilisé incorrectement 2048 à la place de la taille du secteur du périphérique (corrigée dans la validation 1197e4d ).
  • Windows Vista: fonctionne.
  • Un tout nouveau Mac: ça marche.
  • Windows XP: peut lire correctement, mais donne "accès refusé" lorsque vous essayez d'écrire; semble également penser que le disque est plein.

Bien que je n’aie pas essayé jusqu’à présent de créer un fichier plus volumineux que 4G, je ne vois aucune raison pour laquelle cela ne fonctionnerait pas.

Etant donné que cela fonctionnait parfaitement sur tous les systèmes d'exploitation récents (ne nécessitant que le montage manuel sur Linux, qui ne sera plus nécessaire dès la sortie d'Ubuntu 9.10 et Fedora 12), et fonctionnait en lecture seule sous Windows XP (ce qui était une surprise pour moi; je m'attendais à ce qu'il ne reconnaisse pas du tout le système de fichiers), utiliser UDF au lieu de FAT32 ou NTFS dans de grandes clés USB semble une bonne idée.

CesarB
la source
1
comment avez-vous formater / partitionner le lecteur? J'ai mis à zéro mon lecteur USB de 32 Go dd if=/dev/zero of=/dev/sdb bs=1M, ce qui le laisse sans aucune table de partition.
romeovs
4
@romeovs: Je n'ai pas partitionné le lecteur. C’est l’intérêt de le mettre à zéro, de supprimer la table de partition et les restes d’anciens systèmes de fichiers et de placer le système de fichiers UDF dans l’ensemble du lecteur non partitionné. Créer une table de partition ne risquerait que de créer de la confusion.
CesarB
3
Cela ne fonctionnait pas pour moi avec un disque dur externe SeaGate FreeAgent Desktop USB 2.0 de 500 Go (je ne suis pas sûr que cela convienne, car ce fil concerne les lecteurs Flash). Windows 7 indiquait toujours que le lecteur était "non alloué" dans l'utilitaire de gestion de disque. J'ai essayé plusieurs combinaisons d'options différentes.
Adam Monsen
2
Merci beaucoup pour le suivi. Il est rare, si ce n’est la première fois, que je voie une question intelligente à laquelle l’opérateur répond de manière détaillée après quelques jours / semaines d’essais. Excellent travail, merci!
Luc
1
Voir également le script de Pieter Wuille qui automatise le processus de création UDF et crée une table de partition pour une meilleure compatibilité. Je l'ai posté comme solution alternative .
dolmen
7

CesarB a fait un excellent travail pour arriver au coeur du problème. Une chose que l’on ne saurait trop souligner, c’est combien il est important d’utiliser la taille de bloc appropriée lors du formatage UDF.

Inspiré par le message de CesarB (et mes autres recherches / tests), j'ai écrit un script pour automatiser le processus de formatage dans UDF - en utilisant la taille de secteur correctement détectée. Voir format-udf sur GitHub . Caractéristiques notables:

  • Formate un lecteur de bloc (disque dur ou lecteur Flash) au format Universal Disk Format (UDF)
    • UDF révision 2.01 utilisé pour une compatibilité maximale
    • Les 4096 premiers secteurs sont mis à zéro pour effacer tout MBR existant (nécessaire pour une détection correcte des FDU)
  • Le système de fichiers résultant peut être lu / écrit sur plusieurs familles de systèmes d'exploitation (Windows, OS X et Linux)
  • Fonctionne sur tout système d'exploitation ayant un environnement Bash

A cause du dernier point, ce script que j'ai écrit ne peut pas être utilisé sous Windows. Cependant, le script fonctionnera sous OS X et Linux. Après cela, Windows devrait pouvoir détecter par magie le lecteur UDF nouvellement formaté.

Pour répondre directement aux questions posées, format-udf va:

  • choisir l'outil approprié pour le formatage en fonction du système d'exploitation et de l'environnement
  • détecter et renseigner automatiquement tous les paramètres nécessaires au formatage
  • maximiser la compatibilité du système d'exploitation (voir la page GitHub pour le tableau de compatibilité)
  • donne le maximum de fonctionnalités (et les limitations minimales) recherchées par le demandeur
j0nam1el
la source
1
J'ai jeté un coup d'œil à votre utilitaire format-udf sur Github et j'ai une question à ce sujet. Le script détecte la taille de bloc physique du lecteur. Etes-vous sûr que le paramètre Linux appelle "taille du secteur physique" et non "taille du secteur logique" est le bon à utiliser? Physique et logique peut signifier beaucoup de choses. Ce qui hdparms'appelle "taille de secteur logique" est l'unité d'adressage utilisée par le protocole SATA, alors que "taille de secteur physique" est une chose interne au lecteur. Pour moi, il est plus logique que les "blocs physiques" de la spécification UDF désignent réellement les "blocs logiques" de Linux.
Johan Myréen
vous êtes sur place, @ JohanMyréen. Je vous invite à participer à la discussion sur ce sujet sur GitHub. github.com/JElchison/format-udf/issues/13 Il y a un changement imminent dans le sens de votre question, dans l'attente de tests supplémentaires sur Windows 7 et 10.
j0nam1el
1
format-udf est vraiment sympa. Je viens de le tester sous Linux, et je pouvais lire / écrire le lecteur formaté sous OS X et Windows 10.
mardi
Bien que la capacité de "fonctionner sur n'importe quel système d'exploitation avec bash" ait un certain attrait, il serait encore mieux d'appliquer la même approche mkudffsdirectement; Je veux dire en ajoutant une nouvelle --best-block-sizeoption à mkudffs.
MarcH
3

Je crois me souvenir que, après avoir fait cela, le problème que j’ai rencontré est que la version Linux que je l’avais montée en lecture seule, car le pilote n’avait pas été construite pour r / w. Cela a fonctionné dans Windows, et je pense que mac.

Oui, il est difficile de trouver une bonne solution. Pendant un certain temps, j'ai eu un lecteur externe avec une partition fat32 qui contenait des pilotes pour win et mac, une partition mac et une grande partition ext3. Cela a fonctionné, mais cela impliquait l'installation de pilotes. L'astuce était qu'il était également amorçable sur un mac (fw & usb), vous devez laisser de l'espace et prendre des notes, puis vous pouvez ajouter des partitions via la ligne de commande et une table de partitions mac.

Le monde a besoin d’un système de fichiers gratuit et utilisable par tous. ZFS serait un bon choix. :-)

Ronald Pottol
la source
ZFS serait bien d'avoir, mais dérouterait beaucoup de gens. C'est aussi un peu exagéré pour les médias externes, vous ne pensez pas? D'après ce que je peux dire, c'est plus adapté aux serveurs de fichiers géants.
Mike Cooper
2
Eh bien, ZFS vérifie la somme et la récupération d’erreurs, ce qui est tout à fait logique pour des produits grand public. :-D Nous stockons tous assez ces jours-ci que peu de pourriture finira par manger quelque chose (voir l’étude que Sun a menée sur le problème qui a conduit à ZFS, notez également le taux d’erreur non détecté pour l’encodage en HD). Nous avons besoin d'un vrai fs que tout peut utiliser, et fatX n'est-ce pas? Pas encore là, vraiment.
Ronald Pottol
ZFS ne fonctionne pas sous Linux
lundi
1

Pour atteindre une compatibilité maximale, vous devez utiliser mkudffs du projet udftools au moins dans la version 2.0. Aucun paramètre spécial n'est nécessaire, tout est détecté automatiquement.

Il y a 3 grandes restrictions:

  1. Les systèmes Microsoft Windows ne reconnaissent pas un disque dur non amovible s'il ne possède pas de table de partition MBR ou GPT.

  2. Les systèmes Apple Mac OS X ne reconnaissent pas le système de fichiers UDF sur un disque partitionné.

  3. Tous les systèmes (à l'exception des noyaux Linux récents) ne reconnaissent probablement pas le système de fichiers UDF si la taille du bloc UDF ne correspond pas à la taille du secteur logique du disque.

Depuis la version 2.0, l’outil mkudffs gère les 3 restrictions. Lors du formatage de disques durs non amovibles, il crée un "faux" tableau MBR qui commence au secteur 0 et couvre tout le disque. Ainsi, le système de fichiers UDF peut être lu à partir de la première partition (nécessaire pour Microsoft Windows) ou du disque entier (nécessaire pour Apple Mac OS X). Voir la page de manuel mkudffs 2.0 pour plus de détails.

Pali
la source
0

NTFS, avec NTFS-3G, vous pouvez y écrire en utilisant Linux et consulter http://macntfs-3g.blogspot.com/ pour votre Mac.

utilisateur10547
la source
4
Cela semble impliquer des pilotes supplémentaires pour Mac.
Mike Cooper
S'il ne veut pas utiliser FAT, il est bloqué et la NTFS-3G fonctionne déjà sur Mac, il a besoin de ce que j'ai lié pour l'écriture.
user10547
4
Un petit problème est que ce n'est pas mon Mac. Je préférerais ne pas avoir à installer de pilote sur les ordinateurs d'autres personnes.
CesarB
-1

Certains pilotes pour Windows (et Mac) peuvent accéder aux partitions EXT3. Vous pouvez donc le formater en EXT3 et l'utiliser (avec les pilotes) partout. Une autre solution consisterait à utiliser un archiveur pour stocker le fichier volumineux dans au moins deux fichiers de 4 Go maximum. De cette façon, vous pouvez utiliser le système de fichiers FAT32 qui est universel. Sur l'ordinateur hôte, vous devez extraire l'archive pour pouvoir l'utiliser, mais c'est un moyen de le faire sans pilotes. Utilisez un archiveur au format RAR car il fonctionne sous Windows, Linux, Mac, même si je pense qu'un format ZIP pourrait également fonctionner. Mais j'irais avec les chauffeurs. Une fois installé, vous pouvez faire n'importe quoi sans restrictions. Sur le PC, j'ai utilisé Ext2Fsd pour un accès complet à EXT2, EXT3 et EXT4 et Macdrive pour un accès complet au format MacOS. Il existe sûrement des outils similaires pour Linux et MacOS afin d’accéder pleinement aux partitions NTFS, etc. Si vous n'avez besoin que d'un accès en lecture, vous n'avez besoin d'aucun pilote. Linux et MacOS prennent en charge la lecture des partitions NTFS. Formatez donc la clé USB en tant que NTFS! Si tous ces ordinateurs sont sur le même réseau, les choses sont plus simples! Créez le format USB et partagez-le sur le réseau. Les autres ordinateurs ne devraient pas avoir de problème pour y accéder!

Spapakons
la source
2
-1 parce que la réponse ne mentionne même pas UDF!
dolmen