Skip to main content

Hot Swap σκληρού δίσκου σε ZFS-Only σύστημα

1. Εισαγωγή - Τι θα δούμε σε αυτό το άρθρο

Καταρχάς, όλοι έχουμε βρεθεί στη δυσάρεστη θέση να θέλουμε να αλλάξουμε ένα σκληρό δίσκο σε ένα μηχάνημα, αλλά οι καταστάσεις να μας πιέζουν να μη σβήσει το μηχάνημα αυτό καθόλου!. Μπορεί ο σκληρός που θέλουμε να αλλάξουμε να είναι ελατωματικός, μπορεί να είναι μικρός σε χωρητικότητα. Όποιος κι αν είναι ο λόγος, ο ήδη υπάρχων σκληρός δίσκος πρέπει να βγει από τον υπολογιστή και να μπει στη θέση του ένας άλλος. Το πρόβλημα είναι να μπορέσουμε να κάνουμε τη δουλειά μας, χωρίς να σβήσει ο υπολογιστής και χωρίς να γίνει restart! Άραγε θα μπορούσε να συμβεί κάτι τέτοιο σε ένα μηχάνημα με FreeBSD το οποίο βασίζεται εξ ολοκλήρου σε σύστημα αρχείων ZFS; Το παρόν άρθρο θα λύσει την απορία.

Σημείωση: Ο γράφων, οι κάτοχοι του ιστότοπου FreeBSD World και η Ελληνική Κοινότητα FreeBSD, δεν φέρουν καμιά ευθύνη για περιπτώσεις δημιουργίας βλάβης, καταστροφής σκληρών δίσκων και κυκλωμάτων υπολογιστών, απώλειας δεδομένων ή οιασδήποτε άλλης αρνητικής συνέπειας εξ αίτείας του παρόντος άρθρου. Όλα όσα αναφέρονται έχουν ελεγχθεί και εκπονηθεί σε μηχάνημα από ειδικό προσωπικό!

Τι θα δούμε σε αυτό το άρθρο:


2. Προϋποθέσεις για την αλλαγή του σκληρού δίσκου

Μια τέτοια αλλαγή σε έναν υπολογιστή δε μπορεί να γίνει έτσι απλά. Πρέπει να υπάρχουν ορισμένες προϋποθέσεις. Για την ακρίβεια μπορεί μια μητρική ενός υπολογιστή να διαθέτει, για παράδειγμα, 4 SATA συνδέσεις για σκληρούς δίσκους, αλλά αυτές στην ουσία προέρχονται από δύο SATA Controllers. Ο κάθε Controller βγάζει μια σύνδεση master και μια slave. Θυμάστε τον παλιό καλό καιρό των IDE σκληρών, όπου σε μια καλωδιοταινία μπορούσαν να συνδεθούν δύο συσκευές, αρκεί η μια να ήταν ρυθμισμένη σαν master και η άλλη σαν slave; Το ίδιο ακριβώς συμβαίνει και στην περίπτωση των SATA, μόνο που αυτή τη φορά η ρύθμιση γίνεται από τα κυκλώματα της μητρικής και όχι στα devices που συνδέονται εκεί επάνω.

Άλλο ένα πράγμα που θα πρέπει να γνωρίζουμε είναι πως οι SATA Controllers, από τη στιγμή που σχεδιάστηκαν τα SATA Specifications, υποστηρίζουν τη λειτουργία Hot-Swap. Όταν ένας controller μπει σε αυτή την κατάσταση, σταματάει να λειτουργεί και να ανταλλάσσει δεδομένα με τον επεξεργαστή και τους σκληρούς δίσκους. Φαίνεται, δηλαδή, σαν απενεργοποιημένος. Αυτή είναι η λειτουργία που θα μας επιτρέψει να μπορέσουμε να αλλάξουμε ένα σκληρό δίσκο, ενώ το μηχάνημα στο οποίο είναι συνδεδεμένος λειτουργεί κανονικά. Προσοχή χρειάζεται στο ότι τα specifications δίνουν τη λειτουργία στον controller και όχι στο κάθε device ξεχωριστά. Αυτό σημαίνει πως όταν γίνει απενεργοποίηση ενός controller, αυτόματα σταματάνε να λειτουργούν δύο συσκευές!

