# Sistema de archivos FAT en Linux

Linux tiene soporte para varios controladores de sistema de archivos para el formato de sistema de archivos de tabla de asignación de archivos (FAT). Estos son comúnmente conocidos por los nombres utilizados en el comando mount para invocar controladores particulares en el núcleo: msdos, vfat y umsdos.

## Diferencias, ventajas y desventajas.

Todos los controladores del sistema de archivos de Linux admiten los tres tipos de FAT: FAT12, FAT16 y FAT32. En lo que difieren es en la provisión de soporte para nombres de archivo largos, más allá de la estructura de nombre de archivo 8.3 del formato del sistema de archivos FAT original, y en la provisión de la semántica de archivos Unix que no existe como estándar en el formato del sistema de archivos FAT, como los permisos de archivos. Los controladores del sistema de archivos son mutuamente excluyentes. Solo se puede usar uno para montar cualquier volumen de disco dado en un momento dado. Por lo tanto, la elección entre ellos está determinada por los nombres de archivo largos y la semántica de Unix que admiten y el uso que uno quiere hacer del volumen del disco.

### msdos

El controlador del sistema de archivos msdos no proporciona semántica adicional de archivos Unix y tampoco admite archivos largos. Si se monta un sistema de archivos de disco FAT con este controlador, solo se mostrarán archivos con un nombre 8.3; no se podrá acceder a nombres de archivo largos, ni se mantendrán estructuras de datos de nombre de archivo largas de ningún tipo en el volumen del disco. El controlador del sistema de archivos vfat proporciona compatibilidad con nombres de archivo largos utilizando las mismas estructuras de datos de disco que Microsoft Windows utiliza para la compatibilidad con nombres de archivo largos VFAT en volúmenes con formato FAT, pero no admite ninguna semántica adicional de archivos Unix. El controlador del sistema de archivos umsdos proporciona soporte de nombre de archivo largo y semántica adicional de archivos Unix. Sin embargo, lo hace utilizando estructuras de datos en disco que no son reconocidas por ningún controlador de sistema de archivos para ningún sistema operativo que no sea Linux.

### umsdos

La ventaja clave para umsdos de los tres es que proporciona una semántica completa de archivos Unix. Por lo tanto, se puede usar en situaciones en las que es deseable instalar Linux y ejecutarlo desde un volumen de disco FAT, que requiere que dicha semántica esté disponible. Sin embargo, Linux instalado y ejecutándose desde dicho volumen de disco es más lento que Linux instalado y ejecutándose desde un volumen de disco formateado con, por ejemplo, el formato del sistema de archivos ext2. Además, a menos que un programa de utilidad se ejecute regularmente cada vez que uno cambie de ejecutar Windows a ejecutar Linux, ciertos cambios realizados en archivos y directorios en el disco por Windows provocarán mensajes de error sobre archivos inaccesibles en Linux.

### vfat

vfat, aunque carece de una semántica completa de archivos Unix y de la capacidad de tener Linux instalado y ejecutándose desde un volumen de disco FAT, no tiene las desventajas antes mencionadas de umsdos cuando se trata simplemente de compartir datos en un volumen de disco FAT entre Linux y otros sistemas operativos sistemas como Windows. Sus estructuras de datos son las mismas que las utilizadas por Windows para los nombres de archivo largos VFAT, y no requiere ejecutar una utilidad de sincronización para evitar que las estructuras de datos de Windows y Linux se desarticulen. Por esta razón, es el más apropiado de los controladores de sistema de archivos FAT de Linux para usar en la mayoría de las situaciones.
| Controlador | Soporte para nombres largos | Semántica de archivos Unix | Comentarios |
| msdos | No | No | solo nombres de archivo 8.3 |
| vfat | Sí | No | usa las mismas estructuras de datos que usa Windows |
| umsdos | Sí | Sí | puede alojar Linux; puede necesitar mantenimiento al cambiar de SO |

## Puntos en común

