Verwenden von UDF auf einem USB-Flash-Laufwerk

75

Nachdem ich eine Datei, die größer als 4G ist, nicht auf meinen 8G- USB-Stick kopiert habe , habe ich sie als ext3 formatiert. Während dies bisher für mich in Ordnung ist, wird es Probleme verursachen, wenn ich es verwenden möchte, um Dateien auf jemanden zu kopieren, der Linux nicht verwendet.

Ich denke darüber nach, es stattdessen als UDF zu formatieren. Ich hoffe, dass es auf den drei gängigsten Betriebssystemen (Windows, MacOS und Linux) gelesen (und möglicherweise sogar geschrieben) werden kann, ohne dass zusätzliche Treiber installiert werden müssen . Nach dem, was ich bereits im Web gefunden habe, scheint es jedoch mehrere kleine Fallstricke zu geben, die sich darauf beziehen, welche Parameter zum Erstellen des Dateisystems verwendet werden. Dies kann die Kompatibilität beeinträchtigen fährt).

Ich würde gerne wissen:

  • Welches Dienstprogramm soll ich zum Erstellen des Dateisystems verwenden? (Bisher habe ich gefunden mkudffsund genisoimage, und mkudffsscheint die beste Option.)
  • Welche Parameter sollte ich mit dem ausgewählten Dienstprogramm für maximale Kompatibilität verwenden?
  • Wie kompatibel ist UDF mit den gängigsten Versionen dieser drei Betriebssysteme?
  • Ist die Verwendung von UDF tatsächlich die beste Idee? Gibt es ein anderes Dateisystem, das ohne problematische Einschränkungen wie die Dateigrößenbeschränkung für FAT32 4G besser kompatibel wäre und auf jedem einzelnen Computer, der es berührt, keine speziellen Treiber installieren muss?
CesarB
quelle
3
Verwandte Frage: serverfault.com/questions/55089/…
CesarB

Antworten:

57

Zuerst habe ich das Laufwerk vollständig auf Null gestellt, bevor ich das UDF-Dateisystem erstellt habe:

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

Dies soll verhindern, dass Superblocks oder andere Metadaten übrig bleiben, die die Erkennung des Dateisystemtyps des Betriebssystems verwirren könnten (es sollte mindestens ein Nullabgleich des ersten Sektors erforderlich sein, um die Partitionstabelle zu verwischen; die ersten Sektoren werden von UDF nicht verwendet) Partitionstabelle könnte die Dinge wirklich verwirren). Sie können auch den count=1Schalter im Befehl dd verwenden, um nur die ersten 512 Byte des Laufwerks (in dem sich normalerweise der MBR befindet) schneller auf Null zu setzen, obwohl dies nicht getestet wurde.

Um das Dateisystem zu erstellen, habe ich folgenden Befehl verwendet:

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

mkudffsBefehl wird auf Debian-basierten Linux-Distributionen (wie Ubuntu) nach der Installation eines udftoolsPakets verfügbar :

sudo apt-get install udftools

Die Standardblockgröße für mkudffsist 2048, was für ein USB-Flash-Laufwerk (das 512-Byte-Sektoren verwendet) falsch ist. Da die Blockgröße zum Ermitteln der Metadaten des Dateisystems verwendet wird, kann die Verwendung einer falschen Blockgröße dazu führen, dass das Dateisystem nicht als UDF-Dateisystem erkannt wird (da der Anker nicht dort liegt, wo der Dateisystemtreiber ihn erwartet). Beachten Sie, dass die mkudffsManpage falsch ist. 512 ist ein gültiger Wert für die Blockgröße (und der Code akzeptiert ihn ausdrücklich).

Ich habe auch das gesamte Laufwerk anstelle einer Partition verwendet. dies sollte kompatibler sein.

Das Ergebnis meiner bisherigen Tests:

  • Linux mit dem neuesten Kernel (2.6.31, ab Ubuntu 9.10): funktioniert.
  • Linux mit einem älteren Kernel: Benötigt die bs=512Option mount, da es 2048 anstelle der Größe des Gerätesektors falsch verwendete (behoben in commit 1197e4d ).
  • Windows Vista: funktioniert.
  • Ein brandneuer Mac: funktioniert.
  • Windows XP: Kann gut lesen, gibt aber "Zugriff verweigert", wenn versucht wird zu schreiben. scheint auch zu denken, dass die Festplatte voll ist.