Τρίτο tip είναι πως για να έχουμε τη μέγιστη απόδοση ενός mirroring μεταξύ δύο σκληρών δίσκων θα πρέπει αυτοί οι δύο να ανήκουν σε δύο ξεχωριστούς Controllers. Αυτό γίνεται διότι μια συσκευή που είναι στον master δίαυλο και μια που είναι στον slave δίαυλο του ίδιου controller, δε μπορούν να επικοινωνήσουν με αυτόν ταυτόχρονα.

Τέλος, το mirroring μεταξύ δύο σκληρών μας δίνει τη δυνατότητα να μπορέσουμε να σταματήσουμε τον ένα από αυτούς και το σύστημά μας να συνεχίζει να έχει πρόσβαση στα δεδομένα μας σα να μη συμβαίνει τίποτα. Άρα, αν οι δύο σκληροί δίσκοι του mirroring βρίσκονται σε διαφορετικούς controllers, τότε άνετα μπορούμε να σταματήσουμε τον ένα από τους δύο και να κάνουμε όποια αλλαγή θέλουμε. Το σύστημά μας θα λειτουργεί κανονικά περιέχοντας όλα τα δεδομένα σα να μην συμβαίνει τίποτα. Αν, τώρα, οι δύο σκληροί δίσκοι του mirroring είναι συνδεμένοι στον ίδιο controller, σταματώντας τη λειτουργία του controller ο υπολογιστής δε θα έχει πρόσβαση στα δεδομένα. Σε αυτή την περίπτωση, αν τα mirrored δεδομένα είναι απλά δεδομένα που δεν υπάρχει πρόβλημα να "εξαφανιστούν" για λίγο, τότε όλα βαίνουν καλώς· μπορούμε να κάνουμε την αλλαγή του σκληρού δίσκου. Αν όμως εκεί περιέχονται δεδομένα του λειτουργικού μας συστήματος, τότε τα πράγματα είναι δύσκολα, γιατί αν σταματήσουμε τη λειτουργία του SATA Controller, το σύστημα θα σταματήσει να έχει λειτουργικό και έτσι δε θα μπορεί να λειτουργήσει.


3. Υπάρχουσα δομή συστήματος αρχείων

Πριν ξεκινήσουμε με τη διαδικασία της αντικατάστασης του σκληρού δίσκου θα πρέπει να γνωρίσουμε το σύστημά μας. Να υπενθυμίσουμε ότι το σύστημα αυτό είναι το σύστημα στο οποίο έγινε η αλλαγή. Με τη βοήθειά του είναι που θα εξηγήσουμε όλη τη διαδικασία. Δεν είναι ανάγκη ένα σύστημα να έχει αυτή τη μορφή για να μπορέσει να γίνει η εν λόγω αλλαγή.

Το υπάρχον σύστημα έχει τη μορφή που φαίνεται στο ακόλουθο σχήμα

System's diagram before hard disk hot swap

Στο παρόν σύστημα βλέπουμε ότι υπάρχουν δύο SATA Controllers με τις ονομασίες ata0 και ata1. Στον ata0 βλέπουμε πως υπάρχει το λειτουργικό του υπολογιστή το οποίο δεν είναι σε mirror. Έτσι, αν δοθεί εντολή να μπει σε hot-swap αυτός ο controller, το μηχάνημα θα μείνει χωρίς λειτουρικό! Άρα αυτός ο controller δε μπορεί να σταματήσει τη λειτουργία του για κανένα λόγο στην παρούσα φάση.

Ο controller ata1 δεν έχει κάτι που να μας φοβίζει να τον σταματήσουμε. Έχει ένα σκληρό δίσκο ο οποίος λειτουργεί σε mirror με τον ad0, και το DVD Recorder του συστήματος. Κανένα από τα δύο δεν είναι απολύτως απαραίτητο για τη λειτουργία του υπολογιστή, οπότε ο καινούργιος σκληρός δίσκος θα μπορούσε να μπει στη θέση του ad2.