Como se mencionó anteriormente, todos los controladores del sistema de archivos de Linux admiten los tres tamaños de tabla de asignación de archivos, 12 bits, 16 bits y 32 bits. Otras características comunes que todos admiten son varias opciones de montaje de Linux (especificadas con la opción -o del comando de mount):

### uid y gid

    Estas dos opciones le indican al controlador del sistema de archivos que establezca el ID de usuario propietario (por defecto, en el caso de umsdos) y el ID de grupo para que sean un valor único y especificado para todos los archivos del volumen. Ambas ID se especifican como valores numéricos (como se encuentran en el /etc/passwd ). Así, por ejemplo, para especificar que el conductor vfat que todos los archivos y directorios son tener dueño ID 745 e ID de grupo 15, el mount de comandos podría ser invocada como mount -t vfat -o uid=745,gid=15. Los controladores del sistema de archivos de Linux actualmente no incorporan soporte para contraseñas de archivos/directorios en volúmenes FAT12/FAT16/FAT32 y permisos de acceso multiusuario mundo/grupo/propietario para derechos de lectura/escritura/eliminación/ejecución en volúmenes FAT12/FAT16 implementados en varios sistemas operativos de la familia Digital Research, incluidos DR-DOS, PalmDOS, Novell DOS, OpenDOS, FlexOS, DOS concurrente, Multiusuario DOS, System Manager y REAL/32 .

### umask

    Esta opción configura la umask para que se aplique globalmente a todos los archivos del volumen. Por ejemplo, para especificar al controlador vfat que ningún "grupo" o acceso "otro" es que se le permita, al mount comando se invoca como mount -t vfat -o umask=077.

### conv

    Esta opción especifica la semántica de conversión del contenido del archivo. Es posible que los controladores del sistema de archivos conviertan las convenciones de nueva línea en archivos, entre terminación LF y terminación CRLF, sobre la marcha a medida que los archivos se leen y escriben. Por defecto, esta conversión está completamente deshabilitada. Los controladores del sistema de archivos pueden realizar la conversión de algunos archivos, intentando detectar automáticamente qué archivos convertir en función de la porción de extensión del nombre de archivo, o globalmente para todos los archivos. Estos tres niveles de conversión se especifican como conv=b (para "binario"), conv=a (para "detección automática") y conv=t (para "texto"), respectivamente. Las últimas dos opciones conllevan un riesgo inherente de corromper los datos de archivos que no son de texto. Ninguna conversión es el valor predeterminado.

## Estructuras de datos de umsdos

El controlador del sistema de archivos umsdos FAT almacena toda la información adicional relacionada con la semántica de archivos Unix en lo que, para otro controlador del sistema de archivos FAT, parece ser solo un archivo normal en cada directorio y subdirectorio, llamado --LINUX-. --- .
En ausencia de este archivo en cualquier directorio dado, y por lo tanto, de manera predeterminada, el controlador del sistema de archivos umsdos proporciona la misma semántica que el controlador del sistema de archivos msdos para el directorio: solo nombres de archivo 8.3 y ninguna semántica de archivo Unix adicional. Para habilitar las capacidades adicionales del controlador umsdos, es necesario crear ese archivo en el directorio y sincronizar sus datos internos con los datos FAT normales para cualquier entrada existente que ya esté en el directorio. Esto se hace con una herramienta llamada umssync.
Este es el programa de utilidad que se ejecuta, a través de cada directorio en el volumen del disco, cada vez que uno cambia de ejecutar Windows a ejecutar Linux, para que el controlador del sistema de archivos umsdos incorpore cualquier cambio realizado en archivos y directorios por Windows en sus estructuras de datos privadas en su archivo --LINUX-.--- . De forma predeterminada, la herramienta umssync crea archivos --LINUX-.--- en directorios si aún no existen, lo que da como resultado un archivo de este tipo en cada directorio del volumen del disco. Al cambiar entre Windows y Linux, este comportamiento a menudo no se considera deseable. Por lo tanto, el modo normal de operación cuando se invoca umssync después de cambiar de Windows a Linux (que generalmente se realiza ejecutando la herramienta en el momento de arranque de Linux desde un script de inicio) es emplear la opción -c para el comando, que impide la creación de cualquier --LINUX-.--- nuevo --LINUX-.--- en directorios que aún no los posee.