Obwohl ich bisher nicht versucht habe, eine Datei größer als 4G darin zu erstellen, sehe ich keinen Grund, warum es nicht funktionieren würde.

Da es auf allen aktuellen Betriebssystemen einwandfrei funktionierte (nur manuell unter Linux zu mounten, was nicht mehr benötigt wird, sobald Ubuntu 9.10 und Fedora 12 herauskommen) und unter Windows XP schreibgeschützt funktionierte (was eine Überraschung war) Ich hatte erwartet, dass es das Dateisystem überhaupt nicht erkennt. Die Verwendung von UDF anstelle von FAT32 oder NTFS in großen USB-Flash-Laufwerken scheint eine gute Idee zu sein.

CesarB
quelle
1
Wie haben Sie das Laufwerk formatiert / partitioniert? Ich habe mein 32-GB-USB-Laufwerk mithilfe von auf Null gesetzt, sodass dd if=/dev/zero of=/dev/sdb bs=1Mes keine Partitionstabelle mehr enthält.
Romeovs
4
@romeovs: Ich habe das Laufwerk nicht partitioniert. Das ist der springende Punkt beim Nullsetzen, um die Partitionstabelle und die alten Dateisystemreste zu entfernen und das UDF-Dateisystem auf dem gesamten nicht partitionierten Laufwerk abzulegen. Das Erstellen einer Partitionstabelle kann nur zu Verwirrung führen.
CesarB
3
Funktionierte bei mir nicht mit einer externen Festplatte mit 500 GB SeaGate FreeAgent Desktop USB 2.0 (ich bin mir nicht sicher, ob dies der Fall ist, da es sich bei diesem Thread um Flash-Laufwerke handelt). Windows 7 zeigte das Laufwerk im Dienstprogramm zur Datenträgerverwaltung immer als "nicht zugeordnet" an. Ich habe verschiedene Optionskombinationen ausprobiert.
Adam Monsen
2
Vielen Dank für das Follow-up. Es ist selten, wenn nicht das erste Mal, dass ich eine kluge Frage sehe, die vom OP nach einigen Tagen / Wochen des Testens ausführlich beantwortet wird. Super Arbeit, danke!
Luc
1
Siehe auch das Skript von Pieter Wuille , das den UDF-Erstellungsprozess automatisiert und zur besseren Kompatibilität eine Partitionstabelle erstellt. Ich habe es als alternative Lösung gepostet .
Dolmen
7

CesarB hat großartige Arbeit geleistet, um den Kern des Problems zu erreichen. Eine Sache, die nicht genug unterstrichen werden kann, ist, wie wichtig es ist, die richtige Blockgröße beim Formatieren von UDF zu verwenden.

Inspiriert von CesarBs Beitrag (und meinen anderen Nachforschungen / Tests) habe ich ein Skript geschrieben, um den Formatierungsprozess in UDF zu automatisieren - unter Verwendung der richtig erkannten Sektorgröße. Siehe format-udf auf GitHub . Bemerkenswerte Eigenschaften:

  • Formatiert ein Blocklaufwerk (Festplatte oder Flash-Laufwerk) im Universal Disk Format (UDF)
    • UDF Revision 2.01 für maximale Kompatibilität verwendet
    • Die ersten 4096 Sektoren werden auf Null gesetzt, um alle vorhandenen MBRs zu löschen (für eine ordnungsgemäße UDF-Erkennung erforderlich).
  • Das resultierende Dateisystem kann über mehrere Betriebssystemfamilien hinweg gelesen / geschrieben werden (Windows, OS X und Linux).
  • Läuft auf jedem Betriebssystem mit einer Bash-Umgebung

Wegen des letzten Punktes kann dieses Skript, das ich geschrieben habe, nicht unter Windows verwendet werden. Das Skript wird jedoch unter OS X und Linux ausgeführt. Danach sollte Windows das neu formatierte UDF-Laufwerk auf magische Weise erkennen können.

