by: Cerebrux
Όταν δημιουργήσεις το πρώτο σου ZFS με μια απλή εντολή και δεις πόσο ολοκληρωμένο σύστημα είναι όπως και την «αυτοΐαση» να συμβαίνει για πρώτη φορά μπροστά σου… κάτι αλλάζει για πάντα μέσα σου, όπως άλλαξε την πρώτη φορά που είδες ένα ολόκληρο λειτουργικό σύστημα Linux να δουλεύει από ένα Live CD… ναι ρε CD….
Σημείωση: Αν δεν έχεις διαβάσει το πρώτο μέρος, ή απλά το διάβασες σε στιλ «ξεπέτα» σταμάτα εδώ και διάβασε το καλά… να σε αυτό το λινκ.
Κάθε φορά που χρησιμοποιούμε, οποιαδήποτε λύση προληπτικών μέτρων κατά της απώλειας δεδομένων, όπως δημιουργία αντιγράφων ασφαλείας ή/και επαλήθευση ακεραιότητας δεδομένων συστήματος αρχείων, πρέπει να δοκιμάσουμε τη ρύθμισή μας με ορισμένες προσομοιωμένες αποτυχίες δίσκων προτού εφαρμόσουμε μια λύση σε πραγματικό περιβάλλον.
Η αλήθεια είναι ότι σκεφτόμουν αρκετές μέρες πως να προσεγγίσω το θέμα της πρακτικής χρήσης σε περιβάλλον προσομοίωσης από την σκοπιά του αδαή:
«Μήπως πρώτα να τους δείξω πως να το δοκιμάσουν σε VM για να μην κάνουν καμιά πατάτα; Ή μήπως να το κάνουμε σε κάνα άχρηστο USB μικρό για να έχουμε το κεφάλι μας ήσυχο ;»
Τελικά αποφάσισα να μην το παίξω προστατευτικός γονιός κανενός σας και να ακολουθήσω την μέθοδο «Σκάσε και κολύμπα»
Εγκατάσταση του ZFS στο Linux
To ZFS είμαι σίγουρος ότι έχει πακεταριστεί για όλες τις διανομές οπότε αν… δεν έχετε ζωή και υποχρεώσεις να ροκανίζουν τον χρόνο σας, σας αρέσει να δουλεύετε εσείς για τον υπολογιστή και όχι το αντίστροφο, και δεν χρησιμοποιείτε Ubuntu ή Debian, δεν θα σας πως εγώ πως να το εγκαταστήσετε… βγάλτε τα πέρα μόνοι σας.
Επομένως όσοι δεν ανήκετε στην παραπάνω κατηγορία εγκαταστήστε το ZFS με
1 | sudo apt install zfsutils-linux |
Μετά την εγκατάσταση φυσικά, το ZFS και τα εργαλεία του είναι ίδια σε όλα τα UNIX-base και UNIX-like λειτουργικά οπότε η χρήση του zpool και zfs που θα δείξουμε εδώ είναι ίδια παντού. Τέλος, θέλω να παρατηρήσεις ότι οι παράμετροι των δυο εφαρμογών είναι «ανθρώπινοι» με λέξεις που καταλαβαίνεις τι κάνουν και έχουν μια λογική σειρά… σε αντίθεση με κάτι εντολές με παραμέτρους όπως -Syyu
…. τιναυτορε….. !
Να εξηγούμαστε όμως… για να μην παρεξηγούμαστε
Με το mdadm του RAID μπορείτε να ρυθμίσετε οποιοδήποτε είδος RAID pool θέλετε και μπορείτε ακόμη και να το επεκτείνετε με περαιτέρω δίσκους εάν χρειαστεί αργότερα. Στη συνέχεια, μπορείτε να προσθέσετε και το dm-integrity για ανίχνευση σφαλμάτων και διόρθωση σφαλμάτων σε επίπεδο μπλοκ. Εάν προσθέσετε και το dm-crypt με LUKS σε αυτό, η ακεραιότητα των δεδομένων προστατεύεται με εγγενή κρυπτογράφηση. Και αν θέλετε να χρησιμοποιείτε το RAID ως LVM δίσκους μπορείτε επίσης να κάνετε και snapshotting. Ουφ… ήδη κουράστηκα με τόσα λογισμικά και ρυθμίσεις…
Αν ζαλιστήκατε και εσείς… μπορείτε απλά να τα κάνετε όλα αυτά με το ZFS… ήδη από το μακρινό 2005…
Όπως είπα στο πρώτο μέρος της σειράς άρθρων για το ZFS, το ZFS είναι Όλα σε 1 σύστημα αρχείων και Logical Volume Manager με ενσωματωμένες δυνατότητες δημιουργίας RAID. Επίσης ανέφερα στα χαρακτηριστικά του την αυτο-προστασία των δεδομένων από προβλήματα «φθοράς» σε mirrored δίσκους ή προβληματικούς δίσκους γενικά. Τέλος, είχα πει ότι για το ZFS δεν έχει σημασία αν το μέσο αποθήκευσης είναι δίσκος, flash disk, αρχείο δίσκου, εικονικός δίσκος, ένας ή πολλοί κλπ. αλλά σημασία έχουν τα vdev. Με αυτά στο μυαλό μας, θα δημιουργήσουμε ZFS pool αποθήκευσης με ψεύτικους δίσκους και στη συνέχεια θα προκαλέσουμε σκόπιμα πρόβλημα για να δούμε στην πράξη τις δυνατότητες του ZFS.
Το θέμα για όλα αυτά όμως και ζήτημα που με ανησυχούσε, όπως είπα και στην αρχή, είναι ότι η αμπαλίαση κάποιων από εσάς είναι τόσο επικίνδυνη που μπορεί με τις εντολές που θα τρέξουμε να αυτοπυροβοληθείτε και να πάρετε το σύστημα σας στα χέρια σας.
Μετά όμως είπα στον εαυτό μου… «ποιος είμαι εγώ να σταθώ εμπόδιο στους μηχανισμούς της φυσικής επιλογής» οπότε από εδώ και πέρα, ότι τρέξετε, έχετε την απόλυτη ευθύνη των πράξεών σας.
Δημιουργία ZFS σε κατοπτρικό (mirrored) χώρο αποθήκευσης με 2 δίσκους
Ξεκινάμε με το πρώτο σενάριο…
Δεν ξέρω γιατί κλείσατε το τερματικό με το οποίο κάνατε εγκατάσταση το ZFS ή γιατί δεν έχετε μόνιμα ανοιχτό ένα αλλά … τέλος πάντων ήρθε η ώρα να ανοίξετε ένα.
Έστω λοιπόν, ότι έχουμε έναν υπολογιστή που θα τον ονομάσουμε zfsnoob. Αυτός ο υπολογιστής θα έχει δυο σκληρούς δίσκους. Πάμε λοιπόν να τον δημιουργήσουμε στον home
μας φτιάχνοντας ένα φάκελο και φυσικά και να τον ανοίξουμε:
1 | cd && mkdir zfsnoob && cd zfsnoob |
Αφού είστε που είστε μέσα στον φάκελο zfsnoob
, παραγγείλετε και δυο SSD δίσκους των 100MB … ναι Megabyte… όχι Gigabyte…. μια χαρά είναι για αυτό που θα κάνουμε. θα χρησιμοποιήσουμε το dd
για την «παραγγελία» μας και το pwd
για να δημιουργηθούν στην διαδρομή του φακέλου zfsnoob
. Οπότε πάμε να αγοράσουμε 2 δίσκους:
1234 | for psemataola in ssddiskos1.img ssddiskos2.img do dd if = /dev/zero of=` pwd `/$psemataola bs=1M count=100 done |
Αν όλα έχουν πάει καλά …. και δεν έχετε διαγράψει τους φακέλους σας, τότε θα έχετε δυο «SSD δίσκους» των 100ΜΒ έκαστος μέσα στον φάκελο zfsnoob
Έχουμε λοιπόν 2 δίσκους αλλά εμείς θέλουμε ο αποθηκευτικός χώρος να είναι έτσι διαμορφωμένος ώστε ότι αποθηκεύεται στον έναν να αποθηκεύεται και στον άλλον. Άρα εμείς ουσιαστικά θα βλέπουμε μόνο 100ΜΒ ελεύθερο χώρο και όχι 200ΜΒ. Πως θα το κάνουμε αυτό ;
Θα δημιουργήσουμε αυτό που ονομάζεται Mirrored διαρρύθμιση (ή RAID-1 για όσους δουλεύουν με RAID). Αυτού του τύπου η διαρρύθμιση δίσκων χάνει μεν σε χωρητικότητα, παρέχει όμως ανθεκτικότητα σε περίπτωση προβλήματος σε ένα από τους δυο δίσκους.
Ας κουμπώσουμε τους δίσκους σε mirror vdev διαρρύθμιση:
1 | sudo zpool create kathreftaki mirror ` pwd ` /ssddiskos1 .img ` pwd ` /ssddiskos2 .img |
Ωραία ! Μόλις φτιάξαμε :
- το πρώτο μας ZFS pool με το όνομα
kathreftaki
- και ταυτόχρονα έγιναν format σε ZFS
- ενώ ρυθμίστηκαν και ως αντίγραφο το ένα του άλλου (σαν να είναι RAID-1)….
Στόπ τώρα… πάρτε μια βαθιά ανάσα και όσοι έχετε χρησιμοποιήσει mdadm ή pv-vg-lv create και mkfs.*
πείτε μου στα σχόλια πως σας φάνηκε το εργαλείο zpool. Με ένα εργαλείο έγιναν όλα μαζί.
Αν τώρα θέλουμε να πάρουμε κάποιες πληροφορίες για αυτό το pool τρέχουμε :
1 | zpool status |
Όπου λογικά θα πρέπει να δούμε ότι οι δίσκοι έχουν τοποθετηθεί σε ένα mirror vdev που ονομάζεται mirror-0. Αν θέλουμε να δούμε πληροφορίες σχετικά με τον διαθέσιμο χώρο:
1 | zpool list |
Ωπ ! … μας δουλεύει; Γιατί δεν είναι διαθέσιμα τα 100MB και είναι μόνο τα 80ΜΒ; Διότι για να κάνει τα μαγικά που κάνει το ZFS, όπως τα είπα στο πρώτο μέρος της σειράς άρθρων για το ZFS, θα κρατήσει για τον εαυτό του μια ποσότητα χώρου, οπότε δεν μας απασχολεί αυτό.
Ωραία λοιπόν, είναι έτοιμο το pool μας… αλλά που είναι συνδεδεμένος ο «αποθηκευτικός χώρος»; Για να το δούμε αυτό θα χρησιμοποιήσουμε το δεύτερο εργαλείο που αφορά το σύστημα αρχείων:
1234 | sudo zfs get mountpoint pool NAME PROPERTY VALUE SOURCE kathreftaki mountpoint /kathreftaki local |
Θα παρατηρήσεις, ότι εξορισμού το ZFS δημιουργεί σημείο προσάρτησης για το pool μας απευθείας στο /
ριζικό κατάλογο και σε φάκελο ίδιου ονόματος με το pool. Να θυμάσαι πάντα ότι επειδή η δημιουργία του pool με τα vdev γίνεται από sudo
χρήστη και τα δικαιώματα πρόσβασης στο προσαρτημένο σύστημα αρχείων του dataset ανήκει στον root
. Οπότε πάμε να το αλλάξουμε για να μπορούμε να βάζουμε δικά μας αρχεία.
1 | sudo chown $USER /kathreftaki |
Πάμε μέσα σε αυτό τον φάκελο
1 | cd /kathreftaki |
Ας φτιάξουμε ένα αρχείο με λίγο κείμενο μέσα
1 | echo "Tria poulakia kathontan... " > keimeno.txt |
Άρα έχουμε ένα αρχείο με όνομα keimeno.txt
οπότε ήδη τον ZFS γνωρίζει το checksum
του αρχείου αυτού το οποίο και χρησιμοποιεί για να ελέγχει αν κάτι δεν είναι όπως θα έπρεπε. Αυτό συμβαίνει διότι αν προσθέσουμε και άλλο κείμενο, ή αλλάξουμε έστω και ένα γράμμα ή αλλοιωθεί το αρχείο για κάποιον λόγο, θα αλλάξει και ο αριθμός που αντιπροσωπεύει το checksum. Για να δούμε τον αριθμό αυτό τρέχουμε:
123 | sha1sum keimeno.txt 4c3ad571b4f1109f6587acba68f6388de2833514 keimeno.txt |
¨Έστω ότι έχουμε τελειώσει την δουλειά μας και θέλουμε να τερματίσουμε αυτόν τον ψεύτικο υπολογιστή. Όταν κλείνει ένα PC τι γίνονται οι μονάδες αποθήκευσής ; Συγχρονίζουν τα δεδομένα και κάνουν ασφαλή διακοπή λειτουργίας. Οπότε πάμε να κάνουμε ασφαλή εξαγωγή του pool μας. Για να το κάνουμε αυτό τρέχουμε:
12 | cd sudo zpool export kolitoi |
Τώρα φυσικά αν τσεκάρουμε με zpool list
την ύπαρξη του pool μας, θα μας πει ότι δεν υπάρχει, πράγμα απολύτως φυσιολογικό.
Πάμε τώρα πίσω στον φάκελο με τους δίσκους
1 | cd ~ /zfsnoob |
Έστω ότι έρχεται ένας καλικάντζαρος και μας χαλάει τον έναν από τους δυο δίσκους με την εντολή:
1 | dd if = /dev/zero of=` pwd ` /ssddiskos1 .img bs=1M count=100 |
Πάμε λοιπόν εμείς και ανοίγουμε πάλι αυτό τον υπολογιστή το οποίο και φορτώνει το pool μας
1 | sudo zpool import -d ` pwd ` /ssddiskos1 .img -d ` pwd ` /ssddiskos2 .img |
Ωχ ωχ ωχ ! Τι βλέπουμε λοιπόν; Τo ZFS αυτόματα μας ειδοποιεί ότι ο ένας δίσκος δεν είναι διαθέσιμος !. Το pool εμφανίζεται DEGRADED, με το ssddiskos2.img να εμφανίζεται ως ONLINE (υγιές) και μόνο o ssddiskos1.img που έγινε η ζημιά να εμφανίζεται ως ΜΗ ΔΙΑΘΕΣΙΜΟ (UNAVAIL) λόγω των κατεστραμμένων δεδομένων του.
Παρόλα αυτά λέει ότι το pool μας μπορεί να φορτωθεί χρησιμοποιώντας το id:
ή το όνομα του υγιούς δίσκου. Οπότε πάμε να το κάνουμε:
1 | sudo zpool import kathreftaki -d ` pwd ` /ssddiskos2 .img |
Βλέπουμε ότι «θυμάται» ότι το pool μας είχε και έναν άλλον δίσκο και μας εμφανίζει και τη διαδρομή που είχε. Έτσι, το pool μας είναι online και λειτουργεί, αν και σε υποβαθμισμένη κατάσταση. Μπορούμε όμως να δούμε το αρχείο μας αφού δεν έχει καταστραφεί:
12 | cat /kathreftaki/keimeno .txt Tria poulakia kathontan... |
Τώρα όμως θα πρέπει να αγοράσουμε έναν νέο δίσκο και να αντικαταστήσουμε το χαλασμένο. Στον φάκελο zfsnoob δημιουργούμε τον ssddiskos3.img
12 | cd ~ /zfsnoob dd if = /dev/zero of=` pwd ` /ssddiskos3 .img bs=1M count=100 |
Στη συνέχεια, ας ακολουθήσουμε τις οδηγίες από την κατάσταση zpool status
που μας λέει πως να αντικαταστήσουμε το δίσκο:
1 | sudo zpool replace kathreftaki ` pwd ` /ssddiskos1 .img ` pwd ` /ssddiskos3 .img |
Τι έκανε λοιπόν το παραπάνω; Είπε στο kathreftaki pool να αντικαταστήσει τον χαλασμένο ssddiskos1.img με τον δίσκο ssddiskos3.img που μόλις βγάλαμε από την ζελατίνα.
Θα παρατηρήσεις μια λέξη στο scan: όπου λέει resilvered (επαναργυρωμένο), αυτό σημαίνει ότι ξεκίνησε και ολοκλήρωσε επιτυχώς την δημιουργία αντιγράφων του ενός δίσκου στον άλλον χωρίς να χρειαστεί να κάνουμε τίποτα άλλο. Φυσικά αν π.χ. τα δεδομένα ήταν αρκετά GB τότε θα βλέπαμε και το ποσοστό ολοκλήρωσης και πιθανόν να μην είχε γίνει και τόσο γρήγορα.
Πριν πάμε στο επόμενο level, ας καθαρίσουμε λίγο διαγράφοντας τα πειράματά μας
1 | sudo zpool destroy kathreftaki |
και όπως θα προσέξατε δεν δίνει δεύτερη ευκαιρία ρωτώντας » ρε είσαι σίγουρος ; θα σου διαγράψω τους δίσκους ;«. Καταστρέφει το pool άμεσα. Στη συνέχεια μπορούμε να αφαιρέσουμε τους ψεύτικους «δίσκους» που δημιουργήσαμε:
12 | cd ~ /zfsnoob rm ssddiskos* |
Δημιουργία ZFS σε RAID-Z διάταξη με 3 δίσκους
Μέχρι τώρα, παίξαμε με το mirror χρησιμοποιώντας «image disks». Τι θα λέγατε τώρα να φτιάξουμε δικές μας συσκευές;
Θυμηθείτε το moto του UNIX «Τα πάντα είναι αρχείο» οπότε γιατί όχι και οι συσκευές. Αυτή την φορά θα φτιάξουμε συσκευές αποθήκευσης και θα είναι διαθέσιμες εκεί που είναι όλες οι κανονικές /dev/
.
Αυτή την φορά πάλι μέσα στον φάκελο zfsnoob, επειδή έχουμε λεφτά ας παραγγείλουμε 4 nvme δίσκους των 200ΜΒ
1234 | for psemataola in nvme1.img nvme2.img nvme3.img nvme4.img do dd if = /dev/zero of=` pwd `/$psemataola bs=1M count=200 done |
Κάναμε και το unboxing, τα βγάζουμε από την ζελατίνα τους και τα βιδώνουμε στο PC μας (με την εφαρμογή losetup
):
1234 | for i in nvme1.img nvme2.img nvme3.img nvme4.img do sudo losetup -fP $i done |
Το παραπάνω τώρα, πήγε και κούμπωσε τα αρχεία δίσκου ως loop device στο λειτουργικό μας. Πάμε να τα βρούμε γιατί θέλουμε να ξέρουμε που είναι συνδεδεμένα:
12345 | losetup -a | grep nvme /dev/loop33 : []: ( /home/salih/zfsnoob/nvme3 .img) /dev/loop31 : []: ( /home/salih/zfsnoob/nvme1 .img) /dev/loop34 : []: ( /home/salih/zfsnoob/nvme4 .img) /dev/loop32 : []: ( /home/salih/zfsnoob/nvme2 .img) |
Τέλεια ! Οι σουπερ-ντουπερ «NVME» δίσκοι μας είναι έτοιμοι προς χρήση και είναι συνδεδεμένοι στο /dev
. Πάμε λοιπόν να φτιάξουμε μια διαρρύθμιση 3 δίσκων σε RAID-Z και με 1 εφεδρικό.
1 | sudo zpool create axamparos raidz /dev/loop31 /dev/loop32 /dev/loop33 spare /dev/loop34 |
Τι άλλαξε σε σχέση με το mirror που είχαμε κάνει :
- φτιάξαμε ένα pool με όνομα axamparos
- raidz: μια διαρρύθμιση με 3 δίσκους που μας δίνει ανοχή έως έναν προβληματικό δίσκο (δηλαδή αν χαλάσει και ο δεύτερος…. καήκαμε)
- spare: δηλώνουμε ποια συσκευή θα είναι εφεδρική
Κουκλί το σύστημά μας ! Τώρα με τον εφεδρικό δίσκο να είναι τμήμα του pool μας, ας ενημερώσουμε το ZFS ότι θέλουμε αυτόματα να χρησιμοποιήσει αυτή την ρεζέρβα σε περίπτωση που έχουμε… φούιτ !:
1 | sudo zpool set autoreplace=on axamparos |
Πάμε τώρα να γεμίσουμε λίγο την συστοιχία μας με αρχεία των 40 MB αφού πρώτα όμως μεταφέρουμε τα δικαιώματα σε εμάς όπως μάθαμε και στο mirror ZFS:
1 | sudo chown $USER /axamparos |
123 | for i in {1..6}; do dd if = /dev/urandom of= /axamparos/arxeio_ $i.txt bs=1M count=40 done |
Ωραία όπως βλέπουμε και στο output του zfs list
έχουμε γεμίσει τον αποθηκευτικό χώρο που φτιάξαμε !. Για να προσομοιώσετε μια απόκριση του ZFS σε κάτι απότομο και απροσδόκητο, θα μπορούσατε να χρησιμοποιήσετε μια built-in λειτουργία που χρησιμεύει για να θέτουμε offline την συσκευή. Όμως, επειδή αυτά είναι για soyboys/girls…. θα προκαλέσουμε μια πιο ρεαλιστική αποτυχία δίσκου στο ZFS, όπως π.χ.:
- Να αποσυνδέσετε τη συσκευή loop: Αυτό μοιάζει με έναν δίσκο που γίνεται φυσικά μη διαθέσιμος λες και έχει φάει κλοτσιά ο πύργος του PC.
- Καταστροφή του δίσκου: Γράψτε τυχαία δεδομένα στη συσκευή με το
dd
για προσομοίωση καταστροφής. - Αφαίρεση του αρχείου εικόνας δίσκου: Προσομοίωση αποτυχίας αναγνώρισης του δίσκου διαγράφοντας ή μετονομάζοντας το αρχείο που σχετίζεται με τη συσκευή loop.
Αυτές οι μέθοδοι παρέχουν ένα πιο ρεαλιστικό σενάριο αποτυχίας δίσκου σε σύγκριση με την απλή χρήση του zpool offline pool_name
Εγώ λέω να επιλέξουμε το πρώτο με το κλοτσίδι…. Πριν το κάνουμε όμως, κάντε μου μια χάρη και ανοίξτε ένα δεύτερο τερματικό, ή δεύτερη καρτέλα και αφήστε να τρέχει η παρακάτω εντολή για να βλέπετε live το τι θα συμβεί:
watch zpool status
Προσωπικά, προτιμώ για αυτές τις δουλειές το tmux
για να έχω χωρισμένο το τερματικό σε δύο ή περισσότερα μέρη και να διατηρώ αυτή την διάταξή ακόμα και αν κλείσω το τερματικό. (βλέπε: Tmux | Μην χρησιμοποιείς τερματικό σε server χωρίς tmux). Αφού έχετε ανοιχτό το watch
να τρέχει, τώρα στο άλλο τερματικό/καρτέλα πάμε να κάνουμε τις αταξίες μας. Τρέχουμε το παρακάτω:
1 | sudo losetup -d /dev/loop31 |
ώστε να προκαλέσουμε αποσύνδεση του δίσκου loop31. Το pool μας τώρα έχει χάσει τον έναν δίσκο αλλά συνεχίζει να λειτουργεί σαν να μην έγινε τίποτα (RAID-1 ντε..). Το ZFS θα μάθει για αυτή την απώλεια όταν «κάτι» προσπαθήσει να διαβάσει τα δεδομένα ή να ζητήσει πρόσβαση στον δίσκο. Φυσικά σε αντίθεση με πραγματικούς δίσκους, σε loop disks που έχουμε αυτό μπορεί να μην γίνει. Οπότε για να μην περιμένουμε ας του ζητήσουμε να εξετάσει τον εαυτό του με την παράμετρο scrub :
1 | sudo zpool scrub axamparos |
Θα δούμε το ZFS να μας αναφέρει το πρόβλημα αλλά και τις ενέργειες που πρέπει να κάνουμε. Παρόλα αυτά όμως, αν παρατηρήσετε ο εφεδρικός έχει αυτόματα σηκωθεί από τον πάγκο και ήδη παίζει μπαλίτσα… Οπότε μένει μόνο να αφαιρέσουμε τον προβληματικό δίσκο από το pool μας:
sudo zpool detach axamparos /dev/loop31
Αυτή η εντολή αφαιρεί τον «χαλασμένο» δίσκο από το pool, αφήνοντας τον εφεδρικό ως μέρος του ενεργού pool. Το εφεδρικό δεν θα θεωρείται πλέον ανταλλακτικό, αλλά θα αποτελεί μέρος του RAIDZ
Εννοείται ότι οι επόμενες ενέργειες μας με πραγματικούς δίσκους θα ήταν η φυσική αφαίρεση του δίσκου από το PC ή Server και η προσθήκη νέου spare ως εφεδρικού. Εδώ θα το κάνουμε εικονικά:
1234 | dd if = /dev/zero of=` pwd ` /nvme5 .img bs=1M count=200 sudo losetup -fP nvme5.img losetup -a | grep nvme5.img /dev/loop31 : []: ( /home/salih/zfsnoob/nvme5 .img) |
και τέλος τον προσθέτουμε στον πάγκο ως εφεδρική παιχτούρα
1 | sudo zpool add axamparos spare /dev/loop31 |
Επίλογος και ανακύκλωση
Φτιάξαμε σενάριο το οποίο ήθελα να σας εξοικειώσει με την χρήση της zpool κυρίως για να δείτε στην πράξη έστω και μια από τις περιπτώσεις που μπορεί να συμβούν με τους δίσκους μας. Χάλασε ο ένας, τον αντικαταστήσαμε με καινούριο και το ZFS ανέλαβε να δημιουργήσει ξανά αντίγραφα των αρχείων μας.
Ένα από τα ωραία χαρακτηριστικά του zfs είναι ότι διατηρεί ένα ιστορικό από όλες τις ενέργειες μας. Αυτό μπορεί να φανεί χρήσιμο στο μέλλον αν θέλουμε να δούμε πως χτίστηκε, άλλαξε και διαμορφώθηκε με την πάροδο του χρόνου:
1 | sudo zpool history |
Αν φτάσατε εδώ προσπαθώντας να καταλάβετε πώς να αντιμετωπίσετε και να αντικαταστήσετε έναν προβληματικό δίσκο σε ZFS, ελπίζω να βρήκατε αυτό που ψάχνατε. Αλλά, παρακαλώ, θυμηθείτε ότι τα βήματα δοκιμών που κάναμε, είναι για το περιβάλλον δοκιμών τα οποία είναι το θέμα αυτής της ανάρτησης. Το να μάθετε πώς να ρυθμίζετε το δικό σας εικονικό περιβάλλον δοκιμής θα σας κάνει έναν πολύ, πολύ καλύτερο διαχειριστή συστημάτων και θα σας προετοιμάσει για εκείνη την ημέρα, όταν ένας πραγματικός δίσκος θα τα φτύσει και τα δεδομένα σας είναι στην φάση «μπρος γκρεμός και πίσω ρέμα». Τίποτα δεν θα σας δίνει μεγαλύτερη αυτοπεποίθηση και θα αφαιρεί το άγχος, όπως η μπόλικη εμπειρία που αποκτήσατε κάνοντας επανάληψη ξανά και ξανά την προσομοίωση που κάναμε. Δοκιμάστε και τις άλλες περιπτώσεις σκόπιμης δημιουργίας προβλημάτων και προσπαθήστε να το επιλύσετε.
Update 19/09/2024: Το άρθρο αυτό συνοδεύεται πλέον και από ένα απλό script που μπορείτε να κατεβάσετε από το GitHub. Ήταν μικρό στην αρχή και το χρησιμοποίησα για να τρέξω τα test και να ετοιμάσω το παρόν άρθρο. Αποφάσισα ότι μπορεί να φανεί χρήσιμο και σε άλλους οπότε δημοσίευσα τον κώδικά του:ZFS Mini Lab
Πριν φύγουμε, ας καθαρίσουμε λίγο διαγράφοντας τα πειράματά μας
1 | sudo zpool destroy axamparos |
Στη συνέχεια μπορούμε να αφαιρέσουμε τους ψεύτικους «δίσκους» που δημιουργήσαμε:
1234 | cd ~ /zfsnoob rm ssddiskos* cd rm -r ~ /zfsnoob |
Τέρμα όμως το μάθημα με ψεύτικους δίσκους, στο επόμενο θα γίνει σε πραγματικούς δίσκους…
Πηγή άρθρου: https://planet.ellak.gr/ , https://cerebrux.net/