4. Τελική δομή συστήματος αρχείων

Αφού είδαμε ποιον controller θα σταματήσουμε και ποιον σκληρό δίσκο θα αντικαταστήσουμε, θα πρέπει να δούμε τη μορφή του συστήματος αρχείων που θα φτιάξουμε μετά την αλλαγή. Η μορφή αυτή φαίνεται στο παρακάτω σχήμα.

New FileSystem structure

Στο σχήμα φαίνονται και οι αλλαγές που θα κάνουμε στο filesystem. Τη θέση του σκληρού δίσκου ad2 χωρητικότητας 500GB θα πάρει ένας καινούργιος σκληρός δίσκος χωρητικότητας 1.5TB, ίδιος με τον ad0. Αυτός θα χωριστεί σε κατατμήσεις όπως και ο ad0 και όλες οι μεγάλες κατατμήσεις θα γίνουν mirrored. Η ονομασία του, φυσικά, θα παραμείνει ad2.

Η κατάτμηση ad2p2 θα παίξει το ρόλο ενός ακόμα swap χώρου, ενώ η κατάτμηση ad2p1 θα πάρει τα δεδομένα boot. Γιατί να κάνουμε κάτι τέτοιο αφού η εκκίνηση του υπολογιστή γίνεται από τον ad0; Πολύ απλά, σε περίπτωση σφάλματος λειτουργίας του σκληρού δίσκου ad0 θα μπορούμε να έχουμε την εναλλακτική λύση της εκκίνησης από τον ad2! Επομένως, αυτό που κάνουμε είναι να προετοιμαστούμε για κάποια μελλοντική αστοχία υλικού.


5. Προετοιμασία υποσυστήματος ZFS

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

eliaschr@pluto:~ > su
Password:
pluto#

Ας δούμε τις διαθέσιμες ZFS pools του συστήματος μας και την κατάστασή τους:

pluto# zpool status
  pool: Common1
 state: ONLINE
 scrub: none requested
config:

	NAME             STATE     READ WRITE CKSUM
	Common1          ONLINE       0     0     0
	  mirror         ONLINE       0     0     0
	    gpt/disk1    ONLINE       0     0     0
	    gpt/Mirror1  ONLINE       0     0     0

errors: No known data errors

  pool: Common2
 state: ONLINE
 scrub: none requested
config:

	NAME             STATE     READ WRITE CKSUM
	Common2          ONLINE       0     0     0
	  mirror         ONLINE       0     0     0
	    gpt/disk2    ONLINE       0     0     0
	    gpt/Mirror2  ONLINE       0     0     0

errors: No known data errors

  pool: zroot
 state: ONLINE
 scrub: none requested
config:

	NAME         STATE     READ WRITE CKSUM
	zroot        ONLINE       0     0     0
	  gpt/disk0  ONLINE       0     0     0

errors: No known data errors
pluto#

Ώρα να σταματήσουμε την παρακολούθηση των σκληρών δίσκων από το ZFS Subsystem:

pluto# zpool offline Common1 gpt/Mirror1
pluto# zpool offline Common2 gpt/Mirror2
pluto# zpool status
  pool: Common1
 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
	Common1          DEGRADED     0     0     0
	  mirror         DEGRADED     0     0     0
	    gpt/disk1    ONLINE       0     0     0
	    gpt/Mirror1  OFFLINE      0     0     0

errors: No known data errors

  pool: Common2
 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
	Common2          DEGRADED     0     0     0
	  mirror         DEGRADED     0     0     0
	    gpt/disk2    ONLINE       0     0     0
	    gpt/Mirror2  OFFLINE      0     0     0

errors: No known data errors

  pool: zroot
 state: ONLINE
 scrub: none requested
config:

	NAME         STATE     READ WRITE CKSUM
	zroot        ONLINE       0     0     0
	  gpt/disk0  ONLINE       0     0     0

errors: No known data errors
pluto#

