sábado, 4 de diciembre de 2010

NTFS: Un sistema de archivos íntegro y complejo (parte II)

                                                         Flujos de datos alternos:
Los flujos de datos alternos (FDA) deben ser la característica mas poco usada de NTFS. Un flujo de datos no es más que los datos que son tomados cuando una aplicación abre un archivo. Por ejemplo, cuando un editor de imágenes abre un archivo de imagen JPEG establece un flujo de datos con la información del encabezado seguida por el dato de imagen comprimido. Esto es un flujo de datos. La característica de flujos de datos alternos le da a cualquier archivo la habilidad de tener flujos múltiples. Macintosh popularizó esta característica con su soporte a forks de recursos. Los forks de recursos fueron utilizados para almacenar los iconos de las aplicaciones, además de dar forma y posicionar la información de menús.

Bajo NTFS, cada flujo tiene su propio candado oportunístico, candado de archivo, tamaño de cluster, y asociación a aplicación. Pero cada flujo comparte un nombre de archivo común y los permisos de archivo. Windows utiliza los FDA para almacenar atributos de archivos. Haga clic derecho en un archivo y seleccione Propiedades, luego vaya a la pestaña Detalle. Ahí podrás adicionarle textos a campos como el título, palabras clave, número de revisión, etc (depende del tipo de archivo). Todo esto va en el flujo de datos alterno llamado SummaryInformation
Aquí tienen algunos ejemplos que puedes intentar en tu PC (las entradas en negritas, las salidas normales)

      C:\Users\enrique>echo Esto va a stream 1 > test.txt:stream1
      C:\Users\enrique>echo Esto va a stream 2 > test.txt:stream2

      C:\Users\enrique>more <  test.txt:stream1
      Esto va a stream 1 

      C:\Users\enrique>more <  test.txt:stream2
      Esto va a stream 2

Pueden ver las propiedades del flujo usando "dir /R"

       C:\Users\enrique>dir /R
       02/12/2010      09:39 p.m.             18    test.txt
                                                                   19    test.txt:stream1:$DATA
                                                                   17    test.txt:stream2:$DATA      
                                          1 file(s)            18 bytes


Los flujos de datos pueden ser usados para mezclar datos y ejecutables. Por ejemplo puedes crear un archivo único que luzca como un archivo de datos pero que también pueda ser ejecutado.

        C:\Users\enrique>Echo Data goes here >data.txt
        C:\Users\enrique>Type test.exe>data.txt:data.exe

        
        C:\Users\enrique>Type data.txt
        Data goes here
        
        C:\Users\enrique>Start ./data.txt:data.exe
        Data.exe runs...


Durante mucho tiempo los creadores de malware usaron los flujos para esconder sus viles creaciones. No pasó mucho tiempo antes de que los diseñadores de antivirus lo entendieran e incorporaran detección de flujos en sus productos. Para que una aplicación use los flujos alternos debe de estar escrita para permitir esto. La mayoría de las aplicaciones no lo están de modo que los flujos alternos casi no son usados en Windows. Sysinternals es una utilidad muy provechosa para esta característica de NTFS: los flujos.

Bloqueo de archivos:
Estrictamente hablando, el bloqueo de archivos no es una característica del sistema, es una característica de servidores de archivos. El bloqueo de archivos hace posible crear políticas en el servidor que bloqueen tipos específicos de archivos. No quieres que los usuarios descarguen Mp3 o vídeo en tu sistema? bloquealos. Aquí te muestro como:
Abra y expanda el Administrador de Recursos del Servidor de Archivos, haga doble clic en Administración de bloqueo de archivos, seleccione el Nodo de Bloqueo de Archivos, clic en la pantalla de acciones y luego clic en Crear un bloqueo de archivo. En el diálogo de paso, seleccione el directorio donde quiere que se ejecute el bloqueo por ejemplo Mis documentos. Use derivar propiedades desde una plantilla o definir uno para definir tus parámetros de bloqueo.
Clic en crear para crear el nuevo bloqueo.
Puede crear una variedad de reportes en las actividades de bloqueos de archivos usando el administrador de recursos del servidor de archivos

