Εγκατάσταση Pop!_OS σε btrfs και Timeshift

Στον οδηγό αυτό θα δούμε πως θα κάνουμε εγκατάσταση του Pop!_OS σε btrfs και να κάνουμε χρήση του Timeshift.

Εισαγωγή

Ας δούμε πως θα κάνουμε εγκατάσταση του Pop!_OS σε ένα καινούργιο δίσκο. Πρώτα μερικές αποφάσεις. Θέλω το / σε σύστημα αρχείων btrfs για γρήγορα snapshoots με το btrfs. To /home θα είναι σε χωριστή κατάτμηση σε κλασσικό ext4 και θα γίνετε backup σε εξωτερικό δίσκο τακτικά. Επίσης θα έχω χωριστό swap partition. Είναι καλύτερα έτσι αν έχεις btrfs.

Το πρόβλημα είναι πως το Pop!_OS δεν φτιάχνει τα κατάλληλα subvolumes που απαιτεί το Timeshift, οπότε θέλει κάποια επιπλέον βήματα. Ας δούμε το πως.

Προετοιμασία του δίσκου

Πριν προχωρήσουμε την εγκατάσταση θα φτιάξουμε με το χέρι τις απαραίτητες κατατμήσεις. Θα χρειαστούμε τις παρακάτω κατατμήσεις σε δίσκο με format gpt.

  1. Μια κατάτμηση 512MB Fat32 για το /boot/efi
  2. Μια κατάτμηση 4096MB Fat32 για το /recovery (προαιρετικά)
  3. Μια κατάτμηση με μορφή btrfs για το /
  4. Προαιρετικά μια κατάτμηση με μορφή ext4 για το /var/lib/docker (αν θέλουμε docker)
  5. Προαιρετικά μια κατάτμηση με μορφή ext4 για το /home
  6. Μια κατάτμηση για το swap

Δηλαδή:

Μετά που θα φτιάξουμε τις κατατμήσεις κάνουμε προσαρμοσμένη εγκατάσταση βάζοντας τις σωστές διαδρομές. Ξεκινάμε το σύστημα, αλλά αν βάλουμε το Timeshift δεν θα μπορέσουμε γιατί λείπουν τα απαιτούμενα subvolumes.

Πρώτα θα κάνουμε μια μικρή αλλαγή στο systemd-boot (δες και τον σχετικό οδηγό εδώ) και θα βάλουμε μια μικρή χρονική καθυστέρηση για να μπορούμε να δούμε το μενού.

sudo gedit /boot/efi/loader/ loader.conf
default Pop_OS-current
timeout 2 ← Προσθήκη αυτής της γραμμής

Θα κάνουμε επανεκκίνηση και θα μπούμε σε περιβάλλον Recovery. Αν δεν έχουμε φτιάξει την σχετική κατάτμηση μπορούμε να ξεκινήσουμε από το USB εγκατάστασης.

Σε περιβάλλον Recovery

Βήμα 1: Δημιουργία subvolume

Θα κάνουμε προσάρτηση της κατάτμησης που περιέχει το / (δηλαδή την sda3 στο παράδειγμα)

mount -o subvolid=5,ssd,noatime,space_cache,commit=120,compress=zstd /dev/sda3 /mnt

Οι επιλογές εξηγούνται εδώ ή με την εντολή man 5 btrfs. Μερικές σημειώσεις:

  1. ssd Ενεργοποίηση βελτιστοποιήσεων για δίσκους ssd.
  2. noatime Να μην ενημερώνει τον χρόνο τελευταίας προσπέλασης ενός αρχείου
  3. space_cache, commit=120 βελτιστοποιήσεις πρόσβασης στον δίσκο
  4. compress=zstd Αλγόριθμος για την συμπίεση των δεδομένων

Πλέον η εγκατάσταση μας είναι διαθέσιμη στον φάκελο /mnt. Θα πρέπει να φτιάξουμε τα subvolumes που θέλει το TimeShift. Θα χρειαστούμε μόνο το @ στο συγκεκριμένο παράδειγμα. Αν δεν έχεις χωριστό /home και swap δες στος συνδέσμους στο τέλος για τα επόμενα βήματα.

