Systemd και πείτε αντίο στο /etc/fstab

To systemd ήρθε να αντικαταστήσει και το /etc/fstab! Όχι δεν είναι έτσι τα πράγματα. Το systemd ήρθε να προσθέσει αρκετά χρήσιμα πράγματα στην διαχείριση των προσαρτήσεων και προσθέτει και τρόπους να κάνεις προσαρτήσεις χωρίς την χρήση του. Σύμφωνα με το ίδιο το systemd το /etc/fstab παραμένει ο προτεινόμενος τρόπος. Αλλά μπορεί υπό κάποιες προϋποθέσεις να κάνει την χρήση του εντελώς προαιρετική.

image

Μια πρώτη ματιά

Αυτόματα το systemd θα φτιάξει αυτόματα τα κατάλληλα units από το /etc/fstab και θα σεβαστεί παραμέτρους όπως nofail, [no]auto. Αυτόματες εξαρτήσεις θα δημιουργηθούν, ενώ υπάρχουν κάποιες επιπλέον επιλογές για καλύτερο έλεγχο των εξαρτήσεων. Δείτε το manual για περισσότερα, αν και σπάνια θα χρειαστούν. Ακόμα και ένας προχωρημένος χρήστης δεν έχει κάποιο λόγο να στενοχωρηθεί από την αλλαγή, ούτε να ασχοληθεί παραπέρα. Αλλά εδω θα το κάνουμε και θα δούμε τι παρέχει και πως μπορούμε να το χρησιμοποιήσουμε :stuck_out_tongue:.

Υπάρχουν καταρχήν δυο διαφορετικά σχετικά units. Τα mount για τοπικές κατατμήσεις ή μόνιμες εξωτερικές και τα automount για αυτόματες εξωτερικές προσαρτήσεις κάτι ανάλογο με το autofs. Έχοντας ταλαιπωρηθεί με το τελευταίο στο παρελθόν θα το δοκιμάσω κάποια στιγμή, αλλά η κουβέντα εδώ θα περιοριστεί μόνο στις πρώτες.

Μια χρήσιμη παράμετρος
Ας υποθέσουμε πως έχουμε κάποιο μεγάλο εξωτερικό δίσκο μόνιμα συνδεμένο με ταινίες κλπ. Αν του κάνουμε μια μόνιμη προσάρτηση θα μας καθυστερήσει σημαντικά κατά την εκκίνηση γιατί θα πρέπει να ελεγχθεί για σφάλματα. Είναι ποιο έξυπνο να τον κάνουμε προσάρτηση μόνο όταν θέλουμε να δούμε μια ταινία. Μπορεί να γλυτώσουμε και λίγο χρόνο ζωής (και ρεύμα) με αυτόν τον τρόπο.

Μπορούμε να το κάνουμε αυτό αυτόματα. Θα προσθέσουμε στο /etc/fstab, στις παραμέτρους της προσάρτησης, τα παρακάτω:

noauto,x-systemd.automount

Σημείωση: Η κατάτμηση θα γίνει τύπου automount. Ένα μειονέκτημα είναι πως θα εξαιρεθεί της εντολής locate. Αν προσθέσεις την διαδρομή στην βάση με το χέρι, τότε θα γίνει προσάρτηση όταν ενημερωθεί η βάση, οπότε δεν κερδίζεις τίποτα :stuck_out_tongue:

Άσκηση για το σπίτι
Ας δούμε πρώτα τα σχετικά units λοιπόν (Κάντε κλικ στο βελάκι για την έξοδο της εντολής):

systemctl list-unit-files --type=mount --all
~  systemctl list-unit-files --type=mount --all
UNIT FILE                     STATE     VENDOR PRESET
-.mount                       generated enabled      
boot-efi.mount                generated enabled      
dev-hugepages.mount           static    enabled      
dev-mqueue.mount              static    enabled      
home.mount                    generated enabled      
proc-sys-fs-binfmt_misc.mount disabled  enabled      
sys-fs-fuse-connections.mount static    enabled      
sys-kernel-config.mount       static    enabled      
sys-kernel-debug.mount        static    enabled      
sys-kernel-tracing.mount      static    enabled      
var-lib-machines.mount        static    enabled      

