-[ 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 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