Utilizzo di UDF su un'unità flash USB


76

Dopo aver fallito nel copiare un file più grande di 4G sulla mia chiavetta USB 8G , l'ho formattato come ext3. Mentre questo funziona bene per me finora, causerà problemi se voglio usarlo per copiare i file su qualcuno che non usa Linux.

Sto pensando invece di formattarlo come UDF , che spero possa consentire che venga letto (e possibilmente anche scritto) sui tre sistemi operativi più popolari (Windows, MacOS e Linux), senza dover installare alcun driver aggiuntivo . Tuttavia, da quello che ho già trovato sul web, sembrano esserci diversi piccoli trucchi relativi ai parametri utilizzati per creare il filesystem, che possono ridurre la compatibilità (ma la maggior parte delle pagine che ho trovato riguardano supporti ottici, non flash USB unità).

Mi piacerebbe sapere:

  • Quale utility dovrei usare per creare il filesystem? (Finora ho trovato mkudffse genisoimage, e mkudffssembra l'opzione migliore.)
  • Quali parametri devo usare con l'utilità scelta per la massima compatibilità?
  • Quanto è effettivamente compatibile con le versioni più comuni di questi tre sistemi operativi UDF?
  • L'uso dell'UDF è davvero la migliore idea? Esiste un altro filesystem che avrebbe una migliore compatibilità, senza restrizioni problematiche come il limite di dimensione del file FAT32 4G e senza dover installare driver speciali in ogni singolo computer che lo tocca?

Risposte:


58

Innanzitutto, ho azzerato completamente l'unità prima di creare il filesystem UDF con:

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

Questo per evitare eventuali superblocchi rimanenti o altri metadati che potrebbero confondere il rilevamento del tipo di filesystem dei sistemi operativi (almeno azzerare il primo settore dovrebbe essere necessario, per cancellare la tabella delle partizioni; i primi pochi settori non sono utilizzati da UDF e un rimanente la tabella delle partizioni potrebbe davvero confondere le cose). È inoltre possibile utilizzare l' count=1opzione sul comando dd, al fine di azzerare più rapidamente solo i primi 512 byte dell'unità (in cui si trova di solito l'MBR), sebbene questo non sia stato testato.

Per creare il file system, il comando che ho usato era:

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

mkudffsil comando sarà disponibile su distribuzioni Linux basate su Debian (come Ubuntu) dopo l'installazione di un udftoolspacchetto:

sudo apt-get install udftools

La dimensione di blocco predefinita mkudffsè 2048, che è errata per un'unità flash USB (che utilizza settori a 512 byte). Poiché la dimensione del blocco viene utilizzata per trovare i metadati del file system, l'utilizzo di una dimensione del blocco errata può far sì che non venga riconosciuto come un file system UDF (poiché l'ancoraggio non sarà il punto previsto dal driver del file system). Nota che la mkudffspagina man è sbagliata; 512 è un valore valido per la dimensione del blocco (e il codice lo accetta esplicitamente).

Ho anche usato l'intero disco invece di una partizione; questo dovrebbe essere più compatibile.

Il risultato dei miei test finora:

  • Linux con il kernel più recente (2.6.31, da Ubuntu 9.10): funziona.
  • Linux con un kernel più vecchio: ha bisogno bs=512dell'opzione mount, perché ha usato in modo errato 2048 invece della dimensione del settore del dispositivo (risolto in commit 1197e4d ).
  • Windows Vista: funziona.
  • Un Mac nuovo di zecca: funziona.
  • Windows XP: può leggere bene, ma fornisce "accesso negato" quando si tenta di scrivere; sembra anche pensare che il disco sia pieno.

Anche se finora non ho provato a creare un file più grande di 4G, non vedo alcun motivo per cui non funzionerebbe.

Dato che ha funzionato perfettamente su tutti i sistemi operativi recenti (doverlo montare manualmente su Linux, che non sarà più necessario non appena Ubuntu 9.10 e Fedora 12 sono usciti), e ha funzionato in sola lettura in Windows XP (che è stata una sorpresa per me; mi aspettavo che non riconoscesse affatto il filesystem), usare UDF invece di FAT32 o NTFS in grandi unità flash USB sembra una buona idea.


1
come hai formattato / partizionato il disco? Ho azzerato il mio drive USB da 32 GB, usando dd if=/dev/zero of=/dev/sdb bs=1M, che lo lascia senza alcuna tabella di partizione.
romeov

4
@romeovs: non ho partizionato il disco. Questo è tutto il punto di azzerarlo, per rimuovere la tabella delle partizioni e gli avanzi del vecchio filesystem e mettere il filesystem UDF nell'intera unità non partizionata. La creazione di una tabella delle partizioni rischierebbe solo di confondere le cose.
CesarB,

3
Non ha funzionato per me con un disco rigido esterno SeaGate FreeAgent Desktop USB 2.0 da 500 GB (non sono sicuro che dovrebbe essere poiché questo thread riguarda le unità Flash). Windows 7 mostrava sempre l'unità come "non allocata" nell'utilità Gestione disco. Ho provato diverse combinazioni di opzioni.
Adam Monsen,

2
Grazie mille per il seguito. È raro, se non la prima volta, che vedo una domanda intelligente a cui viene poi elaborata una risposta elaborata dall'OP dopo alcuni giorni / settimane di test. Ottimo lavoro, grazie!
Luc,

1
Vedi anche lo script di Pieter Wuille che automatizza il processo di creazione UDF e crea una tabella delle partizioni per una migliore compatibilità. L'ho pubblicato come soluzione alternativa .
dolmen,

7

CesarB ha fatto un ottimo lavoro arrivando al nocciolo della questione. Una cosa che non può essere sottolineata abbastanza è quanto sia importante utilizzare la dimensione del blocco corretta durante la formattazione di UDF.

Ispirato al post di CesarB (e alle mie altre ricerche / prove), ho scritto uno script per automatizzare il processo di formattazione in UDF, utilizzando le dimensioni del settore correttamente rilevate. Vedi format-udf su GitHub . Caratteristiche notevoli:

  • Formatta un'unità a blocchi (disco rigido o unità flash) in Universal Disk Format (UDF)
    • Revisione UDF 2.01 utilizzata per la massima compatibilità
    • I primi 4096 settori vengono azzerati per cancellare qualsiasi MBR esistente (necessario per il corretto rilevamento UDF)
  • Il file system risultante può essere letto / scritto su più famiglie di sistemi operativi (Windows, OS X e Linux)
  • Funziona su qualsiasi sistema operativo con un ambiente Bash

A causa dell'ultimo punto, questo script che ho scritto non può essere utilizzato su Windows. Tuttavia, lo script verrà eseguito su OS X e Linux. Dopo averlo fatto, Windows dovrebbe essere in grado di rilevare magicamente l'unità UDF appena formattata.

Per rispondere direttamente alle domande inviate, format-udf:

  • scegliere lo strumento appropriato per la formattazione in base al sistema operativo e all'ambiente
  • rileva e popola automaticamente tutti i parametri necessari per la formattazione
  • massimizzare la compatibilità del sistema operativo (vedere la pagina GitHub per la tabella di compatibilità)
  • produrre il massimo set di funzionalità (e limitazioni minime) che il richiedente sta cercando

1
Ho dato un'occhiata alla tua utility format-udf su Github e ho una domanda al riguardo. Lo script rileva la dimensione del blocco fisico dell'unità. Sei sicuro che il parametro che Linux chiama "dimensione del settore fisico (blocco)" e non "dimensione del settore logico" sia quello corretto da usare? Fisico e logico possono significare molte cose. Ciò che hdparmchiama "Dimensione del settore logico" è l'unità di indirizzamento utilizzata dal protocollo SATA, mentre "Dimensione del settore fisico" è una cosa interna all'unità. Per me ha più senso che i "blocchi fisici" nelle specifiche UDF significhino davvero i "blocchi logici" di Linux.
Johan Myréen,

sei perfetto, @ JohanMyréen. ti invito a partecipare alla discussione su questo stesso argomento su GitHub. github.com/JElchison/format-udf/issues/13 C'è un cambiamento imminente lungo la linea della tua domanda, in attesa di ulteriori test su Windows 7 e 10.
j0nam1el

1
format-udf è davvero bello. L'ho appena testato su Linux e potrebbe leggere / scrivere l'unità formattata su OS X e su Windows 10.
mivk,

Mentre la capacità di "funzionare su qualsiasi sistema operativo con bash" ha un certo fascino, sarebbe ancora meglio implementare direttamente lo stesso approccio mkudffs; Intendo aggiungere qualche nuova --best-block-sizeopzione a mkudffs.
Marc

3

Mi sembra di ricordare di averlo fatto, il problema che ho riscontrato è che la versione di Linux che avevo montato lo aveva letto in sola lettura, poiché il driver non era stato creato per r / w. Ha funzionato in Windows, e penso che Mac.

Sì, una buona soluzione è difficile da trovare. Per un po 'ho avuto un disco esterno con una partizione fat32 che aveva i driver per win e mac, una partizione mac e una grande partizione ext3. Funzionava, ma significava installare i driver. Il trucco era che era anche avviabile su un mac (fw & usb), devi lasciare spazio e prendere alcune note, quindi puoi aggiungere partizioni dalla riga di comando e anche una tabella delle partizioni mac.

Il mondo ha bisogno di un file system gratuito, utilizzabile da tutto. ZFS sarebbe una buona scelta. :-)


ZFS sarebbe bello avere, ma confonderebbe molte persone. È anche un po 'eccessivo per i media esterni, non credi? Più adatto per file server giganti, da quello che posso dire.
Mike Cooper,

2
Bene, ZFS controlla la somma e il recupero degli errori, il che ha molto senso per le cose traballanti dei consumatori. MrGreen Stiamo tutti archiviando abbastanza in questi giorni che un po 'di marcio alla fine mangerà qualcosa (vedi lo studio che Sun ha fatto sul problema che porta a ZFS, nota anche il tasso di errore non rilevato per la codifica su HD). Abbiamo bisogno di un vero fs che tutto può usare, e fatX non è vero. Non ancora qui, davvero.
Ronald Pottol,

ZFS non funziona in Linux
ignis il


1

Per ottenere la massima compatibilità dovresti usare mkudffs dal progetto udftools almeno nella versione 2.0. Non sono necessari parametri speciali, tutto viene rilevato automaticamente.

Ci sono 3 grandi restrizioni:

  1. I sistemi Microsoft Windows non riconoscono il disco rigido non rimovibile se non ha una tabella delle partizioni MBR o GPT.

  2. I sistemi Apple Mac OS X non riconoscono il filesystem UDF sul disco partizionato.

  3. Probabilmente tutti i sistemi (tranne i recenti kernel Linux) non riconoscono il filesystem UDF se la dimensione del blocco UDF non corrisponde alla dimensione del settore logico del disco.

Tool mkudffs dalla versione 2.0 gestisce tutte e 3 le restrizioni. Durante la formattazione di dischi rigidi non rimovibili, crea una tabella MBR "falsa" che inizia nel settore 0 e si estende su tutto il disco. Quindi il filesystem UDF può essere letto dalla prima partizione (necessaria per Microsoft Windows) o da tutto il disco (necessario per Apple Mac OS X). Vedi la pagina man di mkudffs 2.0 per maggiori dettagli.


0

NTFS, con NTFS-3G puoi scrivere su di esso usando Linux e dare un'occhiata a http://macntfs-3g.blogspot.com/ per il tuo Mac.


4
Questo sembra coinvolgere driver extra per Mac.
Mike Cooper,

Se non vuole usare FAT, è bloccato e NTFS-3G funziona già su Mac, ha bisogno di ciò che ho collegato per scrivere.
user10547

4
Un piccolo problema è che non è il mio Mac. Preferirei non dover installare un driver nei computer di altre persone.
CesarB,

-1

Esistono driver per Windows (e Mac) che possono accedere alle partizioni EXT3, quindi puoi formattarlo su EXT3 e usarlo (con i driver) ovunque. Un altro modo sarebbe utilizzare un archiever per archiviare il file di grandi dimensioni in due o più file fino a 4 GB ciascuno. In questo modo puoi usare il filesystem FAT32 che è universale. Sul computer host devi estrarre l'archivio per usarlo, ma è un modo per farlo senza driver. Usa un archiviatore in formato RAR poiché funziona su Windows, Linux, Mac, anche se penso che anche un formato ZIP potrebbe funzionare. Ma andrei con i driver. Una volta installato puoi fare qualsiasi cosa senza restrizioni. Nel PC ho usato Ext2Fsd per l'accesso completo a EXT2, EXT3 ed EXT4 e Macdrive per l'accesso completo al formato MacOS. Esistono sicuramente strumenti simili per Linux e MacOS e per accedere completamente alle partizioni NTFS ecc. Se hai solo bisogno dell'accesso in lettura, non hai bisogno di alcun driver, Linux e MacOS supportano la lettura delle partizioni NTFS, quindi formatta l'USB come NTFS! Se tutti questi computer sono sulla stessa rete, le cose sono più facili! Crea il formato USB e condividilo sulla rete. Altri computer non dovrebbero avere problemi ad accedervi!


2
-1 perché la risposta non menziona nemmeno UDF!
dolmen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.