11 unit files listed.

όπου με μια ματιά βλέπουμε ποια είναι ενεργά και ποια δημιουργήθηκαν αυτόματα.

Ας δούμε την κατάσταση τους (Κάντε κλικ στο βελάκι για την έξοδο της εντολής):

systemctl --no-pager list-units --type=mount --all
~   systemctl --no-pager list-units --type=mount --all
  UNIT                                   LOAD      ACTIVE   SUB     DESCRIPTION                                          
  -.mount                                loaded    active   mounted Root Mount                                           
  boot-efi.mount                     loaded    active   mounted /boot/efi                                            
 boot.mount                             not-found inactive dead    boot.mount                                           
  dev-hugepages.mount                    loaded    active   mounted Huge Pages File System                               
  dev-mqueue.mount                       loaded    active   mounted POSIX Message Queue File System                      
  home.mount                             loaded    active   mounted /home                                                
  proc-sys-fs-binfmt_misc.mount          loaded    active   mounted Arbitrary Executable File Formats File System        
  run-timeshift-backup.mount             loaded    active   mounted /run/timeshift/backup                                
  run-user-1000-appimagelauncherfs.mount loaded    active   mounted /run/user/1000/appimagelauncherfs                    
  run-user-1000-doc.mount                loaded    active   mounted /run/user/1000/doc                                   
  run-user-1000-gvfs.mount               loaded    active   mounted /run/user/1000/gvfs                                  
  run-user-1000.mount                    loaded    active   mounted /run/user/1000                                       
  sys-fs-fuse-connections.mount          loaded    active   mounted FUSE Control File System                             
  sys-kernel-config.mount                loaded    active   mounted Kernel Configuration File System                     
  sys-kernel-debug.mount                 loaded    active   mounted Kernel Debug File System                             
  sys-kernel-tracing.mount               loaded    active   mounted Kernel Trace File System                             
  tmp-.mount_jetbragQHjlx.mount          loaded    active   mounted /tmp/.mount_jetbragQHjlx                             
 tmp.mount                              not-found inactive dead    tmp.mount                                            
  var-lib-machines.mount                 loaded    inactive dead    Virtual Machine and Container Storage (Compatibility)

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

19 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.

Απλούστερα μπορείς απλά να γράψεις: systemctl -t mount

Και σαν κάθε unit μπορούμε να δούμε αναλυτικές πληροφορίες για την κατάσταση κάθε προσάρτησης (Κάντε κλικ στο βελάκι για την έξοδο της εντολής):

systemctl --no-pager status home.mount
~   systemctl --no-pager status home.mount
 home.mount - /home
     Loaded: loaded (/etc/fstab; generated)
     Active: active (mounted) since Fri 2020-07-10 11:26:06 EEST; 3h 34min ago
      Where: /home
       What: /dev/sda2
       Docs: man:fstab(5)
             man:systemd-fstab-generator(8)
      Tasks: 0 (limit: 19042)
     Memory: 592.0K
     CGroup: /system.slice/home.mount

Ιουλ 10 11:26:06 Minty systemd[1]: Mounting /home...
Ιουλ 10 11:26:06 Minty systemd[1]: Mounted /home.

Για λόγους πληρότητας ας δούμε και την κατάσταση του ίδιου του δίσκου:

systemctl status /dev/sda
~ 🚀  systemctl status /dev/sda
 dev-sda.device - WDC_WDS100T2B0A-00SM50
   Follow: unit currently follows state of sys-devices-pci0000:00-0000:00:11.0-ata3-host2-target2:0:0-2:0:0:0-block-sda.device
     Loaded: loaded
     Active: active (plugged) since Fri 2020-07-10 11:26:04 EEST; 4h 23min ago
     Device: /sys/devices/pci0000:00/0000:00:11.0/ata3/host2/target2:0:0/2:0:0:0/block/sda

