Arch: Bleeding edge αλλά και rock solid stability γίνεται;

Αν είσαι και εσύ από αυτούς που θέλουν την φιλοσοφία του KISS στο λειτουργικό τους, το bleeding edge των προγραμμάτων αλλά και τον λίγο μαζοχισμό να τα στήνεις όλα μόνος σου και σε προβληματίζει η σταθερότητα του πράγματος, νομίζω πως ήρθες στο σωστό μέρος για διάβασμα!

Πριν από κανέναν χρόνο ούτε που περνούσε από την σκέψη μου να βάλω σε daily driver PC την διανομή του :arch: Linux, πόσο μάλλον σε ένα PC που θα χρησιμοποιούσα κάθε μέρα στην δουλειά. Παρ’ όλα αυτά τρωγόμουν… Τότε γνώρισα τον @JohnGavr και με έπεισε να κάνω το βήμα! Στην αρχή μόνο στο laptop μετά στον σταθερό και τέλος και στο PC της δουλειάς!

Ναι καλά όλα αυτά αλλά με την σταθερότητα;;; Αν αύριο ένα update διαλύσει άλλα πράγματα;;; Θα πρέπει να χάσω 2-3 εργατοώρες για να επαναφέρω το σύστημά μου σε λειτουργική κατάσταση;

Κάπου εκεί έρχονται να κουμπώσουν άλλα 2 πολύ ωραία πραγματάκια. Ένα διαφορετικό file-system από το συνηθισμένο ext4 και κάποιες ιδιότητες του package manager των :arch: (του pacman). Τα ονόματά τους:

  1. Btrfs
  2. pacman hooks

To file-system του btrfs είναι ένα πολλά υποσχόμενο file-system, και κατ εμέ όχι άδικα μιας και προσφέρει μια πληθώρα επιλογών που σου κάνουν την ζωή πιο εύκολη! Μια από αυτές είναι η δυνατότητα του snapshot. Φτιάχνεις όσα sub-volumes θέλεις και μετά μπορείς να κρατάς “εκδόσεις” αυτών όποτε θέλεις αλλά και να γυρνάς πίσω σε αυτές τις εκδόσεις όποτε θέλεις!
Πάμε να δώσουμε ένα παράδειγμα.

Συνήθως κάποιο πιο έμπειροι χρήστες του Linux επιλέγουν να κάνουν την εγκατάστασή τους σε διαφορετικά partitions. Φτιάχνουν ένα για το λειτουργικό και το προσαρτούν στο path /, ένα για το home και το προσαρτούν στο /home και τέλος ένα για το boot που πάει στο /boot. Εννοείται πως υπάρχουν και άλλοι δεκάδες τρόποι να στήσεις το σύστημά σου αλλά αναφέρω έναν ενδεικτικό που είναι και από τους πιο συνήθεις.

Το Btrfs τώρα, φτιάχνει το file-system σε ένα partition που θα του ορίσεις και μετά φτιάχνεις όσα sub-volumes θέλεις μέσα τα οποία είναι “φάκελοι”. Μετά προσαρτάς αυτούς τους “φακέλους” στα αντίστοιχα σημεία που θέλεις.

Στην δική μου εγκατάσταση έχω κάνει τα εξής sub-volumes:

  • @
  • @home
  • @var
  • @snapshots
    (Το σύμβολο @ χρησιμοποιείται για να καταλαβαίνει εύκολα ο χρήστης ότι πρόκειται για sub-volumes και όχι συνηθισμένα directories)

Και οι προσαρτήσεις πάνε κάπως έτσι:

  • @/
  • @home/home
  • @var/var
  • @snapshots/.snapshots

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

Έφτιαξα λοιπόν ένα hook στην διαδρομή /etc/pacman.d/hooks/btrfsautosnap.hook. Το περιεχόμενο του αρχείου:

[Trigger]
Type = Package
Operation = Upgrade
Target = *

[Action]
Description = Auto snapshots before upgrading
When = PreTransaction
Exec = /root/btrfs_upd_snapshots.sh

Τι κάνει λοιπόν αυτό; Κάθε φορά που πάει να ενημερωθεί κάποιο πακέτο, πριν γίνει αυτό PreTransaction, παίρνει ένα snapshot όλων των sub-volumes που με ενδιαφέρει. Αυτό το πετυχαίνει καλώντας ένα script που βρίσκεται στο /root/ btrfs_upd_snapshots.sh

Το περιεχόμενο αυτού του script:

#!/bin/bash