Puntos de montaje de volumen:
Los puntos de montaje de volumen son mas útiles en entornos de servidores pero sin embargo es interesante conocerlos y pueden tener usos en las PCs. Un volumen no es más que una partición que tiene un nombre. El volumen más popular es por supuesto la unidad C: Mientras que en una PC de casa puede tener solo un volumen, en entornos de servidores pueden haber docenas y docenas. Que sucede cuando tienes particiones asignadas desde la A: a la Z: y aun necesitas montar más volúmenes? Aquí es cuando vienen a cuento los puntos de montaje. De hecho los puntos de montaje te permiten montar y administrar muchos volúmenes sin tener que usar la nomenclatura C:

Usar los puntos de montaje de volúmenes permite enlazar múltiples volúmenes de manera transparente aquí le muestro como hacerlo: Clic en Inicio, Panel de Control, Sistema y Seguridad, Herramientas Administrativas, Crear y Formatear Particiones del Sistema. Aparecerá la utilidad de Administración de Discos. Seleccione o cree una partición vacía. Luego de seleccionar el tamaño, aparecerá un diálogo, seleccione Montar en el siguiente directorio NTFS vacío y seleccione el directorio vacío en el que quieras montarlo. Ahora lo puedes nombrar (la unidad) y darle formato. 
Luego de esto el volumen nuevo será montado sin problemas en el directorio vacío. El punto de montaje es indicado por un icono y sus propiedades en el explorador son indicadas como un volumen montado
Montar un volumen es una buen manera de quitarse de arriba el problema del espacio insuficiente en tus unidades. También es un modo efectivo de extender el sistema de archivos (SA) a medida que crece el negocio. La utilidad mountvol provee medios de crear, borrar y listar desde la linea de comandos y desde scripts.

Enlaces duros, enlaces suaves y puntos de uniones:
Con Vista, llego una característica que estuvo disponible desde hace tiempo en las comunidades UNIX/Linux. Un enlace duro luce y funciona justo como el archivo o directorio al que apunta. Si cambias un atributo en el enlace lo cambiaras también en el destino. Si borras el enlace duro borraras también el destino.
Para crear un enlace duro levante la linea de comando y escriba:

mklink /h New-Link Existing-Target
Con la introducción de Vista, los enlaces suaves reemplazaron a los puntos de uniones. Un enlace suave es un archivo que apunta a un archivo o directorio destino. Un enlace suave puede tener permisos de acceso diferentes del destino, y puede cruzar entre volúmenes. Un enlace suave puede ser borrado sin afectar el destino. Puede apuntar a unidades de red, un punto de unión no puede. Un punto de unión solo puede apuntar a directorios, un enlace suave puede apuntar a directorios o archivos.
¿Porque usar enlaces suaves?. Digamos que tienes un paso bastante largo a un directorio y estas cansado de escribirlo cada vez o de ir haciendo clics en el explorador. Creas un enlace a donde quiere que esté y tendrás un acceso directo. Más importante aun, puedes usarlo para administrar versiones de aplicaciones o para crear directorios alternos a cualquier jerarquía existente. Esto es útil si desarrollas código para plataformas diferentes (por ejemplo Mac) y quieres personalizar Windows.
Para crear un enlace suave levante la linea de comando y escriba:

         mklink New-Link Existing-Targe

