Discos, volúmenes y sistemas de archivo(I).

Los errores en los discos y sistemas de archivo en Windows Server 2003 surgen de situaciones diversas, errores de hardware, cortes de electricidad, pobre mantenimiento del sistema, virus, o errores humanos. Cuando se intenta solucionar uno de estos problemas hemos de tener en cuenta el master boot record MBR, la tabla de particiones GPT y los sectores de arranque.


Para solucionar este tipo de problemas parece evidente que conocer el funcionamiento de los discos, volúmenes y el sistema de archivo es una de las necesidades requeridas.


Un disco es un término que usamos para representar un dispositivo físico de almacenamiento. En la mayoría de casos, es una simple unidad física conectada al equipo. Sin embargo, las controladoras de disco pueden hacer abstractos los dispositivos físicos en Windows Server 2003. Es bastante común implementar almacenamiento RAID mediante una controladora hardware, y combinar varios discos físicos que representen a una única unidad de disco. En este caso, el término disco se referirá al array RAID que se compone de múltiples discos físicos.


Un Volumen es un mecanismo por el que Windows Server 2003 usa para dividir un disco lógicamente. Pueden haber uno o múltiples volúmenes en un disco. Adicionalmente, un único volumen puede abarcar múltiples discos.


Antes, una aplicación podía almacenar archivos en un volumen, el volumen debía estar formateado con un sistema de archivos. El sistema controla como los archivos, directorios y otros tipos de datos se guardan en un volumen. Cada volumen tiene sólo un sistema de archivos.


Un sector es una unidad de almacenamiento en un disco, y normalmente tiene un tamaño de 512 bytes. Los equipso acceden a ciertos sectores de un disco durante su inicio para determinar que sistema operativo iniciar y donde se encuentran las particiones. Los datos guardados en estos sectores varía dependiendo de la plataforma del equipo.


Los equipos que ejecutan sistemas de 32-bits de Windows Server 2003 comienzan el proceso de arranque desde discos con MBR. Aquéllos que ejecutan versiones Itanium, arrancan desde discos con GPT. Ambos discos, MBR y GPT, tienen sectores críticos para el arranque, pero la diferencia con el resto es que no son visibles desde la interfaz gráfica de usuario. En su lugar, debemos usar herramientas de edición, como disk-probe, para ver como están estructurados los datos en estos sectores.



Sectores en discos MBR


Los dos sectores críticos en equipos 32-bits:



  • MBR, siempre ubicado en el sector 1 del cilindro 0, cabezal 0, el primer sector del disco.
  • l sector de arranque, que se encuentra en el sector 1 de cada volumen.

Estos sectores contienen tanto el código ejecutable como los datos necesarios en su ejecución.



MBR en discos básicos

El MBR, la estructura de datos más importantes en el disco, se crea en el momento en que se particiona el disco. Contiene una pequeña porción de código ejecutable denominado código de arranque maestro, la firma del disco y la tabla de aprticiones del disco. Al final del MBR hay una estructura de 2-bytes llamada firma o marca de final de sector, que siempre está establecida a 0x55AA. Una firma también distingue el final de un EBR (extended boot record) y el sector de arranque.


La firma de disco, un número único en la posición 0x01B8, lo identifica ante el sistema operativo. Windows Server 2003 lo usa como un índice para guardar y recuperar información del disco, como las letras de unidad, desde el registro.


El código de Master boot realiza lo siguiente:



  1. Busca la partición activa en la tabla de particiones.
  2. Sector de inicio de la partición activa.
  3. Carga una copia del sector de arranque desde la partición activa a la memoria.
  4. Transfiere el control al código ejecutable del sector de arranque.

Si el código no puede completarlas, el sistema mostrará un mensaje parecido a cualquiera de los siguientes:


Invalid partition table (Tabla de particiones no válida)


Error loading operating system (Error en la carga del sistema operativo)


Missing operating system (No se encuentra sistema operativo)


Nota: Las unidades removibles, como disquetes o unidades omega, etc… no contienen MBR. El primer sector de estos es el sector de arranque. Aunque cada disco contiene un MBR, el código de sector de arranque sólo se utiliza si el disco contiene la partición primaria activa y el equipo considera al disco como un dispositivo de inicio.


Tabla de particiones en discos básicos


