Next Previous Contents

9. Συνέπειες

Τι σημαίνουν όλα αυτά; Για τους χρήστες του Linux μόνο ένα πράγμα: πρέπει να σιγουρευτούν ότι το LILO και το fdisk χρησιμοποιούν τη σωστή γεωμετρία, όπου «σωστή» για το fdisk είναι η γεωμετρία που χρησιμοποιείται και από τα άλλα λειτουργικά στον ίδιο δίσκο, και για το LILO αυτή που θα επιτρέψει τη σωστή επικοινωνία με το BIOS κατά την εκκίνηση (συνήθως αυτά τα δυο συμπίπτουν).

Πώς ξέρει το fdisk για τη γεωμετρία; Ρωτά τον πυρήνα, χρησιμοποιώντας το HDIO_GETGEO ioctl, πριν ο χρήστης επέμβει στη γεωμετρία.

Πώς ξέρει το LILO τη γεωμετρία; Ρωτά την πυρήνα χρησιμοποιώντας το HDIO_GETGEO ioctl. Αλλά ο χρήστης μπορεί να επέμβει χρησιμοποιώντας την επιλογή `disk=' στο /etc/lilo.conf (δείτε το lilo.conf(5)). Μπορείτε να δώσετε και την linear επιλογή στο LILO, και θα αποθηκεύσει LBA διευθύνσεις αντί για CHS στον χάρτη του, και θα βρει τη γεωμετρία κατά την εκκίνηση (χρησιμοποιώντας την INT 13 Function 8 για να ρωτήσει για τη γεωμετρία).

Πώς ξέρει ο πυρήνας τί να απαντήσει; Πρώτα απ' όλα, χρήστης μπορεί να έχει δηλώσει τη γεωμετρία με την εντολή `hda=cyls,heads,secs' στον πυρήνα (δείτε bootparam(7)), ίσως χειροκίνητα ή ζητώντας τον boot loader να δώσει αυτή την παράμετρο στον πυρήνα. Για παράδειγμα μπορείτε να πείτε στο LILO να δώσει μια τέτοια παράμετρο προσθέτοντας το `append = "hda=cyls,heads,secs"' στο /etc/lilo.conf (δείτε lilo.conf(5)). Διαφορετικά ο πυρήνας θα μαντέψει, πιθανόν χρησιμοποιώντας τιμές που βρήκε από το BIOS ή τον δίσκο.

Είναι δυνατόν (από τον πυρήνα 2.1.79) να αλλάξετε τη γεωμετρία στον πυρήνα χρησιμοποιώντας το /proc. Για παράδειγμα

# sfdisk -g /dev/hdc
/dev/hdc: 4441 cylinders, 255 heads, 63 sectors/track
# cd /proc/ide/ide1/hdc
# echo bios_cyl:17418 bios_head:128 bios_sect:32 > settings
# sfdisk -g /dev/hdc
/dev/hdc: 17418 cylinders, 128 heads, 32 sectors/track
#

9.1 Υπολογίζοντας τις παραμέτρους του LILO

Μερικές φορές είναι χρήσιμο να ορίσετε τη γεωμετρία χρησιμοποιώντας το `hda=cyls,heads,secs' στη γραμμή εντολών του πυρήνα. Συνήθως πάντα χρειάζεται secs=63, και ο λόγος που το προθέτουμς είναι για να οριστούν οι heads. (Λογικές τιμές σήμερα είναι heads=16 και heads=255.) Τι θα πρέπει να ορίσουμε για το cyls? Ακριβώς τον αριθμό που θα δώσει τη σωστή συνολική χωρητικότητα για C*H*S τομείς. Για παράδειγμα, για ένα δίσκο με 71346240 τομείς (36529274880 bytes) το C υπολογίζεται ως 71346240/(255*63)=4441 (για παράδειγμα χρησιμοποιώντας ένα πρόγραμμα σαν το bc), και η παράμετρος εκκίνησης είναι hdc=4441,255,63. Πώς ξέρουμε την σωστή χωρητικότητα; Για παράδειγμα,

# hdparm -g /dev/hdc | grep sectors
 geometry     = 4441/255/63, sectors = 71346240, start = 0
# hdparm -i /dev/hdc | grep LBAsects
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=71346240
δίνει δύο τρόπους να βρούμε τον συνολικό αριθμό τομέων 71346240. Ο πυρήνας μας δίνει
# dmesg | grep hdc
...
hdc: Maxtor 93652U8, 34837MB w/2048kB Cache, CHS=70780/16/63
 hdc: [PTBL] [4441/255/63] hdc1 hdc2 hdc3! hdc4 < hdc5 > ...
που μας λέει για (τουλάχιστον) 34837*2048=71346176 και για (τουλάχιστον) 70780*16*63=71346240 τομείς. Σε αυτή την περίπτωση, η δεύτερη τιμή συμβαίνει να είναι σωστή, αλλά γενικά και οι δύο μπορούν να στρογγυλοποιηθουν προς τα κάτω. Αυτός είναι ένας καλός τρόπος να προσεγγίσουμε το μέγεθος του δίσκου όταν το hdparm δεν είναι διαθέσιμο. Ποτέ μην δίνεται πολύ μεγάλη τιμή για το cyls! Στην περίπτωση των SCSI δίσκων ο ακριβής αριθμός των τομέων δίνεται κατά την εκκίνηση:
SCSI device sda: hdwr sector= 512 bytes. Sectors= 17755792 [8669 MB] [8.7 GB]
(και τα MB, GB είναι στρογγυλοποιημένα, όχι προς τα κάτω, και `δυαδικά').


Next Previous Contents