Βλέπουμε ότι το ZFS σταμάτησε να παρακολουθεί τους δύο σκληρούς του mirroring και μας αναφέρει ότι τα mirrors λειτουργούν σε DEGRADED mode (υποβιβασμένη κατάσταση). Μας λέει ότι το σύστημα δεν έχει πρόβλημα να βρει τα δεδομένα διότι υπάρχουν υγειή αντίγραφα. Επιπλέον, μας αναφέρει ότι για να έρθει στο σύστημα σε σωστή κατάσταση θα πρέπει να κάνουμε κάποιο device on-line ή replace. Για την ακρίβεια μας δίνει τις εντολές που θα πρέπει να εκτελέσουμε.

Ο λόγος που σταματήσαμε και τα δύο mirrored τμήματα (gpt/Mirror1 και gpt/Mirror2) είναι ότι και τα δύο θα αντικατασταθούν με partitions του καινούργιου σκληρού δίσκου.

Ας δούμε τους SATA Controllers που περιέχει το μηχάνημα:

pluto# atacontrol list
ATA channel 0:
    Master:  ad0  SATA revision 2.x
    Slave:   ad1  SATA revision 2.x
ATA channel 1:
    Master:  ad2  SATA revision 2.x
    Slave:  acd0  SATA revision 1.x
pluto#

Εδώ φαίνεται ξεκάθαρα ότι ο σκληρός ad2 είναι αυτός που θα σταματήσει να λειτουργεί όταν βάλουμε τον controller ata1 σε κατάσταση hot-swap. Ας δώσουμε την κατάλληλη εντολή για να σταματήσει ο controller να λειτουργεί και ας δούμε μετά την κατάσταση του συστήματος:

pluto# atacontrol detach ata1
pluto# atacontrol list
ATA channel 0:
    Master:  ad0  SATA revision 2.x
    Slave:   ad1  SATA revision 2.x
ATA channel 1:
    Master:      no device present
    Slave:       no device present
pluto#

Είναι ξεκάθαρο πως ο δεύτερος controller έχει σταματήσει να οδηγεί τις συσκευές που είναι συνδεμένες επάνω του...


6. Ας παίξουμε λίγο με το hardware

Ήρθε η ώρα να ανοίξουμε το κουτί του υπολογιστή. Εδώ χρειάζεται απόλυτη προσοχή σε ό,τι κάνουμε διότι το παραμικρό λάθος μπορεί να οδηγήσει ακόμα και σε απώλεια ολόκληρου του... υπολογιστή μας! Δεν είναι τόσο δύσκολο να αλλάξουμε το σκληρό μας δίσκο, αλλά απαιτείται απόλυτη προσοχή!

Αρχικά ξεβιδώνουμε το κουτί του υπολογιστή και φτάνουμε στο σημείο στο οποίο βρίσκεται ο σκληρός δίσκος ad2. Από τη λίστα που μας έδωσε η εντολή atacontrol μπορούμε να τον αναγνωρίσουμε εύκολα. Αποσυνδέουμε ΠΡΩΤΑ το συνδετήρα των δεδομένων SATA (ο μικρότερος από τους δύο· συνδέεται με τη μητρική πλακέτα) και στη συνέχεια το συνδετήρα της τροφοδοσίας (ο μεγαλύτερος από τους δύο· είναι το καλώδιο που έρχεται από το τροφοδοτικό, στις περισσότερες των περιπτώσεων). Προσοχή χρειάζεται να μην ακουμπήσουν οι επαφές των δύο συνδετήρων σε κάποιο κομμάτι του κουτιού ή της μητρικής του υπολογιστή γιατί θα δημιουργηθεί πρόβλημα στα κυκλώματα. Καλό είναι, όσο εργαζόμαστε επάνω στο σύστημα, να καλύψουμε τις επαφές των συνδετήρων των καλωδίων με μονωτική ταινία, έτσι ώστε να έχουμε το κεφάλι μας ήσυχο...