La tabla de particiones es una estructura de datos de 64-bits que se usa para identificar el tipo y ubicación de las particiones en un disco, según una capa estándar independiente del sistema operativo. Cada entrada de la tabla de particiones tiene un tamaño de 16 bytes, con un máximo de cuatro entradas. Cada entrada se inicia en una posición predeterminada desde el que comienza el sector:



















Partición 1 0x01BE (446)
Partición 2 0x01CE (462)
Partición 3 0x01DE (478)
Partición 4 0x01EE (494)

 


La siguiente imagen muestra una parte de una tabla de particiones de MBR de un disco no arrancable con tres particiones NTFS. Cuando hay menos de cuatro particiones en un disco, los campos de la tabla de la partición restante están establecidos a 0.


partitiontable


La tabla describe los campos en cada entrada de la tabla de particiones. El ejemplo corresponde a la primera entrada de la tabla de particiones anterior. El byte offset corresponde a las direcciones. Hay tres entradas adicionales cuyos valores pueden calcularse añadiendo 10h al byte offset específico de cada entrada adicional de la tabla de particiones.


























































Byte offset Tamaño campo Valor de ejemplo Nombre del campo y definición.
0x01BE 1 byte 0x00 Indicador de arranque. Indica si el volumen es la partición activa:
00 No se usa como arranque
80 Partición activa
0x01BF 1 byte 0x01 Cabezal de inicio
0x01C0 6 bits 0x01* Sector de inicio. Sólo se utilizan los bits 0 al 5. Los dos superiores, 6 y 7, los utiliza el campo de Cilindro de inicio.
0x01C1 10 bits 0x00* Cilindro de inicio. Usa 1 byte adicional a los 2 superiores del campo de sector de inicio para tener el valor de cilindro. El cilindro de inicio es un número de 10 bits que tiene un valor máximo de 1023.
0x01C2 1 byte 0x07 ID de sistema. Determina el tipo de volumen.
0x01C3 1 byte 0x7F Cabezal final.
0x01C4 6 bits 0x3F* Sector final. Sólo se utilizan los bits 0 al 5. Los dos superiores, 6 y 7, los utiliza el campo de cilindro final.
0x01C5 10 bits 0x98* Cilindro final Usa 1 byte adicional a los 2 bits superiores del campo de sector final para obtener el valor de cilindro. El cilindro final es un número de 10 bits, con un valor máximo de 1023.
0x01C6 4 bytes 0x3F000000 Sectores relativos. El offset desde el comienzo del disco hasta el comienzo del volumen, contado en sectores.
0x01CA 4 bytes 0x41D31200 Sectores totales. Número total de sectores en el volumen.

* Los valores de ejemplo con asterisco no representan con precisión el valor de los campos ya que el campo es entre 6 o 10 bits y los datos grabados lo son en bytes.


Los números sectores relativos y sectores totales se guardan en un formato especial “little endian” o en orden de byte reverso. Este formato “little endian” es un método que significa que el byte de menor peso se almacena en la dirección más baja de memoria y el byte de mayor peso en la más alta, lo que hace que el de menor peso aparezca el primero en la notación hexadecimal. Por ejemplo: el valor de ejemplo del campo sectores relativos en la tabla, 0x3F000000 es la representación little endian de 0x0000003F. El equivalente en decimal de este número little endian es 63. El valor de ejemplo para sectores totales es 0x41D31200, que representa 0x0012D341. Por tanto, en decimal, hay 1.233,729 sectores en el volumen. El volumen tiene un tamaño de sector de 512 bytes (que no se indica en la tabla de particiones). Si multiplicamos el número de sectores por su tamaño en bytes se ve que el volumen es de 600MB.


El campo de Indicador de arranque es el primer indicador de la tabla de particiones e indica si el volumen es la partición activa. Sólo una partición primaria en el disco puede tener este campo establecido.


Es posible tener distintos sistemas operativos en diferentes sistemas de archivo y en diferentes volúmenes. Podemos usar las herramientas de disco, como el administrador de disco, Diskpart o el comando Fixmbr de la consola de recuperación para marcar una partición primaria como activa.


El campo ID del sistema es otro de los elementos presentes en la tabla de particiones, donde se indica el sistema de archivos, FAT, FAT32 o NTFS que se utilizó para el formato del volumen. Este campo también indica si es una partición extendida. Windows Server 2003 lo usa para saber que controladores de sistema de archivos cargará durante el arranque. Y los valores posibles son:

























































