Next Previous Contents

12. Το όριο των 65535 κυλίνδρων στο linux

Το HDIO_GETGEO ioctl επιστρέφει τον αριθμό των κυλίνδρων σε τύπο short. Αυτό σημαίνει ότι αν έχτε πάνω από 65535 κυλίνδρους, ο αριθμός περικόπτεται και (για ένα τυπικό SCSI δίσκο με 1 MiB ανά κύλινδρο) ένας δίσκος 80 GiB θα φαίνεται ως 16 GiB. Εφόσον αναγνωρισθεί αυτό το πρόβλημα, αποφεύγεται εύκολα.

12.1 IDE προβλήματα με δίσκους 34+ GB

Δίσκοι μεγαλύτεροι των 33.8 GB δε δουλεύουν με πυρήνες παλαιότερους του 2.3.21. Οι λεπτομέρειες είναι: Υποθέστε ότι αγοράσατε ένα νέο IBM-DPTA-373420 δίσκο με χωρητικότητα 66835440 τομείς (34.2 GB). Πυρήνες παλαιότεροι του 2.3.21 θα σας πούνε ότι το μέγεθος του δίσκου είναι 769*16*63 = 775152 τομείς (0.4 GB), που είναι λίγο απογοητευτικό. Και δίνοντας τις παραμέτρους hdc=4160,255,63 δε βοηθάει καθόλου - απλά αγνοούνται. Τί συμβαίνει; Η ρουτίνα idedisk_setup() βρίσκει τη γεωμετρία που αναφέρει ο δίσκος (που είναι 16383/16/63) και παρακάμπτει ό,τι δίνει ο χρήστης στη γραμμή εντολών, ώστε τα δεδομένα του χρήστη να χρησιμοποιούνται μόνο για τη γεωμετρία του BIOS. Η ρουτίνα current_capacity() ή idedisk_capacity() υπολογίζει τον αριθμό κυλίνδρων ως 66835440/(16*63)=66305, αλλά αφού αποθηκεύεται σε short αριθμό, γίνεται 769. Εφόσον η lba_capacity_is_ok() κατέστρεψε το id->cyls, κάθε επόμενη κλήση σε αυτό θα είναι λάθος και ο δίσκος θα γίνει 769*16*63. Για πολλούς πυρήνες υπάρχει patch. Για τον 2.0.38 μπορεί να βρεθεί στο ftp.kernel.org. Για τον 2.2.12 είναι στο www.uwsg.indiana.edu. Οι 2.2.14pre πυρήνες υποστηρίζουν αυτούς τους δίσκους. Στους 2.3.* πυρήνες, υπάρχει υποστήριξη από τον 2.3.21. Πάντως, το πρόβλημα μπορεί να `λυθεί' χρησιμοποιώντας τους βραχυκυκλωτήρες για να κοπεί το μέγεθος σε 33.8 GB. Σε πολλές περιπτώσεις μια αναβάθμιση του BIOS θα χρειαστεί αν θέλετε να εκκινήσετε το σύστημα από αυτό το δίσκο.


Next Previous Contents