TomRhodesΓράφηκε από τον Υποστήριξη Συστημάτων ΑρχείωνΣύνοψηFile SystemsFile Systems SupportFile SystemsΤα συστήματα αρχείων αποτελούν αναπόσπαστο τμήμα κάθε λειτουργικού
συστήματος. Επιτρέπουν στους χρήστες να δημιουργούν και να αποθηκεύουν
αρχεία, παρέχουν πρόσβαση σε δεδομένα, και φυσικά αξιοποιούν τους
σκληρούς δίσκους. Διαφορετικά λειτουργικά συστήματα χρησιμοποιούν
συνήθως διαφορετικά εγγενή συστήματα αρχείων. Το σύστημα αρχείων του
&os; είναι το Fast File System ή FFS, το
οποίο προήλθε από το αρχικό σύστημα αρχείων του Unix™, γνωστό
επίσης και ως UFS. Αυτό είναι και το εγγενές
σύστημα αρχείων του &os;, το οποίο χρησιμοποιείται στους σκληρούς
δίσκους και προσφέρει πρόσβαση στα δεδομένα.Το &os; προσφέρει επίσης πληθώρα διαφορετικών συστημάτων αρχείων,
ώστε να παρέχει τοπική πρόσβαση σε δεδομένα που έχουν δημιουργηθεί από
άλλα λειτουργικά συστήματα, π.χ. δεδομένα που βρίσκονται σε τοπικά
USB αποθηκευτικά μέσα, οδηγούς flash, και σκληρούς
δίσκους. Υπάρχει επίσης υποστήριξη για άλλα, μη-εγγενή συστήματα
αρχείων, όπως το Extended File System (EXT) του
&linux; καθώς και το σύστημα Z File System (ZFS) της
&sun;.Το &os; παρέχει διαφορετικό επίπεδο υποστήριξης για κάθε σύστημα
αρχείων. Για ορισμένα θα χρειαστεί να φορτωθεί κάποιο άρθρωμα στον
πυρήνα, ενώ για άλλα θα πρέπει να εγκατασταθούν κάποια εργαλεία.
Το κεφάλαιο αυτό έχει σχεδιαστεί να βοηθήσει τους χρήστες του &os; να
αποκτήσουν πρόσβαση σε άλλα συστήματα αρχείων στο σύστημα τους,
ξεκινώντας από το Ζ File System της &sun;.Αφού διαβάσετε αυτό το κεφάλαιο, θα γνωρίζετε:Τη διαφορά μεταξύ των εγγενών και των υποστηριζόμενων
συστημάτων αρχείων.Ποια συστήματα αρχείων υποστηρίζονται από το &os;.Πως να ενεργοποιήσετε, να ρυθμίσετε, να αποκτήσετε πρόσβαση και
να χρησιμοποιήσετε μη-εγγενή συστήματα αρχείων.Πριν διαβάσετε αυτό το κεφάλαιο, θα πρέπει:Να κατανοείτε βασικές έννοιες του &unix; και του &os;
().Να είστε εξοικειωμένος με τις βασικές διαδικασίες ρύθμισης και
εγκατάστασης προσαρμοσμένου πυρήνα
().Να αισθάνεστε άνετα με την εγκατάσταση εφαρμογών τρίτου
κατασκευαστή στο &os; ().Να είστε εξοικειωμένος με τους δίσκους, τα μέσα
αποθήκευσης, και τα αντίστοιχα ονόματα συσκευών στο
&os; ().Το Σύστημα Αρχείων Z (ZFS)Το σύστημα αρχείων Z, αναπτύχθηκε από την &sun;, και είναι μια νέα
τεχνολογία που σχεδιάστηκε για να παρέχει αποθήκευση μέσω της μεθόδου
pool. Αυτό σημαίνει ότι όλος ο ελεύθερος χώρος διατίθεται ως
απόθεμα, και διανέμεται δυναμικά σε κάθε σύστημα αρχείων ανάλογα με τις
ανάγκες αποθήκευσης δεδομένων. Έχει επίσης σχεδιαστεί για τη μέγιστη
ακεραιότητα δεδομένων και υποστηρίζει στιγμιότυπα (snapshots) δεδομένων,
πολλαπλά αντίγραφα και αθροίσματα ελέγχου δεδομένων (checksums). Έχει
ακόμα προστεθεί ένα νέο μοντέλο για τη διατήρηση αντιγράφων των
δεδομένων, γνωστό ως RAID-Z. Το μοντέλο
RAID-Z είναι παρόμοιο με το
RAID5 αλλά είναι σχεδιασμένο να παρέχει προστασία
των δεδομένων κατά την εγγραφή τους.Βελτιστοποίηση του ZFSΤο υποσύστημα ZFS χρησιμοποιεί αρκετούς πόρους
του συστήματος. Βελτιστοποιώντας τις ρυθμίσεις του συστήματος σας, θα
επιτύχετε τη μέγιστη απόδοση στην καθημερινή χρήση. Καθώς το
ZFS είναι ακόμα σε πειραματικό στάδιο στο &os;,
αυτό ίσως αλλάξει μελλοντικά. Ωστόσο, για την ώρα, συνίσταται να
ακολουθήσετε τα παρακάτω βήματα:ΜνήμηΤο συνολικό μέγεθος μνήμης του συστήματος πρέπει να είναι
τουλάχιστον ένα gigabyte, ενώ το συνιστώμενο μέγεθος είναι δύο
gigabytes ή και περισσότερο. Σε όλα τα παραδείγματα που φαίνονται
εδώ, το σύστημα έχει ένα gigabyte μνήμης και έχουμε επίσης
βελτιστοποιήσει τις ρυθμίσεις του.Ορισμένοι χρήστες φαίνεται να τα καταφέρνουν και με λιγότερο
από ένα gigabyte μνήμης, αλλά με τέτοιους περιορισμούς φυσικής
μνήμης, είναι αρκετά πιθανό να δημιουργηθεί panic κάτω από βαρύ
φορτίο εργασίας, εξαιτίας εξάντλησης της.Ρύθμιση του ΠυρήναΣυνίσταται να αφαιρέσετε τα προγράμματα οδήγησης και τις
επιλογές που δεν χρησιμοποιείτε από το αρχείο ρυθμίσεων του
πυρήνα. Καθώς οι περισσότεροι οδηγοί συσκευών διατίθενται επίσης
και σε μορφή αρθρωμάτων, μπορείτε να τους φορτώσετε
χρησιμοποιώντας το αρχείο
/boot/loader.conf.Οι χρήστες της αρχιτεκτονικής &i386; θα πρέπει να προσθέσουν την
παρακάτω επιλογή στο αρχείο ρυθμίσεων του πυρήνα τους, να τον
επαναμεταγλωττίσουν και να επανεκκινήσουν το σύστημα τους:options KVA_PAGES=512Η επιλογή αυτή θα διευρύνει την περιοχή διευθύνσεων του πυρήνα,
επιτρέποντας έτσι την αύξηση τιμής της ρυθμιστικής μεταβλητής
vm.kvm_size πέρα από το τρέχον όριο του
1 GB (2 GB για πυρήνες PAE). Για να
βρείτε την καταλληλότερη τιμή για αυτή την επιλογή, διαιρέστε το
επιθυμητό μέγεθος της περιοχής διευθύνσεων με το τέσσερα (4). Στην
περίπτωση αυτή, έχουμε 512 για μέγεθος
2 GB.Ρυθμίσεις στις Μεταβλητές του LoaderΘα πρέπει να αυξηθεί η περιοχή διευθύνσεων
kmem σε όλες τις αρχιτεκτονικές του &os;.
Στο δοκιμαστικό μας σύστημα, με ένα gigabyte φυσικής μνήμης,
είχαμε επιτυχημένο αποτέλεσμα χρησιμοποιώντας τις ακόλουθες
επιλογές στο αρχείο /boot/loader.conf και
επανεκκινώντας το σύστημα μας:vm.kmem_size="330M"
vm.kmem_size_max="330M"
vfs.zfs.arc_max="40M"
vfs.zfs.vdev.cache.size="5M"Για αναλυτικότερες ρυθμίσεις σχετικά με την βελτιστοποίηση του
ZFS, δείτε το .Χρησιμοποιώντας το ZFSΥπάρχει ένας μηχανισμός εκκίνησης που επιτρέπει στο &os; να
προσαρτήσει ZFS pools κατά τη διάρκεια της
εκκίνησης του συστήματος. Για να τον ρυθμίσετε, εκτελέστε τις
ακόλουθες εντολές:&prompt.root; echo 'zfs_enable="YES"' >> /etc/rc.conf
&prompt.root; /etc/rc.d/zfs startΤο υπόλοιπο αυτού του κειμένου υποθέτει ότι έχετε διαθέσιμους
τρεις SCSI δίσκους, και ότι τα ονόματα συσκευών
τους είναι da0,
da1 και
da2.
Όσοι διαθέτουν δίσκους IDE θα
πρέπει να χρησιμοποιήσουν συσκευές του τύπου
ad
αντί για τις αντίστοιχες SCSI.Pool με Ένα Μόνο ΔίσκοΓια την δημιουργία ενός ZFS pool με ένα
μόνο δίσκο (χωρίς δυνατότητα ανοχής σφαλμάτων), χρησιμοποιήστε την
εντολή zpool:&prompt.root; zpool create example /dev/da0Για να δείτε το νέο pool, εξετάστε την έξοδο της εντολής
df:&prompt.root; df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235230 1628718 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032846 48737598 2% /usr
example 17547136 0 17547136 0% /exampleΗ έξοδος αυτή δείχνει καθαρά ότι το example
pool όχι μόνο έχει δημιουργηθεί, αλλά έχει επίσης
προσαρτηθεί κιόλας. Είναι επίσης διαθέσιμο ως
κανονικό σύστημα αρχείων, μπορείτε να δημιουργήσετε αρχεία σε αυτό,
και άλλοι χρήστες μπορούν επίσης να το δουν, όπως φαίνεται στο
παρακάτω παράδειγμα:&prompt.root; cd /example
&prompt.root; ls
&prompt.root; touch testfile
&prompt.root; ls -al
total 4
drwxr-xr-x 2 root wheel 3 Aug 29 23:15 .
drwxr-xr-x 21 root wheel 512 Aug 29 23:12 ..
-rw-r--r-- 1 root wheel 0 Aug 29 23:15 testfileΔυστυχώς αυτό το pool δεν χρησιμοποιεί κάποιο από τα
πλεονεκτήματα του ZFS. Δημιουργήστε ένα σύστημα
αρχείων σε αυτό το pool και ενεργοποιήστε σε αυτό τη
συμπίεση:&prompt.root; zfs create example/compressed
&prompt.root; zfs set compression=gzip example/compressedΤο σύστημα αρχείων example/compressed
είναι πλέον ένα συμπιεσμένο ZFS σύστημα.
Δοκιμάστε να αντιγράψετε μερικά μεγάλα αρχεία σε αυτό, απευθείας
στον κατάλογο
/example/compressed.Μπορείτε τώρα να απενεργοποιήσετε τη συμπίεση γράφοντας:&prompt.root; zfs set compression=off example/compressedΓια να αποπροσαρτήσετε το σύστημα αρχείων, εκτελέστε την
ακόλουθη εντολή και επαληθεύστε το αποτέλεσμα μέσω του βοηθητικού
προγράμματος df:&prompt.root; zfs umount example/compressed
&prompt.root; df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235232 1628716 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032864 48737580 2% /usr
example 17547008 0 17547008 0% /exampleΠροσαρτήστε ξανά το σύστημα αρχείων, ώστε να είναι και πάλι
προσβάσιμο, και επαληθεύστε το χρησιμοποιώντας όπως και πριν, την
εντολή df:&prompt.root; zfs mount example/compressed
&prompt.root; df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235234 1628714 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032864 48737580 2% /usr
example 17547008 0 17547008 0% /example
example/compressed 17547008 0 17547008 0% /example/compressedΜπορείτε επίσης να δείτε το pool και το σύστημα αρχείων
εξετάζοντας την έξοδο της εντολής mount:&prompt.root; mount
/dev/ad0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad0s1d on /usr (ufs, local, soft-updates)
example on /example (zfs, local)
example/data on /example/data (zfs, local)
example/compressed on /example/compressed (zfs, local)Όπως παρατηρούμε, το σύστημα αρχείων ZFS
μπορεί να χρησιμοποιηθεί ως κοινό σύστημα αρχείων μετά τη
δημιουργία του. Ωστόσο, διαθέτει πολλές ακόμα λειτουργίες. Στο
παρακάτω παράδειγμα δημιουργούμε ένα νέο σύστημα αρχείων, το
data. θα αποθηκεύσουμε σημαντικά δεδομένα σε
αυτό, και έτσι το ρυθμίζουμε ώστε να κρατάει δύο αντίγραφα από
κάθε μπλοκ δεδομένων:&prompt.root; zfs create example/data
&prompt.root; zfs set copies=2 example/dataΜπορούμε τώρα να δούμε τα δεδομένα και την κατανάλωση χώρου
δίνοντας ξανά την εντολή df:&prompt.root; df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235234 1628714 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032864 48737580 2% /usr
example 17547008 0 17547008 0% /example
example/compressed 17547008 0 17547008 0% /example/compressed
example/data 17547008 0 17547008 0% /example/dataΠαρατηρήστε ότι κάθε σύστημα αρχείων στο pool δείχνει το ίδιο
μέγεθος διαθέσιμου χώρου. Αυτός είναι και ο λόγος που
χρησιμοποιούμε την εντολή df σε όλα τα
παραδείγματα, για να δείξουμε ότι τα συστήματα αρχείων
χρησιμοποιούν μόνο το χώρο που χρειάζονται και ότι όλα μοιράζονται
τον ίδιο χώρο (το κοινόχρηστο απόθεμα — pool). Στο σύστημα
αρχείων ZFS έννοιες όπως οι τόμοι (volumes) και
οι κατατμήσεις (partitions) δεν έχουν νόημα. Αντίθετα, πολλά
συστήματα αρχείων μοιράζονται τον ίδιο χώρο, το pool. Μπορείτε να
καταργήσετε το σύστημα αρχείων και κατόπιν το ίδιο το pool όταν
δεν τα χρειάζεστε πλέον:&prompt.root; zfs destroy example/compressed
&prompt.root; zfs destroy example/data
&prompt.root; zpool destroy exampleΟι σκληροί δίσκοι με τον καιρό χαλάνε, είναι αναπόφευκτο.
Όταν ένας δίσκος χαλάσει, τα δεδομένα του χάνονται. Μια μέθοδος
για να αποφύγουμε την απώλεια δεδομένων εξαιτίας ενός χαλασμένου
δίσκου είναι να δημιουργήσουμε μια συστοιχία
RAID. Τα pools του ZFS έχουν
σχεδιασθεί ώστε να υποστηρίζουν αυτό το χαρακτηριστικό.
Η λειτουργία αυτή αναλύεται στην επόμενη ενότητα.ZFS RAID-ZΌπως αναφέραμε προηγουμένως, η ενότητα αυτή προϋποθέτει ότι
χρησιμοποιούμε τρεις συσκευές
SCSI με ονόματα συσκευών
da0, da1 και
da2. Για να δημιουργήσουμε ένα pool τύπου
RAID-Z, εκτελούμε την ακόλουθη εντολή:&prompt.root; zpool create storage raidz da0 da1 da2Η &sun; συνιστά να χρησιμοποιούνται από τρεις ως εννιά
συσκευές σε συστοιχίες τύπου RAID-Z.
Αν χρειάζεται να δημιουργήσετε ένα pool με περισσότερους από
δέκα δίσκους, είναι προτιμότερο να το χωρίσετε σε ομάδες από
μικρότερα RAID-Z pools. Αν διαθέτετε μόνο
δύο δίσκους αλλά χρειάζεστε την δυνατότητα ανοχής σφαλμάτων,
ίσως είναι καλύτερο να χρησιμοποιήσετε ένα
ZFS mirror. Δείτε τη σελίδα manual του
&man.zpool.8; για περισσότερες λεπτομέρειες.Θα δημιουργηθεί το storage zpool. Μπορείτε
να επαληθεύσετε το αποτέλεσμα χρησιμοποιώντας, όπως και
προηγουμένως, τις εντολές &man.mount.8; και &man.df.1;. Θα
μπορούσαμε να χρησιμοποιήσουμε περισσότερους δίσκους, προσθέτοντας
τα ονόματα συσκευών τους στο τέλος της παραπάνω λίστας.
Δημιουργήστε ένα νέο σύστημα αρχείων στο pool, το οποίο θα
ονομάζεται home και όπου θα αποθηκεύονται τελικά
τα αρχεία των χρηστών:&prompt.root; zfs create storage/homeΜπορούμε τώρα να ενεργοποιήσουμε την συμπίεση και να κρατάμε
επιπλέον αντίγραφα των καταλόγων και των δεδομένων των χρηστών.
Όπως και προηγουμένως, μπορούμε να το επιτύχουμε χρησιμοποιώντας
τις παρακάτω εντολές:&prompt.root; zfs set copies=2 storage/home
&prompt.root; zfs set compression=gzip storage/homeΓια να γίνει αυτός ο νέος κατάλογος των χρηστών, αντιγράψτε τα
δεδομένα τους σε αυτόν και δημιουργήστε τους κατάλληλους
συμβολικούς δεσμούς:&prompt.root; cp -rp /home/* /storage/home
&prompt.root; rm -rf /home /usr/home
&prompt.root; ln -s /storage/home /home
&prompt.root; ln -s /storage/home /usr/homeΤα δεδομένα των χρηστών θα αποθηκεύονται τώρα στο νέο σύστημα
αρχείων /storage/home.
Για να το επαληθεύσετε, δημιουργήστε ένα νέο χρήστη και εισέλθετε
στο σύστημα με το νέο λογαριασμό.Δοκιμάστε να δημιουργήσετε ένα στιγμιότυπο (snapshot) στο
οποίο θα μπορείτε να επανέλθετε αργότερα:&prompt.root; zfs snapshot storage/home@08-30-08Σημειώστε ότι η επιλογή δημιουργίας στιγμιότυπου λειτουργεί
μόνο σε πραγματικό σύστημα αρχείων, και όχι σε κάποιο μεμονωμένο
κατάλογο ή αρχείο. Ο χαρακτήρας @
χρησιμοποιείται ως διαχωριστικό μεταξύ του συστήματος αρχείων και
του ονόματος τόμου. Αν καταστραφεί ο κατάλογος δεδομένων κάποιου
χρήστη αποκαταστήστε τον με την εντολή:&prompt.root; zfs rollback storage/home@08-30-08Για να δείτε μια λίστα των διαθέσιμων στιγμιότυπων, εκτελέστε
την εντολή ls στον κατάλογο
.zfs/snapshot του συστήματος
αρχείων. Για παράδειγμα, για να δείτε το στιγμιότυπο που
δημιουργήσαμε προηγουμένως, εκτελέστε την παρακάτω εντολή:&prompt.root; ls /storage/home/.zfs/snapshotΕίναι δυνατόν να γράψετε κάποιο script που να δημιουργεί
μηνιαία στιγμιότυπα των δεδομένων των χρηστών. Ωστόσο, με την
πάροδο του χρόνου, τα στιγμιότυπα θα καταναλώσουν μεγάλο ποσοστό
του χώρου στο δίσκο. Μπορείτε να διαγράψετε το προηγούμενο
στιγμιότυπο χρησιμοποιώντας την παρακάτω εντολή:&prompt.root; zfs destroy storage/home@08-30-08Δεν υπάρχει λόγος, μετά από όλες αυτές τις δοκιμές, να
κρατήσουμε το /storage/home
στην παρούσα κατάσταση του. Μετατρέψτε το στο πραγματικό σύστημα
αρχείων /home:&prompt.root; zfs set mountpoint=/home storage/homeΧρησιμοποιώντας τις εντολές df και
mount θα δούμε ότι το σύστημα χειρίζεται πλέον
αυτό το σύστημα αρχείων ως το πραγματικό
/home:&prompt.root; mount
/dev/ad0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad0s1d on /usr (ufs, local, soft-updates)
storage on /storage (zfs, local)
storage/home on /home (zfs, local)
&prompt.root; df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235240 1628708 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032826 48737618 2% /usr
storage 26320512 0 26320512 0% /storage
storage/home 26320512 0 26320512 0% /homeΕδώ ολοκληρώνεται η ρύθμιση του RAID-Z.
Για να δέχεστε αναφορές κατάστασης σχετικά με τα συστήματα
αρχείων κατά τη νυκτερινή εκτέλεση του &man.periodic.8;, δώστε την
παρακάτω εντολή:&prompt.root; echo 'daily_status_zfs_enable="YES"' >> /etc/periodic.confΑνάκτηση του RAID-ZΚάθε λογισμικό RAID έχει μια μέθοδο για
επίβλεψη της κατάστασής του, και το ZFS δεν
αποτελεί εξαίρεση. Μπορείτε να δείτε την κατάσταση των συσκευών
του RAID-Z χρησιμοποιώντας την ακόλουθη
εντολή:&prompt.root; zpool status -xΑν όλα τα pools είναι σε υγιή κατάσταση, θα πάρετε το ακόλουθο
μήνυμα:all pools are healthyΑν υπάρχει κάποιο πρόβλημα, π.χ. κάποιος δίσκος έχει βγει
εκτός λειτουργίας, θα δείτε την περιγραφή της κατάστασης σε
ένα μήνυμα όπως το παρακάτω: pool: storage
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
storage DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
da0 ONLINE 0 0 0
da1 OFFLINE 0 0 0
da2 ONLINE 0 0 0
errors: No known data errorsΤο παραπάνω δείχνει ότι η συσκευή τέθηκε εκτός λειτουργίας
από τον διαχειριστή. Αυτό είναι αλήθεια για το συγκεκριμένο
παράδειγμα. Για να τεθεί ο δίσκος εκτός, χρησιμοποιήθηκε η
παρακάτω εντολή:&prompt.root; zpool offline storage da1Μπορούμε τώρα να αντικαταστήσουμε το δίσκο
da1 μετά την απενεργοποίηση του
συστήματος. Όταν το σύστημα επανέλθει σε λειτουργία, μπορούμε να
χρησιμοποιήσουμε την ακόλουθη εντολή για να ενημερώσουμε το
σύστημα για την αντικατάσταση του δίσκου:&prompt.root; zpool replace storage da1Από εδώ, μπορούμε να ελέγξουμε ξανά την κατάσταση, αυτή τη
φορά χωρίς την επιλογή :&prompt.root; zpool status storage
pool: storage
state: ONLINE
scrub: resilver completed with 0 errors on Sat Aug 30 19:44:11 2008
config:
NAME STATE READ WRITE CKSUM
storage ONLINE 0 0 0
raidz1 ONLINE 0 0 0
da0 ONLINE 0 0 0
da1 ONLINE 0 0 0
da2 ONLINE 0 0 0
errors: No known data errorsΌπως φαίνεται στο παράδειγμα, τα πάντα φαίνεται να λειτουργούν
φυσιολογικά.Επαλήθευση ΔεδομένωνΌπως αναφέραμε προηγουμένως, το ZFS
χρησιμοποιεί checksums (αθροίσματα ελέγχου) για
να επαληθεύσει την ακεραιότητα των αποθηκευμένων δεδομένων.
Τα αθροίσματα ελέγχου ενεργοποιούνται αυτόματα κατά την δημιουργία
των συστημάτων αρχείων, και μπορούν να απενεργοποιηθούν μέσω της
επόμενης εντολής:&prompt.root; zfs set checksum=off storage/homeΑυτό δεν είναι γενικά καλή ιδέα, καθώς τα checksums
καταλαμβάνουν ελάχιστο αποθηκευτικό χώρο, και είναι πολύ πιο
χρήσιμο να τα έχουμε ενεργοποιημένα. Επίσης δεν φαίνεται να
προκαλούν κάποια σημαντική καθυστέρηση ή επιβάρυνση. Με τα
checksums ενεργοποιημένα, μπορούμε να ζητήσουμε από το
ZFS να ελέγξει την ακεραιότητα των δεδομένων
χρησιμοποιώντας τα για επαλήθευση. Η διαδικασία αυτή είναι
γνωστή ως scrubbing. Για να ελέγξετε την
ακεραιότητα δεδομένων του pool storage,
χρησιμοποιήστε την παρακάτω εντολή:&prompt.root; zpool scrub storageΗ διαδικασία αυτή μπορεί να πάρει αρκετή ώρα, ανάλογα με την
ποσότητα των αποθηκευμένων δεδομένων. Επίσης χρησιμοποιεί πάρα
πολύ το δίσκο (I/O), τόσο ώστε σε κάθε
δεδομένη στιγμή μπορεί να εκτελείται μόνο μια τέτοια διαδικασία.
Μετά την ολοκλήρωση του scrub, θα ανανεωθεί και η αναφορά
κατάστασης, την οποία μπορείτε να δείτε ζητώντας την με την
παρακάτω εντολή:&prompt.root; zpool status storage
pool: storage
state: ONLINE
scrub: scrub completed with 0 errors on Sat Aug 30 19:57:37 2008
config:
NAME STATE READ WRITE CKSUM
storage ONLINE 0 0 0
raidz1 ONLINE 0 0 0
da0 ONLINE 0 0 0
da1 ONLINE 0 0 0
da2 ONLINE 0 0 0
errors: No known data errorsΣτο παράδειγμα μας εμφανίζεται και η χρονική στιγμή που
ολοκληρώθηκε η εντολή scrub. Η δυνατότητα αυτή μας εξασφαλίζει
ακεραιότητα δεδομένων σε μεγάλο βάθος χρόνου.Υπάρχουν πολλές ακόμα επιλογές για το σύστημα αρχείων Ζ. Δείτε
τις σελίδες manual &man.zfs.8; και &man.zpool.8;.ZFS QuotasΤο ZFS υποστηρίζει διαφορετικούς τύπους quota: το refquota,
το γενικό quota, το quota χρήστη και το quota ομάδας. Στην ενότητα
αυτή θα εξηγήσουμε τις βασικές έννοιες κάθε τύπου και θα δώσουμε
κάποιες οδηγίες χρήσης.Τα quotas χρησιμοποιούνται για να περιορίσουν το χώρο στο δίσκο
που μπορεί να καταναλωθεί από ένα dataset και τους απογόνους του
(descendants) του καθώς και για να θέσουν περιορισμούς στο χώρο που
μπορεί να καταλάβει ένα στιγμιότυπο (snapshot). Σε όρους χρήστη,
τα quotas είναι χρήσιμα για τον περιορισμό του χώρου δίσκου που
μπορεί να έχει στη διάθεση του κάποιος χρήστης.Δεν μπορείτε να ορίσετε quotas σε τόμους (volumes) καθώς
αυτό ουσιαστικά γίνεται ήδη από την ιδιότητα
volsize.Το refquota,
refquota=size,
περιορίζει το χώρο που μπορεί να καταναλώσει ένα dataset
θέτοντας ένα απόλυτο όριο χώρου (hard limit). Ωστόσο, αυτό
το απόλυτο όριο δεν περιλαμβάνει το χώρο που χρησιμοποιείται
από τους απογόνους του dataset όπως τα συστήματα αρχείων ή
τα στιγμιότυπα.Για να επιβάλετε γενικό quota 10 GB για το
storage/home/bob, χρησιμοποιήστε την
παρακάτω εντολή:&prompt.root; zfs set quota=10G storage/home/bobΤα quotas χρήστη περιορίζουν την ποσότητα χώρου που μπορεί να
χρησιμοποιήσει ένας συγκεκριμένος χρήστης. Η γενική μορφή είναι
userquota@user=size,
και το όνομα του χρήστη πρέπει να δίνεται σε μια από τις παρακάτω
μορφές:Μορφή συμβατή με το POSIX,
για παράδειγμα joe.Μορφή συμβατή με το αριθμητικό αναγνωριστικό (ΙD) του
POSIX,
για παράδειγμα 789.Μορφή ονόματος SID, για παράδειγμα
joe.bloggs@example.com.Μορφή αριθμητικού αναγνωριστικού (ID) SID, για παράδειγμα
S-1-123-456-789.Για παράδειγμα, για να επιβάλετε quota 50 GB για ένα
χρήστη με όνομα joe, χρησιμοποιήστε
την παρακάτω εντολή:&prompt.root; zfs set userquota@joe=50GΓια να αφαιρέσετε το quota ή να βεβαιωθείτε ότι δεν έχει τεθεί,
χρησιμοποιήστε την εντολή:&prompt.root; zfs set userquota@joe=noneΟι ιδιότητες των quota χρηστών δεν απεικονίζονται μέσω της
εντολής zfs get all. Οι χρήστες εκτός του
root μπορούν να δουν μόνο τα δικά τους
quotas εκτός αν τους έχει αποδοθεί το προνόμιο
userquota. Οι χρήστες με αυτό το προνόμιο
μπορούν να δουν και να ρυθμίσουν τo quota οποιουδήποτε
χρήστη.Το quota ομάδας περιορίζει το διαθέσιμο χώρο που μπορεί να
χρησιμοποιηθεί από μια συγκεκριμένη ομάδα χρηστών. Η γενική μορφή
είναι
groupquota@group=size.Για να θέσετε quota για την ομάδα χρηστών
firstgroup τα 50 GB, χρησιμοποιήστε
την παρακάτω εντολή:&prompt.root; zfs set groupquota@firstgroup=50GΓια να αφαιρέσετε το quota ή να βεβαιωθείτε ότι δεν έχει τεθεί,
χρησιμοποιήστε την εντολή:&prompt.root; zfs set groupquota@firstgroup=noneΌπως και με την ιδιότητα quota χρηστών, οι χρήστες εκτός του
root μπορούν να δουν μόνο τα quota που
σχετίζονται με τις ομάδες στις οποίες ανήκουν. Ωστόσο, ο χρήστης
root και κάθε χρήστης στον οποίο έχει δοθεί
το προνόμιο groupquota μπορεί να δει και να
ρυθμίσει τα quota για όλες τις ομάδες.Η υπο-εντολή zfs userspace απεικονίζει
την ποσότητα χώρου που καταναλώνει κάθε χρήστης στο συγκεκριμένο
σύστημα αρχείων ή στιγμιότυπο καθώς και το καθορισμένο quota.
Η υπο-εντολή zfs groupspace εκτελεί ακριβώς το
ίδιο για ομάδες χρηστών. Για περισσότερες πληροφορίες σχετικά
με τις επιλογές εκτέλεσης ή απεικόνισης αυτών των εντολών, δείτε
το &man.zfs.1;.Για να δειτε το quota για το
storage/home/bob, αν έχετε τα σωστά προνόμια
ή είστε ο root, χρησιμοποιήστε την παρακάτω
εντολή:&prompt.root; zfs get quota storage/home/bobΚρατήσεις Χώρου (reservations) στο ZFSΤο ZFS υποστηρίζει δύο τύπους κρατήσεων χώρου. Σε αυτή την
ενότητα θα εξηγήσουμε τις βασικές έννοιες κάθε τύπο και θα δώσουμε
κάποιες οδηγίες χρήσης.Η ιδιότητα reservation μας επιτρέπει να
διαφυλάξουμε κάποιο εγγυημένο ελάχιστο ποσό χώρου για ένα dataset
και τους απογόνους του. Αυτό σημαίνει ότι αν τεθεί κράτηση χώρου
10 GB στο storage/home/bob και ο διαθέσιμος
χώρος του δίσκου καταστεί ελάχιστος, θα διαφυλαχθούν τουλάχιστον
10 GB χώρου για αυτό το dataset. Η ιδιότητα
refreservation θέτει ή δείχνει την ελάχιστη
ποσότητα χώρου που έχει κρατηθεί για ένα dataset χωρίς τους
απογόνους του (π.χ. τα στιγμιότυπα). Για παράδειγμα, για να πάρετε
ένα στιγμιότυπο του storage/home/bob θα πρέπει
να έχετε επαρκή χώρο εκτός της ποσότητας
refreservation για να εκτελέσετε επιτυχώς τη
λειτουργία. Οι απόγονοι του κυρίου dataset δεν προσμετρώνται από
την ιδιότητα refreservation και δεν καταπατούν
τον ελεύθερο χώρο του.Οι κρατήσεις κάθε τύπου είναι χρήσιμες σε πολλές περιπτώσεις,
για παράδειγμα στο σχεδιασμό και δοκιμή καταλληλότητας της κατανομής
χώρου σε ένα νέο σύστημα ή την εξασφάλιση διαθεσιμότητας αρκετού
ελεύθερου χώρου σε ένα σύστημα για λειτουργίες ανάκτησης
δεδομένων (recovery).Η γενική μορφή της ιδιότητας reservation
είναι
reservation=size.
Για να θέσετε κράτηση 10 GB στο
storage/home/bob χρησιμοποιήστε την
παρακάτω εντολή:&prompt.root; zfs set reservation=10G storage/home/bobΓια να αφαιρέσετε ένα reservation ή να βεβαιωθείτε ότι δεν έχει
τεθεί, εκτελέστε την εντολή:&prompt.root; zfs set reservation=none storage/home/bobΜπορείτε να εφαρμόσετε την ίδια βασική αρχή και για να θέσετε
την ιδιότητα refreservation, χρησιμοποιώντας τη
γενική μορφή
refreservation=size.Για να ελέγξετε αν υπάρχουν reservations ή refreservations στο
storage/home/bob, εκτελέστε μια από τις
παρακάτω εντολές:&prompt.root; zfs get reservation storage/home/bob
&prompt.root; zfs get refreservation storage/home/bobΣυστήματα Αρχείων &linux;Αυτή η ενότητα περιγράφει κάποια από τα συστήματα αρχείων του
&linux; που υποστηρίζονται από το &os;.Ext2FSΗ υλοποίηση του συστήματος αρχείων &man.ext2fs.5; στον πυρήνα,
γράφηκε από τον Godmar Back και το πρόγραμμα οδήγησης εμφανίστηκε
για πρώτη φορά στο &os; 2.2. Στο &os; 8 και στις
προηγούμενες εκδόσεις, ο κώδικας ήταν υπό την άδεια
GNU Public License, ωστόσο στο &os; 9 o
κώδικας γράφτηκε ξανά και είναι πλέον υπό την άδεια
BSD.Το πρόγραμμα οδήγησης &man.ext2fs.5; επιτρέπει στον πυρήνα του
&os; τόσο να διαβάζει όσο και να γράφει σε συστήματα αρχείων
ext2.Αρχικά, φορτώστε το άρθρωμα στον πυρήνα:&prompt.root; kldload ext2fsΓια να προσαρτήσετε έπειτα ένα τόμο &man.ext2fs.5; που βρίσκεται
στο /dev/ad1s1:&prompt.root; mount -t ext2fs /dev/ad1s1 /mntXFSΤο σύστημα αρχείων Χ, XFS γράφτηκε αρχικά από
την SGI για το λειτουργικό IRIX
και μεταφέρθηκε στο &linux;. Ο πηγαίος κώδικας είναι διαθέσιμος υπό
την άδεια GNU Public License. Δείτε
αυτή τη σελίδα
για περισσότερες πληροφορίες. Η μεταφορά στο &os; ξεκίνησε από τους
Russel Cattelan, &a.kan; και &a.rodrigc;.Για να φορτώσετε το XFS ως άρθρωμα στον
πυρήνα:&prompt.root; kldload xfsΤο πρόγραμμα οδήγησης &man.xfs.5; επιτρέπει στον πυρήνα του
&os; να έχει πρόσβαση σε συστήματα αρχείων XFS. Ωστόσο, τη δεδομένη
στιγμή, επιτρέπει πρόσβαση μόνο για ανάγνωση. Η εγγραφή δεν είναι
δυνατή.Για να προσαρτήσετε ένα τόμο &man.xfs.5; που βρίσκεται στο
/dev/ad1s1, εκτελέστε την παρακάτω εντολή:&prompt.root; mount -t xfs /dev/ad1s1 /mntΚαλό είναι επίσης να γνωρίζετε ότι το port sysutils/xfsprogs περιέχει το βοηθητικό
πρόγραμμα mkfs.xfs το οποίο επιτρέπει τη
δημιουργία συστημάτων αρχείων XFS. Το port
επίσης παρέχει προγράμματα για έλεγχο και επισκευή αυτών των
συστημάτων αρχείων.Μπορείτε να χρησιμοποίησετε την παράμετρο -p
στην εντολή mkfs.xfs για να δημιουργήσετε ένα
σύστημα αρχείων &man.xfs.5; το οποίο να περιέχει αρχεία και άλλα
μετα-δεδομένα. Mε αυτό τον τρόπο μπορείτε να δημιουργήσετε ένα
σύστημα αρχείων μόνο ανάγνωσης για δοκιμή με το &os;.ReiserFSTo σύστημα αρχείων Reiser, ReiserFS, μεταφέρθηκε στο &os;
από τον &a.dumbbell; και είναι υπό την άδεια GNU
Public License.Το πρόγραμμα οδήγησης για το ReiserFS επιτρέπει στον πυρήνα του
&os; να έχει πρόσβαση ανάγνωσης στα αντίστοιχα συστήματα αρχείων αλλά
τη δεδομένη στιγμή δεν επιτρέπει εγγραφή δεδομένων.Φορτώστε αρχικά το άρθρωμα του πυρήνα:&prompt.root; kldload reiserfsΓια να προσαρτήσετε ένα τόμο ReiserFS από το
/dev/ad1s1:&prompt.root; mount -t reiserfs /dev/ad1s1 /mnt