it-swarm-eu.dev

Utilizzo di UDF su un'unità flash USB

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

Sto pensando di formattarlo come UDF invece, che spero lo permetta di essere letto (e possibilmente anche scritto) sui tre più popolari sistemi operativi (Windows, MacOS e Linux), senza dover installare driver aggiuntivi . Tuttavia, da quello che ho già trovato sul Web, sembrano esserci diversi piccoli trucchi correlati a quali parametri vengono utilizzati per creare il filesystem, che può ridurre la compibilità (ma la maggior parte delle pagine che ho trovato riguardano i supporti ottici, non il flash USB unità).

Mi piacerebbe sapere:

  • Quale utilità dovrei usare per creare il filesystem? (Finora ho trovato mkudffs e genisoimage, e mkudffs sembra l'opzione migliore.)
  • Quali parametri dovrei usare con l'utility scelta per la massima compatibilità?
  • Quanto è compatibile con le versioni più comuni di questi tre sistemi operativi UDF?
  • L'utilizzo di UDF è davvero l'idea migliore? 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?
74
CesarB

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

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

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

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

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

Il comando mkudffs diventerà disponibile sulle distribuzioni Linux basate su Debian (come Ubuntu) dopo aver installato un pacchetto udftools:

Sudo apt-get install udftools

Il blocco predefinito per mkudffs è 2048, che è errato per un'unità flash USB (che utilizza settori da 512 byte). Poiché la dimensione del blocco viene utilizzata per trovare i metadati del filesystem, l'uso di una dimensione di blocco errata può far sì che non venga riconosciuto come un filesystem UDF (poiché l'ancoraggio non sarà dove il driver del filesystem si aspetta). Si noti che la pagina man di mkudffs è errata; 512 è un valore valido per la dimensione del blocco (e il codice lo accetta esplicitamente).

Ho anche usato l'intera unità invece di una partizione; questo dovrebbe essere più compatibile.

Il risultato dei miei test fino ad ora:

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

Sebbene non abbia finora provato a creare un file più grande di 4G, non vedo ragioni per cui non funzioni.

Dato che ha funzionato perfettamente su tutti i sistemi operativi recenti (dovendo montare manualmente su Linux, che non sarà più necessario non appena Ubuntu 9.10 e Fedora 12 sono fuori), e ha funzionato di 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 chiavette USB sembra una buona idea.

55
CesarB

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

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

  • Formatta un'unità di blocco (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 rilevamento UDF corretto)
  • 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 pubblicate, 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 (consultare la pagina GitHub per la tabella di compatibilità)
  • fornire il set di funzionalità massimo (e le limitazioni minime) che il richiedente sta cercando
7
j0nam1el

Mi sembra di ricordare di averlo fatto, il problema che ho riscontrato è che la versione di Linux che avevo montato lo leggeva solo perché il driver non era stato creato per il r/w. Ha funzionato in Windows, e penso mac.

Sì, una buona soluzione è difficile da trovare. Per un po 'ho avuto un disco esterno con una partizione fat32 con driver per win e mac, una partizione mac e una grande partizione ext3. Funzionava, ma significava installare i driver. Neat trick era anche avviabile su mac (fw e usb), devi lasciare spazio e prendere appunti, quindi puoi aggiungere partizioni tramite la riga di comando e una tabella di partizione mac.

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

3
Ronald Pottol

Pieter Wuille ha scritto uno strumento per partizionare e formattare un disco per creare un layout UDF che sia compatibile con Windows (> = Vista, sola lettura per XP), MacOS X 10.5, Linux 2.6.30+:

In alternativa:

2
dolmen

Per ottenere la massima compatibilità dovresti usare mkudff da udftools progetto 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 fisso 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 (eccetto i recenti kernel di 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. Quando si formattano dischi rigidi non rimovibili, crea una tabella MBR "falsa" che inizia nel settore 0 e occupa l'intero disco. Quindi il filesystem UDF può essere letto dalla prima partizione (necessaria per Microsoft Windows) o dall'intero disco (necessario per Apple Mac OS X). Vedi la pagina man di mkudffs 2.0 per maggiori dettagli.

1
Pali

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

0
user10547