Uso de UDF en una unidad flash USB

75

Después de no poder copiar un archivo más grande que 4G a mi unidad flash USB 8G , lo formateé como ext3. Si bien hasta ahora esto funciona bien para mí, causará problemas si quiero usarlo para copiar archivos a alguien que no usa Linux.

Estoy pensando en formatearlo como UDF , lo que espero permita que sea leído (y posiblemente incluso escrito) en los tres sistemas operativos más populares (Windows, MacOS y Linux), sin tener que instalar ningún controlador adicional . Sin embargo, por lo que encontré en la web, parece haber varias pequeñas trampas relacionadas con los parámetros que se utilizan para crear el sistema de archivos, lo que puede reducir la compatibilidad (pero la mayoría de las páginas que encontré son sobre medios ópticos, no USB flash). unidades).

Me gustaría saber:

  • ¿Qué utilidad debo usar para crear el sistema de archivos? (Hasta ahora he encontrado mkudffsy genisoimage, y mkudffsparece la mejor opción.)
  • ¿Qué parámetros debo usar con la utilidad elegida para una compatibilidad máxima?
  • ¿Cuán compatible es en realidad con las versiones más comunes de estos tres sistemas operativos UDF?
  • ¿Usar UDF es realmente la mejor idea? ¿Existe otro sistema de archivos que tenga una mejor compatibilidad, sin restricciones problemáticas como el límite de tamaño de archivo FAT32 4G y sin tener que instalar controladores especiales en cada computadora que lo toque?
CesarB
fuente
3
Pregunta relacionada: serverfault.com/questions/55089/…
CesarB

Respuestas:

57

Primero, puse a cero completamente la unidad antes de crear el sistema de archivos UDF con:

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

Esto es para evitar cualquier superbloque sobrante u otros metadatos que puedan confundir la detección del tipo de sistema de archivos del sistema operativo (debería ser necesario al menos poner a cero el primer sector, para borrar la tabla de particiones; los primeros sectores no son utilizados por UDF, y un sobrante) tabla de particiones realmente podría confundir las cosas). También puede usar el count=1interruptor en el comando dd, para poner a cero más rápidamente solo los primeros 512 bytes de la unidad (donde generalmente se encuentra el MBR), aunque esto no se probó.

Para crear el sistema de archivos, el comando que utilicé fue:

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

mkudffsEl comando estará disponible en las distribuciones de Linux basadas en Debian (como Ubuntu) después de instalar un udftoolspaquete:

sudo apt-get install udftools

El tamaño de bloque predeterminado para mkudffs2048 es incorrecto para una unidad flash USB (que utiliza sectores de 512 bytes). Dado que el tamaño de bloque se usa para encontrar los metadatos del sistema de archivos, el uso de un tamaño de bloque incorrecto puede hacer que no se reconozca como un sistema de archivos UDF (ya que el ancla no estará donde está esperando el controlador del sistema de archivos). Tenga en cuenta que la mkudffspágina del manual es incorrecta; 512 es un valor válido para el tamaño del bloque (y el código lo acepta explícitamente).

También usé todo el disco en lugar de una partición; Esto debería ser más compatible.

El resultado de mis pruebas hasta ahora:

  • Linux con el kernel más reciente (2.6.31, de Ubuntu 9.10): funciona.
  • Linux con un kernel anterior: necesita la bs=512opción mount, porque usó incorrectamente 2048 en lugar del tamaño del sector del dispositivo (corregido en commit 1197e4d ).
  • Windows Vista: funciona.
  • Una Mac nueva: funciona.
  • Windows XP: puede leer bien, pero proporciona "acceso denegado" cuando intenta escribir; También parece pensar que el disco está lleno.

Si bien hasta ahora no he intentado crear un archivo más grande que 4G, no veo ninguna razón por la que no funcione.

Dado que funcionó perfectamente en todos los sistemas operativos recientes (solo tener que montar manualmente en Linux, que ya no será necesario tan pronto como Ubuntu 9.10 y Fedora 12 estén fuera), y funcionó de solo lectura en Windows XP (lo cual fue una sorpresa para mí; esperaba que no reconociera el sistema de archivos), usar UDF en lugar de FAT32 o NTFS en grandes unidades flash USB parece una buena idea.