Valor de ID Tipo de partición
0x01 Partición primaria FAT12 o una Unidad lógica.(Menor de 32680 sectores en el volumen)
0x04 Partición primaria FAT16 o una Unidad lógica.(Entre 32680 y 65535 o 16MB-33MB)
0x05 Partición extendida
0x06 Partición grande DOS FAT16 o Unidad lógica.(33MB-4GB)
0x07 Sistema de archivos instalable (Partición NTFS o Unidad lógica)
0x0B Partición FAT32 o Unidad lógica
0x0C Partición FAT32 o Unidad lógica usando las extensiones de BIOS INT 13h
0x0E Partición grande DOS FAT16 o Unidad lógica usando las extensiones de BIOS INT 13h
0x0F Partición extendida usando las extensiones de BIOS INT 13h
0x12 Partición EISA u OEM
0x42 Volumen dinámico
0x84 Partición de administración de energía-hibernación
0x86 Volumen multidisco FAT16 creado con Microsoft Windows NT 4.0
0x87 Volumen NTFS multidisco creado por Microsoft Windows NT 4.0
0xA0 Partición de hibernación de portátil
0xEE Partición GPT
0xEF Partición de sistema EFI o un disco MBR.

Windows Server 2003 no es compatible con volúmenes multidisco que se crearon con MS Windows NT 4.0 y anteriores, y que usan los ID 0x86, 0x87, 0x8B o 0x8C.


En el caso de estar actualizando desde NT 4.0 primero debemos realizar una copia de seguridad y eliminar los volúmenes multidisco antes de dicha actualización. Al finalizarla, creamos los volúmenes dinámicos y restauramos los datos. Si no lo hacemos así debemos usar la herramienta Ftonline de las Windows Support Tools para acceder al volumen después de finalizar la actualización.


Si la actualización es desde Windows 2000 server, debemos convertir los volúmenes multidisco en volúmenes dinámicos antes de comenzar la instalación o se detendrá.


MS-DOS(c) sólo puede acceder a volúmenes que tienen un ID 0x01, 0x04, 0x05 o 0x06. Sin embargo, podemos suprimir volúmenes que tienen otros valores de la tabla usando el Administrador de discos o Diskpart.


Los campos cilindro, cabezal y sectores iniciales y finales. En conjunto suelen definirse como campos CHS, son elementos adicionales de la tabla de particiones. Estos campos son esenciales para el inicio del equipo. El MBR los utiliza para encontrar y cargar el sector de arranque de la partición activa. Los campos de inicio de CHS en particiones no activas apuntan a los sectores de arranque de las restantes particiones y el EBR de la primera unidad lógica en la partición extendida.


Conocer el sector inicial de una partición extendida es muy importante para soluciones de problemas de disco a bajo-nivel. Si el disco falla, necesitamos trabajar con el punto inicial de la partición (entre otros factores) para recuperar datos guardados.


El campo de cilindro final en la tabla de particiones es de 10 bits, que limita el número de cilindros que pueden ser descritos en la tabla de partición a un rango entre 0 y 1023. Los campos cabezal inicial y final son de 1 byte cada uno, que limita el rango del campo entre 0 y 255. Los campos sector inicial y final son de 6 bits, que limita el rango de dichos campos entre 0 y 63. Sin embargo, la enumeración de los sectores se inicia en 1 (no en 0, como en otros campos), así el máximo número de sectores por pista es 63.


Ya que la mayoría de discos están formateados a bajo-nivel con un estándar de 512 bytes por sector, la máxima capacidad de disco descrita mediante los campos cilindro, cabezal y sector de la tabla de partición en estos discos se calcula como sigue:


Máxima capacidad = tamaño de sector x cilindros(10 bits) x cabezales(8 bits) x sectores por pista(6 bits)


512 x 1024 x 256 x 63 = 8.455.716.864 (7,8GB)


Windows Server 2003 y otras versiones de Windows que son compatibles con las extensiones BIOS INT 13h pueden acceder a particiones que excedan estos 7,8 GB primeros del disco ignorando los campos CHS iniciales y finales en favor de los campos de sectores relativos y totales.