Μια πρώτη κριτική
Την πρώτη φορά που θα δεις τα παραπάνω είμαι βέβαιως που θα σου φανούν ελληνικά κινέζικα. Αλλά όσο μαθαίνεις το systemd θα αρχίσεις να εκτιμάς τον ενιαιο τρόπο διαχείρησης. Εκτιμώ το γεγονός πως με μια ματία βλέπω τι απέτυχε να προσαρτηθεί καθώς και τις καταγραφές συστήματος. Εκτιμώ το γεγονός πως βλεπω σε απλά ελληνικά αγγλικά τι είναι καθε τι.

Για σύγκριση ας δούμε το αποτέλεσμα της απλής εντολής mount:

mount

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,size=8124780k,nr_inodes=2031195,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,size=1634020k,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
efivarfs on /sys/firmware/efi/efivars type efivarfs (rw,nosuid,nodev,noexec,relatime)
none on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime)
/dev/sda3 on / type btrfs (rw,relatime,ssd,space_cache,subvolid=501,subvol=/@)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=32,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=18529)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime)
tracefs on /sys/kernel/tracing type tracefs (rw,nosuid,nodev,noexec,relatime)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,nosuid,nodev,noexec,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,nosuid,nodev,noexec,relatime)
/dev/sda2 on /home type ext4 (rw,relatime)
/dev/sda1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=1634016k,mode=700,uid=1000,gid=1000)
/dev/fuse on /run/user/1000/appimagelauncherfs type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
jetbrains-toolbox on /tmp/.mount_jetbragQHjlx type fuse.jetbrains-toolbox (ro,nosuid,nodev,relatime,user_id=1000,group_id=1000)
/dev/fuse on /run/user/1000/doc type fuse (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
/dev/sda3 on /run/timeshift/backup type btrfs (rw,relatime,ssd,space_cache,subvolid=5,subvol=/)

υπάρχει κάποια σύγκριση; Πολλά cgroups και χάνεις την μπάλα . Καταραμένο systemd :crazy_face:

Τι δεν μου αρέσει: Δεν μπορώ να δω μόνο αυτό που σηνήθως με ενδιαφέρει: τις φυσικές καταμήσεις και τον ελέυθερο τους χώρο. Ούτε το σύστημα αρχείων. Αλλά ούτε πριν μπορούσα και θα έπρεπε να χρησιμοποιήσω τις εντολές df και lsblk.

Προσάρτηση μόνο με το systemd

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

Μια γραμμή στο /etc/fstab σαν την:

UUID=b2ee0b8f-1d7b-4745-a188-ab387f8bdbf0 /home ext4 defaults 0 0

Θα γίνει μέσα σε ένα ένα unit

[Mount]
What=/dev/disk/by-uuid/b2ee0b8f-1d7b-4745-a188-ab387f8bdbf0
Where=/home
Type=ext4
Options=defaults

καθόλου δύσκολο και δεν έχεις αυτές τις μακρίες γραμμές στο /etc/fstab. Άσε που κάθε φορά τρώω χρόνο να κρατάω τα πεδία σε μια τάξη με κενά :crazy_face:.

Αν αναρωτιέστε που είναι τα αυτόματα units και τι περιέχουν θα τα βρείτε στον κατάλογο:
/var/run/systemd/generator.

Ένα παράδειγμα
Θα προσαρμόσουμε ένα εξωτερικό δίσκο. Όπως και με το /etc/fstab θα πρέπει πρώτα να βρώ τα στοιχεία του δίσκου:

blkid /dev/sdb1
~ 🚀  blkid /dev/sdb1
/dev/sdb1: LABEL="vapor" UUID="cdc229cc-37d2-4d77-b3f9-4ca4fa0bab57" UUID_SUB="9551c20b-7c66-45f0-acca-cb287b8f5ca3" TYPE="btrfs" 
PARTLABEL="vapor" PARTUUID="69916b32-f327-48c6-be5c-204c986c7f2a"

Θα φτιάξω πρώτα ένα mount unit που θα περιέχει τα παρακάτω:

# /etc/systemd/system/vapor.mount
[Unit]
Description=External disk (vapor)

[Mount]
What=/dev/disk/by-uuid/cdc229cc-37d2-4d77-b3f9-4ca4fa0bab57
Where=/vapor
Type=btrfs
Options=defaults

[Install]
WantedBy=local-fs.target

Έβαλα WantedBy=local-fs.target για να μην γίνει αυτόματη προσάρτηση σε κονσόλα επιδιόρθωσης.

Όπως κάθε φορά που σκαλίζω κάτι:

~ 🚀  sudo systemctl daemon-reload   

Και στην συνέχεια θα ενεργοποιήσω το unit:

~ 🚀  sudo systemctl enable vapor.mount

Αυτό αρκεί όταν ξεκινάει ο υπολογιστής. Μόνο που εγω το θέλω τώρα:

~ 🚀  sudo systemctl start vapor.mount 
sudo systemctl start vapor.mount
~ 🚀  sudo systemctl start vapor.mount 
 vapor.mount - External disk (vapor)
     Loaded: loaded (/etc/systemd/system/vapor.mount; enabled; vendor preset: enabled)
     Active: active (mounted) since Fri 2020-07-10 16:08:39 EEST; 8s ago
      Where: /vapor
       What: /dev/sdb1
      Tasks: 0 (limit: 19042)
     Memory: 14.2M
     CGroup: /system.slice/vapor.mount

Ιουλ 10 16:08:35 Minty systemd[1]: Mounting External disk (vapor)...
Ιουλ 10 16:08:39 Minty systemd[1]: Mounted External disk (vapor).

Και αυτό ήταν. Δείτε πως το Description δείχνει τι ακριβώς είναι η προσάρτηση με τις εντολές της άσκησης. (Σε δικό σας δίσκο θα πρέπει να αλλάξετε και τον τυπο της κατάτμησης σε ntfs ή ext4). Με το /etc/fstab θα έπρεπε να φτιάξω τον φάκελο προσάρτησης και να το δώσω τα κατάλληλα δικαιώματα. Αλλά έτσι απλά θα φταιχτεί αυτόματα. Ζήτω!

Μια κριτική ματία
Την πρώτη φορά που θα το δεις μοιάζει ποιο δύσκολο απο το να προσθέσεις μια γραμμή στο /etc/fstab. Αλλά δείξε το σε κάποιον που δεν έχει δει ούτε το ένα, ούτε το άλλο και δες τι θα διαλέξει και πόσο εύκολα θα καταλάβει την σύνταξη :wink:.

Ο καινούργιος τρόπος είναι πολύ ποιο κατανοητός κατά την γνώμη μου. Αν τώρα θέλεις να καταργήσεις προσωρινα μια προσάρτηση αρκεί να κάνεις απενεργοποίηση του σχετικού unit. Δεν είναι ανάγκη να κάνεις την γραμμή σχόλιο στο /etc/fstab. Ένα πλεονέκτημα της μεθόδου είναι πως μπορείς εύκολα να δεις τι είναι απενεργοποιημένο.

Αλλά η κύρια χρήση δεν είναι η αντικατάσταση του /etc/fstab. Είναι ο αυτοματισμός. Οταν κάνεις devops συχνά θέλεις να αλλάξεις μέσα απο κάποιο πρόγραμμα το αρχείο αυτό. Και χρησιμοποιείς ειδικά εργαλεία όπως το augeas για να μην γίνει καμιά στραβή. Πόσο ποιο απλό είναι απλά να προσθέσεις ένα αρχείο και να ενεργοποιήσεις ένα unit;

Η ενσωμάτωση με το υπόλοιπο systemd προσφέρει επιπλέον πλεονεκτήματα. Θέλεις για παράδειγμα να γίνει προσάρτηση μόνο πριν τρέξει κάποια άλλη υπηρεσία; Θέλεις να αλλάξεις την σειρά; Θέλεις να κάνεις κάτι ακόμα ποιο τρελό; Αρκει να ξέρεις να χρησιμοποιείς το systemd γιατί η γνώση μεταφέρετε.

Ένα πρόβλημα που πρέκυψε είναι το εξής: Ενώ μπορώ να κάνω κανονικά umount /vapor δεν μπορώ να κάνω mount με mount /vapor μιας και η εντολή mount δεν ξέρει αυτά τα καινούργια κόλπα. Επίσης δεν κατάφερα να βάλω εικονίδιο στο δίσκο. Αναγνωρίζει μεν την παράμετρο x-gvfs-show, αλλά αποτυγχάνει στις x-gvfs-name, x-gvfs-icon. Μικρό το κακό, αλλά πρέπει να το πω :wink:.

Επειδή μπορείς να το κάνεις δεν πρέπει κιόλας. Και αν το κάνεις κάνε το μόνο για τις μόνιμες προσαρτήσεις. Το /etc/fstab είναι μια χαρά.

Παράξενες διαδρομές
Είναι μια κακή ιδέα αλλά μπορεί να θέλεις να γίνει η προσάρτηση στην διαδρομή “/home/talos/Τα αρχεία μου στο vapor” ή ποιο πρακτικά στο σημείο /home/user/.steam. Υπάρχει ένα χρήσιμο utility για να ονομάσεις δυσκολες διαδρομές

~   systemd-escape --path --suffix=mount "/home/talos/Τα αρχεία μου στο vapor"
home-talos-\xce\xa4\xce\xb1\x20\xce\xb1\xcf\x81\xcf\x87\xce\xb5\xce\xaf\xce\xb1\x20\xce\xbc\xce\xbf\xcf\x85\x20\xcf\x83\xcf\x84\xce\xbf\x20vapor.mount

Ξέρω είναι άσχημο.

Συμπεράσματα

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

Αλλά αυτό το χαρακτηριστικό αυτό μου αφήνει ανάμεικτα συναισθήματα. Μου άρεσαν οι αναφορές που κάνει αν και θα μπορούσαν να είναι καλύτερες. Επίσης μου αρέσει που μπορείς να χρησιμοποιήσεις τις προσαρτήσεις targets για άλλα πραγματα καθώς και ο γενικότερος αυτοματισμός. Σε κάποιες περιπτώσεις παρέχει λύσεις σε υπαρκτά προβλήματα, δεν είναι ανάγκη για παράδειγμα αυτοματοποιημένα scripts να σκαλίζουν το /etc/fstab. Δεν είναι τυχαίο που ένα σχετικό εργαλείο πήρε το όνομα του απο τους γνωστούς στάβλους :joy:.

H ενοποιημένη σύνταξη στις εντολές και στα units είναι επίσης ένα καλό πράγμα.

Αλλά για τις τοπικές κατατμήσεις τουλάχιστον, θα μείνω στο παλιό καλο /etc/fstab. Στα θετικά του, όλλες αυτές οι γραφικές εφαρμογές που το χρησιμοποιούν. Εσείς;

Δείτε τα άρθρα για το systemd ακολουθώντας το tag: https://linux-user.gr/tag/systemd

3 Likes

Αφού λοιπόν το systemd δημιουργεί το φάκελο…

  1. Ακούγεται φυσικό να μην μπορεί να προσαρτηθεί αυτόματα με το mount, χωρίς mount point
  2. Τι γίνεται αν ο φάκελος υπάρχει και έχει δεδομένα;
  3. Σε περίπτωση που υπάρχει και στο fstab και σε unit.mount με διαφορετικά flags, ίσως συγκρουόμενα, τότε;…
1 Like

Καλώς ήρθες @petsam στην παρέα μας :hugs:

Ευχαριστώ, Bill.
Ίσως ήμουν πάντοτε εδώ… πνευματικά :laughing:

Πωπώ, γέμισα και μετάλλια!!

2 Likes

Καλώς ήρθες @petsam. Τα σενάρια αυτά δεν τα έχω δοκιμάσει, αλλά:

  1. Το ότι έτσι είναι η υπάρχουσα κατάσταση, δεν σημαίνει πως αυτό είναι και λογικό :slight_smile:

  2. Τυπικά η χρήση συστήματος που κάνει το mount αν ο κατάλογος περιέχει δεδομένα θα τα κρύψει. Αυτή είναι μια γνωστή, αν και φτωχή μέθοδος να κρύβεις χμμμ ενδιαφέροντα βίντεο στο σύστημα αρχείων. Αυτή είναι η τυπική συμπεριφορά και θα ήταν σοβαρό bug [*] αν το systemd έκανε κάποιον επιπλέον έλεγχο.

  3. Αυτό είναι ένα σενάριο που μπορείς να το λύσεις είτε διαβάζοντας το manual είτε στην πράξη. Θα επιλέξω το δεύτερο :joy: :joy: :joy: :joy:

Η τεχνολογία αυτή είναι σχετικά άγνωστη και ελάχιστα πράγματα βρήκα στο internet, ειδικά για τοπικές κατατμήσεις. Δύσκολα θα βρεις κάτι ποιο πλήρες από αυτό. Ίσως στο μέλλον όταν αρχίσει να την γνωρίζει ο κόσμος να υπάρχουν περισσότερες πληροφορίες, ερωτήσεις και άρθρα.

[*] Γιατί θα ήταν bug; Γιατί είναι σύνηθες ο κατάλογος προσάρτησης να μην είναι άδειος. Συχνά θα βρεις ένα αρχείο README που να λέει κάνε μια προσάρτηση εδώ.Επίσης στo .git δεν μπορείς να έχεις ένα άδειο κατάλογο και η λύση είναι ένα άδειο κρυφο αρχείο .gitkeep.

1 Like

Είπα μήπως… Όσο για διάβασμα, είμαι φίλος. Μπορεί να τα δω κάποια στιγμή.

Περίμενα, πάντως, για τα discoverable partitions κάτι.
Είναι μόνο για το Systemd ή ασχέτως;

1 Like

Για discoverable partitions έχω αναφέρει κάποια πράγματα στο

και έχω κάνει και μια μικρή παρουσίαση του Clear Linux

Τα discoverable partitions στην ουσία είναι μια προδιαγραφή. Μπορεί να την έβγαλε το systemd αλλά μπορεί να χρησιμοποιηθεί από οποιονδήποτε. Δυστυχώς σήμερα ελάχιστα εργαλεία και διανομές τα χρησιμοποιούν. Ίσως οταν αποχαιρετίσουμε το MBR και περάσουμε σε καθαρό UEFI να γίνουν το στάνταρ και να απορούμε πως ζούσαμε χωρίς αυτά. Σιγά σιγά πάντως αρχίζουν να βγαίνουν διανομές με τέτοιους στόχους, αλλά είμαστε νωρίς ακόμα.

2 Likes

Συμφωνώ με τα ερωτήματα και έχω να πω ότι δεν μου αρέσουν καθόλου οι διπλές λύσεις σε ρυθμίσεις συστήματος. Κανε το έτσι, κάνε το κι αλλιώς. Κι αν προκύψει πρόβλημα, άντε βρες λύση στο χάος των πιθανών αιτιών και αλληλοεπιδράσεων.

Καθαρές λύσεις φίλοι μου, αυτός πιστεύω είναι ο σωστός δρόμος. Αυτά που παρουσιάζει το άρθρο κατά τη γνώμη μου είναι σε πολύ εσφαλμένη κατεύθυνση. Ή θα έχουμε το ένα ή το άλλο, δεν γίνεται και τα δύο. Ή fstab μόνο, όπως τόσες δεκαετίες, ή systemd μόνο με ολική κατάργηση του fstab.

1 Like

Στην πραγματικότητα έχουμε μόνο το ένα.

To systemd-init δεν έχει την παραμικρή ιδέα για το /etc/fstab.

Πως το κάνει λοιπόν; Η απάντηση θα βρεθεί στον φάκελο /lib/systemd/system-generators/ όπου θα βρούμε μια σειρά από generators. Τα αρχεία που υπάρχουν εκεί θα τρέξουν νωρίς και θα φτιάξουν τα κατάλληλα units στον φάκελο /var/run/systemd/generatorστην ram.

Μια τέτοια γεννήτρια είναι η systemd-fstab-generator που θα διαβάσει το /etc/fstab.

Κάθε γεννήτρια είναι εξωτερικός κώδικας και μπορεί να γίνει mask όπως κάθε unit και να απενεργοποιηθεί. Επίσης εύκολα μπορεί να φτιάξει κάποια διανομή τις δικές της γεννήτριες για ειδικές της ανάγκες. Η δομή λοιπόν είναι απλή και ευέλικτη και δεν είναι το systemd τόσο μονολιθικό όσο πιστεύουμε ότι είναι.

Αυτή είναι μια εσφαλμένη οπτική. Υπάρχει αυτό που λέμε συμβατότητα με το παρελθόν, και αν καταργηθεί το /etc/fstab πολλά πράγματα θα σπάσουν. Ένας από τους λόγους που επικράτησε το systemd είναι πως κατάφερε να είναι επαναστατικό χωρίς να κάνει δύσκολο σε μια διανομή να το ενσωματώσει. Ο εγκαταστάτης φτιάχνει χαρωπά το αρχείο /etc/fstab και όλοι είναι ευχαριστημένοι.

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

Δεν ισχύει όπως είδαμε αυτό. Υπάρχουν μόνο τα systemd units και ένα mount unit είναι ένα απλό unit σαν όλα τα άλλα. Με τις ίδιες ακριβώς εντολές που ελέγχεις τα άλλα units θα ελέγξεις και αυτά. Δεν έχεις να μάθεις κάτι παραπάνω. Και ο έλεγχος που έχεις είναι καλύτερος από ότι είχες στο παρελθόν. Μια απλή ερώτηση: Πως θα τσέκαρες στο παρελθόν αν κάτι δεν έχει προσαρτηθεί σωστά; Πως θα έβρισκες την αιτία του προβλήματος;

Εφοδιασμένοι πλέον με αυτή την γνώση μπορούμε να απαντήσουμε στο ερώτημα.

Path Description
/etc/systemd/system.control Persistent and transient configuration created using the dbus API
/run/systemd/system.control
/run/systemd/transient Dynamic configuration for transient units
/run/systemd/generator.early Generated units with high priority (see early-dir in systemd.generator(7))
/etc/systemd/system System units created by the administrator
/run/systemd/system Runtime units
/run/systemd/generator Generated units with medium priority (see normal-dir in systemd.generator(7))
/usr/local/lib/systemd/system System units installed by the administrator
/usr/lib/systemd/system System units installed by the distribution package manager
/run/systemd/generator.late Generated units with low priority (see late-dir in systemd.generator(7))
Table 1. Load path when running in system mode ( --system ).

Κάτι που υπάρχει στον κατάλογο /etc/systemd/system όπου βάζουμε τις ρυθμίσεις έχει υψηλότερη προτεραιότητα απο το /run/systemd/generator, άρα το unit file θα επικρατήσει. Για λεπτομέρειες δες εδώ.

Δεν ήθελα να κάνω αυτή την ανάλυση πριν, για να κρατήσω απο την μια τις λεπτομέριες κρυφές, αλλά και γιατί αυτά τα ερωτήματα είναι πολύ ποιο εύκολο να απαντηθούν στην πράξη.

1 Like