CesarB
fuente
1
¿Cómo formateó / particionó la unidad? He puesto a cero mi unidad USB de 32 GB, usando dd if=/dev/zero of=/dev/sdb bs=1M, lo que lo deja sin ninguna tabla de particiones.
romeovs
44
@romeovs: no particioné el disco. Ese es el punto de ponerlo a cero, eliminar la tabla de particiones y las sobras del sistema de archivos antiguo y colocar el sistema de archivos UDF en toda la unidad no particionada. Crear una tabla de partición solo correría el riesgo de cosas confusas.
CesarB
3
No funcionó para mí con un disco duro externo SeaGate FreeAgent Desktop USB 2.0 de 500 GB (no estoy seguro de si debería hacerlo, ya que este hilo es sobre unidades flash). Windows 7 siempre mostró la unidad como "sin asignar" en la utilidad Administración de discos. Probé varias combinaciones de opciones diferentes.
Adam Monsen
2
Muchas gracias por el seguimiento. Es raro, si no la primera vez, que veo una pregunta inteligente que luego es respondida elaboradamente por el OP después de unos días / semanas de pruebas. Buen trabajo, gracias!
Luc
1
Vea también el script de Pieter Wuille que automatiza el proceso de creación de UDF y crea una tabla de particiones para una mejor compatibilidad. Lo publiqué como una solución alternativa .
dolmen
7

CesarB hizo un gran trabajo al llegar al quid de la cuestión. Una cosa que no se puede subrayar lo suficiente es lo importante que es usar el tamaño de bloque adecuado al formatear UDF.

Inspirado por la publicación de CesarB (y mis otras investigaciones / pruebas), escribí un script para automatizar el proceso de formateo en UDF, utilizando el tamaño de sector detectado correctamente. Ver format-udf en GitHub . Características notables:

  • Formatea una unidad de bloque (disco duro o unidad flash) en formato de disco universal (UDF)
    • Revisión 2.01 UDF utilizada para máxima compatibilidad
    • Los primeros 4096 sectores se reducen a cero para borrar cualquier MBR existente (necesario para la detección adecuada de UDF)
  • El sistema de archivos resultante se puede leer / escribir en varias familias de sistemas operativos (Windows, OS X y Linux)
  • Se ejecuta en cualquier sistema operativo que tenga un entorno Bash

Debido al último punto, este script que escribí no se puede usar en Windows. Sin embargo, el script se ejecutará en OS X y Linux. Después de hacerlo, Windows debería poder detectar mágicamente la unidad UDF recién formateada.

Para responder directamente a las preguntas publicadas, format-udf:

  • elija la herramienta adecuada para formatear según el sistema operativo y el entorno
  • Detecta y completa automáticamente todos los parámetros necesarios para formatear
  • maximizar la compatibilidad del sistema operativo (consulte la página de GitHub para ver el cuadro de compatibilidad)
  • producir el conjunto máximo de características (y limitaciones mínimas) que el autor de la pregunta está buscando
j0nam1el
fuente
1
Eché un vistazo a su utilidad format-udf en Github y tengo una pregunta al respecto. El script detecta el tamaño del bloque físico de la unidad. ¿Está seguro de que el parámetro que Linux llama "tamaño de sector físico (bloque)" y no "tamaño de sector lógico" es el correcto? Físico y lógico puede significar muchas cosas. Lo que se hdparmllama "Tamaño del sector lógico" es la unidad de direccionamiento utilizada por el protocolo SATA, mientras que el "Tamaño del sector físico" es una cosa interna de la unidad. Para mí tiene más sentido que los "bloques físicos" en la especificación UDF realmente signifiquen los "bloques lógicos" de Linux.
Johan Myréen
eres perfecto, @ JohanMyréen. Los invito a unirse a la discusión sobre este mismo tema en GitHub. github.com/JElchison/format-udf/issues/13 Hay un cambio inminente en la línea de su pregunta, en espera de pruebas adicionales en Windows 7 y 10.
j0nam1el
1
format-udf es realmente agradable. Solo lo probé en Linux y pude leer / escribir la unidad formateada en OS X y en Windows 10.
mivk
Si bien la capacidad de "ejecutarse en cualquier sistema operativo con bash" tiene cierto atractivo, sería aún mejor implementar el mismo enfoque mkudffsdirectamente; Me refiero a agregar alguna nueva --best-block-sizeopción a mkudffs.
MarcH
3

Creo recordar haberlo hecho, el problema que encontré es que la versión de Linux que lo había montado era de solo lectura, ya que el controlador no había sido creado para r / w. Funcionó en Windows, y creo que Mac.

