[eside-ghost] Capacidad de HD:HELP!!!
Cymoril sin patas
eside-ghost@deusto.es
Sat, 3 May 2003 17:33:42 +0200
> Antiguamente no era posible arrancar sistemas operativos situados en
> particiones más allá del cilindro 1024 (aproximadamente por encima de
> los primeros 2 Gb),
> pero la opción lba32 y el uso en la BIOS del disco
> en modo LBA (usado por dewfecto hace años) evita este problema... El
> modo LBA lo que hace es hacer una capa entre el disco duro y la BIOS
> de forma qeu traduce las direcciones de memoria del disco a un formato
> que le permita a la BIOS ver todo el disco...
Emmm.... precisión cymorílica simpática:
NOTA PREVIA: Los discos duros actuales usan informática ficción. Me explico: en todo el e-mail hablaremos de geometrías de disco (número de cabezas, cilindros y sectores) FICTICIAS, ya que las geometrías reales solo las conoce el disco (normalmente 4 cabezas, un número variable de sectores por pista, y quién sabe que mazacote de cilindros)
NOTA PREVIA 2: A todo SO la BIOS le hace falta para arrancar. Si la BIOS no es capaz de cargar el programa cargador del S.O., da igual que usemos Linux, Windows o Minix: no arrancará por mucho que soporte el disco.
MENSAJE:
Las antiguas BIOS soportaban un máximo de 1024 cilindros, 256 cabezas y 63 sectores por pista. Eso permite acceder a un máximo de 8 Gb (algo menos). (usaban un direccionamiento de 24 bits).
Las controladores IDE (estándar ATA anterior al 6, con direccionamiento de 28 bits) soportaban el modo LBA de __28 bits__: 8 para los sectores, 16 para los cilindros y 4 para las cabezas.
Esto hace: 256 sectores / pista, 65536 cilindros y 16 cabezas. Es decir 128 GB. Ahora existen discos más grandes, creo que de hasta 512 GB :-)
Combinando ambos parámetros, no podemos acceder a más de :
1024 cilindros, 16 cabezas y 63 sectores/pista, lo que nos deja accesibles solo los primeros 504 MB del disco. Esto es muy importante, ya que desde entonces nadie ha conseguido que se usen geometrías de más de 16 cabezas y 63 sectores, lo cual implica aumentar el número de cilindros reales.
Las primeras BIOSes en tener soporte para el modo de translación LBA (Lineal Block Addressing: donde se numera cada sector correlativamente), permitía a los S.O.s dependientes de la BIOS, utilizar la antigua numeración de 24 bits, y esta numeración de 24 bits era traducida (de ahí la translación) por la propia BIOS, a numeración LBA de 32 bits : la que habla la controladora de discos. Es decir, la BIOS era capaz de hablar con diferentes geometrías de disco, en función de si hablaba con el S.O. o con la controladora de discos.
El modo LARGE disponible en algunas BIOSes, hacía una translación un poco especial. Este modo se usaba para permitir alcanzar los 8 GB cuando la controladora IDE no funcionaba en LBA.
Tradicionalmente han existido otros límites a parte del de los 504 MB (528 para los que no saben dividir) y el de los 8 Gigas. Estos límites menos conocidos por ser menos frecuentes, fueron los de: 2.1 GB debido a que algunas BIOS perdían bits por el camino :-) y no eran capaces de acceder a cilindros por encima del 4096. Lo que es peor, se colgaban durante el arranque, o detectaban discos de 400 megas ...
Otras BIOS perdían menos bits (pero perdían), y solo te dejaban acceder a los primeros 3.27 GB del disco. Esto fue un caso aislado.
En el modo LARGE, se hace un truco rastrero :-) para funcionar. Esto provocaba encontrarse con geometrías de disco (ficticias) de 256 cabezas. Algunos sistemas operativos antiguos, como DOS y Windows 95, no entendían que la geometría del disco pudiese tener más de 128 cabezas, lo que dejaba el disco en unos 4 Gb, de cara al S.O
El límite famoso de los 32 GB, se debe a que por defecto (y por alguna razón que se me escapa) se usan geometrías de 16 cabezas y 63 sectores, lo cual lleva a querer usar números de cilindro por encima de 65535 (2^16 - 1), el límite de un short int. La llamada al sistema pertinente, en sistemas Linux antiguos (estamos hablando de kernels de 1999 para atrás, más o menos), devolvían el número de cilindro como un short int. Este problema se solucionó con un parche y kernels más nuevos, así como con una nueva versión del fdisk :-)
Ahora bien, algunos S.O. también tienen problemas para usar discos de más de 32 GB. Sin ir más lejos, un disco de 80 GB puede ser visto como uno de 16. Por eso muchos discos duros llevan un jumper que permite configurarlos como de 32 GB.
El límite actual para los discos duros es de 2 TeraBytes, puesto que se usa un entero de 32 bits para direccionar un máximo de 4294967296 sectores, es decir 2.199.023.255.552 bytes, lo que es lo mismo: 2048 GB (dentro de 5 ó 6 años los tenemos en la tienda:-) El día que los discos crezcan más, habrá que cambiar el formato de la tabla de particiones para usar más bits, o algo.
Por cierto, los discos de más de 8.4 GB, deberían devolver una capacidad (geometría) de 16383/16/63, lo que indica que la geometría CHS ya está anticuada, y hay que buscar otras formas de direccionar sectores.
Los discos de más de 137 GB, deben devolver una capacidad de 0xFFFFFFF sectores, y entonces hay que preguntarles por otras vías su capacidad, que ahora se usa un modo LBA de 48 bits (32 + 16). Recientísimamente se incorporó al kernel un parche para trabajar con estos discos. Concretamente, creo que ha sido en el 2.4.18, pero tampoco117231408 lo he comprobado :-) Si alguien me cede la pasta pa pillar uno... :-)
Como root podemos ejecutar:
hdparm -g /dev/hda
Que devuelve la geometría del disco.
En mi sistema eso devuelve:
Thunder:~# hdparm -g /dev/hda
/dev/hda:
geometry = 7297/255/63, sectors = 117231408, start = 0
Thunder:~#hdparm -g /dev/hdb
/dev/hdb:
geometry = 7476/255/63, sectors = 120103200, start = 0
Que se corresponde con dos discos de unos 60 GB cada uno (como se ve, el segundo es un pelín más grande).
Respecto de la opción lba32 ... en fin: así LILO pregunta al kernel sobre la geometría del disco.
Si la BIOS y el kernel ven al disco de forma diferente, puede fallar el arranque. En esos casos la opción linear solventa el problema, pero entonces LILO no sabrá si te debe decir que el kernel cruza la frontera de los 1024 cilindros ...
El gestor de arranque grub, parece ser es más robusto que LILO (yo no lo he probado). De todos modos el tercero en discordia se llama nuni, y pasa de la bios para arrancar, puesto que accede DIRECTAMENTE a la IDE. Se puede colocar en el MBR. :-)
> Si usaras como dico primario (y de arranque por tanto) un idsco duro
> que la BIOS no es capaz de reconocer necesitarías un disco o cd de
> arranque, pues si la BIOS no pilla ese disco no podrá leer el LILO o
> GRUB de él.
Por eso le recomendamos que instalase el lilo en /dev/hda, para asegurarse de que el código LILO puede leerlo, y va a leerlo. Pero en realidad TODAS las particiones de __arranque__ deben estar por debajo de los 32 GB. De ahí la recomendación de hacer una partición de boot.
En fin, que si es el SO (ventanucos) el que no le reconoce el disco correctamente, no hay problema siempre y cuando la partición de fat32 esté por debajo de los 32 gigas, que estará. Si es la BIOS la que no le reconoce el disco ... la cosa se pone fea. Si te lo reconoce como de 32 GB exactamente: no problemo, con tal de que las particiones estén por debajo de 32 GB. Si te lo reconoce de menos de 32 GB, digamos 500 megas -por decir algo- todas tus particiones arrancables en ese disco tendrán que estar por debajo de los 500 megas. El resto del disco lo puedes particionar a tu gusto, ya que solo el S.O. será quien trabaje con él.
Salu2 ó 3.