Windows 2000 y Windows Server 2003 ignoran los campos CHS iniciales y finales sin hacer caso de si la partición supera los primeros 7,8GB del disco. Sin embargo, Windows Server 2003 debe colocar los valores apropiados en los campos CHS iniciales y finales ya que Windows 95, 98 y Millenium (que son compatibles con las extensiones BIOS INT 13h) usan estos campos si la partición no supera los 7,8GB primeros del disco. Estos campos también se requieren para mantener la compatibilidad con las extensiones BIOS INT 13h para el inicio.


MS-DOS y otros sistemas de Windows que no soportan las extensiones BIOS INT 13h ignoran las particiones que superen el límite de 7,8GB ya que usan un ID que sólo reconocen los sistemas compatibles con dichas extensiones.


Tanto el sistema operativo como el equipo deben ser compatibles con las extensiones de BIOS INT 13h si queremos crear particiones que excedan los primeros 7,8GB del disco.


Los campos sectores relativos y totales: El campo de los sectores relativos representan el offset desde el comienzo del disco hasta el comienzo del volumen, contado en sectores, para el volumen descrito en la entrada de la tabla de particiones. El campo de sectores totales representan el total de sectores en el volumen.


El uso de los campos sectores relativos y sectores totales(que resultan en un número de 32-bits) proporciona 8 bits más para representar el número total de sectores que los que hace el esquema CHS. Esto nos permite la creación de particiones que contienen más de 232 sectores. Con un tamaño estándar de sector de 512 bytes, los 32 bits usados para representar los campos de sectores relativos y totales se traducen en un máximo de 2 Terabytes como tamaño de partición.


En la imagen vemos el MBR, tabla de particiones y sectores de arranque de un disco básico con cuatro particiones. Los campos en la tabla de particiones y las tablas de las particiones extendidas contienen la misma información.


discobasico 


EBR(Extended Boot Record) en discos básicos. Un EBR, que consiste en una tabla de partición extendida y la firma para el sector, existe en cada unidad lógica en la partición extendida. Contiene sólo la información sobre la primera cara del primer cilindro de cada unidad lógica en la partición extendida. El sector de arranque en una unidad lógica está usualmente ubicada en uno de los sectores relativos 32 o 63. Sin embargo, si no hay partición extendida en un disco, no hay EBRs ni unidades lógicas.


La primera entrada en una tabla de partición extendida de la primera unidad lógica apunta a su propio sector de arranque. La segunda entrada apunta al EBR de la siguiente unidad lógica. Si no hay más unidades lógicas, la segunda entrada no se usa y se le graban una serie de ceros. Si hay unidades lógicas adicionales, la primera entrada de la tabla de partición extendida para la segunda unidad lógica apunta a su propio sector de arranque. La segunda entrada para la segunda unidad lógica apunta al EBR de la siguiente unidad lógica. La tercera y cuarta entradas de una tabla de partición extendida nunca se usan.


Como podemos ver en la imagen: los EBRs de las unidades lógicas en la partición extendida son una lista enlazada. Vemos tres unidades lógicas en una partición extendida, ilustrando la diferencia en las tablas de partición extendida entre las unidades lógicas precedentes y la última unidad lógica.


EBRs


Con la excepción de la última unidad lógica en la partición extendida, el formato de la tabla de partición extendida, descrita en la tabla siguiente, se repite para cada unidad lógica. La primera entrada identifica a la propia unidad su sector de arranque y la segunda entrada el EBR de la siguiente unidad lógica. La tabla de partición extendida para la última unidad lógica tiene sólo listada la entrada de su propia partición. De la segunda a la cuarta entrada no se utilizan en la última tabla de partición extendida.


















Entrada Contenido de la entrada
Primera Información sobre la actual unidad lógica en la partición extendida, incluyendo la dirección de inicio de los datos.
Segunda Información sobre la siguiente unidad lógica en la partición extendida, incluyendo la dirección del sector que contiene el EBR de la siguiente unidad lógica. Si no hay unidades lógicas adicionales, este campo no se usa.
Tercera sin usar
Cuarta sin usar

Los campos en cada entrada de la tabla de partición extendida son idénticos a las entradas de la tabla de particiones del MBR.


El campo de sectores relativos en una entrada tabla de partición extendida muestra el número de sectores que están en el offset desde el comienzo de la partición extendida al primer sector en la unidad lógica. El número en el campo de sectores totales se refiere al número de sectores que componen la unidad lógica, y es igual al número de sectores desde el sector de arranque determinado por la entrada de la partición extendida al final de la unidad lógica.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *