Στον οδηγό αυτό θα δούμε πως θα κάνουμε εγκατάσταση του Pop!_OS σε btrfs και να κάνουμε χρήση του Timeshift.
Εισαγωγή
Ας δούμε πως θα κάνουμε εγκατάσταση του Pop!_OS σε ένα καινούργιο δίσκο. Πρώτα μερικές αποφάσεις. Θέλω το /
σε σύστημα αρχείων btrfs
για γρήγορα snapshoots με το btrfs. To /home
θα είναι σε χωριστή κατάτμηση σε κλασσικό ext4
και θα γίνετε backup σε εξωτερικό δίσκο τακτικά. Επίσης θα έχω χωριστό swap partition. Είναι καλύτερα έτσι αν έχεις btrfs.
Το πρόβλημα είναι πως το Pop!_OS δεν φτιάχνει τα κατάλληλα subvolumes
που απαιτεί το Timeshift, οπότε θέλει κάποια επιπλέον βήματα. Ας δούμε το πως.
Προετοιμασία του δίσκου
Πριν προχωρήσουμε την εγκατάσταση θα φτιάξουμε με το χέρι τις απαραίτητες κατατμήσεις. Θα χρειαστούμε τις παρακάτω κατατμήσεις σε δίσκο με format gpt.
- Μια κατάτμηση 512MB Fat32 για το
/boot/efi
- Μια κατάτμηση 4096MB Fat32 για το
/recovery
(προαιρετικά) - Μια κατάτμηση με μορφή btrfs για το
/
- Προαιρετικά μια κατάτμηση με μορφή ext4 για το
/var/lib/docker
(αν θέλουμε docker) - Προαιρετικά μια κατάτμηση με μορφή ext4 για το
/home
- Μια κατάτμηση για το 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
. Μερικές σημειώσεις:
-
ssd
Ενεργοποίηση βελτιστοποιήσεων για δίσκους ssd. -
noatime
Να μην ενημερώνει τον χρόνο τελευταίας προσπέλασης ενός αρχείου -
space_cache
,commit=120
βελτιστοποιήσεις πρόσβασης στον δίσκο -
compress=zstd
Αλγόριθμος για την συμπίεση των δεδομένων
Πλέον η εγκατάσταση μας είναι διαθέσιμη στον φάκελο /mnt
. Θα πρέπει να φτιάξουμε τα subvolumes
που θέλει το TimeShift
. Θα χρειαστούμε μόνο το @
στο συγκεκριμένο παράδειγμα. Αν δεν έχεις χωριστό /home
και swap
δες στος συνδέσμους στο τέλος για τα επόμενα βήματα.
btrfs subvolume create /mnt/@
Αυτή την στιγμή, έτσι όπως είναι προσαρμοσμένος ο δίσκος θα το δούμε σαν τον κατάλογο /mnt/@
. Θα πρέπει να μεταφέρουμε εκεί όλα τα δεδομένα.
cd /mnt
ls | 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.