Rechtzetting: de wekelijkse overbelasting van mijn schijf was niet te wijten aan Btrfs snapshots, maar aan de trim opdracht die elke week wordt uitgevoerd.
OpenSUSE werkt al lang standaard met het btrfs bestandssysteem voor de systeempartitie. Dit moderne bestandssysteem heeft vele voordelen, maar ook wel een paar zaken waarmee je moet leren leven. Maar zoals steeds kan je de scherpe kantjes wat afronden om de voordelen van het btrfs bestandssysteem ten volle te benutten, zonder opgescheept te zitten met wat minder geslaagde functies ervan.
Btrfs kan zelfstandig back-ups maken, maar bij het maken van de back-ups wordt het bestandssysteem en dus uw harde schijf dusdanig belast, dat je nauwelijks nog kunt werken. Het is alsof je computer opeens hangt, om dan even later zijn werk terug te hervatten, en dit herhaalt zicht regelmatig. Daarenboven duurt het maken van een btrfs back-up (snapshot) verschrikkelijk lang (uren). En zolang dit duurt, werkt de computer allesbehalve vlot.
Ik maak al zeer lang dagelijkse back-ups van mijn systeem via een script gebaseerd op rsync. Rsync vergelijkt daarbij de inhoud van enkele partities met de inhoud van enkele mappen op een oude computer die dienst doet als back-up systeem.
Waarschuwing: Btrfs snapshots zijn wel degelijk een prachtige manier om uw systeem werkende te houden, en dit zonder extra configuratie (met dank aan het openSUSE team). Back-ups zijn nog beter. Maar een maar half werkend back-up systeem zonder Btrfs snapshots kan ernstige gevolgen hebben.
Hoewel openSUSE enkel op de systeempartitie btrfs gebruikt, lijkt het voor het systeem alsof er vele kleine partities aanwezig zijn. Btrfs kan één partitie namelijk indelen in subvolumes die door het besturingssysteem elk apart aan een map gekoppeld moeten worden. Dit kunnen we als volgt nagaan:
dany@main:~> mount | grep btrfs
/dev/sdc2 on / type btrfs (rw,relatime,ssd,space_cache,subvolid=259,subvol=/@/.snapshots/1/snapshot)
/dev/sdc2 on /boot/grub2/i386-pc type btrfs (rw,relatime,ssd,space_cache,subvolid=260,subvol=/@/boot/grub2/i386-pc)
/dev/sdc2 on /var/cache type btrfs (rw,relatime,ssd,space_cache,subvolid=267,subvol=/@/var/cache)
/dev/sdc2 on /boot/grub2/x86_64-efi type btrfs (rw,relatime,ssd,space_cache,subvolid=261,subvol=/@/boot/grub2/x86_64-efi)
/dev/sdc2 on /var/lib/machines type btrfs (rw,relatime,ssd,space_cache,subvolid=270,subvol=/@/var/lib/machines)
/dev/sdc2 on /var/lib/mariadb type btrfs (rw,relatime,ssd,space_cache,subvolid=272,subvol=/@/var/lib/mariadb)
/dev/sdc2 on /var/lib/mailman type btrfs (rw,relatime,ssd,space_cache,subvolid=271,subvol=/@/var/lib/mailman)
/dev/sdc2 on /var/log type btrfs (rw,relatime,ssd,space_cache,subvolid=276,subvol=/@/var/log)
/dev/sdc2 on /var/lib/named type btrfs (rw,relatime,ssd,space_cache,subvolid=274,subvol=/@/var/lib/named)
/dev/sdc2 on /var/opt type btrfs (rw,relatime,ssd,space_cache,subvolid=277,subvol=/@/var/opt)
/dev/sdc2 on /home type btrfs (rw,relatime,ssd,space_cache,subvolid=262,subvol=/@/home)
/dev/sdc2 on /var/tmp type btrfs (rw,relatime,ssd,space_cache,subvolid=279,subvol=/@/var/tmp)
/dev/sdc2 on /.snapshots type btrfs (rw,relatime,ssd,space_cache,subvolid=258,subvol=/@/.snapshots)
/dev/sdc2 on /var/lib/libvirt/images type btrfs (rw,relatime,ssd,space_cache,subvolid=269,subvol=/@/var/lib/libvirt/images)
/dev/sdc2 on /tmp type btrfs (rw,relatime,ssd,space_cache,subvolid=265,subvol=/@/tmp)
/dev/sdc2 on /var/spool type btrfs (rw,relatime,ssd,space_cache,subvolid=278,subvol=/@/var/spool)
/dev/sdc2 on /var/lib/mysql type btrfs (rw,relatime,ssd,space_cache,subvolid=273,subvol=/@/var/lib/mysql)
/dev/sdc2 on /var/lib/pgsql type btrfs (rw,relatime,ssd,space_cache,subvolid=275,subvol=/@/var/lib/pgsql)
/dev/sdc2 on /opt type btrfs (rw,relatime,ssd,space_cache,subvolid=263,subvol=/@/opt)
/dev/sdc2 on /srv type btrfs (rw,relatime,ssd,space_cache,subvolid=264,subvol=/@/srv)
/dev/sdc2 on /var/crash type btrfs (rw,relatime,ssd,space_cache,subvolid=268,subvol=/@/var/crash)
/dev/sdc2 on /usr/local type btrfs (rw,relatime,ssd,space_cache,subvolid=266,subvol=/@/usr/local)
Deze opdracht geeft de btrfs gekoppelde mappen weer. Zo merk je dat het btrfs bestandssysteem enkel op de /dev/sdc2 partitie gebruikt wordt.
gid = users read only = true use chroot = true transfer logging = true log format = %h %o %f %l %b log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid #hosts allow = trusted.hosts hosts allow = 192.168.1.0/24 slp refresh = 300 use slp = false #[Example] # path = /home/Example # comment = An Example # auth users = user # secrets file = /etc/rsyncd.secrets [backup] path = /usr/home/Documents comment = Backup read only = false gid = root uid = rootMet hosts allow kunnen alleen computers uit het thuisnetwerk de rsync server benaderen. Voor de rest wordt enkel de doelmap [backup] ingesteld.
sudo /bin/systemctl enable rsyncd.service
sudo /bin/systemctl start rsyncd.service
sudo /sbin/yast2 firewall services add service=service:rsync-server zone=EXT
sudo mkdir -p /usr/home/Documents/phoenix
#!/bin/bash snt="(C) PindaNet, Dany Pinoy, `date -r "$0" +'%d %B %Y'`" titel="RSync backup" # Root wachtwoord opvragen en testen read -p "Wachtwoord: " -s Wachtwoord echo beheerder=`echo $Wachtwoord | su - -c 'echo $USER'` if [ "$beheerder" != 'root' ] ; then echo "Script onderbroken wegens foutief wachtwoord." exit fi # In plaats van te werken met de hostnaam van de back-up server, # wordt gebruik gemaakt van het MAC adres van de netwerkaart in de back-up server. # bepalen met ip -a macadres=4c:72:b9:62:8f:c4 backupip=`/sbin/arp -an | grep $macadres | head -1 | awk '{print $2}' | sed 's/[()]//g'` if [ ${#backupip} -eq 0 ]; then for i in {2..255} do ping -c 1 192.168.1.$i if [ $? == 0 ]; then backupip=`/sbin/arp -an | grep $macadres | head -1 | awk '{print $2}' | sed 's/[()]//g'` if [ ${#backupip} -ne 0 ]; then break fi fi done fi printf '\033[0m'; clear # Kleuren standaard echo "Uitvoeren RSync backup:" printf '=======================\n' # Test of rsync op de back-up computer draait rsync $backupip:: if [ $? -ne 0 ]; then printf '\033[1;31;40m Kon geen verbinding met backupserver opbouwen.\033[0m\n' # Rode letters printf '\033[1;32;40m Druk Return om door te gaan.' # Groene letters op zwarte achtergrond read Keypress exit 2 else # Verzamel alle aan mappen gekoppelde btrfs subvolumes in de variabele rsyncSource rsyncSource="" for subvolume in `mount | grep btrfs | awk '{print $3}'`; do rsyncSource+="$subvolume " done # Voer de back-up uit echo $Wachtwoord | su -c "rsync -avHxh --numeric-ids --progress --delete --exclude=\"/home/dany/vmware/\" $rsyncSource $backupip::backup/phoenix/root 2>>/tmp/rsync.error | tee -a /tmp/rsync.log" # Geef eventuele foutmeldingen weer printf '\033[1;31;40mRsyncbackup gaf de volgende foutmeldingen:\033[0m\n' # Rode letters more /tmp/rsync.error printf '\033[1;32;40mDe backup is voltooid.\033[0m\n' # Groene letters op zwarte achtergrond fi # verwijder het logboek met foutmeldingen echo $Wachtwoord | su -c "rm /tmp/rsync.error" # Na het maken van de back-up kan je zaken opruimen. # Hieronder worden in een map alle mappen die ouder zijn dan 30 dagen verwijderd echo echo "Opruimen VMware Drag & Drop:" printf '============================\n' find /home/dany/.cache/vmware/drag_and_drop/ -mindepth 1 -maxdepth 1 -type d -mtime +30 -exec rm -r {} \;
Als je het bovenstaande script regelmatig uitvoert, kan je het tijdrovende, systeembelastende en dus storende snapshot systeem uitschakelen. Dit gebeurt op drie niveaus:
sudo snapper -c root set-config "TIMELINE_CREATE=no"
en terug inschakelen:
sudo snapper -c root set-config "TIMELINE_CREATE=yes"
USE_SNAPPER
op no
te zetten.
Als je in het bestand /etc/sysconfig/yast2 de variabele USE_SNAPPER
terug op yes
zet, worden de Administration Snapshots terug actief.