Μάθε παιδί μου Linux (μέρος 11) | Δίσκοι, κατατμήσεις και σύστημα αρχείων (filesystem)

Linux filesystem types

Ξεκινάμε το δεύτερο κύκλο μαθημάτων της σειράς "Μάθε παιδί μου Linux", αυτόν που από Linux User θα σε κάνει Linux Admin! Σήμερα θα μιλήσουμε για το σύστημα αρχείων του Linux ή αλλιώς "filesystem" και θα δούμε τα είδη και τις ιδιαιτερότητές του. Θα δούμε επίσης πώς μπορούμε να διαχειριστούμε τα μέσα αποθήκευσης, όπως οι σκληροί δίσκοι και τα USB στικάκια, ενώ θα ρίξουμε και μια ματιά σε μερικά πολύ βασικά εργαλεία που τα αφορούν.

Αρχίζοντας από το 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

Linux df -T command

Διαφήμιση

Δίσκοι, κατατμήσεις και SWAP


Τώρα που μάθαμε για τα filesystem που υποστηρίζει το Linux, αξίζει να πούμε ότι μπορούμε να έχουμε περισσότερα από ένα στο δίσκο του υπολογιστή μας. Αυτό γίνεται χωρίζοντάς τον σε τμήματα, τις λεγόμενες "κατατμήσεις" (partitions). Μπορούμε δηλαδή για παράδειγμα να έχουμε το λειτουργικό μας σύστημα σε ένα EXT4 partition και τα δεδομένα μας σε ένα άλλο με BtrFS.

Όταν δημιουργούμε νέα partition, ο δίσκος ενημερώνει το partition table με τις αλλαγές. Αυτό είναι στην ουσία μία λίστα με τις κατατμήσεις, την οποία διαβάζει ο υπολογιστής μας για να γνωρίζει πώς θα χειριστεί το κάθε τμήμα του δίσκου. Μπορούμε να ρίξουμε μια ματιά στα partition του υπολογιστή μας με το πρόγραμμα GParted, το οποίο μας προσφέρει μία γραφική απεικόνιση των δίσκων και των κατατμήσεων που είναι πιο κατανοητή στον αρχάριο χρήστη.

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. 

Σημείωση:
Υπάρχει και η αντίθετη άποψη ότι το SWAP θα πρέπει να είναι διπλάσιο της μνήμης RAM. Η αλήθεια βέβαια είναι ότι πλέον το SWAP δεν είναι και τόσο χρήσιμο, μιας και οι σύγχρονοι υπολογιστές διαθέτουν μνήμες μεγάλης χωρητικότητας που δε γεμίζουν εύκολα.

Με τη βοήθεια του 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

Επιβεβαιώνουμε ότι έχουμε επιλέξει το σωστό δίσκο με την εντολή:
 
print

Αν ο δίσκος μας δε διαθέτει κάποιο "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 είναι ένα εργαλείο που πρέπει να μάθεις απ' έξω.

Κάποια στιγμή ο υπολογιστής σου θα σταματήσει να λειτουργεί σωστά και είναι πραγματικά πολύ ευχάριστο να μπορείς να κάνεις διάγνωση στο σύστημά σου, για να βρεις τι ακριβώς συμβαίνει. Με αυτό τον τρόπο δε χρειάζεται να πληρώσεις έναν εξειδικευμένο επισκευαστή για να σου πει ότι τα αρχεία σου δε σώζονται ή αν ο δίσκος σου είναι για πέταμα.


Σχόλια

Δείτε επίσης...

Android | Γιατί δε θα αγόραζα ποτέ smartphone της OnePlus

Ιδιωτικό απόρρητο | Το αφελές επιχείρημα του ''Δεν έχω τίποτα να κρύψω''

Docker (μέρος 7) | Στήνουμε έναν reverse proxy για τα container μας με το Traefik

Απόρρητο | ''Μπερδεύουμε'' τον αλγόριθμο Google και Facebook με ψεύτικες πληροφορίες

Android | Περιόρισε την παρακολούθηση των εφαρμογών και κόψε τις διαφημίσεις με το TrackerControl

Ubuntu Touch 2020 review | Μια πραγματική mobile GNU/Linux διανομή έτοιμη για καθημερινή χρήση

Φεύγω από την Google (μέρος 15) | ''Ξηλώνουμε'' τα Google apps από το Android

Docker (μέρος 1) | Τι είναι και πώς το εγκαθιστούμε στον υπολογιστή μας;

Android | Βελτιώνουμε την πλοήγηση με χειρονομίες απενεργοποιώντας την αριστερή πλευρά της οθόνης