Um die gestellten Fragen direkt zu beantworten, wird format-udf:

  • Wählen Sie das geeignete Tool für die Formatierung basierend auf Betriebssystem und Umgebung
  • Alle für die Formatierung erforderlichen Parameter werden automatisch erkannt und ausgefüllt
  • Maximierung der Betriebssystemkompatibilität (Kompatibilitätstabelle siehe GitHub-Seite)
  • Geben Sie den maximalen Funktionsumfang (und die minimalen Einschränkungen) an, nach denen der Fragesteller sucht
j0nam1el
quelle
1
Ich habe mir Ihr format-udf-Dienstprogramm auf Github angesehen und eine Frage dazu gestellt. Das Skript erkennt die physische Blockgröße des Laufwerks. Sind Sie sicher, dass der Parameter Linux "Größe des physischen Sektors (Block)" und nicht "Größe des logischen Sektors" korrekt ist? Physisch und logisch können viele Dinge bedeuten. Was hdparmals "logische Sektorgröße" bezeichnet wird, ist die vom SATA-Protokoll verwendete Adressierungseinheit, wohingegen "physikalische Sektorgröße" eine festplatteninterne Sache ist. Für mich ist es sinnvoller, dass die "physischen Blöcke" in der UDF-Spezifikation wirklich die "logischen Blöcke" von Linux bedeuten.
Johan Myréen
Sie sind genau richtig, @ JohanMyréen. Ich lade Sie ein, an der Diskussion zu diesem Thema auf GitHub teilzunehmen. github.com/JElchison/format-udf/issues/13 Es gibt eine bevorstehende Änderung im Sinne Ihrer Frage, bis weitere Tests unter Windows 7 und 10 durchgeführt werden.
j0nam1el
1
Format-Udf ist wirklich nett. Habe es gerade unter Linux getestet und konnte das formatierte Laufwerk unter OS X und Windows 10 lesen / schreiben.
mivk
Obwohl die Möglichkeit, "mit bash auf jedem Betriebssystem zu laufen", einen gewissen Reiz hat, wäre es sogar besser, denselben Ansatz mkudffsdirekt zu implementieren . Ich meine, eine neue --best-block-sizeOption hinzuzufügen mkudffs.
MarcH
3

Ich erinnere mich, dass ich das getan habe. Das Problem war, dass die Linux-Version, die ich gemountet hatte, nur lesbar war, da der Treiber nicht für R / W erstellt worden war. Es hat in Windows funktioniert, und ich denke, Mac.

Ja, eine gute Lösung ist schwer zu finden. Für eine Weile hatte ich ein externes Laufwerk mit einer Fat32-Partition, die Treiber für Win und Mac, eine Mac-Partition und eine große Ext3-Partition hatte. Es hat funktioniert, aber es bedeutete, Treiber zu installieren. Ein guter Trick war, dass es auch auf einem Mac bootfähig war (fw & usb). Sie müssen Platz lassen und einige Notizen machen, dann können Sie Partitionen über die Befehlszeile und eine Mac-Partitionstabelle hinzufügen.

Die Welt braucht ein freies, von allem nutzbares Dateisystem. ZFS wäre eine gute Wahl. :-)

Ronald Pottol
quelle
ZFS wäre nett zu haben, würde aber viele Leute verwirren. Es ist auch ein bisschen übertrieben für externe Medien, finden Sie nicht? Eher geeignet für riesige Dateiserver, soweit ich das beurteilen kann.
Mike Cooper
2
Nun, ZFS überprüft die Summierung und die Fehlerbehebung, was für flockige Konsumenten sehr sinnvoll ist. :-D Wir alle speichern heutzutage genügend Daten, damit Bit Rot irgendwann etwas frisst (siehe die Studie, die Sun zu dem Problem durchgeführt hat, das zu ZFS führte, und auch die unentdeckte Fehlerrate bei der Codierung auf HD). Wir brauchen eine echte fs, die alles kann, und fatX ist es nicht. Wirklich noch nicht hier.
Ronald Pottol
ZFS funktioniert nicht unter Linux
Ignis
2

