Il driver IDE di Linux ricava la geometria e la capacità di un disco (e molte altre cose) utilizzando una richiesta ATA IDENTIFY.
Fino a poco tempo fa il driver non accettava il valore di lba_capacity
restituito se questo era maggiore del 10% rispetto alla capacità
calcolata come prodotto di C*
H*
S.
Ciò nonostante grazie ad accordi tra i produttori di dischi IDE di grandi dimensioni
(quelli con più di 16514064 settori) forniscono i valori:
C=16383, H=16, S=63 per un totale di 16514064 settori (7.8 GB)
indipendentemente dalla loro dimensione reale che forniscono alla lba_capacity.
I kernel più recenti (2.0.34, 2.1.90) conoscono il problema e si comportano di conseguenza. Se avete un kernel datato che vede solamente i primi 8 GB di un disco più grande, e non volete aggiornarlo, provate a cambiare la funzione lba_capacity_is_ok in /usr/src/linux/drivers/block/ide.c come indicato:
static in lba_capacity_is_ok (struct hd_driveid *id) {
id->cyls = id->lba_capacity / (id->heads * id->sectors);
return 1;
}
Per fare un aggiornamento meno brutale utilizzate il kernel 2.1.90.
Come già detto i dischi di grandi dimensioni forniscono la geometria C=16383, H=16, S=63 indipendentemente dalle dimensioni reali, mentre la dimensione reale è indicata dal valore della LBAcapacity. Alcuni BIOS non la riconoscono, e traslano il 16383/16/63 in una terna con meno cilindri e più testine, per esempio 1024/255/63 o 1027/255/63. Così, il kernel non deve solo riconoscere la geometria 16383/16/63 ma anche quella generata da tali BIOS. Dal kernel 2.2.2 questa operazione di riconoscimento funziona in modo corretto (prendendo dal BIOS i valori H e S e calcolando C =capacità/(H*S)). Di norma questo problema si risolve impostando nei parametri del BIOS il disco come Normal (o, ancor meglio a None, non fornendo nessuna indicazione al BIOS). Se questa strada non è percorribile perché dovete fare il boot da questo disco oppure avete una partizione DOS/Windows, e non è possibile aggiornare la versione del kernel alla 2.2.2 o superiori, passate al kernel i parametri durante il boot.
Se il BIOS riporta la geometria 16320/16/63 ciò è fatto per ottenere dopo la traduzione la terna 1024/255/63.
Molti dischi hanno dei ponticelli che permetto di selezionare una geometria a 15 o a 16 testine. La configurazione predefinita è quella a 16 testine. A volte entrambe le geometrie indirizzano lo stesso numero di settori altre quella a 15 testine ne indirizza un numero inferiore. C'è una buona ragione come spiega Petri Kaukasoina per spiegare queste due opzioni: `Ho impostato un disco IBM Deskstar 16 GP (modello IBM-DTTA-351010) da 10.1 GiB per utilizzare 16 testine come da configurazione predefinita ma il mio vecchio PC (con BIOS AMI) non si avviava così ho dovuto spostare il ponticello sull'opzione che dà 15 testine. hdparm -i riporta RawCHS=16383/15/63 e LBAsects=19807200. Io utilizzo una configurazione 20960/15/63 per poter sfruttare tutta la capacità del disco.' Per ulteriori informazioni su come ponticellare tali dischi visitate il sito: http://www.storage.ibm.com/techsup/hddtech/hddtech.htm.
Molti dischi hanno dei ponticelli che permettono di mostrare le dimensioni del disco più piccole di quelle che sono. È un po' stupido a farsi e probabilmente nessun utente Linux vorrebbe mai utilizzare tale espediente ma alcuni BIOS non riescono a gestire i dischi di grandi dimensioni andando in "crash". La soluzione più comune è quella di non far vedere il disco all'avvio al BIOS, ma è possibile farlo solo se il disco non è quello di avvio.
Il primo limite grave era il limite di 4096 cilindri (che corrisponde, con 16 testine e 63 settori/traccia a 2,11 GB). Per esempio, il disco Fujitsu MPB3032ATU da 3.24 GB ha la geometria predefinita da 6704/15/63 ma può essere poticellato per fornire una geometria 4092/16/63 e riportare di conseguenza una LBAcapacity di 4124736 settori, in questo modo il sistema operativo non può congetturare che la dimensione reale è più grande. In questi casi (con un BIOS che si "schianta" se riconosce la reale dimensione del disco è necessario ricorrere al ponticello) è necessario informare Linux sulle dimensioni del disco fornendo i parametri all'avvio.
Questo è un caso sfortunato. Molti dischi possono essere "ponticellati" in modo da sembrare dischi da 2 GB e fornire quindi una geometria ridotta tipo 4092/16/63 o 4096/16/63 ma in grado di fornire il valore corretto della LBAcapacity. Tali dischi sono in grado di lavorare bene e di utilizzare la capacità totale con Linux indipendentemente dalle impostazioni dei ponticelli.
Un limite più recente è quello dei 33.8 GB. I kernel di Linux precedenti alla versione 2.3.21 devono essere aggiornati per poter gestire dischi IDE di dimensioni superiori a queste. Alcuni dischi che superano tale limite possono essere ponticellati per sembrare dei dischi da 33.8 GB. Per esempio l'IBM Deskstar (DPTA-353750) da 37.5 GB può essere ponticellato per sembrare un disco da 33.8 GB e fornire la geometria 16383/16/63 come un qualsiasi altro disco di grandi dimensioni, ma la LBAcapacity di 66055248 (che corrisponde a 65531/16/63 o 4111/255/63). Linux per poter utilizzare la capacità totale di tali dischi, ponticellati per indicare la capacità di 33.8 GB, ha bisogno che venga fornita la geometria in fase di avvio. Vedi anche: the BIOS 33.8 GB limit.