Sí, una buena solución es difícil de encontrar. Durante un tiempo tuve una unidad externa con una partición fat32 que tenía controladores para win y mac, una partición mac y una gran partición ext3. Funcionó, pero significó instalar controladores. Un buen truco fue que también era arrancable en una Mac (fw y usb), tienes que dejar espacio y tomar algunas notas, luego puedes agregar particiones a través de la línea de comandos y una tabla de particiones de Mac.

El mundo necesita un sistema de archivos gratuito, utilizable por todo. ZFS sería una buena opción. :-)

Ronald Pottol
fuente
Sería bueno tener ZFS, pero confundiría a mucha gente. También es un poco excesivo para los medios externos, ¿no te parece? Más adecuado para servidores de archivos gigantes, por lo que puedo decir.
Mike Cooper
2
Bueno, ZFS verifica la suma y la recuperación de errores, lo que tiene mucho sentido para las cosas escamosas de los consumidores. :-D Todos estamos almacenando lo suficiente en estos días que la putrefacción comerá algo eventualmente (vea el estudio que hizo Sun sobre el problema que condujo a ZFS, también tenga en cuenta la tasa de error no detectada para la codificación en HD). Necesitamos un fs real que todo pueda usar, y fatX no lo es. Todavía no aquí, de verdad.
Ronald Pottol
ZFS no funciona en Linux
ignis
1

Para lograr la máxima compatibilidad, debe usar mkudffs del proyecto udftools al menos en la versión 2.0. No se necesitan parámetros especiales, todo se detecta automáticamente.

Hay 3 grandes restricciones:

  1. Los sistemas Microsoft Windows no reconocen el disco duro no extraíble si no tiene una tabla de particiones MBR o GPT.

  2. Los sistemas Apple Mac OS X no reconocen el sistema de archivos UDF en el disco particionado.

  3. Probablemente todos los sistemas (excepto los núcleos Linux recientes) no reconocen el sistema de archivos UDF si el tamaño del bloque UDF no coincide con el tamaño del sector lógico del disco.

Las herramientas mkudffs desde la versión 2.0 manejan las 3 restricciones. Al formatear discos duros no extraíbles, crea una tabla MBR "falsa" que comienza en el sector 0 y abarca todo el disco. Por lo tanto, el sistema de archivos UDF se puede leer desde la primera partición (necesaria para Microsoft Windows) o desde el disco completo (necesario para Apple Mac OS X). Consulte la página de manual de mkudffs 2.0 para obtener más detalles.

Pali
fuente
0

NTFS, con NTFS-3G puede escribirle usando Linux y echar un vistazo a http://macntfs-3g.blogspot.com/ para su Mac.

usuario10547
fuente
44
Esto parece involucrar controladores adicionales para Mac.
Mike Cooper
Si no quiere usar FAT, está atascado y NTFS-3G funciona en Mac, ya necesita lo que he vinculado para escribir.
user10547
44
Un pequeño problema es que no es mi Mac. Preferiría no tener que instalar un controlador en las computadoras de otras personas.
CesarB
-1

Hay controladores para Windows (y Mac) que pueden acceder a las particiones EXT3, por lo que puede formatearlo en EXT3 y usarlo (con controladores) en todas partes. Otra forma sería utilizar un archivador para almacenar el archivo grande en dos o más archivos de hasta 4 GB cada uno. De esta manera puede usar el sistema de archivos FAT32 que es universal. En la computadora host, debe extraer el archivo para poder usarlo, pero es una forma de hacerlo sin controladores. Use un archivador de formato RAR ya que funciona en Windows, Linux, Mac, aunque creo que un formato ZIP también podría funcionar. Pero iría con los conductores. Una vez instalado, puede hacer cualquier cosa sin restricciones. En la PC he usado Ext2Fsd para acceso completo a EXT2, EXT3 y EXT4 y Macdrive para acceso completo a formato MacOS. Seguramente existen herramientas similares para Linux y MacOS también para acceder completamente a particiones NTFS, etc. Si solo necesita acceso de lectura, no necesita ningún controlador, Linux y MacOS admiten la lectura de particiones NTFS, ¡formatee el USB como NTFS! Si todas estas computadoras están en la misma red, ¡las cosas son más fáciles! Haga que el USB sea formateado y compártalo en la red. ¡Otras computadoras no deberían tener problemas para acceder!

spapakons
fuente
2
-1 porque la respuesta ni siquiera menciona UDF!
dolmen