Slint με BTRFS
Σε αυτό το άρθρο περιγράφουμε τα μοναδικά χαρακτηριστικά του συστήματος αρχείων BTRFS και πώς ένα σύστημα Slint έχει ρυθμιστεί κατά την εγκατάσταση για να επωφεληθεί από αυτά.
Για να μην υπερφορτώσουμε αυτό το έγγραφο με ορισμούς, παραπέμπουμε τον αναγνώστη στο glossary που περιλαμβάνεται στο εγχειρίδιο Slint και πιο συγκεκριμένα για btrfs "jargon" στο glossary που περιλαμβάνεται στην τεκμηρίωσή του.
Ένα σύστημα αρχείων BTRFS αποτελείται από έναν λογικό όγκο που μπορεί να καλύπτει πολλαπλές συσκευές (διαμερίσματα ή δίσκους). Αρχικά, το Slint εγκαθίσταται σε ένα ενιαίο διαμέρισμα.
Ένας υποόγκος είναι ένα υποδέντρο αρχείων μέσα στον τόμο, η ρίζα του οποίου μπορεί να τοποθετηθεί σαν να ήταν ένα ανεξάρτητο σύστημα αρχείων. Ωστόσο, ο χώρος που κατανέμεται σε όγκο κατανέμεται επίσης σε καθέναν από τους επιμέρους όγκους του: δεν είναι επομένως αναγκαίο να κατανεμηθεί μεταξύ των υποόγκων, σαν να ήταν σε ξεχωριστά χωρίσματα.
Οι υποόγκοι μπορούν να δημιουργηθούν ταυτόχρονα με τον τόμο (από την εντολή mkfs.btrfs), αλλά και να προστεθούν ή να διαγραφούν αργότερα χρησιμοποιώντας τα εργαλεία btrfs.
Για παράδειγμα, οι παρακάτω εντολές δημιουργούν τον τόμο Slint "system" και τους υποτόμους του, σε περίπτωση που χρησιμοποιείται BTRFS. Στο ακόλουθο $ROOTNAME είναι το όνομα του διαμερίσματος στο οποίο θα εγκατασταθεί το Slint και $SLINT το σημείο προσάρτησης του τόμου του συστήματος κατά την εγκατάσταση.
mkdir /SLINT SLINT="/SLINT" mkfs. trfs -L root $ROOTNAME mount -o compress=zstd:3, oatime $ROOTNAME $SLINT btrfs subvolume create $SLINT/@ btrfs subvolume create $SLINT/@home btrfs subvolume create $SLINT/@swap umount $SLINT mount -o subvol=/@, ompress=zstd:3,noatime $ROOTNAME $SLINT mkdir $SLINT/home mkdir $SLINT/swap
Το διαμέρισμα $ROOTNAME (υποδεικνύεται από το UUID το οποίο θα καλέσουμε <uuid>) θα τοποθετηθεί στη συνέχεια τρεις φορές (μία φορά ανά υποτόμο) κάθε φορά που ξεκινά το Slint, όπως αναφέρεται στο αρχείο /etc/fstab:
UUID=<uuid> / btrfs subvol=/@,compress=zstd:3,noatime 0 UUID=<uuid> /home btrfs subvol=/@home,compress=zstd:3,noatime 0 UUID=<uuid> /swap btrfs subvol=/@swap,compress=zstd:3,noatime 0
Αυτό δίνει για παράδειγμα (λαμβάνεται από την έξοδο του lsblk /dev/sda5):
Filesystem Size Used Avail Use% Mounted on /dev/sda5 50G 22G 28G 44% / /dev/sda5 50G 22G 28G 44% /home /dev/sda5 50G 22G 28G 44% /swap
Βλέπουμε ότι ο διαθέσιμος χώρος για τον όγκο (28G) είναι επίσης διαθέσιμος για κάθε επιμέρους τόμο. Από την άλλη πλευρά, η επιλογή προσάρτησης "compress_zstd:3" σημαίνει ότι όλα τα αρχεία που θα αποθηκευτούν θα συμπιέζονται από το βοηθητικό πρόγραμμα zstd με το επίπεδο συμπίεσης 3. Έτσι, το μέγεθος του συστήματος είναι περίπου το μισό που θα ήταν με το σύστημα αρχείων ext4.
Εάν προσαρτήσουμε τη συσκευή στη ρίζα του όγκου (χωρίς να αναφέρουμε έναν υποόγκο), όπως αυτό:
mount /dev/sda5 /mnt
βλέπουμε τους υποτόμους να εμφανίζονται ως υποκατάλογοι του /mnt:
ls /mnt @ @home @swap ls /mnt/@home/didier Desktop Documents GNUstep Images Templates Music Audience Downloads Videos
Ένα άλλο αξιοσημείωτο χαρακτηριστικό του BTRFS είναι το "copy-on-write". Κατά την επεξεργασία ενός αρχείου, τα τροποποιημένα μέρη γράφονται σε άλλη τοποθεσία, τα μεταδεδομένα (που καταγράφουν τη θέση όλων των τμημάτων του αρχείου) που ενημερώνονται. Όσο τα προηγούμενα δεδομένα αναφέρονται ακόμη, θα παραμείνουν άθικτα.
Αυτό το καθιστά πολύ εύκολο να δημιουργήσετε στιγμιότυπα του υποτόμου BTRFS: λαμβάνοντας ένα νέο στιγμιότυπο είναι "ελεύθερο", καθώς χρησιμοποιεί πολύ λίγους χώρους στο δίσκο: μόνο τα μεταδεδομένα του στιγμιοτύπου γράφονται, το οποίο αποθηκεύει τη φυσική θέση όλων των τμημάτων των αρχείων στον υποτόμου, και αυτό γίνεται σχεδόν αμέσως. Ο χώρος που χρησιμοποιείται από το στιγμιότυπο θα αυξηθεί μόνο όταν ο αρχικός υποόγκος και το στιγμιότυπο διαφέρουν, καθώς το στιγμιότυπο θα ανακτά τα δεδομένα που αφαιρέθηκαν από το αρχικό. Από τα άλλα δεδομένα που προστίθενται στο αρχικό δεν θα συμπεριληφθούν στο στιγμιότυπο: με άλλα λόγια, η τροποποίηση του αρχικού υποτόμου δεν τροποποιεί το στιγμιότυπο.
Το Slint περιλαμβάνει το βοηθητικό πρόγραμμα absm
, το οποίο επιτρέπει τη λήψη στιγμιότυπων του υποτόμου @, επιτρέποντας την επιστροφή σε προηγούμενη κατάσταση του συστήματος εάν μια ενημέρωση πάει στραβά, εκκινώντας το σύστημα σε αυτό το στιγμιότυπο, επιλεγμένο στο μενού εκκίνησης GRUB. Για να γνωρίζετε τη χρήση του, απλά πληκτρολογήστε absm
ως root ή χρησιμοποιώντας sudo.
Το BTRFS επαληθεύει επίσης την ακεραιότητα κάθε αρχείου όταν ανοίγει με τη χρήση αθροίσματος ελέγχου, καθιστώντας περιττό να ελέγξετε το σύστημα αρχείων κατά την εκκίνηση του συστήματος. Επιπλέον, η εντολή "btrfs scrub" επαληθεύει την ακεραιότητα όλων των αρχείων, συμπεριλαμβανομένων εκείνων που σπάνια διαβάζονται. Από προεπιλογή, το βοηθητικό πρόγραμμα btrfsmaintenance
που περιλαμβάνεται στο Slint τρέχει "btrtfs scrub" μία φορά την εβδομάδα.
Το "btrfsmaintenance" ενεργοποιεί επίσης το "btrfs balance" μία φορά την εβδομάδα από προεπιλογή. Με αυτή την εντολή μπορείτε να κατανείμετε τα δεδομένα μεταξύ των συσκευών αν το σύστημα αρχείων εκτείνεται σε διάφορες, αλλά και να αναδιοργανώσετε το χρησιμοποιούμενο χώρο, ιδίως για να ελευθερώσετε τον αδιάθετο χώρο του συστήματος αρχείων, το οποίο βελτιώνει ιδιαίτερα την απόδοση του BTRFS στην περίπτωση ενός σκληρού δίσκου. Για να μάθετε περισσότερα για το ` btrfsmaintenance` διαβάστε το /usr/doc/btrfsmaintenance*/README.html
Άλλα χρήσιμα και BTRFS-συμβατά εργαλεία περιλαμβάνονται στο Slint, όλα έχουν μια επιλογή βοήθειας και μια σελίδα man:
-
"Jdupes" ανιχνεύει τα διπλότυπα αρχεία και σας επιτρέπει να αναλάβετε δράση αναλόγως, ανεξάρτητα από το σύστημα αρχείων που χρησιμοποιείται
-
btdu
επιτρέπει να γνωρίζετε με ακρίβεια τη θέση που καταλαμβάνουν οι υπό-τόμοι και οι κατάλογοι BTRFS -
restic
είναι ένα πολύ ευέλικτο λογισμικό δημιουργίας αντιγράφων ασφαλείας που μπορεί να χρησιμοποιηθεί για οποιοδήποτε σύστημα αρχείων.
Προτάσεις.
-
Το BTRFS χρειάζεται χώρο για να αναπνέει και να αναδιοργανώνεται. Να διατηρείτε πάντα 10-20 % ελεύθερο χώρο.
-
Ορισμένες επιλογές εργαλείων που περιλαμβάνονται στο πακέτο btrfs-tools μπορεί να είναι επικίνδυνες ή αντιπαραγωγικές. Χρησιμοποιήστε μόνο εκείνους των οποίων την επίδραση γνωρίζετε πολύ καλά και αν σε αμφιβολία αναζητούν συμβουλές πρώτα, στη λίστα αλληλογραφίας Slint ή από IRC για irc.libera.chat, κανάλι #btrfs.
-
Ειδικότερα, αποφύγετε τη χρήση του "btrfs filesystem defrag" και ειδικά όχι "btrfs check --repair".
-
Πριν χρησιμοποιήσετε μια εντολή, διαβάστε προσεκτικά την αντίστοιχη man σελίδα (ξεκινώντας με το "man btrtfs" που αναφέρει τα άλλα).
-
Όπως συμβαίνει με κάθε σύστημα αρχείων: κάντε κανονικά αντίγραφα ασφαλείας! Αυτός είναι συνήθως ο μόνος τρόπος για να ανακτήσετε τα δεδομένα σας σε περίπτωση βλάβης υλικού.
Περαιτέρω:
-
Forza wiki: https://wiki.tnonline.net/w/Category:Btrfs
-
Η επίσημη τεκμηρίωση: https://btrfs.readthedocs.io/en/latest/
-
Ερωτήσεις, προβλήματα: στο κανάλι irc.libera.chat #btrfs
Customize a Slint system layout
Introduction
In this article, we review how the Slint installer organizes the system’s basic directories (their layout), and show how to customize this layout after installation. The installation process is detailed in Chapter 2: Installation of the HandBook.
The installer places all the directories listed below, which constitute the core of the system, in the same partition:
bin boot dev etc home lib lib64 media mnt proc root run sbin srv sys usr
If other partitions already formatted are accessible during the installation, the installer proposes that they be mounted at system startup, with a directory name chosen by the user as mount point, except those listed above.
Furthermore, if automatic partitioning has been chosen, the installer proposes to create an additional partition in the remaining space available on the device, with a mount point chosen by the user, also outside those listed above.
In sum, the installer:
-
places all directories constituting the core of the system in the same partition,
-
allows to set up other directories in other partitions, previously formatted.
However, you may want to install files or directories that are part of the core of the system such as /home in another partition, especially if space is limited on the device. For example, if the computer is equipped with a fast device (SSD or NVMe) and also with a slower but larger capacity hard disk, you might want to install the system on the SSD or NVMe and the larger files on the hard disk.
You may also want to share large files usually stored in /home with another system, such as images, various documents, audio or video files.
Practical guide
As an example we show how to move /home to another device, with some variations.
Move /home entirely to another device
We assume that you want to move the /home directory, initially installed on an SSD or NVMe, to a hard disk. This can be done right after installation or later. All the following is to be done as root.
First, you need a formatted partition on the hard disk, named /dev/sdb1 below, to host /home:
-
Create if not already done on the hard disk the partition table (GPT type) and the partition using one of theses tools: parted, gdisk, cgdisk or gparted, all included in Slint, big enough for its intended use.
-
Format this partition using one of the btrfs, ext4, or xfs file types (commands
mkfs.btrfs
,mkfs.ext4
ormkfs.xfs
)
To be able to copy the /home directory to this partition you need to mount it, for example on /mnt, with one of the following commands:
mount /dev/sdb1 /mnt -o compress=zstd:3 # if /dev/sdb1 has been formatted with btrfs mount /dev/sdb1 /mnt # if /dev/sdb1 was formatted with xfs or ext4
Then copy the files, for example like this:
cp -a /home/* /mnt
or like this:
rsync -aAXv /home/* /mnt
Then, check that the copy has been done correctly:
diff -r /home /mnt
Then modify the /etc/fstab file to mount /home on the new partition at the next boot.
If the root file system is btrfs, /home is mounted as subvolume. In this case comment out the line in the file used to mount /home by inserting a # character at its beginning. For example edit this line (replace <uuid1> with the UUID value specified in /etc/fstab):
UUID=<uuid1> /home btrfs subvol=/@home,discard=async,compress=zstd:3,noatime 0 0
which becomes:
#UUID=<uuid1> /home btrfs subvol=/@home,discard=async,compress=zstd:3,noatime 0 0
Then insert in the file a line to mount at boot time /home on the new partition. We will designate <uuid2> the value of its UUID, displayed by this command:
lsblk -lno uuid /dev/sdb1
The line to insert in the /etc/fstab file depends on the chosen file system of /dev/sdb1.
For btrfs:
UUID=<uuid2> /home btrfs compress=zstd:3,discard=async,noatime 0
For ext4 or xfs:
UUID=<uuid2> /home ext4 noatime 1 2
Then, reboot the machine. In case of problem, to go back:
-
Case occurring uncomment the commented line in /etc/fstab (remove the # character at the beginning of the line)
-
Comment the new one (insert a # character at the beginning of the line)
-
Then reboot.
Once the new partition has been checked for correct operation, the old one can be deleted. The way to do this depends on the file system configured by the installer. Once the machine is rebooted, make sure that /home is mounted on the new partition, for example with the command
findmnt -o /source
Then delete the old /home:
-
In case of btrfs type these commands (we assume that the system was installed in /dev/sda3):
umount /mnt mount /dev/sda3 /mnt -o subvolid=0 btrfs subvolume delete -c /mnt/@home btrfs subvolume sync /mnt # this command initiates the recovery of the space occupied by the old /home btrfs filesystem sync # this command ends the recovery of the space occupied by the old /home umount /mnt
-
In case of ext4 or xfs, we need that the new /home be not in use to remove the old one. So:
First, reboot in text mode. Login as root # Not as regular user, else we could not umount /home as it would be busy. umount /home # This makes the previous /home accessible again. rm -r /home/* # We delete the content of the previous /home but keep the directory. mount /home # Now /dev/sdb1 is mounted as /home
Move only the largest files from /home to the hard disk
In the example above the /home directory has been completely transferred from the SSD to the hard disk.
It may be preferable to store only large files on the hard disk and to leave hidden directories and files on the SSD, which are subject to frequent writes, much faster on an SSD.
To do this, you can name the mount point of the /dev/sdb1 partition /data
in /etc/fstab, for example, then once this partition is mounted, copy the directories to be transferred from /home to /data, and finally replace these directories in /home with symbolic links to the directories in /data. For instance, once the /data directory is created and mounted on /dev/sdb1:
chown -R didier:users /data mv /home/didier/Images /data ln -s /data/Images /home/didier/Images
This way of doing is to be adapted if the system is multi-user, for example by creating a subdirectory per user in /data.
Move /home to the hard disk but store frequently changed files on the SSD
On the other hand it is possible to selectively store frequently changed files on the SSD, like those contained in ~/.mozilla, ~/.thunderbird or ~/.purple.
For example, you can create a directory /data and a subdirectory /data/.thunderbird on the SSD, move ~/.thunderbird to it, and create a symbolic link /data/.thunderbird ⇒ ~/.thunderbird.
If btrfs is used for the core system it is recommended to create a subvolume for /data with the following commands, before moving ~/.mozilla or ~/.thunderbird there, like this:
mount /dev/sda3 /mnt subvolid=0 btrfs subvolume create /mnt/@data mkdir /data umount /mnt
Then insert a line in /etc/fstab to mount /data at system boot (<uuid1> is the UUID value of /dev/sda3):
UUID=<uuid1> /data btrfs subvol=/@data,discard=async,compress=zstd:3,noatime 0 0
Then reboot and type the following commands:
chown -R didier:users /data mv /home/didier/.thunderbird /data ln -s /data/.thunderbird ~/.thunderbird