btrfs subvolume create /mnt/@

Αυτή την στιγμή, έτσι όπως είναι προσαρμοσμένος ο δίσκος θα το δούμε σαν τον κατάλογο /mnt/@. Θα πρέπει να μεταφέρουμε εκεί όλα τα δεδομένα.

cd /mnt
grep -v '@\|home' | xargs mv -t @

και ένας έλεγχος

ls /mnt/
ls /mnt/@

Βήμα 2: Ενημέρωση /etc/fstab

Στην συνέχεια θα πρέπει να ενημερώσουμε το /etc/fstab του λειτουργικού

sudo gedit /mnt/@/etc/fstab
PARTUUID=...  /boot/efi  vfat   umask=0077  0  0
UUID=...      /recovery  ext4   noatime,errors=remount-ro  0  0
UUID=..       /          btrfs  defaults,subvol=@,ssd,noatime,space_cache,commit=120,compress=zstd  0  0
UUID=...      /home      ext4   noatime,errors=remount-ro  0  0

Η αλλαγή που κάναμε είναι στην γραμμή με την κατάτμηση για το \.

Βήμα 3: Ενημέρωση του bootloader

Θα πρέπει να ενημερώσουμε το systemd-boot για να κάνει χρήση του subvolume με όνομα @. Θα πρόσθέσουμε στο τέλος ένα rootflags=subvol=@

sudo gedit /mnt/@/boot/efi/loader/entries/Pop_OS-current.conf
title Pop!_OS
linux /EFI/Pop_OS-..../vmlinuz.efi
initrd /EFI/Pop_OS-..../initrd.img
options root=UUID=... ro quiet loglevel=0 systemd.show_status=false splash rootflags=subvol=@

Βήμα 4: Προετοιμασία για αναβαθμίσεις πυρήνα

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

