Μάθε παιδί μου Linux (μέρος 11) | Δίσκοι, κατατμήσεις και σύστημα αρχείων (filesystem)
Αρχίζοντας από το filesystem, ας επιχειρήσουμε να δώσουμε ένα ορισμό. Το filesystem είναι ένας οδηγός τακτοποίησης και εύρεσης των αρχείων μας μέσα σε ένα μέσο αποθήκευσης. Είναι κάτι σαν το λειτουργικό σύστημα των σκληρών δίσκων, όπου αν ο δίσκος μας ήταν μία αποθήκη, το filesystem θα ήταν τα ράφια πάνω στα οποία τοποθετούμε τα αρχεία μας. Σημαντικό είναι επίσης να γνωρίζουμε ότι αν δεν έχεις διαμορφώσει (format) έναν δίσκο σε ένα συγκεκριμένο filesystem, τότε ο υπολογιστής σου δεν μπορεί να αποθηκεύσει αρχεία σε αυτόν και πιθανότατα δεν μπορεί καν να τον διαβάσει.
Υπάρχουν πολλά είδη filesystem στον κόσμο των ηλεκτρονικών υπολογιστών, με το καθένα να έχει τα θετικά και τα αρνητικά του. Τα πιο γνωστά από αυτά είναι:
- το NTFS (New Technology File System) που χρησιμοποιείται στο Windows
- το APFS (Apple File System) που χρησιμοποιείται στο Mac OS
- το FAT32 (File Allocation Table) που χρησιμοποιείται σε USB stick και κάρτες SD και
- το EXT4 (Extended File System) που είναι και το πιο συνηθισμένο στο Linux
Στο Linux όμως, το λειτουργικό σύστημα που είναι συνώνυμο της λέξης "ελευθερία", μας προσφέρονται πολλές εναλλακτικές και στην επιλογή του filesystem του υπολογιστή μας!
Οι τύποι filesystem και το Journaling
Εκτός από το EXT4 λοιπόν το οποίο θεωρείται η στάνταρ επιλογή για το Linux, καθώς είναι το πιο σταθερό και ασφαλές για τα αρχεία μας, υπήρξαν και υπάρχουν αρκετά filesystem που υποστηρίζονται από αυτό. Κάποια από αυτά είναι γρηγορότερα, κάποια άλλα υποστηρίζουν μεγαλύτερες χωρητικότητες, ενώ κάποια άλλα μπορούν να χειριστούν δίσκους με πάρα πολλά μικρά αρχεία. Τα σημαντικότερα σήμερα είναι:
- το BtrFS (Better ή B-tree File System) που θεωρείται από πολλούς το επόμενο στάνταρ για το Linux, με το μεγαλύτερο πλεονέκτημά του να είναι η δυνατότητα snapshot, με την οποία μπορούμε να πάρουμε εύκολα backup από το λειτουργικό μας σύστημα, καθώς και η "φιλικότητα" στους SSD δίσκους
- το XFS το οποίο είναι υψηλών επιδόσεων και χρησιμεύει περισσότερο σε ένα datacenter ή ένα media center, παρά σε έναν οικιακό υπολογιστή και
- το Open ZFS το οποίο έχει τη δυνατότητα να βλέπει όλους τους δίσκους του υπολογιστή σαν έναν και για αυτό το λόγο χρησιμοποιείται κυρίως σε αποθηκευτικά συστήματα RAID
Ένας σημαντικός παράγοντας επιλογής του σωστού filesystem είναι η λειτουργία Journaling. Σε ένα δίσκο που δεν υποστηρίζει το Journaling, αν αντιγράψουμε για παράδειγμα μερικά αρχεία και ξαφνικά κλείσει ο υπολογιστής χωρίς να έχει τελειώσει η διαδικασία, στην επόμενη εκκίνηση θα γίνει ένα διαγνωστικό τεστ για να δει το λειτουργικό σύστημα αν ο δίσκος είναι σε καλή κατάσταση. Αυτό συμβαίνει γιατί το σύστημα δε γνωρίζει τι κάναμε πριν τη διακοπή, οπότε πρέπει αναγκαστικά να ελέγξει όλο το δίσκο για σφάλματα.
Με το Journaling το σύστημα σημειώνει στιγμιαία σε ένα log αρχείο τη μεταφορά αρχείων που πρόκειται να κάνουμε ή οποιαδήποτε άλλη εργασία βρίσκεται σε εξέλιξη. Σε αυτή την περίπτωση αν πέσει για παράδειγμα το ρεύμα, το σύστημα τσεκάρει τις σημειώσεις του και έτσι γνωρίζει ποιες ήταν οι τελευταίες μας εργασίες και αν αυτές έχουν ολοκληρωθεί ή όχι. Με αυτό τον τρόπο το filesystem είναι πάντα σε μία σταθερή και υγιή κατάσταση, οπότε αντίστοιχα και ο δίσκος μας διατηρείται καλύτερα.
Μπορούμε να δούμε μια γενική εικόνα των filesytem που έχουν αυτή τη στιγμή οι δίσκοι του υπολογιστή μας, δίνοντας την εντολή:
df -T
Διαφήμιση
Δίσκοι, κατατμήσεις και SWAP
Τώρα που μάθαμε για τα filesystem που υποστηρίζει το Linux, αξίζει να πούμε ότι μπορούμε να έχουμε περισσότερα από ένα στο δίσκο του υπολογιστή μας. Αυτό γίνεται χωρίζοντάς τον σε τμήματα, τις λεγόμενες "κατατμήσεις" (partitions). Μπορούμε δηλαδή για παράδειγμα να έχουμε το λειτουργικό μας σύστημα σε ένα EXT4 partition και τα δεδομένα μας σε ένα άλλο με BtrFS.
Όταν δημιουργούμε νέα partition, ο δίσκος ενημερώνει το partition table με τις αλλαγές. Αυτό είναι στην ουσία μία λίστα με τις κατατμήσεις, την οποία διαβάζει ο υπολογιστής μας για να γνωρίζει πώς θα χειριστεί το κάθε τμήμα του δίσκου. Μπορούμε να ρίξουμε μια ματιά στα partition του υπολογιστή μας με το πρόγραμμα GParted, το οποίο μας προσφέρει μία γραφική απεικόνιση των δίσκων και των κατατμήσεων που είναι πιο κατανοητή στον αρχάριο χρήστη.
Επάνω δεξιά στο GParted θα δούμε τους "φυσικούς" δίσκους που έχει αναγνωρίσει ο υπολογιστής μας, είτε πρόκειται για εσωτερικούς, εξωτερικούς είτε για κάρτες SD. Οι δίσκοι αυτοί προσαρτώνται αυτόματα στο φάκελο "/dev" του συστήματος και παίρνουν την ονομασία "sda", "sdb", "sdc" και πάει λέγοντας.
Αν επιλέξουμε για παράδειγμα τον "sda", θα δούμε από κάτω τη λίστα όλων των partition του, τα οποία αντίστοιχα παίρνουν την ονομασία "sda1", "sda2", "sda3" και λοιπά. Στο παράδειγμά μας έχουμε διάφορες κατατμήσεις φορμαρισμένες σε EXT4, NTFS και SWAP, ενώ έχουμε και ένα κομμάτι 19,22GB (unallocated) το οποίο δεν μπορούμε να χρησιμοποιήσουμε γιατί δεν το έχουμε διαμορφώσει (format) σε κάποιο filesystem.
Από αυτά εξαιρετικό ενδιαφέρον έχει το SWAP, το οποίο είναι ένα "βοηθητικό" partition που εξυπηρετεί αποκλειστικά τη μνήμη RAM! Στα Linux συστήματα λοιπόν, αν ποτέ η μνήμη γεμίσει, έχει τη δυνατότητα να στείλει μερικές από τις παλιότερες διεργασίες της στο SWAP αντί να τις κλείσει. Μόλις κλείσουμε μερικές εφαρμογές και ελευθερωθεί ο χώρος της, τις παίρνει και πάλι πίσω για να συνεχίσουν τη λειτουργία τους. Το μέγεθος του SWAP είναι συνήθως το μισό της RAM, οπότε αν στον υπολογιστή μας έχουμε 4GB RAM, το SWAP θα πρέπει να το διαμορφώσουμε στα 2GB.
Με τη βοήθεια του GParted λοιπόν, μπορούμε πολύ εύκολα και γρήγορα να δημιουργήσουμε, να διαγράψουμε, να ενώσουμε και να διαμορφώσουμε οποιοδήποτε μέρος του δίσκου θέλουμε. Διαθέτει μάλιστα και μία εύχρηστη μπάρα αυξομείωσης, με την οποία μπορούμε να επεκτείνουμε ή να μικρύνουμε τα partition μας. Με προσοχή όμως για να μη διαγράψουμε κατά λάθος τα αρχεία μας.
Διαχείριση δίσκων με την εντολή parted
Μιας και μιλήσαμε για το GParted, αξίζει να πούμε ότι το πρόγραμμα αυτό δεν είναι τίποτα περισσότερο από τη γραφική απεικόνιση της εντολής "parted", με την οποία μπορούμε να διαμορφώσουμε τους δίσκους μας μέσω τερματικού. Το parted είναι ιδιαίτερα βολικό στις περιπτώσεις που θέλουμε να επεξεργαστούμε από μακρυά (μέσω SSH για παράδειγμα) τους δίσκους ενός server. Ας δούμε λοιπόν μερικές χρήσιμες εντολές.
Για να δούμε όλους τους δίσκους του υπολογιστή μας, θα δώσουμε την εντολή:
sudo parted -l
Το τερματικό θα μας απαντήσει κάπως έτσι:
Model: Seagate (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 6860MB 6859MB primary ext4 boot
2 6861MB 21.5GB 14.6GB extended
5 6862MB 7380MB 518MB logical swap
6 7381MB 21.5GB 14.1GB logical xfs
Οι πληροφορίες που κρατάμε από αυτή την εικόνα είναι:
- το "Disk" το οποίο μας λέει το όνομα του δίσκου μας (π.χ. "sda", "sdb", "sdc")
- το "Partition Table" του δίσκου μας (π.χ. "msdos", "loop")
- το "Number" που μας δείχνει τον αριθμό του κάθε partition (π.χ. το "6" είναι το "sda6")
- τα "Start" και "End" που μας δείχνουν από πού ξεκινάει το κάθε partition και πού τελειώνει
- το "Type" που μας δείχνει τον τύπο του partition (π.χ. "primary", "extended", "logical")
- το "File system" που είναι το σύστημα αρχείων με το οποίο έχει διαμορφωθεί το partition
Για να μπούμε στο parted δίνουμε την εντολή:
sudo parted
Το parted μας καλωσορίζει και μας ενημερώνει για τον επιλεγμένο δίσκο (π.χ. "/dev/sda"). Μπορούμε να επιλέξουμε έναν άλλον για να δουλέψουμε μαζί του (π.χ. "/dev/sdc") με την εντολή:
select /dev/sdc
Επιβεβαιώνουμε ότι έχουμε επιλέξει το σωστό δίσκο με την εντολή:
Αν ο δίσκος μας δε διαθέτει κάποιο "Partition Table", μπορούμε να δηλώσουμε το "msdos" το οποίο είναι κοινό στο Linux, με την εντολή:
mklabel msdos
Για να φτιάξουμε ένα partition στο δίσκο μας θα χρησιμοποιήσουμε την εντολή "mkpart" και θα δηλώσουμε τον τύπο του partition (primarty, extended, logical), ενώ θα δηλώσουμε επίσης την αρχή και το τέλος του στο δίσκο μας. Για παράδειγμα:
mkpart primary 0.0 950.0
Η κατάτμηση που δημιουργήσαμε είναι τύπου "primary" ξεκινάει από τα 0 Megabyte (από την αρχή δηλαδή του δίσκου) και τελειώνει στα 950 Megabyte. Όπως είναι λογικό αν θέλουμε να δημιουργήσουμε το επόμενο partition μας, η αρχή του θα πρέπει να είναι μετά τα 950 Megabyte. Για παράδειγμα:
mkpart logical 951.0 2451.0
Αυτό το partition είναι "logical", αρχίζει από τα 951 Megabyte και τελειώνει στα 2451 Megabyte του δίσκου. Έχει δηλαδή μέγεθος 1.5 Gigabyte. Αν δώσουμε τώρα ξανά την εντολή "print" θα δούμε τα νέα partition του δίσκου μας κάπως έτσι:
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 275GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system
1 1049kB 950.0MB 949MB primary ext2
2 951.0MB 2.45GB 1.50GB primary ext2
Με το parted μπορούμε επίσης να μεγαλώσουμε ή να μικρύνουμε ένα partition. Δίνουμε απλά την εντολή:
resizepart
Επιλέγουμε τον αριθμό του partition που θέλουμε να επεξεργαστούμε:
Partition number? 1
Και το σημείο στο οποίο θέλουμε να τελειώνει (αριθμό σε Megabyte):
End? [950.0MB]? 15000
Αν θέλουμε τώρα να διαγράψουμε το partition με τον αριθμό 2, θα δώσουμε απλά την εντολή:
rm 2
Τέλος για να βγούμε από το parted δίνουμε την εντολή:
quit
Τώρα που έχουμε χωρίσει το δίσκο μας στα τμήματα που μας εξυπηρετούν, μπορούμε να τα φορμάρουμε με το filesystem που μας εξυπηρετεί. Για παράδειγμα για να μετατρέψουμε σε EXT4 το πρώτο partition του δίσκου "sdc" η εντολή είναι η εξής:
sudo mkfs.ext4 /dev/sdc1
Διαφήμιση
Χρήσιμες εντολές (fsck, mount, fstab)
Εκτός από το parted υπάρχουν και άλλα χρήσιμα εργαλεία που
βοηθούν στη σωστή λειτουργία των αποθηκευτικών μας μέσων. Ένα από αυτά είναι
το "fsck" με το οποίο γίνεται ένας γρήγορος έλεγχος και μία πρώτη προσπάθεια
επιδιόρθωσης προβλημάτων. Για να το χρησιμοποιήσουμε για παράδειγμα στον
δίσκο "sda" θα δώσουμε την εντολή:
sudo fsck /dev/sda
Με το "mount" μπορούμε επίσης να αλλάξουμε την τοποθεσία στην οποία προσαρτάται ο δίσκος μας. Αν για παράδειγμα χρησιμοποιώ τον δίσκο "sdb2" για να αποθηκεύω φωτογραφίες, μπορώ να ορίσω να προσαρτάται στο φάκελο "Photos" του υπολογιστή μου. Η εντολή για κάτι τέτοιο είναι η εξής:
sudo mount /dev/sdb2 /Photos
Αντίστοιχα με το "unmount" μπορούμε να καταργήσουμε αυτή την προσάρτηση:
sudo umount /dev/sdb2
Σε ένα κλασικό Linux σύστημα θα βρούμε τέλος και το αρχείο "fstab", το οποίο διαχειρίζεται τα αυτόματα mount των δίσκων στον υπολογιστή μας. Εκεί μπορούμε να προσθέσουμε έναν εξωτερικό δίσκο για να προσαρτάται αυτόματα μετά από κάποια επανεκκίνηση. Αυτό είναι ιδιαίτερο βολικό αν έχουμε έναν server και θέλουμε να σιγουρευτούμε ότι θα προσαρτήσει τους δίσκους μας μετά από μία διακοπή ρεύματος.
Μπορούμε να επεξεργαστούμε το αρχείο αυτό με την εντολή:
nano /etc/fstab
Εκεί θα δούμε τους εσωτερικούς μας δίσκους με το μοναδικό αριθμό "UUID" ή "PartUUID". Για να μάθουμε τα UUID και των εξωτερικών δίσκων θα πρέπει να δώσουμε την εντολη:
sudo blkid
Προσθέτουμε λοιπόν μία νέα γραμμή στο fstab για κάθε δίσκο, αλλάζοντας το "UUID" και το φάκελο στον οποίο θέλουμε να γίνεται η προσάρτηση. Για παράδειγμα:
PARTUUID=86df86df-01 /home/chris/HDD500GB ext4 defaults,auto,users,rw
Εν κατακλείδι
Αυτά είναι σε γενικές γραμμές όλα όσα πρέπει να γνωρίζουμε για το
filesystem αλλά και για τον τρόπο με τον οποίο λειτουργούν οι δίσκοι μας στο
Linux. Τα εργαλεία και οι εντολές που αναφέραμε είναι απαραίτητα αν
αποφασίσεις να ασχοληθείς με Linux server και ειδικά το parted είναι ένα
εργαλείο που πρέπει να μάθεις απ' έξω.
Κάποια στιγμή ο
υπολογιστής σου θα σταματήσει να λειτουργεί σωστά και
είναι πραγματικά πολύ ευχάριστο να μπορείς να κάνεις διάγνωση στο σύστημά
σου, για να βρεις τι ακριβώς συμβαίνει. Με αυτό τον τρόπο δε χρειάζεται να
πληρώσεις έναν εξειδικευμένο επισκευαστή για να σου πει ότι τα αρχεία σου δε
σώζονται ή αν ο δίσκος σου είναι για πέταμα.
Ευχαριστώ για το άρθρο σας.
ΑπάντησηΔιαγραφήΜια ερώτηση. Αν κάνω αλλαγή fs σε ένα δίσκο που έχω δεδομένα, θα χαθούν όλα ?
Ναι. Διαγράφονται τα πάντα.
ΔιαγραφήΉθελα να γράψω ότι μου λείπει η αρθρογραφία σου. Μήπως κανά άρθρο λίγο πιο συχνά. Ότι θέματος και να είναι, δεν έχει σημασία, αλλά καλύτερα ,linux.
ΑπάντησηΔιαγραφήΕυχαριστώ.
Γεια σου φίλε μου. Δεν έχω χρόνο δυστυχώς αλλά ελπίζω να το ξαναπιάσω σύντομα.
Διαγραφή