-[ 0x10
]--------------------------------------------------------------------
-[ NTFS
]--------------------------------------------------------------------
-[ by Falken
]--------------------------------------------------------SET-15-
oooo oooo
ooooooooooo ooooooooooo oooooooo8
8888o
88 88 888 88 888
88 888
88 888o88
888 888ooo8 888oooooo
88
8888 888 888 888
o88o 88
o888o o888o o88oooo888
-=
Windows NT File System =-
----------------------
by
Falken
INTRODUCCION
=-=-=-=-=-=-
Uno de los aspectos mas importantes de cualquier sistema
operativo es
el sistema de ficheros que
se use. Dependiendo de como este organizado el
sistema de ficheros,
gozaremos de ciertas ventajas, como las cuotas de
usuario, los enlaces a
otros archivos, etc. Pero tambien tendremos que
tener en cuenta algunos
inconvenientes.
Sistemas de ficheros los tenemos de todos los colorines, gustos
y
sabores. Asi, el mas
popular es FAT, el sistema dise¤ado originalmente por
Microsoft para el MS DOS.
Este sistema es de los mas simples que os podais
imaginar y hasta la version
2.0 no soportaba estructura de directorios ni
cosas similares.
Gracias al sistema de ficheros elegido, podremos disponer de un
mejor
aprovechamiento en el
disco, ya sea duro o de Xixona. Asi, FAT se dise¤o
en un principio pensando
que no se superarian ciertas capacidades y asi,
pues acabamos con un disco
fragmentado de una manera que ni os imaginais.
Con Windows NT (Potato NT para los amigos), Microsoft incluye
soporte
para el sistema FAT y a¤ade
un sistema nuevo propio, NTFS, del que se
hablan alabanzas y se le
considera incluso hasta milagroso. ;)
Ademas dicen que soporta HPFS, el sistema de ficheros de OS/2,
pero en
Win NT 4.0 parece que no lo
lleva de fabrica... Es algo por lo que hay que
pagar. Pero bueno, a
nosotros lo que nos interesa ahora es NTFS, que para
algo este articulo se
titula asi, no?
EL SISTEMA NTFS
=-=-=-=-=-=-=-=
Para vendernos el NTFS, Microsoft se centra en la seguridad que
aporta
este sistema, que como
veremos es pura palabreria, al menos de momento.
Y como ven que por ahi no
pueden, pues se empe¤an en que con NTFS podemos
gestionar discos de gran
tama¤o sin problemas y que incorpora importantes
novedades sobre el resto de
los sistemas conocidos. Supongo que se referiran
a la FAT y al HPFS, porque
vamos, no han demostrado conocer otros sistemas.
A todos lo que mas nos ha llamado la atencion sobre NTFS siempre
ha sido
su aparente robustez. Pero
es una robustez construida sobre castillos de
arena. Por que es seguro el
PGP? Pues porque entre otras cosas,
sabes como
funciona y ves que es un
problema matematico de gran importancia el
reventarlo.
Y por que es seguro NTFS? Porque casi nadie conoce sus
interioridades.
Se dijo que no se podia
acceder desde otro sistema de archivos, y al poco
aparecio el NTFSDOS, para
MS DOS, que permitia el acceso para lectura
a particiones NTFS que
fueran de un tama¤o no superior a 2 GBytes. Y como
eso es poco, pues aparecio
el patch para GNU/Linux que permitia superar
esa barrera de los 2 GBytes
al acceder a particiones NTFS.
Pero claro, si, puedes leer, pero no puedes escribir... gratis.
O al
menos hasta que los drivers
para GNU/Linux esten listos en su version
definitiva, pues la version
2.0 de NTFSDOS para MS DOS permite la alteracion
de la informacion sin
ningun problema. Eso si, estad dispuestos a pagar
unos $200
aproximadamente... Prefiero esperar y currar para GNU/Linux.
Asi que como vemos, de momento la seguridad parece nula.
Veamos ahora cuales son las diferencias mas significativas
respecto a
usar NTFS en contra de
cualquier otro sistema.
De primeras, tenemos el aprovechamiento del espacio.
Un sistema de archivos que funcione bajo Windows reparte el
espacio del
disco en unidades minimas
denominadas clusters. El sistema FAT suele usar
entradas de 16 bits para
refenciar a cada cluster, con lo que podra
direccionar un maximo de
65536 clusters. La forma es la siguiente:
Fichero
[ c0x0001 ]
|
`-->
c0x0001 ---> c0x000F
---> c0x0213
[ c0x000F ]
[ c0x0213 ] [ c0xFFFF ]
Lo que se indica en hexadecimal es el numero de cluster,
correspondiendo
el 0xFFFF a la marca de fin
de fichero. Entre corchetes hemos puesto cual
es el siguiente cluster del
fichero, tal y como aparece en la FAT. Pensando
un poco nos damos cuenta
del tama¤o que tiene que tener un cluster si el
disco es muy grande. Seria
un minimo de 4 KBytes.
Si usamos clusters demasiado grandes, se produce lo que se llama
fragmentacion interna, o lo
que es lo mismo, una perdida de datos a lo
absurdo, del estilo de usar
16 Kbytes para un fichero de 500 bytes.
Otro ejemplo mas, pues los discos duros de hoy dia tienen un
tama¤o minimo
de 4 GBytes, lo que resulta
en tener que usar clusters de 64 KBytes !!
Por contra, NTFS usa 64 bits para el direccionamiento de los
clusters,
lo que nos deja como
resultado que con clusters de 512 bytes tiene de
sobra en muchas ocasiones.
Centrandonos ahora en la seguridad, NTFS usa el mismo sistema de
seguridad del propio NT,
usando las DACL (Discretionary Access Control Lists)
y las SACL (System Access
Control Lists), con lo que en todo momento el
sistema sabe quien accede a
que, cuando y que es lo que hace. Segun
Micro$oft, esto es una
novedad que no existiria gracias a ellos... Me
pregunto si habran oido
hablar alguna vez de UNIX.
Otro detalle a tener en cuenta es el juego de caracteres
permitido
a la hora de nombrar los
ficheros dentro del sistema. Mientras que con
la FAT podemos usar el
ASCII de 8 bits (creedme, lo he usado bajo DOS
y funciona), en NTFS
disponemos del sistema Unicode de 16 bits, lo que
deja una posibilidad
bastante amplia.
Una cosa que si es algo que a mi me parece ventajoso en NTFS, y
que
es algo que se deberia
implementar en cualquier sistema de ficheros son las
medidas que toma para
asegurar la integridad de los datos. NTFS es lo que
se denomina tolerante a
fallos. Veamos a ver lo que se quiere decir con
esto.
Los que useis GNU/Linux es probable que os hayais encontrado en
la
situacion de haber sufrido
un corte de luz, o cualquier alteracion en el
suministro electrico, que
haya producido el apagado del sistema sin
cerrar archivos importantes
del sistema. Esto nos provoca en la mayoria de
las situaciones la perdida
de datos importantes y en muchos casos la
inconsistencia del
sistema... Sip, se puede reparar, pero menudo rollo.
En FAT es mucho mas cachondo, pues es facil destrozar el
sistema, pero
si perder los datos con los
que se esta trabajando.
NTFS usa un fichero de logs en el que se van introduciendo las
modificaciones sobre el
sistema de archivos, por lo que en caso de que el
sistema se cierre
inesperadamente, se podra recuperar el estado anterior
sin ningun problema. El
propio NT mira en el fichero de logs para ver cual
era la situacion y la
reestablece automaticamente en el siguiente
arranque del sistema. Asi
tenemos una perdida minima de datos.
Por cierto, este fichero de logs es el denominado fichero de
logs
de transacciones o
Transactional Logging File.
Lo del pantallazo azul es ya otra cosa, de la que si quereis,
pues
hablamos en otro numero de
SET para explicar que es lo que se esconde
detras de nuestro color
favorito. ;)
Sigamos...
LA GESTION DE DISCO
=-=-=-=-=-=-=-=-=-=
Para crear una particion NTFS disponemos de dos utilidades
basicas: el
FORMAT de toda la visa, o
el NTFS Disk Management Disk Administrator, que
es lo mismo que decir el
programa WINDISK.EXE. Por cualquiera de los dos
metodos podemos definir el
tama¤o del cluster que queremos usar. En el caso
en el que prefiramos
dejarselo a la eleccion del programa, este usara los
datos que aparecen en la
siguiente tabla:
.----------------------------------------.
| Tama¤o del disco
| Tama¤o del cluster |
|-------------------|--------------------|
| 512 MB o menos
| 512 bytes |
| 513 MB - 1024 MB
| 1 KByte |
| 1025 MB -
2048 MB | 2 KByte |
| 2049 MB o mas
| 4 KBytes |
`----------------------------------------'
Hasta aqui todo normal, salvo un detalle que es simplemente
anecdotico,
y que hasta el momento no
se ha mencionado. El sistema FAT es usado tanto
en discos duros como en
diskettes, al igual que el HPFS o incluso el
SFM de Macintosh. Pero
intentad formatear un diskette en NTFS... Nones,
verdad? Pues se puede. Pero
el sistema operativo no lo lleva incluido. Es
un servicio de valor
a¤adido de Micro$oft. Aunque podemos encontrar por
la red un programa gratuito
para formatear un diskette en NTFS. Eso si,
no merece la pena, pero si
estais interesados, estaba por:
http://www.sysinternals.com
Ademas, alli podreis obtener mas informacion sobre las
interioridades
de Windows 95, Windows NT y
Windows 98 ;)
DISSECCIONANDO NTFS
=-=-=-=-=-=-=-=-=-=
Si bien la FAT se distribuye en el sector de arranque, dos
copias de la
tabla FAT, las entradas de
directorio y los ficheros propiamente dichos,
NTFS gestiona todo el
sistema de archivos en base a archivos de datos.
Son los denominados
Ficheros METADATA (Huy! Esto me suena de haberlo visto
antes).
Cuando creamos una particion NTFS, se generan 11 METADATA FILES,
que
se encuentran en el
directorio raiz, pero son ocultos. Para verlos, basta
con ejecutar desde un shell
(Ups! Perdon. Interfaz de comandos XD), el
siguiente comando:
dir /ah <nombre de metafile>
Los metafiles creados se muestran en la siguiente tabla:
.------------------------------------------------------------------------.
| Nombre | Registro |
Descripcion |
|----------|----------|--------------------------------------------------|
| $MFT | 0
| Master File Table. O como la FAT para NTFS. |
| $MFTMIRR | 1 | Copia de los 16 primeros registros de la
MFT. |
| $LOGFILE | 2 | El fichero de logs de
transacciones. |
| $VOLUME | 3 | Numero de serie,
fecha de creacion y dirty |
| | | flag del volumen. |
| $ATTRDEF | 4 | Definicion de los atributos. |
| . | 5
| Directorio raiz del disco. |
| $BITMAP | 6
| Mapa de clusters libres. |
| $BOOT | 7
| Registro de arranque del disco. |
| $BADCLUS | 8 | Lista de los clusters erroneos del
disco. |
| $QUOTA | 9
| Informacion acerca de las cuotas de usuario. |
| | | No se encuentra activado hasta la
version NT 5.0 |
| | | o mediante el uso de programas
aparte. |
| $UPCASE | 10 | Convierte
minusculas en mayusculas :? |
`------------------------------------------------------------------------'
Vamos a explicar ahora brevemente estos ficheros.
Comenzamos por $MFT, que no es mas que una tabla FAT a lo bestia.
Sirva
como ejemplo que para un
disco duro de 4 GBytes ocupa mas de 22 MBytes. Pero
como es un archivo muy
importante y en el que se centra NTFS, pues lo
tratamos mas en profundidad
mas adelante.
Los ficheros $LOGFILE, $VOLUME, . y $BOOT no necesitan mas
aclaraciones.
$ATTRDEF define los atributos a usar en el sistema, cosa que
veremos con
mas detalle al ver el $MFT.
El fichero $BITMAP es de lo mas original, pues cada bit se
identifica con
un cluster del disco. Si el
bit es 0, el cluster esta libre, si es 1, esta
ocupado. Si el cluster esta
da¤ado, se incluye en el fichero $BADCLUS.
Lo que me parece que habria que reprocharle y con mucho a
Micro$oft es
incluir una gestion de
cuotas con $QUOTA, y no activarla salvo con programas
a¤adidos. Porque tengamos
en cuenta que el hecho de que se vaya a activar
en Windows NT 5.0 no es mas
que un rumor. Y en teoria iba a venir activado
de serie en NT 4.0.
Y lo del $UPCASE... Ellos sabran
Eso si, este sistema de archivos me suena bastante... Creo que
lo he
visto antes en algun sitio.
Pero no puede er, puesto que segun Micro$oft
es nuevo e innovador. (Anda
ya !!)
[Paseante: Te estas
superando a ti mismo, no crees?.]
EL FICHERO $MFT
=-=-=-=-=-=-=-=
Pese a cumplir la misma funcion que la FAT en el sistema FAT,
veremos
que hay diferencias
sustanciales entre la FAT y el $MFT. De primeras, el
$MFT se divide en peque¤as
unidades logicas denomindas registros. En estos
registros, NTFS almacena
los metadatos correspondientes a los directorios
y/o ficheros y sus
caracteristicas.
Ahora viene la paranoia que se montaron en Micro$oft. El $MFT no
es
un fichero aparte, como se
podria considerar a la FAT. El $MFT es un
fichero que se mapea en
NTFS a traves del $MFT, o lo que es lo mismo, que
se ubica a si mismo. Con
esto ademas obtenemos un factor importante... que
el tama¤o del $MFT puede
variar en funcion de la cantidad de metadatos
existentes.
Como todos sabemos desde los tiempos del MS DOS, una de las
cosas que
garantiza un acceso mas
rapido a la informacion en el disco es que esta
se encuentre de forma
secuencial, que no exista fragmentacion (externa en
este caso). Si el fichero
$MFT se encuentra fragmentado, NTFS debera
realizar multitud de
operaciones para leer un registro, lo que ralentizara
el sistema. Para evitar que
el $MFT se fragmente, al menos no demasiado,
NTFS reserva una zona
rodeando al $MFT denominada ZONA MFT, que facilita
el uso de clusters
contiguos a la hora de ampliar el tama¤o del $MFT. Esta
zona habitualmente se
corresponde con el 12% del tama¤o del disco duro
a¤adido despues el $MFT. Es
decir, que si el $MFT ocupa los primeros
15 megas de un disco de 4
gigas, se reservan unos 4 megas mas, ocupando
asi los 19 primeros megas
para el $MFT.
NTFS reconoce los ficheros y directorios por su posicion en el
$MFT del
registro que describe sus
metadatas. Asi, para los METADATA FILES, se han
reservado los registros que
se indicaban en la anterior tabla.
Un registro tipico ocupa 1 KByte en NT 4.0.
El fichero $MFTMIRR es algo asi como la segunda copia de la FAT.
Pero,
cuantas veces os ha pasado
que se han da¤ado las dos copias de la FAT? Esto
pasa por estar una detras
de la otra. Y lo mas divertido es cuando se da¤a
el primer sector de la
primera copia y el segundo de la segunda... o
al reves.
Por eso, el $MFTMIRR en vez de ir a continuacion del $MFT, se
coloca
justo en el medio de la
particion, y solo almacena los 16 primeros
registros del $MFT, es
decir, los METADATA FILES y 5 registros mas.
LOS REGISTROS
=-=-=-=-=-=-=
Nada que ver con los
registros de Windows. Al menos por ahora ;)
Un registro del $MFT consiste de una peque¤a cabecera que
contiene
informacion basica sobre el
registro, seguido de uno o mas atributos que
describen los datos o
caracteristicas del fichero o directorio. Y como un
PNG vale mas que un
documento de Word, pues aqui va un esquema:
.-----------------------------------------------------.
| Cabecera | Atributos de la cabecera | Espacio libre |
`-----------------------------------------------------'
Los datos de la cabecera incluyen numeros de secuencia para
verificar
la integridad, un puntero
al primer atributo en el registro y el numero
de registro $MFT del
registro $MFT de base si es que este no es el primero.
En NTFS se usan los atributos para indicar informacion acerca de
los
ficheros o directorios,
Existen 14 tipos de atributos en NT 4.0, que son los
que vemos a continuacion:
.-------------------------------------------------------------------------.
| Atributo |
Descripcion
|
|-----------------------|-------------------------------------------------|
| $VOLUME_VERSION |
Pues eso, la version del volumen.
|
| $VOLUME_NAME | Uhmm!
Ah! El nombre del volumen.
|
| $VOLUME_INFORMATION |
Versionde NTFS y dirty flag.
|
| $FILE_NAME |
No se... Tal vez el nombre del fichero o
|
| |
directorio. |
| $STANDARD_INFORMATION | Fecha, y atributos de oculto, sistema y
lectura |
| $SECURITY_DESCRIPTOR |
Informacion sobre la seguridad.
|
| $DATA |
Los datos del fichero.
|
| $INDEX_ROOT |
Contenido del directorio.
|
| $INDEX_ALLOCATION |
Pues casi lo mismo que $INDEX_ROOT, dicen.
|
| $BITMAP |
Mapeado del contenido del directorio.
|
| $ATRIBUTE_LIST |
Cabeceras no residentes de atributos.
|
| $SYMBOLIC_LINK |
No usado. Que sorpresa, verdad? ;)
|
| $EA_INFORMATION |
Extension de atributos compatibles con OS/2
|
| $EA |
Extension de atributos compatibles con OS/2
|
`-------------------------------------------------------------------------'
Como vemos hay atributos tan curiosos como $SYMBOLIC_LINK, que
como me
digan que es una novedad
que no existia en otros sistemas de ficheros,
se me comen una
distribucion completita de GNU/Linux. Y sigo diciendo que
este sistema de archivos me
suena bastante.
Bueno, a lo que ibamos. Los atributos se almacenan en disco en
dos
componentes logicos: la
cabecera y los datos.
En la cabecera va el tipo de atributo, su nombre y sus flags,
ademas de
identificar la ubicacion de
los datos del atributo. En NTFS se intenta que
los datos de los atributos
se almacenen tambien en los registros del $MFT.
Asi, se dice que un
atributo es residente cuando tiene los datos en su
registro $MFT. Por lo
general, los atributos de nombre de fichero,
informacion estandar y
seguridad son siempre residentes.
Cuando los atributos no entran en el registro $MFT
correspondiente, la
cabecera de atributos
incluye informacion que localiza los datos en el
disco. Esta funcion de
mapeo de informacion es conocida como run-information.
El run-information posee a su vez una cabecera que indica que
clusters
de los datos son usados por
el run-information. Esto se debe a que existen
atributos con datos muy
grandes que deben ser repartidos en varios registros
$MFT.
Cada parte del run-information cubre diferentes partes de un
fichero.
Una entrada del run
contiene un VCN (Vitual Cluster Number, numero de cluster
virtual). El VCN es un
desplazamiento relativo desde los datos de atributo.
A esto le sigue un LCN
(Logical Cluster Number, numero de cluster logico),
que indica la posicion en
el disco donde residen los datos, y el numero de
clusters contiguos en esa
posicion.
Si hay muchos atributos para un fichero, pues nada mas simple
que
incluirlos en otro registro
y apuntar a este ultimo desde el primero. Y
esto es lo que hace NTFS.
Veamos ahora un ejemplo con un fichero llamado SET_015.TXT ;)
Primero el dibujo de turno:
.----------.
.--------.
|
| | |
.----------'----------V------------'--------V------------------------------.
| Cab. | Nombre | SET_015.TXT | Std Info | fecha... | Att List
| Datos |
`----------------------------------------------------.---------.-----------|
.---------------------------------------'.--------' |
| | VCN 0, LCN 128, 2 |
|
| VCN 15,
LCN 700, 4 |
| | . |
| | . |
| `---------------------'
|
.------------V-------------------------------------------------------------.
| Cab. | Datos | Espacio libre |
`------.----------.--------------------------------------------------------'
.----' `------.
| . |
| . |
| VCN 255, LCN 828, 6 |
| VCN 276, LCN 443, 7 |
`----------------------'
En el ejemplo, vemos que SET_015 es un fichero muy grande y
ademas esta
fragmentado. Aqui hemos
mostrado simplemente el uso de dos registros $MFT
para indexar el fichero.
Ademas, hemos obviado la informacion de seguridad,
simplificando asi el
ejemplo, aunque mas de uno querriais haberla visto,
a que si?
Asi, por ejemplo, tenemos que los datos del fichero no son
residentes,
como es habitual. La
primera entrada del run-information nos indica que
el fichero comienza con dos
clusters seguidos en el cluster 128.
DIRECTORIOS
=-=-=-=-=-=
Un directorio para NTFS no es mas que un fichero con el atributo
de
indice. El directorio
contiene el nombre de cada fichero y una copia
de su informacion estandar,
concretamente de la fecha de creacion o ultima
modificacion.
Si los datos de un directorio entran en un registro $MFT, el
atributo
$INDEX_ROOT describe la
posicion de las entradas en el registro. Al crecer
el directorio, es probable
sobrepasar el limite de tama¤o del registro
$MFT, para lo que se
determinan buffers en los que se almacenan las
entradas adicionales. Aqui
el $INDEX_ALLOCATION indica cual es la posicion
de este buffer, que en NT
4.0 tene un tama¤o de 4 KBytes.
NTFS ordena el directorio dentro del $INDEX_ROOT y el
$INDEX_ALLOCATION
para hacer lo mas eficiente
posible las busquedas dentro de los directorios.
El orden se establece de
forma que 'a' es menor que 's'. Veamos ahora un
ejemplo grafico de una
entrada de directorio:
.------.
| |
-----'------V-------------------------------------------------------
| Index | hnt.doc set_015.txt | Index |
| Root | `---> `---> |
Allocation |
------------.--A-------.--A----------.-------------------.-----------
.------' | .----'
| | VCN 0, LCN 777, 2 |
| .-----' |
| `---------.---------'
| | | |
|
| | | |
|
| | | .-----' |
.----V---'--------V-`-. |
| firma.bat set.pgp |
<----------------------'
`---------------------'
Listado:
firma.bat -> hnt.doc -> set.pgp -> set_015.txt
NOVEDADES PARA NT 5.0
=-=-=-=-=-=-=-=-=-=-=
Pues segun se cuenta por ahi, la version de NTFS que acompa¤ara
al NT 5.0
llevara por fin activado el
fichero $QUOTA, que esta incluido desde la
version 3.5 de este sistema
operativo, pero que a no ser que les compraras
el programa aparte no lo
podias usar.
Ademas, pues dicen que quieren meterle criptigrafia dentro del
sistema
de ficheros, lo que llaman
EFS o Encryption File System. El proceso, por
lo que hemos tenido
oportunidad de ver, sera usar la ID del usuario en
conjunto con DES para
manipular los datos del fichero.
CONCLUSIONES FINALES
=-=-=-=-=-=-=-=-=-=-
NTFS no es un sistema de ficheros tan seguro como dicen. Ya se
sabe,
no es tan fiero el leon
como lo pintan. Lo que pasa es que el desconocimiento
generalizado de las
interioridades de este sistema ha hecho que parezca mas
fiable de lo que es en
realidad.
Sigo diciendo que me suena bastante este sistema de archivos...
Espera
un momento... No puede
ser... Os acordais del VMS? Si, aquel maravilloso
sistema operativo de
Digital, usado en los VAX, por ejemplo. No se parece
ligeramente este sistema de
ficheros al de VMS? Yo diria que si...
Ah, claro! Se me olvidaba que los dise¤adores de Windows NT
fueron los
creadores del VMS... Y por
lo que se ve, un poco adictos a Odisea en el
Espacio. Vamos, porque
todos conoceis lo de HAL-IBM, verdad? Si hombre, si.
Mira:
H + 1 = I
A + 1 = B
L + 1 = M
A ver que pasa con Windows NT:
W - 1 = V
N - 1 = M
T - 1 = S
Asi que es por eso por lo que se llama NT, y no por otras cosas
que se
han oido por ahi. Estos
chicos de Micro$oft... ;)
[Otras fuentes afirman que
NT significa "Nice Try"]
Bueno, pues solo una cosa mas. Recordarles a los de Micro$oft
que
activen la $QUOTA en NT
5.0, y ya de paso, pues que usen ese atributo de
$SYMBOLIC_LINK, que para
algo esta, y no veas lo util que puede ser. Los
que conocemos algun UNIX lo
sabemos muy bien.
Ah! Antes de que se me olvide. Este articulo esta basado en el
articulo
publicado en la Windows NT
Magazine acerca de las interioridades del NTFS.
Espero que os haya servido
para algo ;)
Have P/hun
Falken
-[ 0x12
]--------------------------------------------------------------------
-[ TU AMIGO EL DISCO
DURO ]--------------------------------------------------
-[ by Chessy
]--------------------------------------------------------SET-19-
[ Nota del EDITOR: El articulo
original en formato Word 97 podeis
encontrarlo en la seccion de archivos de nuestra web. En breve
estara disponible tambien una version en formato PostScript. ]
Prologo: como vereis
, el caracter de este texto esta muy orientado a la
ense~anza, pero no
por ello deja de ser interesante, IMHO, para SET. La
verdad es que el tema
da mucho de si, asi que he pensado en seccionarlo por
la mitad, dejando la
2a parte para SET 20 (vaya, parece que esto marcha, 20
numeros!). En esta
primera parte expongo la arquitectura de un disco duro,
sin entrar en muchos
detalles, asi como el sistema de archivos FAT16, citando
al final alguna
caracteristica del sistema FAT32, dejando para la siguiente
SET una descripcion
mas detallada de FAT32. Es interesante conocer como
funciona internamente
el sistema de archivos de MS-DOS y la familia Windows
(a excepcion de NT,
de cuyo sistema de archivos, NTFS, ya se encargo Falken
en otra ocasion).
_
|_ ._ | _ ._ _.._ _| _
|_><|_)|(_)|
(_|| |(_|(_)
|
| _ _
|(_)_>
_|o _ _ _ _
_| ._ _ _
(_||_>(_(_)_> (_||_||
(_)_>
Los discos duros
estan hermeticamente cerrados y contienen un numero
determinado de
platos, que giran a grandes velocidades mientras el disco
reciba corriente.
Diferentes tipos de discos, tienen diferentes numeros de
platos. Cada plato
tiene su propia cabeza de lectura/escritura, que flota a
una peque~isima
distancia (un cuarto del diametro de un pelo humano) sobre la
superficie del plato
cuando el disco esta operativo. Los platos suelen ser
rigidos, construidos
normalmente de aluminio y cubiertos de un material
magnetico y otras
capas que le dan la capacidad de almacenar magneticamente
datos codificados en
forma de bits.
Cada plato tiene un
determinado numero de pistas. Cada pista se divide en
sectores, que son
siempre equivalentes a 512 bytes de datos. Una pista
individual (por
ejemplo, la 23) en todos los platos, forma un cilindro.
Para acceder
(direccionar) a una determinada parte del disco duro, se usa una
combinacion de tres
valores: cilindro, cabeza (plato) y sector (Cylinder,
Head, Sector) Por
ejemplo, el cilindro 46, cabeza 2, sector 231, se refiere a
un unico sector de
512 bytes dentro del disco duro.
Diferentes discos
duros tienen diferentes geometrias, que no es mas que las
diferentes
configuraciones de platos, clindros y sectores que puede tener un
disco duro. Los
valores para un disco duro en particular estan almacenados
en la CMOS del
ordenador.
Truco 1 : arranca el
ordenador y entra en la BIOS. Veras que la CMOS
(almacen de datos que
no se pierde al apagar el ordenador) guarda la
geometria de los
discos que tenga tu ordenador. Es aconsejable apuntarlos
pues en caso de
perdida, si la BIOS no puede autodetectar la geometria de tu
HD se debera
introducir a mano.
Truco 2: para
calcular el maximo teorico de la capacidad de un disco,
simplemente debes
multiplicar el numero de cabezas por el numero de cilindros
por el numero de
sectores por pista por 512 bytes por sector.
---{ Comprendiendo
las particiones
Las diferentes
unidades de discos duros pueden ser divididas en particiones
-- subdivisiones
logicas del disco duro. Cada unidad de disco duro puede
tener hasta 4
particiones. Una particion puede ser o bien primaria o bien
extendida. Un disco
duro puede tener hasta 4 particiones primarias, aunque
solo una de ellas
puede estar activa en un momento dado1. Las particiones
extendidas se
componen de unidades logicas --que no
son mas que distintas
letras de disco duro
con las que identifica el sistema operativo a cada
trozo dentro de la
particion extendida. Un disco duro solo puede tener una
particion extendida.
Tipicamente, los discos duros que contienen numerosas
letras de unidad
estan configurados con una unica particion primaria y una
unica particion
extendida, con esta ultima conteniendo una o varias letras
de unidad. (Puedes
tener todas las letras de unidad que quieras dentro de
una particion
extendida; en realidad estas limitado al numero de letras
disponibles, hasta la
Z)
Supongamos que estas
configurando un disco duro y quieres dividirlo de tal
forma que termines
con 4 letras de unidad, desde la C hasta la F. Crearas
para ello una
particion primaria (Windows 98 solo puede arrancar desde una
particion primaria)
con el tama~o que necesites para la unidad C. Crearas
tambien una unica
particion extendida, que contiene 3 unidades logicas
dentro de ella, cada
una de ellas con el tama~o que necesites para las
letras de unidad D, E
y F.
-----------------------------------------------------------------------------
Nota: para un disco
duro secundario (uno que no tenga que arrancar un sistema
operativo), podrias
configurarlo para que solo tuviera una unica particion
extendida hecha de
una o mas unidades logicas.
-----------------------------------------------------------------------------
Las particiones bajo
Windows 98 estan hechas y mantenidas usando un programa
llamado FDISK
(abreviatura de Fixed Disk Setup Program). FDISK te permite ver
la configuracion
actual de las particiones de tu disco duro al igual que
crear y borrar
particiones.
Los datos sobre las
particiones de un disco duro se almacenan como parte de
una zona del disco
llamada Master Boot Record (MBR) situada en el cilindro 0,
cabeza 0, sector 0.
Una seccion de 64-bytes del MBR contiene la configuracion
de la particion para
el disco duro. Cada particion esta definida por una
entrada de 16 bytes
(lo que significa que no puede haber mas de 4
particiones, dado que
16 bytes por 4 particiones hacen un total de 64 bytes).
Dentro del sector
MBR, los datos de la particion se almacenan comenzando en
el byte 446 y usando
el resto de los 512 bytes del sector MBR (ojo!,
512-446=66 pero los
ultimos 2 bytes no estan relacionados con los datos de la
particion, sino que
son la marca end-of-sector (fin de sector), que en
hexadecimal es
0x55AA)
Cada entrada de 16
bytes de la tabla de particiones se compone de los
siguiente campos:
* El byte 00 almacena el
indicador de arranque, que siempre es o
bien 0x00 o bien 0x80. 0x80 indica
que la particion es usada para
arrancar el sistema; 0x00 indica que la particion no es usada
para
arrancar el sistema.
* El byte 01 almacena el numero
de la cabeza donde comienza la
particion.
* Los bytes 02 y 03 almacenan
una entrada combinada que consiste en
el sector y cilindro donde comienza la particion. Los primeros 6
bits almacenan el sector de comienzo; los restantes 10 bits
almacenan el numero del cilindro donde comienza la particion.
* El byte 04 almacena el
Identificador del Sistema (System ID). Este
ID indica el sistema de ficheros usado en la particion (queda
determinado al hacer un FORMAT). Este ID puede indicar que la
particion pertenece al sistema de ficheros FAT16 (Windows 3.1,
Windows 95), FAT32 (Windows 98), NTFS (Windows NT).
* El byte 05 almacena el numero
de cabeza donde termina la particion.
* Los bytes 06 y 07 son otra
entrada combinada, que ahora almacenan
el sector y el cilindro de finalizacion de la particion. Otra
vez,
los ultimos 6 bits almacenan el sector de finalizacion y los
ultimos 10 bits almacenan
el numero del cilindro de finalizacion
de la particion.
* Los bytes 08 a 11 almacenan el
sector relativo -- que no es mas
que el numero de sector relativo donde comienza la particion.
* Los bytes 12 a 15 almacenan el
numero de sectores dentro de la
particion.
Las unidades logicas
almacenan sus datos de particion de forma algo diferente
a como lo hacen las
particiones primarias y extendidas. Lo que sucede es lo
siguiente: una
entrada de particion extendida en la tabla de particiones MBR
indica el primer
sector de la particion extendida, que es la localizacion de
la primera unidad
logica en la particion extendida (una particion extendida
debe tener
obligatoriamente al menos una unidad logica). El primer sector de
la primera unidad
logica almacena otra tabla de particiones. Esta tabla de
particiones de la
unidad logica se almacena en los ultimos 64 bytes del
primer sector
(dejando 2 bytes para la marca de fin-de-sector) y su
configuracion es
exactamente igual que la tabla de particiones principal del
MBR. Sin embargo, la
tabla de particiones de la unidad logica contiene solo
2 entradas: la
primera entrada contiene la configuracion para esa unidad
logica y la segunda
entrada contiene la configuracion de la siguiente unidad
logica. Las entradas
3a y 4a estan vacias y no pueden ser usadas. La segunda
entrada apunta a la
siguiente unidad logica, que a su vez contiene su propia
tabla de particiones
para unidades logicas, y asi sucesivamente. Como puedes
ver, las unidades
logicas dentro de una particion extendida son definidas
como una lista ligada
de tablas de particion, cada una apuntando a la
siguiente.
---{ Entendiendo la
FAT
Cualquier sistema
operativo soporta uno o mas sistemas de ficheros -- metodos
usados para almacenar
ficheros en dispositivos de almacenamiento. Existen
muchos sistemas de
ficheros diferentes, como FAT (File Allocation Table, en
versiones FAT16 o
FAT32, de Windows95/98) , NTFS (New Technology File System,
de Windows NT), HPFS
(High Performance File System (HPFS), CDFS (CD-ROM File
System), etc. Por
ejemplo, Windows 98 soporta 4 sistemas de ficheros
diferentes: FAT16,
FAT32, CDFS y el sistema UFS (Universal File System) para
los discos DVD-ROM.
Gran parte del tema que sigue sobre FAT se basa en FAT16
-- en la siguiente
seccion veremos las diferencias entre FAT16 y FAT32.
FAT significa File
Allocation Table, un metodo para almacenar ficheros y
directorios en un
disco duro. FAT tiene una larga historia -- fue usado por
primera vez en
1977 como una forma de almacenar datos
en disquetes para el
Disk Basic de
Microsoft. A traves de varias tecnicas , incluyendo la nueva
variante FAT32
(introducida en 1996 con Windows95 OSR2), FAT ha sido
extendida y mejorada
a lo largo de los a~os.
Un volumen (nombre
que se le da bajo DOS/WIN a cada unidad de particion)
formateado con FAT
esta dispuesto de tal forma que comienza
con un Sector
de Particion de
Arranque (Partition Boot Sector), seguido de dos copias
identicas de la FAT
(FAT1 y FAT2), un listado del directorio raiz y luego
el resto del volumen
(area de datos). Se almacenan dos copias de la FAT
debido a que se desea
tener redundancia en caso de que una de ellas sea
da~ada.
El Sector de
Particion de Arranque contiene la informacion necesaria para
arrancar un sistema
operativo (si la particion es una particion primaria
configurada con ese
proposito). Los datos del Sector de Particion de Arranque
se describen en la
siguiente tabla:
__________________________________________________
| Bytes | Description
|
|-------+------------------------------------------|
|
3 | Jump instruction
|
|
8 | OEM Operating System name in text format |
|
25 | BIOS Parameter Block
|
|
26 | Extended BIOS Parameter Block
|
|
448 | Bootstrap code
|
`--------------------------------------------------'
Los bloques de
parametros de la BIOS (BIOS Parameter Blocks) almacenan
informacion adicional
sobre la configuracion del volumen, como el numero de
bytes por sector, numero
de sectores por cluster, numero de entradas del
directorio raiz, etc.
Los volumenes FAT
estan divididos en unidades de asignacion, llamados
clusters. FAT16 puede
manejar hasta un total de 2^16 clusters (65535
clusters) FAT32 sin
embargo, es capaz de gestionar 2^32 clusters (4,294,967,
295). Dependiendo del
tama~o del volumen, los clusters seran de un tama~o u
otro. El tama~o
minimo de cluster son 512 bytes; el
tama~o de un cluster
siempre es una
potencia de 2 por 512 bytes (por ejemplo, 1024 bytes, 2048
bytes, 4096 bytes,
etc.) El tama~o maximo de cluster bajo FAT es de 65535
bytes, o lo que es lo
mismo, 64K.
Cada fichero de un
volumen FAT consume al menos 1 cluster, indiferentemente
del tama~o del
fichero o el del cluster. En un volumen que use clusters de
32K, un fichero de 1
byte consumira 32K de espacio en disco. Si un fichero
del mismo volumen
tuviera un tama~o de 32K + 1 byte, consumiria 2 clusters
-- 32k en el primer
cluster + 1 byte en el siguiente.
Un volumen FAT16 no
puede ser mayor de 2 Gb. La siguiente tabla muestra los
tama~os maximos de
volumen y sus correspondientes tama~os de cluster:
____________________________
| Volume Size | Cluster
Size |
|-------------+--------------|
| 32 M
| 512 bytes |
| 64 M
| 1 K |
| 128 M
| 2 K |
| 255 M
| 4 K |
| 511 M
| 8 K |
| 1023 M
| 16 K |
| 2047 M
| 32 K |
| 4095 M
| Error! |
`----------------------------'
La tabla FAT es una
simple lista ligada. Cada entrada de fichero en el
directorio apunta al
primer cluster usado. Usando la correspondiente entrada
en la tabla FAT, el
sistema operativo puede recorrer la lista de las entradas
de la FAT por cada
cluster, localizando cada uno de los clusters que ocupe
un fichero.
Considera el
siguiente ejemplo: un fichero tiene una longitud de 70K y el
volumen tiene
clusters de 32K. La entrada del fichero en el directorio nos
muestra que el primer
cluster libre es el numero 2.345. El sistema operativo
busca despues todas
las piezas del fichero leyendo la entrada FAT 2.345 (para
los primeros 32K del
fichero). La entrada de la FAT indica que el siguiente
cluster es, digamos,
el numero 4123 (para los siguientes 32K del fichero).
El cluster 4123
indica que el siguiente cluster es el numero 932 (para los
restantes 8K del
fichero). La entrada FAT para el cluster 932 almacena 0xFFFF
en lugar de un
puntero al siguiente cluster, indicando de esta forma que se
ha alcanzado el
ultimo cluster para el fichero.
Cada entrada en la
FAT corresponde a un cluster, y contiene informacion
relativamente
sencilla:
* Si el cluster esta en uso o
no.
* Si el cluster esta marcado
como defectuoso o no.
* Un puntero (una entrada de 16
bits en la FAT16) para el siguiente
cluster en la cadena, o el valor (0xFFFF) indicando que el
cluster
es el ultimo ocupado por un fichero.
La informacion sobre
el fichero se almacena dentro del area de datos del
volumen, excepto para
el directorio raiz, que se encuentra en una posicion
fija dentro de un
volumen FAT16. El directorio raiz esta limitado a 512
entradas en FAT16.
Cada directorio en un
volumen FAT es tambien un fichero (al igual que en
UNIX), pero un
fichero que esta marcado como entrada de directorio de tal
forma que el sistema
operativo sepa como manejarse con el. (A menos que
estes editando la
informacion de un disco byte-a-byte, no puedes darte
cuenta de que un
directorio es simplemente un fichero especial con la marca
de directorio
activada). Dentro del "fichero" directorio encontramos entradas
para todos los
ficheros y subdirectorios del directorio.
Cuando introduces un
comando DIR en el simbolo del sistema, simplemente estas
recibiendo un listado
del contenido del "fichero" directorio, formateado de
tal forma que su lectura
sea sencilla. Los directorios consumen clusters de
la misma forma en que
lo hacen los ficheros normales. Observa que los
directorios no son la
FAT; la FAT es simplemente una tabla que permite al
sistema operativo
localizar las distintas partes de los ficheros y
subdirectorios
listados en un directorio, comenzando por el directorio
raiz.
Cada entrada de
directorio contiene la siguiente informacion (en 32 bytes):
* El nombre del fichero o del
directorio, almacenado en 11 bytes (en
formato 8.3; el punto no
se almacena)
* 8 bits que indican los
atributos de la entrada
* 10 bytes reservados
* 16 bits que indican la fecha
de creacion del fichero
* 16 bits que indican la hora de
creacion del fichero
* 16 bits (en FAT16) indicando
el numero del primer cluster ocupado
por la entrada
* 32 bits indicando el tama~o de
la entrada
THE STRUCTURE OF A
DIRECTORY ENTRY
""""""""""""""""""""""""""""""""""
Offset 0-7 8-10
11 12-21
| |
| |
.---------^--------.----------^---------.-----^-----.--------^---------
----------------------------------------------------------------------
|
Filename | Extension | Attribute
| Reserved |
----------------------------------------------------------------------
`---------.--------^----------.---------^-----.-----^--------.---------
| |
| |
Size 8 Bytes 3 Bytes
1 Byte 10 Bytes
22-23 24-25 26-27 28-31
| |
| |
.-----^----.-----^----.-------^------.-------^-------.
----------------------------------------------------
| | | Starting
| |
| Time | Date
| cluster |
File size |
----------------------------------------------------
`-----.----^-----.----^-------.------^-------.-------'
| |
| |
2 Bytes 2 Bytes 2 Bytes 4 Bytes
Los bits de atributo
indican cuando una entrada es de un fichero o de otro
directorio
(subdirectorio), cuando la entrada es para una etiqueta de volumen
y los atributos
definibles por el usuario (solo-lectura, sistema, oculto y
archivo).
Para juntar todas las
partes de este articulo en forma de resumen, examinemos
un extenso ejemplo:
un fichero llamado TEST.FIL almacenado en el directorio
C:\Windows\System\,
de 50K de longitud, debe ser leido en una aplicacion. El
volumen de ejemplo
usa clusters de 32K de longitud. (Algunos pasos se han
simplificado debido a
que no son relevantes para nuestro proposito (entender
el funcionamiento del
sistema de archivos FAT sin entrar en detalles
demasiado
profundos)).
1. La aplicacion pide los datos
del fichero al sistema operativo.
Para ello, la aplicacion le manda
al S.O. el nombre del fichero y
del directorio, en formato de
direccionamiento absoluto:
C:\Windows\System\TEST.FIL.
2. El S.O. localiza el fichero
barriendo (recorriendo) primero las
entradas del directorio raiz del
disco C en busca de una entrada
llamada Windows con la marca de
directorio activa (indicando que
es un directorio)
3. La entrada del directorio Windows
indica que comienza en el
cluster 555. Despues se lee la FAT;
usando la lista ligada en la
FAT descrita anteriormente, el
sistema operativo descubre que el
directorio Windows ocupa los
clusters 1123,2342,523 y 4923. Usando
esa informacion, el sistema
operativo lee el directorio Windows y
lo escanea en busca de una entrada
llamada System.
4. Se encuentra una entrada denominada
System en el listado del
directorio \Windows, con el
atributo de directorio activado. La
entrada System indica que el 1154
es su primer cluster.
5. La FAT se lee otra vez, comenzando
en el cluster 1154 y siguiendo
la cadena hasta que todos los
clusters del directorio System son
conocidos. Usando esa informacion,
el sistema operativo lee la
tabla del directorio System en
memoria y la escanea en busca de
una entrada llamada TEST.FIL.
Cuando se encuentra, observamos que
su atributo de directorio esta
inactivo, indicando que es un
fichero "normal". Leyendo
esa entrada, el sistema operativo
encuentra que el primer cluster de
TEST.FIL es el numero 2987.
6. Se vuelve a leer la FAT, comenzando
en el cluster 2987. Usando la
lista ligada, el sistema operativo localiza
y almacena en memoria
todos los clusters que albergan el
fichero TEST.FIL para poder
leer despues su contenido directamente desde memoria.
7. El sistema operativo pasa despues
el contenido del cluster (el
contenido del fichero) a la
aplicacion como un flujo de bytes.
Como puedes ver, leer
el contenido de un fichero es un gran trabajo!!!
Afortunadamente el
sistema guarda todas las entradas de directorio -- ademas
de la tabla FAT al
completo -- en memoria RAM, haciendo asi que la necesidad
de leer los
directorios y las entradas de la FAT no requieran demasiados
accesos a disco. Sin
embargo, observa que el escribir los cambios en una
aplicacion a un
fichero requiere unos cuantos pasos que necesitan escribir
en disco. Esto es lo
que pasa cuando se guarda un fichero:
* Basandose en el tama~o del
fichero, el Sistema Operativo debe
escanear la FAT en busca de clusters libres que puedan ser
asignados al fichero.
* Las dos copias de la FAT deben
tener una nueva lista ligada con el
nuevo fichero que se ha escrito.
* El directorio que contiene el
fichero debe tener su nueva entrada
para el fichero creado o modificado.
* Finalmente, se guarda el
contenido del fichero.
Cuando observas
detenidamente todo el trabajo que se realiza internamente
para abrir, leer y
escribir ficheros, parece increible que no se necesite
mas tiempo para
realizar todo este tinglado.
FAT32 es una mejora
del sistema de archivos FAT que:
* soporta discos duros de mas de
2 GB (hasta los 2 Terabytes)
* mejora la gestion del espacio
en disco, siendo ahora mas eficiente.
FAT32 usa clusters mas peque~os (p. ej. Clusters de 4k en discos
de hasta 8 Gb) consiguiendo un ahorro considerable de espacio en
disco. La siguiente tabla es un ejemplo del tama~o que los
clusters tendran para
diferentes tama~os de disco duro:
___________________________________________________
| Tama~o del disco | Tama~o del
Cluster por defecto |
|------------------+--------------------------------|
|
Menos de 512MB | 512 Bytes |
| < = 8GB | 4 Kilobytes |
| < = 16GB | 8 Kilobytes |
| < = 32GB | 16 Kilobytes |
| > = 32GB | 32 Kilobytes |
`---------------------------------------------------'
* Mas robusto. FAT32 es capaz de
reasignar el directorio raiz a otra
zona del disco y usar la copia de seguridad de la FAT en lugar de
la copia por defecto. Como ventaja a~adida se puede citar que el
sector de arranque en los discos FAT32 ha sido expandido para
incluir una copia de seguridad de las estructuras de datos mas
criticas. Esto significa que los discos FAT32 son menos
susceptibles de fallo que los volumenes FAT.
* Mas flexible. El directorio
raiz de un disco FAT32 es ahora una
cadena de clusters ordinaria, de tal forma que ahora puede tener
el tama~o que se quiera y ser asignada en cualquier parte del
disco. Ademas, el “mirroring” FAT se puede desactivar,
permitiendo
asi activar una copia de
la FAT diferente a la primera. Estas
caracteristicas permiten un reparticionar las particiones FAT32
de
forma dinamica. Es de destacar que aunque el dise~o de FAT32
permita estas florituras, no se ha implementado aun por
Microsoft.
Existe una utilidad
para pasar un disco duro FAT16 a FAT32 en el CDROM de
Windows98,
concretamente en la seccion del Kit de Recursos (Resource Kit).
No existe en Windows
la utilidad inversa (FAT32 -> FAT16), siendo necesaria,
una utilidad externa
como por ejemplo, la ultima version del excelente
Partition Magic.
---{ Consideraciones
de compatibilidad
Para conseguir
mantener la mayor compatibilidad posible con las aplicaciones
existentes, redes y
controladores de dispositivos, FAT32 ha sido
implementado con el
menor numero de cambios posible en la arquitectura de
Windows95,
estructuras de datos internas, API’s y formato del disco. Sin
embargo, debido a que
ahora se necesitan mas bytes para
almacenar los
numeros de cluster,
muchas estructuras de datos internas que tratan con los
discos, asi como
API’s publicadas fallaran como escopetas de feria en discos
FAT32. La mayoria de
las aplicaciones no se veran afectadas, sin embargo,
por estos cambios.
Las utilidades y drivers que existian para FAT16 seguiran
funcionando en discos
FAT32, aunque los drivers de dispositivos de bloques
(ej.: ASPIDISK.SYS) y
utilidades de disco para estos necesitaran ser
revisadas para
soportar discos FAT32.
Todas las utilidades
del sistema que vende Microsoft con el Win95OSR2,Win98,
(FORMAT, FDISK,
DEFRAG, SCANDISK, DRIVESPACE) han sido revisadas para
trabajar con FAT32. Y
por supuesto, Microsoft ya se puso en contacto con
todos los fabricantes
de controladores y utilidades de discos para que
revisen sus
productos.
---{ Creando discos
FAT32
A partir de Win95
OSR2, si ejecutas la utilidad FDISK en un disco de mas de
512 MB, te preguntara
si deseas soporte para discos grandes. Si respondes
que si, cualquier
particion de mas de 512 MB que crees. Y .. sera marcada
como particion FAT32.
---{ BIBLIOGRAFIA:
Descripcion del
Sistema de Archivos FAT32
Knowledge Base, ID
Article: E154997
Sean Erwin's Windows
95 OSR2 FAQ
www.compuclinic.com/osr2faq/index.html
Windows98
Proffesional Reference, Ed. new Riders
Macmillan Computer
Publishing
Cap 17: File Systems
and Disk Resources
ZDNET Webopedia
http://www.zdwebopedia.com/TERM/h/hard_disk.html
TheTech Teach
http://thetech.pcwebopedia.com/TERM/F/FAT32.html