Next Previous Contents

14. Λύνοντας προβλήματα

Πολλοί νομίζουν ότι έχουν πρόβλημα, ενώ στην πραγματικότητα δεν υπάρχει κανένα. Ή πιστεύουν ότι τα προβλήματα που έχουν οφείλονται στη γεωμετρία του δίσκου, ενώ αυτό δεν έχει να κάνει τίποτα με το πρόβλημά τους. Τα παραπάνω μπορεί να ακούγονται περίπλοκα αλλά η γεωμετρία είναι κάτι σχετικά απλό: αφήστε την όπως είναι και όλα θα είναι μια χαρά· ή το πολύ να δώσετε την παράμετρο `linear' στο LILO αν δεν προχωράει μετά το `LI' όταν ξεκινά. Προσέξτε τα μυνήματα του πυρήνα και θυμηθείτε: όσο περισσότερο πειράζετε την γεωμετρία (ορίζοντας κεφαλές και κυλίνδρους στο LILO, το fdisk και τον πυρήνα) τόσο πιθανότερο είναι να μη δουλέψει. Χοντρικά όλα είναι εντάξει από μόνα τους.

Και θυμηθείτε: πουθενά στο Linux δε χρησιμοποιείτε η γεωμετρία, οπότε κανένα πρόβλημα δε μπορεί να δημιουργηθεί από αυτήν. Η γεωμετρία χρησιμοποιείτε μόνο από το LILO και το fdisk. Έτσι, αν το LILO δεν ξεκινά τον πυρήνα, μπορεί να είναι πρόβλημα γεωμετρίας. Αν διαφορετικά λειτουργικά δεν καταλαβαίνουν τον πίνακα κατατμήσεων, μπορεί να είναι πρόβλημα γεωμετρίας. Τίποτα περισσότερο. Συγκεκριμένα, αν το mount δε δουλεύει μην ανησυχείτε για τη γεωμετρία· το πρόβλημα είναι αλλού.

14.1 Πρόβλημα: το Linux χρησιμοποιεί λάθος γεωμετρία για τον δίσκο μου.

Είναι πιθανό ένας δίσκος να λάβει λάθος γεωμετρία. Ο πυρήνας ρωτά το BIOS για τα hd0 και hd1 (τους δίσκους 80H και 81Η σύμφωνα με το BIOS) και υποθέτει ότι είναι για τα hda και hdb. Αλλά αν εκκινείτε από SCSI, οι πρώτοι δυο δίσκοι μπορεί να είναι SCSI και ο πέμπτος δίσκος, που είναι πρώτος IDE hda δίσκος, παίρνει τη γεωμετρία του sda. Αυτό λύνεται εύκολα με την παράμετρο εκκίνησης `hda=C,H,S' με τις κατάλληλες τιμές C, H και S, είτε κατά την εκκίνηση ή στο /etc/lilo.conf.

14.2 Πρόβλημα: Ίδιοι δίσκοι έχουν διαφορετική γεωμετρία

`Έχω δυο όμοιους δίσκους 10GB IBM. Το fdisk δίνει διαφορετικό μέγεθος στον καθένα. Δείτε:

# fdisk /dev/hdb
Disk /dev/hdb: 255 heads, 63 sectors, 1232 cylinders
Units = cylinders of 16065 * 512 bytes

   Device Boot  Start      End   Blocks   Id  System
/dev/hdb1           1     1232  9896008+  83  Linux native
# fdisk /dev/hdd
Disk /dev/hdd: 16 heads, 63 sectors, 19650 cylinders
Units = cylinders of 1008 * 512 bytes

   Device Boot  Start      End   Blocks   Id  System
/dev/hdd1           1    19650  9903568+  83  Linux native
Πώς και;'

Τί συμβαίνει εδώ; Πρώτα από όλα, οι δίσκοι είναι πράγματι 10GB: το hdb έχει μέγεθος 255*63*1232*512 = 10133544960, και το hdd 16*63*19650*512 = 10141286400, έτσι τίποτα δε συμβαίνει και ο πυρήνας τους βλέπει και τους δύο σαν 10.1 GB. Γιατί η διαφορά στο μέγεθος; Αυτό συμβαίνει επειδή ο πυρήνας παίρνει τις πληροφορίες για τους πρώτους δυο IDE δίσκους από το BIOS, και το BIOS έχει βάλει στον hdb 255 κεφαλές (και 16*19650/255=1232 cylinders). Η στρογγυλοποίηση κοστίζει σχεδόν 8MB.

Αν θέλετε μπορείτε να αλλάξετε τον hdd με τον ίδιο τρόπο και να δώσετε στον πυρήνα κατά την εκκίνηση `hdd=1232,255,63'.

14.3 Πρόβλημα: το fdisk βλέπει περισσότερο χώρο από το df

To fdisk θα σας πει πόσα τεμάχια (blocks) υπάρχουν στον δίσκο. Αν δημιουργήσετε σύστημα αρχείων, π.χ. με το mke2fs, τότε το σύστημα κρατά λίγο χώρο για λόγους διαχείρισης· περίπου 4% του συνολικού χώρου, περισσότερο αν θέλετε πολλά inodes. Για παράδειγμα:

# sfdisk -s /dev/hda9
4095976
# mke2fs -i 1024 /dev/hda9
mke2fs 1.12, 9-Jul-98 for EXT2 FS 0.5b, 95/08/09
...
204798 blocks (5.00%) reserved for the super user
...
# mount /dev/hda9 /somewhere
# df /somewhere
Filesystem         1024-blocks  Used Available Capacity Mounted on
/dev/hda9            3574475      13  3369664      0%   /mnt
# df -i /somewhere
Filesystem           Inodes   IUsed   IFree  %IUsed Mounted on
/dev/hda9            4096000      11 4095989     0%  /mnt
#
Έχουμε μια κατάτμηση 4095976 blocks, κάνουμε ένα ext2 σύστημα, το προσαρτούμε και τελικά έχουμε μόνο 3574475 blocks· 521501 blocks (12%) χάθηκαν στα inodes και τη διαχείριση. Σημειώστε ότι η διαφορά μεταξύ των 3574475 και των 3369664 blocks είναι τα 13 που χρησιμοποιούνται και τα 204798 που κρατήθηκαν για τον υπερχρήστη. Το τελευταίο νούμερο μπορεί να αλλάξει με το tune2fs. Το `-i 1024' είναι λογικό να χρησιμοποιηθεί μόνο για κατατμήσεις νέων ή ταχυδρομείου, όπου υπάρχουν πολλά και μικρά αρχεία. Το συνηθισμένο θα ήταν:
# mke2fs /dev/hda9
# mount /dev/hda9 /somewhere
# df /somewhere
Filesystem         1024-blocks  Used Available Capacity Mounted on
/dev/hda9            3958475      13  3753664      0%   /mnt
# df -i /somewhere
Filesystem           Inodes   IUsed   IFree  %IUsed Mounted on
/dev/hda9            1024000      11 1023989     0%  /mnt
#
Τώρα μόνο 137501 blocks (3.3%) χρησιμοποιούνται για inodes, ώστε έχουμε 384 MB περισσότερα από πριν. (Προφανώς κάθε inode χρησιμοποιεί 128 bytes). Από την άλλη, μπορούμε να έχουμε το πολύ 1024000 αρχεία (παραπάνω από αρκετά), αντί των 4096000 (υπερβολικά πολλά) που είχαμε πριν.


Next Previous Contents