Pieter Wuille schrieb ein Tool zum Partitionieren und Formatieren einer Festplatte, um ein UDF- Layout zu erstellen, das mit Windows (> = Vista, schreibgeschützt für XP), MacOS X 10.5 und Linux 2.6.30+ kompatibel ist:

Alternative:

Dolmen
quelle
1

Um maximale Kompatibilität zu erreichen, sollten Sie mkudffs von udftools project mindestens in Version 2.0 verwenden. Es sind keine speziellen Parameter erforderlich, alles wird automatisch erkannt.

Es gibt 3 große Einschränkungen:

  1. Microsoft Windows-Systeme erkennen nicht austauschbare Festplatten nicht, wenn sie keine MBR- oder GPT-Partitionstabelle haben.

  2. Apple Mac OS X-Systeme erkennen das UDF-Dateisystem auf partitionierten Festplatten nicht.

  3. Wahrscheinlich erkennen alle Systeme (mit Ausnahme der neuesten Linux-Kernel) das UDF-Dateisystem nicht, wenn die UDF-Blockgröße nicht der logischen Sektorgröße der Festplatte entspricht.

Tool mkudffs seit Version 2.0 behandeln alle 3 Einschränkungen. Beim Formatieren von Festplatten wird eine "gefälschte" MBR-Tabelle erstellt, die bei Sektor 0 beginnt und die gesamte Festplatte umfasst. Somit kann das UDF-Dateisystem entweder von der ersten Partition (für Microsoft Windows erforderlich) oder von der gesamten Festplatte (für Apple Mac OS X erforderlich) gelesen werden. Weitere Informationen finden Sie in der Manpage zu mkudffs 2.0.

Pali
quelle
0

NTFS, mit NTFS-3G können Sie unter Linux darauf schreiben und http://macntfs-3g.blogspot.com/ für Ihren Mac aufrufen .

user10547
quelle
4
Dies scheint zusätzliche Treiber für den Mac zu beinhalten.
Mike Cooper
Wenn er FAT nicht verwenden möchte, bleibt er hängen und NTFS-3G funktioniert bereits auf dem Mac. Er benötigt das, was ich zum Schreiben verlinkt habe.
user10547
4
Ein kleines Problem ist, dass es nicht mein Mac ist. Ich würde lieber keinen Treiber auf den Computern anderer Leute installieren müssen.
CesarB
-1

Es gibt Treiber für Windows (und Mac), die auf EXT3-Partitionen zugreifen können, sodass Sie diese in EXT3 formatieren und (mit Treibern) überall verwenden können. Eine andere Möglichkeit wäre, die große Datei mit einem Archiever in zwei oder mehr Dateien mit jeweils bis zu 4 GB zu speichern. Auf diese Weise können Sie das universelle FAT32-Dateisystem verwenden. Auf dem Host-Computer müssen Sie das Archiv extrahieren, um es verwenden zu können. Dies ist jedoch eine Möglichkeit, ohne Treiber zu arbeiten. Verwenden Sie einen Archivierer im RAR-Format, da er unter Windows, Linux und Mac funktioniert, obwohl ich denke, dass auch ein ZIP-Format funktionieren könnte. Aber ich würde mit den Fahrern gehen. Einmal installiert, können Sie alles ohne Einschränkungen tun. Auf dem PC habe ich Ext2Fsd für den vollständigen Zugriff auf EXT2, EXT3 und EXT4 und Macdrive für den vollständigen Zugriff auf das MacOS-Format verwendet. Sicherlich gibt es ähnliche Tools für Linux und MacOS, um vollständig auf NTFS-Partitionen usw. zuzugreifen. Wenn Sie nur Lesezugriff benötigen, benötigen Sie keine Treiber. Linux und MacOS unterstützen das Lesen von NTFS-Partitionen. Formatieren Sie den USB-Stick also als NTFS! Wenn sich alle diese Computer im selben Netzwerk befinden, ist es einfacher! Stellen Sie das USB-Format entweder und teilen Sie es im Netzwerk. Andere Computer sollten keine Probleme haben, darauf zuzugreifen!

Spapakons
quelle
2
-1 weil die Antwort nicht einmal UDF erwähnt!
Dolmen