4 SISTEMA DE FICHEROS MS-DOS (FAT).
El sistema de ficheros de MS-DOS está muy extendido debido a la popularidad de este sistema operativo. Puede ser usado por Linux y Windows NT.
Los bloques físicos se agrupan en bloques lógicos denominados clústeres. Toda la gestión se realiza considerando clústeres.
La estructura de un volumen MS-DOS es la que sigue:
El sector de arranque es donde se almacena la información del volumen y el que contiene la rutina de carga del propio DOS. Los datos en él almacenados son:
/usuarios/profes/gyermo/SESION3/disco
.
Para trabajar
con él NO os copiéis el fichero a vuestro
directorio. Esto supondría un desperdicio inútil de
espacio de disco. El área de datos estaría duplicada en cada
uno de vuestros directorios.
Haced un enlace simbólico al fichero desde
el lugar donde vayáis a trabajar:
ln -s /usuarios/profes/gyermo/SESION3/disco discoAsí, entre todos ocuparemos unas 200K de disco, mientras que si os lo copiáis, se duplicarán los bloques de datos del fichero y ocuparemos 20M de espacio de disco.
od
. Tenéis a vuestra disposición su página de
manual en encina en inglés y, como ayuda, la traducción de
la versión de od
de tejo en el fichero
/usuarios/profes/gyermo/SESION3/od.man
en formato
ASCII.-N 1000
),
como bytes expresados en decimal (-td1
) y con los
desplazamientos expresados en decimal también (-Ad
),
el resultado que se obtiene es el siguiente:
/home/so/SESION3$ od -Ad -N100 -td1 disco 0000000 235 60 144 109 107 100 111 115 102 115 0 0 2 2 1 0 0000016 2 0 2 0 8 248 4 0 63 0 255 0 0 0 0 0 0000032 0 0 0 0 0 0 41 29 69 225 54 32 32 32 32 32 0000048 32 32 32 32 32 32 70 65 84 49 54 32 32 32 14 31 0000064 190 91 124 172 34 192 116 11 86 180 14 187 7 0 205 16 0000080 94 235 240 50 228 205 22 205 25 235 254 84 104 105 115 32 0000096 105 115 32 110 0000100
od
.
Por ejemplo, lo primero que hay que conocer es la instrucción
de salto a la rutina de arranque, que ocupa tres bytes. Como
se trata de una instrucción en ensamblador, lo mejor es
expresarla en hexadecimal. Así que damos la orden:
/home/so/SESION3$ od -Ad -N3 -tx1 disco 0000000 eb 3c 90 0000003Por lo tanto, la instrucción de salto es
EB 3C 90
.
/home/so/SESION3$ od -Ad -j11 -N2 -tx1 disco 0000000 0 2 0000002Luego los números obtenidos son 0x00 y 0x02. Como se usa little endian, el número de dos bytes es el 0x0200, que en decimal es 512. Luego el tamaño del sector es 512 bytes.
od
trabaja con formato big endian,
pues encina es una máquina big endian, observad cómo nos realiza
mal la conversión si le decimos que queremos que nos diga el
número de dos bytes almacenado en esa posición del fichero:
/home/so/SESION3$ od -Ad -j11 -N2 -td2 disco 0000000 2 0000002Esto nos daría un sector de 2 bytes, lo que es absurdo. Sin embargo, en Linux probablemente sí funcione, al ser el PC una máquina little endian. El resto de entradas de la tabla las podéis hacer vosotros y servirán para prácticas de más abajo.
Sección | Dirección inicio | Sector inicio |
Sector de arranque | 0x0 (0) | 0 |
FAT | 0x200 (512) | 1 |
Directorio raíz | 0x600 (1536) | 3 |
Área de datos | 0x800 (2048) | 4 |
Las entradas del directorio raíz, así como las de cualquier otro subdirectorio tienen el siguiente formato:
Si el primer byte de un fichero es 0, significa que ya no hay más entradas de directorio.
Si es 0xE5, significa que esa entrada de directorio está libre.
Si es 0x5, significa que el primer carácter del nombre del fichero es 0xE5 (s ).
Los atributos del fichero vienen codificados en los bits de un byte:
Debido a las limitadas posibilidades de nombrar a un fichero (8+3 caracteres como máximo), el sistema de MS-DOS se amplió para poder utilizar nombres de ficheros largos y aún así mantener compatibilidad con lo anterior.
Formato de la hora: -------------------- H-Hora. M-Minuto. S-Par de segundos. |HHHHH|MMMMMM|SSSSS| -------------------- Formato de la fecha: -------------------- A-Año (desde 1980). M-Mes. D-Día del mes. |AAAAAAA|MMMM|DDDDD| --------------------Para la hora, tened en cuenta que como a los diseñadores no les cabía en 16 bits especificar la hora (0-23), el minuto (0-60) y los segundos (0-60), decidieron que vendría los pares de segundo. Es decir, que si en ese campo hay un siete, los segundos efectivos son catorce. Van especificados de dos en dos. Nótese que con este formato de fecha, se puede llegar hasta el año 1980+127=2107. El sistema de ficheros de MS-DOS padece de "efecto 2108" ;).
DIR \ /S
"
ejecutada sobre ese disco. Esta orden lista el contenido de todos
los ficheros y directorios del disco. El formato puede ser
parecido a este:
El volumen de la unidad D no tiene etiqueta. El número de serie del volumen es: 20FA-6AF1 Directorio de D:\WINNT\Profiles\Administrador\Escritorio\Pedro 23/02/00 14.24 <DIR> . 23/02/00 14.24 <DIR> .. 02/10/99 11.59 11.057 Form1.frm 23/02/00 14.24 <DIR> KK 02/10/99 11.59 6.107 Module1.bas 02/10/99 11.59 740 TELEFONO.VBP 02/10/99 12.03 90 TELEFONO.VBW 7 archivos 17.994 bytes Directorio de D:\WINNT\Profiles\Administrador\Escritorio\Pedro\KK 23/02/00 14.24 <DIR> . 23/02/00 14.24 <DIR> .. 23/11/99 13.37 26.112 Calendario.doc 3 archivos 26.112 bytes Total de archivos en la lista: 10 archivos 44.106 bytes 197.205.504 bytes libresPara poder hacer esto, necesitáis conocer el mapa del disco (práctica segunda) para localizar las entradas del directorio raíz, conocer el formato de las entradas de directorio, vistas en el apartado anterior y encontrar la fórmula matemática que liga número de clúster con número de sector.
disco
, donde vienen los datos. La fórmula que
liga estas dos variables es:número_de_sector = número_de_clúster * número_de_sectores_por_clúster + desplazamiento_inicialEl
número_de_sectores_por_clúster
lo podéis obtener
de la información del sector de arranque (práctica primera).
El desplazamiento_inicial
lo podéis deducir por
prueba y error.
La FAT (File Allocation Table) contiene información acerca de los bloques de datos del volumen. Es una tabla con una entrada para cada bloque de datos. En cada entrada hay un único valor:
El tamaño de la entrada es variable y depende del tamaño del disco. Así se habla de FAT12, FAT16 o FAT32, dependiendo del número de bits que componen una entrada de la FAT.
Por lo tanto, el enlazado de los bloques y la gestión de bloques defectuosos y libres se lleva a cabo en la FAT.
El número del primer clúster de datos es 2.
- 0x000: Clúster libre. - 0xFF0-0xFF6: Reservado. - 0xFF7: Defectuoso. - 0xFF8-0xFFF: Último clúster del fichero. - Otro valor: siguiente clúster del fichero.
F.A.T. | |
0x0 | 0xFDF |
0x1 | 0xFFF |
0x2 | 0x006 |
0x3 | 0x000 |
0x4 | 0xFF8 |
0x5 | 0xFF7 |
|
Pasos que hay que realizar para leer el fichero
C:\DOS\FDISK.EXE:
DICT.TXT
contiene al final el nombre
de su autor. Encontrar y escribir dicho nombre.disco
como si se tratara de un disco duro de verdad?
Para ello debéis entender cómo se monta un disco
duro de verdad (orden mount
) y cómo se logra
que un fichero parezca un dispositivo de disco a los
ojos de Linux (también orden mount
,
curiosamente).ls
, cat
, etc.)