sudo gedit  /mnt/@/etc/kernelstub/configuration
{
  "default": {
    "kernel_options": [
      "quiet",
      "splash"
    ],
    "esp_path": "/boot/efi",
    "setup_loader": false,
    "manage_mode": false,
    "force_update": false,
    "live_mode": false,
    "config_rev": 3
  },
  "user": {
    "kernel_options": [
      "quiet",
      "loglevel=0",
      "systemd.show_status=false",
      "splash", ← Προσθήκη ενός κόμματος εδώ
      "rootflags=subvol=@" ← Και εδώ αυτό που θα προστεθεί στο τέλος
    ],
    "esp_path": "/boot/efi",
    "setup_loader": true,
    "manage_mode": true,
    "force_update": false,
    "live_mode": false,
    "config_rev": 3
  }

Βήμα 5: Ενημέρωση του bootloader

Για το βήμα αυτό θα πρέπει να “μπούμε” στο λειτουργικό με το subvolume ενεργό. Θα πρέπει να κάνουμε αποπροσάρτηση της κατάτμησης

cd /
umount -l /mnt

Και θα την προσαρμόσουμε ξανά:

mount -o defaults,subvol=@,ssd,noatime,space_cache,commit=120,compress=zstd /dev/sda3 /mnt

Προσέξτε ότι βάλαμε subvol=@. Ήρθε η ώρα να "μπούμε μέσα. Εδώ θα βρεις τι ακριβώς συμβαίνει και τι είναι και τι κάνει το chroot.

for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo cp /etc/resolv.conf /mnt/etc/
sudo chroot /mnt

Μέσα στο σύστημα τώρα ήρθε η ώρα να δούμε αν τα πάντα προσαρμόζονται σωστά.

mount -av
/boot/efi                : already mounted
/recovery                : already mounted
/                        : ignored
/home                    : already mounted

Πρέπει να είναι ήδη εγκατεστημένο αλλά δεν βλάπτει να

apt install -y btrfs-progs

Πλέον κάνουμε την ενημέρωση

update-initramfs -c -k all

και βγαίνουμε απο το περιβάλλον του chroot.

exit

Κάνουμε μια επίκληση στον άγιο Stallman, στον Μανιτού ή κάπου αλλού και κάνουμε επανεκκίνηση. Αν όλλα έγιναν σωστά θα ξεκινήσει το σύστημα κανονικά.

Βήμα 6: Εγκατάσταση TimeShift

Αν τα πνεύματα ήταν μαζί μας προχωράμε κανονικά στην εγκατάσταση και χρήση του TimeShift.

Βήμα 7: Αυτόματα SnapShoots

Θέλουμε να γίνετε αυτόματα ένα snapshoot πριν κάθε χρήση του apt. Θα εγκαταστήσουμε με το χει το timeshift-autosnap-apt μιας και δεν υπάρχει ακόμα στα αποθετήρια.

sudo apt install git build-essential
mkdir Builds
cd Builds
git clone https://github.com/wmutschl/timeshift-autosnap-apt.git 
cd timeshift-autosnap-apt
sudo make install
sudo gedit /etc/timeshift-autosnap-apt.conf

Έλεγχος αν λειτουργεί

sudo timeshift-autosnap-apt
Rsyncing /boot into the filesystem before the call to timeshift.
Rsyncing /boot/efi into the filesystem before the call to timeshift.
Using system disk as snapshot device for creating snapshots in BTRFS mode

/dev/sda3 is mounted at: /run/timeshift/backup, options: rw,relatime,compress=zstd:3,ssd,space_cache,commit=120,subvolid=5,subvol=/

Creating new backup...(BTRFS)
Saving to device: /dev/sda3, mounted at path: /run/timeshift/backup
Created directory: /run/timeshift/backup/timeshift-btrfs/snapshots/2021-11-19_21-38-52
Created subvolume snapshot: /run/timeshift/backup/timeshift-btrfs/snapshots/2021-11-19_21-38-52/@
Created control file: /run/timeshift/backup/timeshift-btrfs/snapshots/2021-11-19_21-38-52/info.json
BTRFS Snapshot saved successfully (0s)
Tagged snapshot '2021-11-19_21-38-52': ondemand

Το τελικό αποτέλεσμα:

asfodelus@pop-os:~$ sudo lsblk -f
NAME          FSTYPE      FSVER    LABEL      UUID                                   FSAVAIL FSUSE% MOUNTPOINT
sda                                                                                                 
├─sda1        vfat        FAT32               93EA-892B                               252.6M    48% /boot/efi
├─sda2        ext4        1.0      Recovery   9befd986....    554.9M    79% /recovery
├─sda3        btrfs                pop_root   1f65ba24....    177.3G     4% /run/timeshift/backup
├─sda5        ext4        1.0      popos_home 4b84ba4e...    703.9G     0% /home
└─sda6        swap        1        swap       a128e6ea...                  
  └─cryptswap swap        1        cryptswap  cfc26e65...                  [SWAP]

Διαβάστε

Οι οδηγίες εγκατάστασης προσαρμόστηκαν από εδώ. Αλλά δεν χρησιμοποιεί ξεχωριστές κατατμήσεις

weywot/Pop_Btrfs_Subvolumes_with_Timeshift.md at main · spxak1/weywot · GitHub

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

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

Γιατί όχι btrfs και για το home για τα έξτρα του και το λες ext4?

Όχι ότι το ext4 είναι κακό, από καθαρή περιέργεια ρωτάω

Το φοβάμαι μη το κάνει κάποιος copy δεν το βγάζεις από έξω πριν σαν σημείωση;

Ναι θα μπορούσε να είναι, αλλά ο κύριος λόγος για το btrfs είναι η χρήση του TimeShift. Και το TimeShift δεν είναι backup. Οπότε μένει εκτός και δεν υπάρχει λόγος. Το λειτουργικό το ξαναστήνεις αν κάτι πάει εντελώς λάθος, τα δεδομένα στο /home μετράνε. Οπότε καλύτερα κάτι ποιο δοκιμασμένο και που το ξέρεις καλύτερα.

Να σου πω το σκέφτηκα. Αλλά από την άλλη αν κάποιος δεν το καταλάβει, δεν νομίζω και να καταφέρει να ακολουθήσει τον οδηγό μέχρι αυτό στο σημείο, έτσι και αλλιώς :innocent:.

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

I get it now… ok ναι.