Un enlace suave sera listado en el explorador con el icono de la fecha superpuesta. Haga clic derecho sobre el enlace y seleccione Propiedades, luego vaya a la pestaña de Acceso Directo. La pestaña lista el enlace suave y el paso hacia el destino.
Borrando enlaces: tenga precaución cuando borre enlaces. Use "rmdir". No use el explorador para borrar un enlace y no use "del /s". Porque? Cualquiera de los dos borrará de manera recursiva el destino y todo lo que haya debajo. También tenga cuidado de no crear ciclos de espacios de nombres con enlaces. Esto es esencialmente un paso circular a un directorio y puede echar abajo a tu antivirus o a cualquier otra utilidad en el sistema.

Diviértase con los logs:
NTFS alcanza un grado superior de tolerancia a errores usando Journaling o Logging. Cuando un archivo es escrito a disco deben pasar varias cosas. Primero, el espacio en disco debe ser localizado, luego el dato es escrito en el disco como un cluster de sectores, a continuación la metadata es actualizada para reflejar su localización en disco, la fecha de creación, el tamaño del archivo, el propietario, los permisos etc. Si la alimentación es interrumpida en ese momento o el sistema cae antes de que este proceso se complete pueden suceder varias cosas indeseables. El espacio puede ser localizado y escrito pero no actualizado, lo que resultaría en clusters huérfanos. Si el archivo existe y ha sido actualizado, puede haber quedado trunco y la metadata desactualizada, lo que daría un archivo que es mas pequeño que la talla que indica la metadata. En los días de FAT estos errores eran corregidos con chkdsk, ...constantemente.

El journaling previene estos problemas manteniendo el SA en un estado íntegro. Esto lo consigue registrando (logging) las actualizaciones del SA en el registro (journal) $LOGFILE antes de cada escritura al SA. Antes de hacer una escritura se setea el bit de volumen "sucio" (on). Cada operación de modificación de archivos en un volumen NTFS es procesada como una transacción, almacenada en el registro $LOGFILE y separada por puntos de chequeo (checkpoints). Cada transacción es independiente de cualquier otra, y es procesada por el servicio de log de archivos. Dicho servicio crea entradas rehacer (Redo) y deshacer (Undo) en el $LOGFILE. Un redo permite rehacer, adelantar o completar una transacción. Un undo permite revertir una transacción sin dañar el SA.
Si el sistema se cae durante una operación de escritura, Windows detecta el bit "sucio" cuando arranca, inicia el servicio de logs de archivos y ejecuta tres pases en $LOGFILE. El primer pase es un análisis para determinar si es necesario corregir algún cluster, el segundo ejecuta los redos pendientes y el tercero ejecuta los undos en las transacciones que no puedan ser completadas. 
Las siguientes operaciones modifican un volumen NTFS y crean registros de transacciones: creación, borrado, extensión, truncado, modificación de información de archivos, renombrado y cambios en la seguridad.

Mientras que journaling previene que los volúmenes NTFS tengan inconsistencias en su metadata, no previene la pérdida de datos. Si tu PC se cae a mitad de una operación de escritura extensa es probable aun que pierdas datos. Pero cuando menos evitas un chkdsk extenso en el arranque y la posibilidad de terminar con un SA corrupto. 

No hay muchas cosas prácticas que puedas hacer con $LOGFILE, excepto quizás ganar puntos en las discusiones con otros administradores de sistemas. No obstante una aplicación muy útil para análisis de SA es FSUTIL. FSUTIL es una navaja suiza que lidia con las secuencias de actualización de registros numéricos, administración de volúmenes, cuotas, enlaces duros, información de SA y una variedad de parámetros del SA.  

Clic en Inicio, escriba cmd en la linea de búsqueda y luego haga clic derecho ejecutar como administrador, en la linea de comandos escriba:

fsutil fsinfo drives - lista todas las unidades
fsutil dirty query C: - revisa si el bit sucio esta seteado en C:
fsutil fsinfo statistics C: - muestra estadisticas de C:
fsutil behavior set disablelastaccess 1 - un truco sucio que deshabilita la actualización de la fecha de último acceso y mejora el rendimiento del SA. Puede afectar a las aplicaciones de respaldos......continúa en la tercera parte