## Instalar Linux y arrancarlo desde volúmenes FAT usando umsdos

Como se mencionó, umsdos permite instalar Linux y luego iniciarlo y ejecutarlo desde un volumen de disco en formato FAT. La ventaja de esto es que permite el uso de Linux en una computadora donde DOS ya está instalado, sin que sea necesario volver a particionar la unidad. Linux no se inicia directamente desde un registro de inicio de volumen en tal escenario. En cambio, DOS se inicia primero y se usa loadlin o linld para iniciar Linux desde DOS.
La convención para tal instalación es que el directorio raíz de Linux sea un subdirectorio del directorio raíz real del volumen de arranque de DOS, p. Ej. C:\LINUX . Los diversos directorios de nivel superior de Linux son, por lo tanto, para DOS, directorios como C:\LINUX\ETC (para /etc ), C:\LINUX\BIN (para /bin ), C:\LINUX\LIB (para /lib ), etcétera. El controlador del sistema de archivos umsdos antepone automáticamente C:\LINUX\ a todos los nombres de ruta. La ubicación del directorio raíz de Linux se proporciona al controlador del sistema de archivos umsdos en primer lugar a través de una opción para el comando loadlin . Entonces, por ejemplo, para el directorio raíz mencionado anteriormente, loadlin se loadlin con una línea de comando como loadlin c:\linux\boot\vmlinuz rw root=c:\linux.
La instalación de Linux en dicho directorio en primer lugar simplemente implica desempaquetar archivos de un archivo en ese directorio y sus subdirectorios. Tal instalación también generalmente requiere el uso de un archivo de intercambio en lugar de una partición de intercambio para Linux, sin embargo, esto está relacionado con el deseo de no repartir el disco duro y no está relacionado con el controlador del sistema de archivos umsdos per se.

## Historial de desarrollo y soporte de kernel/distribuciones

La mayoría de las principales distribuciones de Linux, incluidas RedHat, SuSE y Debian, no emplean umsdos para permitir la instalación de Linux en un volumen de disco FAT. Sin embargo, algunas distribuciones sí. Estos incluyen distribuciones como Phat Linux, que se instala en C:\PHAT en DOS desempacando un archivo ZIP y se inicia ejecutando un script COMMAND.COM. llamado LINUX.BAT, y ZipSlack.
El proyecto UMSDOS se inició en 1992 por Jacques Gelinas y se puso a disposición de la red en enero de 1994 como un parche. Se incluyó en la distribución estándar comenzando con el núcleo 1.1.36. UMSDOS se eliminó del núcleo Linux 2.6.11 por falta de mantenimiento. UVFAT, una extensión de UMSDOS para usar las estructuras de datos de Windows para nombres de archivo largos en lugar de la suya, se suspendió antes del lanzamiento. Deberían funcionar en núcleos 2.4.x.
Las distribuciones anteriores de Linux que usaban UMSDOS son MuLinux, Monkey Linux y Winlinux 2000.

## Acceso a volúmenes formateados FAT sin soporte de kernel

Aunque los controladores del sistema de archivos en el kernel hacen posible acceder a archivos y directorios en volúmenes formateados FAT de la manera normal, también es posible hacerlo sin el soporte del controlador del kernel, utilizando los programas de utilidad que forman el conjunto de utilidades mtools. Al igual que el controlador del sistema de archivos FAT vfat, mtools proporciona compatibilidad con nombres de archivo largos utilizando las mismas estructuras de datos de disco que utiliza Microsoft Windows.
Alternativamente, se puede usar uno de los controladores del sistema de archivos FUSE: FatFuse, FuseFat o mountlo.

## Sistema de archivos de superposición POSIX

Un equivalente moderno de UMSDOS es POSIX Overlay Filesystem (posixovl). Funciona en FUSE.