mount /mnt/bsysroot
cd /mnt/bsysroot
btrfs subvolume snapshot @              @snapshots/@_snaps/@_$(date +'%Y%m%d-%H:%M')
btrfs subvolume snapshot @home          @snapshots/@home_snaps/@home_$(date +'%Y%m%d-%H:%M')
btrfs subvolume snapshot @var           @snapshots/@var_snaps/@var_$(date +'%Y%m%d-%H:%M')
btrfs subvolume snapshot @var_pacman    @snapshots/@var_pacman_snaps/@var_pacman_$(date +'%Y%m%d-%H:%M')
cd /mnt
umount -R /mnt/bsysroot

Θα μου πείτε: Μα καλά για όλα τα updates κάνεις πρώτα snapshot?

Ναι στην δουλειά που δεν θέλω να χάσω ούτε δευτερόλεπτο από την οποιαδήποτε σύμπτωση μπορεί να συμβεί, κρατάω πάντα snapshot, ακόμα και αν είναι να αναβαθμίσω τον firefox (πρακτικά φουλ ακίνδυνο πακέτο για αναβάθμιση) και αν δω ότι όλα βαίνουν καλώς, το πετάω για να μην πιάνει χώρο. Στο σπίτι προς το παρόν το έχω με την ίδια λογική αλλά θα μπορούσε να γίνει για πιο επικίνδυνα πακέτα όπως πχ βλέπε nvidia.

Κάπως έτσι έχω τα εξής κάτω από το /.snapshots

/.snapshots
├── @home_snaps
│   ├── @home_20210924
│   ├── @home_20211021
│   ├── @home_20211101-07:31
│   ├── @home_20211101-13:17
│   ├── @home_20211102-07:04
│   └── @home_20211102-09:38
├── @_snaps
│   ├── @_20210928
│   ├── @_20211021
│   ├── @_20211101-07:31
│   ├── @_20211101-13:17
│   ├── @_20211102-07:04
│   ├── @_20211102-09:38
│   └── @_initial_intallation_20210923
├── @var_pacman_snaps
│   ├── @var_pacman_20211021
│   ├── @var_pacman_20211101-07:31
│   ├── @var_pacman_20211101-13:17
│   ├── @var_pacman_20211102-07:04
│   └── @var_pacman_20211102-09:38
└── @var_snaps
    ├── @var_20211021
    ├── @var_20211101-07:31
    ├── @var_20211101-13:17
    ├── @var_20211102-07:04
    └── @var_20211102-09:38

Τέλος snapshot μπορώ να κρατήσω ΟΠΟΤΕ θέλω και να δοκιμάσω ΟΤΙ θέλω και να επαναφέρω μετά το μηχάνημά μου στην πρότερη κατάσταση σαν να μην έχει γίνει τίποτα! Θεωρητικά θα μπορούσα να τρέξω ακόμα και rm -rf / και μετά να bootάρω από ένα live usb και να επαναφέρω τα sub-volumes.

(Για να σε προλάβω! Όχι δεν διαγραφεί το /.snapshots με την παραπάνω εντολή γιατί είναι mounted ως read only)

Η παρούσα δημοσίευση δεν αποτελεί οδηγό για το πως μπορεί να επιτευχθούν τα παραπάνω παρ όλο που μπλέκεται σε τεχνικές λεπτομέρειες. Είναι για να “κοινωνήσει” την ιδέα των ανωτέρο εργαλείων σε κάποιους που πιθανότατα είναι πιο σκεπτικοί με την προοπτική του “σπασίματος” του συστήματός τους. Επίσης το ότι αναφέρεται για την συγκεκριμένη διανομή, δεν σημαίνει τίποτα απολύτως. Έχω στημένους servers με ubuntu :ubuntu: σε btrfs για λόγους άμεσης επαναφοράς μιας και είναι παραγωγικοί server.

7 «Μου αρέσει»

Επίσης, όποιος έχει σκοπό να χρησιμοποιήσει το TimeShift σαν εργαλείο backup τότε είναι μονόδρομος αυτή η ονομασία καθώς μόνο αυτά “διαβάζει”. (Τουλάχιστον αυτό έκανε στο παρελθόν δεν ξέρω αν έχει αλλάξει σε κάποια νεότερη έκδοση καθώς δεν το χρησιμοποιώ πλέον).

Πάντως το έχεις πάει σε next level την εμπειρία στο Arch και σε καμαρώνω.

1 «Μου αρέσει»

Σε όποιον δάσκαλο κοντά καθίσεις τέτοια γράμματα θα μάθεις! Ευγνώμων!

1 «Μου αρέσει»