Τώρα μπορούμε να ξεβιδώσουμε το σκληρό δίσκο. Εδώ η προσοχή μας βρίσκεται στο να μην πέσουν οι βίδες στα κυκλώματα του συστήματος, γιατί για άλλη μια φορά μπορούμε να προκαλέσουμε βραχυκύκλωμα με αποτέλεσμα την ανεπανόρθωτη βλάβη. Το ίδιο συμβαίνει και κατά την απομάκρυνση του σκληρού δίσκου από τα φατνία. Ο σκληρός δίσκος είναι κι αυτός μεταλλικός και είναι αρκετά εύκολο να ακουμπήσει σε κάποιο σημείο της μητρικής, προκαλώντας ανεπιθύμητες παρενέργειες!

Αφού τοποθετήσουμε τον καινούργιο σκληρό δίσκο στα φατνία και τον βιδώσουμε (δεν χρειάζεται να επαναλάβουμε το πόσο σημαντικό είναι να γίνει πολύ προσεκτικά αυτή η δουλειά, έτσι;), συνδέουμε ΠΡΩΤΑ το συνδετήρα της τροφοδοσίας και μετά το συνδετήρα των δεδομένων SATA! Αφού βεβαιωθούμε ότι ο υπολογιστής λειτουργεί κανονικά, μπορούμε να κλείσουμε το κουτί του.


7. Προετοιμασία καινούργιου σκληρού δίσκου

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

pluto# atacontrol attach ata1
pluto# atacontrol list
ATA channel 0:
    Master:  ad0  SATA revision 2.x
    Slave:   ad1  SATA revision 2.x
ATA channel 1:
    Master:  ad2  SATA revision 2.x
    Slave:  acd0  SATA revision 1.x
pluto#

Βλέπουμε ότι, πλέον, ο υπολογιστής έχει αναγνωρίσει τον καινούργιο σκληρό δίσκο σαν ad2.

Ώρα να κάνουμε το partitioning. Επειδή ο σκληρός θα είναι mirrored με αυτόν που ήδη υπάρχει σαν ad0, θα πρέπει να φτιάξουμε τα partitions ίδια με του τελευταίου. Για να δούμε τις κατατμήσεις του ad0 δίνουμε την ακόλουθη εντολή:

pluto# gpart show ad0
=>        34  2930277101  ad0  GPT  (1.4T)
          34         512    1  freebsd-boot  (256K)
         546     8388608    2  freebsd-swap  (4.0G)
     8389154   968341712    3  freebsd-zfs  (462G)
   976730866   976773168    4  freebsd-zfs  (466G)
  1953504034   976773101    5  freebsd-zfs  (466G)
pluto#

Εδώ φαίνεται ξεκάθαρα ότι ο σκληρός δίσκος έχει μια κατάτμηση boot μεγέθους 256KBytes, μια κατάτμηση swap μεγέθους 4GBytes και άλλες τρεις. Ας τα συνοψίσουμε στον ακόλουθο πίνακα:

Type Label Start Length
freebsd-boot - 34 512
freebsd-swap swap0 546 8388608
freebsd-zfs disk0 8389154 968341712
freebsd-zfs disk1 976730866 976773168
freebsd-zfs disk2 1953504034 976773101

Την ίδια δομή θα πρέπει να κατασκευάσουμε και στον ad2. Ας ξεκινήσουμε από τα εύκολα. Πρώτα θα σβήσουμε οποιοδήποτε σχήμα κατατμήσεων περιέχει ο σκληρός δίσκος και στη συνέχεια θα κατασκευάσουμε τις δύο πρώτες κατατμήσεις (boot και swap):

pluto# gpart destroy ad2 # may fail - It destroys any previous partitioning scheme
pluto# gpart create -s gpt ad2 # Create gpt scheme on ad2
pluto# gpart add -s 256K -t freebsd-boot ad2 # Create the boot partition
pluto# gpart add -s 4G -t freebsd-swap -l swap1 ad2 # Swap partition is ready
pluto# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad2 # write bootcode etc.
pluto#

Τώρα θα κατασκευάσουμε τις κατατμήσεις που θα γίνουν mirrored με αυτές του ad0:

