<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>Large Disk HOWTO: Il limite dei 65535 cilindri in Linux</TITLE> <LINK HREF="Large-Disk-HOWTO-13.html" REL=next> <LINK HREF="Large-Disk-HOWTO-11.html" REL=previous> <LINK HREF="Large-Disk-HOWTO.html#toc12" REL=contents> </HEAD> <BODY> <A HREF="Large-Disk-HOWTO-13.html">Avanti</A> <A HREF="Large-Disk-HOWTO-11.html">Indietro</A> <A HREF="Large-Disk-HOWTO.html#toc12">Indice</A> <HR> <H2><A NAME="s12">12. Il limite dei 65535 cilindri in Linux</A></H2> <P>La chiamata <CODE>HDIO_GETGEO</CODE> memorizza il numero dei cilindri in una variabile di tipo short. Questo vuol dire che se si hanno più di 65535 cilindri il loro valore verrà troncato e (per una tipica configurazione SCSI com 1MiB di cilindri) un disco da 80 GiB apparirà come uno da 16 GiB. Una volta riconosciuto tale problema è facile evitarlo. <H2><A NAME="verylarge"></A> <A NAME="ss12.1">12.1 Problemi dei controller IDE con dischi di dimensioni superiori ai 34 GB</A> </H2> <P>I dischi superiori ai 33.8 GB non sono utilizzabili con i kernel precedenti alla versione 2.3.21. Appresso si riportano i dettagli. Ipotizziamo l'acquisto di un nuovo disco IBM-DPTA-373420 con una capacità di 66835440 settori (34.2 GB). I kernel ante 2.3.21 riporterebbero una dimensione di 769*16*63 = 775152 settori (0.4 GB) che è una cosa spiacevole. Se fornissimo i parametri hdc=4160,255,63 da linea di comando non otterremmo alcun effetto - tale valori sarebbero ignorati. Ma cosa succede? La funzione idedisk_setup() utilizza la geometria fornita dal disco (che è 16383/16/63) e sovrascrive i valori specificati dall'utente da linea di comando che vengono utilizzati solo per impostare la geometria da passare al BIOS. La funzione current_capacity() o idedisk_capacity() ricalcola il numero dei cilindri come 66835440/(16*63)=66305 poichè tale valore è memorizzato in una variabile short diviene 769.Fino a quando lba_capacity_is_ok() non distrugge id->cyls ogni sua chiamata successiva riporterà il valore falso, di conseguenza la capacità del disco diviene 769*16*63. È disponibile un aggiornamento per diverse versioni del kernel. Una "patch" per la versione 2.0.38 può esere trovata presso: <A HREF="ftp://ftp.us.kernel.org/pub/linux/kernel/people/aeb/">ftp.kernel.org</A>. Una "patch" per la versione 2.2.12 può essere trovata presso: <A HREF="http://www.uwsg.indiana.edu/hypermail/linux/kernel/9910.2/0636.html">www.uwsg.indiana.edu</A> (potrebbero essere necessarie delle modifiche per eliminare i delimitatori del linguaggio html). I kernel della serie 2.2.14 gestiscono tali dischi. La serie 2.3.* gestisce questi dischi a partire dalla versione 2.3.21. È possibile "risolvere" il problema a livello hardware utilizzando un <A HREF="Large-Disk-HOWTO-11.html#jumperbig">ponticello</A> (jumper) per impostare la dimensione di 33.8 GB. In molti casi sarà necessario un aggiornamento del <A HREF="Large-Disk-HOWTO-4.html#biosupgrades">BIOS</A> se si vuole utilizzare tali dischi come dischi d'avvio del sistema. <HR> <A HREF="Large-Disk-HOWTO-13.html">Avanti</A> <A HREF="Large-Disk-HOWTO-11.html">Indietro</A> <A HREF="Large-Disk-HOWTO.html#toc12">Indice</A> </BODY> </HTML>