The English version from this article can be found there: (TBD)
Το άρθρο αυτό αποτελεί μέρος της σειράς Raspberry Pi Server, υποστηριζόμενο από την επίσημη αντιπροσωπία του Raspberry Pi στην Ελλάδα, το nettop.gr το οποίο με προμήθευσε με το Raspberry Pi 5 ώστε να δημιουργήσω περισσότερο περιεχόμενο για τις δυνατότητες και τα Project που μπορούν να τρέξουν self-hosted πάνω στο Raspberry Pi στα Ελληνικά. Ευχαριστώ πάρα πολύ το nettop.gr για την υποστήριξη!!!
Εύκολο Backup/Restore/Clone στο Raspberry Pi σας, byte προς byte
Ένας από τους μεγαλύτερους φόβους που επικρατεί όταν συντηρούμε έναν server σε κάποιο Raspberry Pi, ιδιαίτερα όταν χρησιμοποιούμε κάποια κάρτας SD, είναι το γεγονός του σχετικά χαμηλού προσδόκιμου ζωής των καρτών SD, αλλά και την ευπάθεια τους στο να “χτυπάνε” συγκριτικά ευκολότερα από τους μηχανικούς δίσκους ή SSD και να γίνονται corrupted.
Mε αυτό τον τρόπο, μπορεί ο τέλεια setuρισμένος server μας, να καταλήξει μη λειτουργικός και ενδεχομένως να πρέπει να τα στήνουμε και πάλι από την αρχή.
Επιπλέον, αυτή η λύση μπορεί να μας βοηθήσει να μεταβούμε σε έναν μεγαλύτερο αποθηκευτικό χώρο.
Συνεπώς, τα πολλαπλά Backups σε οποιαδήποτε ηλεκτρονική συσκευή κρίνονται αναγκαία
Λύσεις σχετικά με το backup υπάρχουν δεκάδες, από το rsync και το επίσημο εργαλείο SD Card Cloner που υπάρχει στα Accessories του Raspberry Pi OS, μέχρι και enterprise solutions εργαλεία.
Ωστόσο, προσωπικά ήθελα να εργαλείο οπού:
- Θα έφτιαχνε έναν τέλειο κλώνο της SD Card μου, byte προς byte, με τα partition στην ακριβώς την ίδια διάταξη, ως ένα εννιαίο αρχείο img, από τον υπολογιστή μου (χωρίς σύνδεση στο Raspberry Pi)
- Θα μείωνε σημαντικά το ρίσκο κάτι να ήταν αδύνατο να γίνει restore,
- Θα είχα πάντα ένα fixed size img αρχείο ως backup το οποίο θα έπιανε πάντα τον ίδιο χώρο ώστε να μπορούσα πιο εύκολα να κάνω management τα full disk backups μου,
- Να αποτελεί το κύριο backup του server μου ώστε να γίνει άμεσα λειτουργικός ως την απολύτως βασική υποδομή, ώστε μετά να κάνω με restore μόνο τα volumes του docker/podman οπού περιέχουν τα σημαντικά αρχεία των υπηρεσιών που τρέχουν στον server μου. Με αυτό το σύστημα, ο χρόνος για recover σε περίπτωση βλάβης και ανάγκης αποκατάστασης έχει δοκιμαστεί με τα BCP/DRP (πλάνα) οπού έχουν σχεδιαστεί προηγουμένως και είχα αποκατάσταση λειτουργίας σε λιγότερο από 15 λεπτά για αθροιστικά όλες τις υπηρεσίες που hostάρω (περισσότερα στους επόμενους οδηγούς).
Εδώ βλέπουμε παλιότερα img backups που κρατούνται στο αρχείο στο nextcloud, παρατηρούμε ότι είναι fixed size όλα τα αρχεία μιας και αντιγράφω πάντα την ίδια MicroSD (στα 59.5GB).
Δημιουργώντας το RaspberryPiDiskBackupClone.sh
Η διαδικασία που ακολουθώ είναι πάρα πολύ εύκολη, χρησιμοποιώντας το γνωστό εργαλείο dd.
Αφού πειραματίστηκα στην αρχή, τελικά δημιούργησα ένα scriptάκι που να πραγματοποιεί ακριβώς αυτή την δουλεία όσο το δυνατόν πιο αυτοματοποιημένα αλλά και με ένα βασικό UI, ώστε να μην χρειάζεται να θυμάμαι τίποτα!
Το script αυτό μπορεί να βρεθεί εδώ: random_unix_projects/RaspberryPiDiskBackupClone.sh at main · sv1sjp/random_unix_projects · GitHub
Το scriptάκι αυτό μπορεί να δουλέψει σε οποιοδήποτε Unix based σύστημα που έχει bash,dialog και dd. Ωστόσο μιας και το αρχείο που θα παραχθεί θα έχει μέγεθος ίσο με το μέγεθος του αποθηκευτικού χώρου που δημιουργείται το backup, για πολύ μεγάλους δίσκους, ενδεχομένως να μην θεωρείται βολικό.
Προσωπικά χρησιμοποιώ μία 64GB Micro SD κάρτα για το λειτουργικό και έχω δεύτερο μηχανικό δίσκο για τα υπόλοιπα αρχεία που είναι εκτός του βασικού συστήματος.
Φυσικά το scriptάκι δουλεύει και με USB sticks, HDD, SSD και NVMe δίσκους. Και οτιδήποτε άλλο ξέχασα σε συσκευή!!
Οδηγίες Χρήσης:
Εισαγωγή
Αρχικά, για να εκτελέσουμε το script (αφού φυσικά το κατεβάσουμε) δίνουμε:
sudo bash RaspberryPiDiskBackupClone.sh
Υπενθυμίζεται ότι μιας και σκαλίζουμε partitions και συσκευές, απαιτούνται δικαιώματα root. Επίσης, θα πρέπει να έχουμε κάνει unmount την συσκευή μας από το σύστημα (προσοχή: όχι Eject)
Δημιουργώντας Ένα Backup:
Επιλέγουμε την πρώτη επιλογή που δημιουργεί backup
Έπειτα, θα πρέπει να επιλέξουμε τον αποθηκευτικό χώρο οπού θέλουμε να δημιουργήσουμε το backup. Το εργαλείο θα μας εμφανίσει αυτόματα όλες τις διαθέσιμες συσκευές/partitions καθώς και τον συνολικό τους αποθηκευτικό χώρο.
(Στο παραδειγμά μας, γράφουμε /dev/sda1 οπού είναι η SD κάρτα μας):
Τώρα γράφουμε την τοποθεσία οπού θέλουμε να αποθηκευτεί το backup.
Δεν χρειάζεται να εισάγουμε όνομα αρχείου, αυτό θα γίνει αυτόματα βάση την ημερομηνία της ημέρας μας.
Και αφού πατήσουμε πάλι Okay, θα ξεκινήσει να δημιουργείται το backup.
Θα πάρει αρκετή ώρα αν η SD σας είναι αρκετά μεγάλης αποθηκευτικότητας, οπότε εξοπλιστείτε με αρκετή υπομονή.
Μόλις ολοκληρωθεί το backup, θα εμφανιστεί αυτό εδώ το μήνυμα και το script θα ολοκληρώσει την εκτέλεσή του.
Στον φάκελο που επιλέξαμε θα δούμε να δημιουργείται το img backup αρχείο με
όνομα την ημερομηνία της ημέρας για ευκολότερη αποθήκευση.
Συμπίεση/Αποσυμπίεση του img backup αρχείου
Αν θέλουμε να γλυτώσουμε αποθηκευτικό χώρο αν το αρχείο img που δημιουργήθηκε πρακτικά έχει πολύ ελεύθερο χώρο εντός του που καταλαμβάνεται χωρίς λόγο, μπορούμε να το συμπιέσουμε δίνοντας σε ένα τερματικό επιπλέον:
tar -czvf backup_image.tar.gz /path/to/your/image.img
Αντίστοιχα, μπορούμε να αποσυμπιέσουμε εκτελώντας:
tar -xzvf backup_image.tar.gz -C /destination/path
Κάνοντας Restore σε ένα Backup:
Kάνουμε unmount την συσκευή που θέλουμε να κάνουμε restore από το σύστημα (προσοχή: όχι Eject)
Έπειτα, εκτελούμε και πάλι το script ως root:
sudo bash RaspberryPiDiskBackupClone.sh
Επιλέγοντας αυτή την φορά, την επιλογή για Restore:
Δίνουμε ως είσοδο το full path του backup αρχείου μας (control+v για επικόληση):
Στην περίπτωση μου, όπως είδαμε και πριν π.χ.:
/var/home/sv1sjp/Backups/TuxServerBackup_January_14_2024.img
Και σε επόμενο βήμα:
Επιπλέον, θα πρέπει να επιλέξουμε τον αποθηκευτικό χώρο οπού θέλουμε να επαναφέρουμε το backup. Το εργαλείο θα μας εμφανίσει αυτόματα όλες τις διαθέσιμες συσκευές/partitions καθώς και τον συνολικό τους αποθηκευτικό χώρο.
(Στο παραδειγμά μας, γράφουμε /dev/sda1 οπού είναι η SD κάρτα μας):
Βεβαιωνόμαστε ότι επιλέξαμε την σωστή συσκευή και ότι δεν έχουμε δεδομένα στην συσκευή οπού θέλουμε να επαναφέρουμε από το img αρχείο διότι θα πραγματοποιηθεί format άρα απώλεια σε ο,τι δεδομένα ήταν αποθηκευμένα στη συσκευή αυτή!!
Και περιμένουμε να ολοκληρωθεί η επαναφορά. Μόλις μας εμφανιστεί το αντίστοιχο μήνυμα, είμαστε έτοιμοι να αφαιρέσουμε την SD από τον υπολογιστή μας και να την τοποθετήσουμε στο Raspberry Pi μας και να bootάρουμε!
Επαναφορά του Backup μέσω του επίσημου Raspberry Pi Imager Tool
Το img αρχείο που δημιουργήθηκε από την εκτέλεση του script, μπορεί πολύ εύκολα να γίνει restore με το Raspberry Pi Imager Tool από την επίσημη Raspberry Pi. Το εργαλείο αυτό είναι διαθέσιμο και στα Windows αλλά και μέσω snap,flatpak και παραδοσιακά μέσω των package managers (ενδεικτικά για Debian/Ubuntu):
sudo apt install rpi-imager
Μόλις τρέξουμε το Raspberry Pi Imager θα μας πάει σε αυτό το μενού:
Στο πρώτο μενού επιλέγουμε το Raspberry Pi οπού έχουμε:
Έπειτα στο Choose OS
, επιλέγουμε Use custom
.
Και επιλέγουμε το αρχείο backup μας:
Έπειτα, επιλέγουμε την SD στην οποία θέλουμε να γίνει το recover:
Στο Use OS customization
επιλέγουμε No
.
Βεβαιωνόμαστε ότι επιλέξαμε την σωστή συσκευή για να πραγματοποιηθεί το restore και επιλέγουμε Yes.
Περιμένουμε κάποια ώρα και είμαστε έτοιμοι με μία λειτουργική SD κάρτα, να την τοποθετήσουμε στο Raspberry Pi μας.
Επίλογος
Τα Backups έχουμε μία τάση να τα παραμερούμε, ωστόσο σε περίπτωση προβλήματος, θα μας σώσουν πολύ περισσότερες ώρες αποκατάστασης από τον χρόνο που θα χρειαστεί να πραγματοποιήσουμε τα backups. Και βεβαίως, πραγματοποιούμε πάντα τουλάχιστον 3 backups, τα οποία δεν πρέπει ποτέ να βρίσκονται συνδεδεμένα στο ίδιο σύστημα/δίκτυο, πάντα offline το backup και πάντα και ένα backup σε διαφορετική τοποθεσία από τα υπόλοιπα για να αποτρέψουμε απώλεια δεδομένων σε περίπτωση πλυμμήρας/φωτίας/κλοπής.
~~~~~~~~~~~~~~~~ You have been warned! ~~~~~~~~~~~~~~~~