pluto# gpart add -s 968341712 -t freebsd-zfs -l backup0 ad2
pluto# gpart add -s 976773168 -t freebsd-zfs -l backup1 ad2
pluto# gpart add -t freebsd-zfs -l backup2 ad2
pluto#

Ο σκληρός έχει πλέον κατατμηθεί και είναι έτοιμος προς χρήση!


8. Ρυθμίσεις του συστήματος αρχείων

Ήρθε η ώρα να ενσωματώσουμε τον σκληρό δίσκο στο mirrored σύστημα που θέλαμε από την αρχή να φτιάξουμε. Η διαδικασία είναι και αυτή απλή· το ZFS Subsystem θα τα αναλάβει μόνο του, αρκεί να του δώσουμε τις κατάλληλες εντολές!

pluto# zpool replace Common1 gpt/Mirror1 gpt/backup1
pluto# zpool replace Common2 gpt/Mirror2 gpt/backup2
pluto#

Ας δούμε τι κάνει το ZFS για εμάς:

pluto# zpool status
  pool: Common1
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
	continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
 scrub: resilver in progress for 0h4m, 0,62% done, 12h27m to go
config:

	NAME               STATE     READ WRITE CKSUM
	Common1            DEGRADED     0     0     0
	  mirror           DEGRADED     0     0     0
	    gpt/disk1      ONLINE       0     0     0
	    replacing      DEGRADED     0     0     0
	      gpt/Mirror1  OFFLINE      0     0     0
	      gpt/backup1  ONLINE       0     0     0  2,45G resilvered

errors: No known data errors

  pool: Common2
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
	continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
 scrub: resilver in progress for 0h9m, 2,20% done, 6h52m to go
config:

	NAME               STATE     READ WRITE CKSUM
	Common2            DEGRADED     0     0     0
	  mirror           DEGRADED     0     0     0
	    gpt/disk2      ONLINE       0     0     0
	    replacing      DEGRADED     0     0     0
	      gpt/Mirror2  UNAVAIL      0     0     0  cannot open
	      gpt/backup2  ONLINE       0     0     0  4,62G resilvered

errors: No known data errors

  pool: zroot
 state: ONLINE
 scrub: none requested
config:

	NAME         STATE     READ WRITE CKSUM
	zroot        ONLINE       0     0     0
	  gpt/disk0  ONLINE       0     0     0

errors: No known data errors
pluto#

Εδώ φαίνεται ξεκάθαρα ότι οι δύο καινούργιες κατατμήσεις έχουν ξεκινήσει να ενσωματώνονται στις αντίστοιχες Pools του συστήματος ZFS. Φυσικά, ανάλογος με τον όγκο των δεδομένων που έχουν να μεταφερθούν από το ένα device στο mirrored είναι και ο χρόνος που θα κάνει για να τελειώσει το resilvering και να γίνουν πάλι οι Pools μας ONLINE από DEGRADED


9. Μετατροπή του root pool σε mirrored

Το τελευταίο βήμα σε αυτό το how-to είναι να μετατρέψουμε την pool zroot σε mirrored. Αυτό είναι καλό να γίνει για να έχουμε ένα backup του λειτουργικού μας σε περίπτωση σφάλματος, με τέτοιο τρόπο που να μπορεί να εκκινήσει ο υπολογιστής μας και χωρίς τον σκληρό δίσκο ad0. Η διαδικασία εκτελείται από μια απλή εντολή στο σύστημα του ZFS:

pluto# zpool attach zroot gpt/disk0 gpt/backup0
pluto# zpool status
  pool: Common1
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
	continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
 scrub: resilver in progress for 0h4m, 0,62% done, 12h27m to go
config:

	NAME               STATE     READ WRITE CKSUM
	Common1            DEGRADED     0     0     0
	  mirror           DEGRADED     0     0     0
	    gpt/disk1      ONLINE       0     0     0
	    replacing      DEGRADED     0     0     0
	      gpt/Mirror1  OFFLINE      0     0     0
	      gpt/backup1  ONLINE       0     0     0  2,45G resilvered

errors: No known data errors

  pool: Common2
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
	continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
 scrub: resilver in progress for 0h9m, 2,20% done, 6h52m to go
config:

	NAME               STATE     READ WRITE CKSUM
	Common2            DEGRADED     0     0     0
	  mirror           DEGRADED     0     0     0
	    gpt/disk2      ONLINE       0     0     0
	    replacing      DEGRADED     0     0     0
	      gpt/Mirror2  UNAVAIL      0     0     0  cannot open
	      gpt/backup2  ONLINE       0     0     0  4,62G resilvered

errors: No known data errors

  pool: zroot
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
	continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
 scrub: resilver in progress for 0h39m, 1,66% done, 39h24m to go
config:

	NAME             STATE     READ WRITE CKSUM
	zroot            ONLINE       0     0     0
	  mirror         ONLINE       0     0     0
	    gpt/disk0    ONLINE       0     0     0
	    gpt/backup0  ONLINE       0     0     0  1,97G resilvered

errors: No known data errors
pluto#

Εδώ φαίνεται ότι ξεκίνησε και το resilvering των δεδομένων για το mirror που μόλις δημιουργήσαμε. Η διαδικασία θα διαρκέσει αρκετές ώρες. Μπορούμε να παρακολουθούμε την εξέλιξη της μεταφοράς των δεδομένων δίνοντας την τελευταία εντολή. Όταν όλα τελειώσουν θα δούμε κάτι σαν το

pluto# zpool status
  pool: Common1
 state: ONLINE
 scrub: resilver completed after 11h32m with 0 errors on Wed Feb 23 11:11:51 2011
config:

	NAME             STATE     READ WRITE CKSUM
	Common1          ONLINE       0     0     0
	  mirror         ONLINE       0     0     0
	    gpt/disk1    ONLINE       0     0     0
	    gpt/backup1  ONLINE       0     0     0  396G resilvered

errors: No known data errors

  pool: Common2
 state: ONLINE
 scrub: resilver completed after 11h24m with 0 errors on Wed Feb 23 10:59:23 2011
config:

	NAME             STATE     READ WRITE CKSUM
	Common2          ONLINE       0     0     0
	  mirror         ONLINE       0     0     0
	    gpt/disk2    ONLINE       0     0     0
	    gpt/backup2  ONLINE       0     0     0  210G resilvered

errors: No known data errors

  pool: zroot
 state: ONLINE
 scrub: resilver completed after 5h46m with 0 errors on Wed Feb 23 19:49:41 2011
config:

	NAME             STATE     READ WRITE CKSUM
	zroot            ONLINE       0     0     0
	  mirror         ONLINE       0     0     0
	    gpt/disk0    ONLINE       0     0     0
	    gpt/backup0  ONLINE       0     0     0  119G resilvered

errors: No known data errors
pluto#


10. Αποτελέσματα

Μπορεί η ιδέα της αλλαγής ενός σκληρού δίσκου την ώρα που ένας υπολογιστής λειτουργεί κανονικά, να ακούγεται λίγο ριψοκίνδυνη, αλλά μπορεί να γίνει. Η τεχνολογία SATA και το σύστημα αρχείων ZFS μας δίνουν ό,τι ακριβώς χρειαζόμαστε για να μπορέσει να γίνει πραματικότητα μια τέτοια παρέμβαση. Η τεχνολογία των υπολογιστών (και όχι μόνο) συνεχώς εξελίσεται και τα συστήματα τα οποία λαμβάνουν χώρα στην παραγωγή έχουν το μειονέκτημα ότι πρέπει να λειτουργούν 24 ώρες το 24ωρο, 7 ημέρες την εβδομάδα! Σε αυτά τα συστήματα δεν υπάρχει η εναλλακτική να σβήσουν για συντήρηση. Ότι μπορεί να γίνει την ώρα που λειτουργούν, πρέπει να γίνει χωρίς να σταματήσουν να εξυπηρετούν το σκοπό για τον οποίο είναι στημένα.

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

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

Ηλίας Χρυσοχέρης