Standaard worden vele bestandsbewerkingen in een BTRFS bestandssysteem in zogenaamde snapshots opgenomen. Met snapshots kan je het bestandssysteem naar een eerdere samenstelling herstellen. Aanvankelijk nemen snapshots geen extra ruimte op de harde schijf in, maar hoe meer je werkt, hoe meer bestanden op uw systeem aangepast worden. Deze aanpassingen komen in een snapshot terecht en gaandeweg wordt de ruimte die door snapshots wordt ingenomen groter en groter. Deze handige functie (terug keren in de tijd) is een verbetering t.o.v. bestandssystemen zoals Ext4. Op een kleine partitie of harde schijf, kunnen snapshots alle beschikbare ruimte in beslag nemen, waardoor het systeem onbruikbaar wordt. Je kunt dan drastisch het snapshot systeem uitschakelen en deze nuttige functie overboord gooien. Of je kunt als je schuifruimte op de harde schijf te beperkt wordt, snapshots opruimen om meer beschikbare ruimte op de harde schijf vrij te maken.
Op een grafisch systeem kan je eenvoudig de beschikbare harde schijf ruimte volgen met de widget Ruimtegebruik van de harde schijf.
In de terminal gebruik je de df (DiskFree) opdracht:
dany@linux-u6r3:~> df -h
Bestandssysteem Grootte Gebruikt Besch Geb% Aangekoppeld op
/dev/sda8 174G 34G 140G 20% /
devtmpfs 7,9G 0 7,9G 0% /dev
tmpfs 7,9G 88K 7,9G 1% /dev/shm
tmpfs 7,9G 2,4M 7,9G 1% /run
tmpfs 7,9G 0 7,9G 0% /sys/fs/cgroup
/dev/sda2 356M 38M 319M 11% /boot/efi
/dev/sda4 270G 113G 158G 42% /windows/C
/dev/sda8 174G 34G 140G 20% /tmp
/dev/sdb2 200G 178G 23G 89% /media/NTFS
/dev/sda8 174G 34G 140G 20% /boot/grub2/x86_64-efi
/dev/sda8 174G 34G 140G 20% /.snapshots
/dev/sda8 174G 34G 140G 20% /var/tmp
/dev/sda8 174G 34G 140G 20% /var/spool
/dev/sda8 174G 34G 140G 20% /var/opt
/dev/sda8 174G 34G 140G 20% /var/lib/pgsql
/dev/sda8 174G 34G 140G 20% /var/log
/dev/sda8 174G 34G 140G 20% /var/lib/named
/dev/sda8 174G 34G 140G 20% /var/lib/mailman
/dev/sda8 174G 34G 140G 20% /var/crash
/dev/sda8 174G 34G 140G 20% /usr/local
/dev/sda8 174G 34G 140G 20% /srv
/dev/sda8 174G 34G 140G 20% /opt
/dev/sda8 174G 34G 140G 20% /home
/dev/sdb1 720G 449G 235G 66% /usr/home/Documents
/dev/sda8 174G 34G 140G 20% /boot/grub2/i386-pc
De root van het systeem (/dev/sda8) heeft nog 140G ruimte beschikbaar, slechts 34G of 20% van de partitie is in gebruikt. Dit lijkt weinig, maar is voor een Linux systeem aanzienlijk.
BTRFS snapshots beheer met btrfs terminal opdrachten of met Snapper, een handige en eenvoudig te gebruiken YaST module uit de categorie Diversen.
Vanzelfsprekend kan dit ook in een terminal:
De rest is kinderspel, selecteer elke snapshot en wis deze met de knop Verwijderen.
Indien na het verwijderen van de snapshots geen extra harde schijfruimte vrijkomt, dan is er te weinig ruimte om de verwijder opdracht uit te voeren. In zo'n geval wordt de vrijgemaakte ruimte pas beschikbaar na het herstarten van de computer.
dany@linux-u6r3:~> df -h
Bestandssysteem Grootte Gebruikt Besch Geb% Aangekoppeld op
/dev/sda8 174G 29G 144G 17% /
devtmpfs 7,9G 0 7,9G 0% /dev
tmpfs 7,9G 96K 7,9G 1% /dev/shm
tmpfs 7,9G 2,4M 7,9G 1% /run
tmpfs 7,9G 0 7,9G 0% /sys/fs/cgroup
/dev/sda2 356M 38M 319M 11% /boot/efi
/dev/sda4 270G 113G 158G 42% /windows/C
/dev/sda8 174G 29G 144G 17% /tmp
/dev/sdb2 200G 178G 23G 89% /media/NTFS
/dev/sda8 174G 29G 144G 17% /boot/grub2/x86_64-efi
/dev/sda8 174G 29G 144G 17% /.snapshots
/dev/sda8 174G 29G 144G 17% /var/tmp
/dev/sda8 174G 29G 144G 17% /var/spool
/dev/sda8 174G 29G 144G 17% /var/opt
/dev/sda8 174G 29G 144G 17% /var/lib/pgsql
/dev/sda8 174G 29G 144G 17% /var/log
/dev/sda8 174G 29G 144G 17% /var/lib/named
/dev/sda8 174G 29G 144G 17% /var/lib/mailman
/dev/sda8 174G 29G 144G 17% /var/crash
/dev/sda8 174G 29G 144G 17% /usr/local
/dev/sda8 174G 29G 144G 17% /srv
/dev/sda8 174G 29G 144G 17% /opt
/dev/sda8 174G 29G 144G 17% /home
/dev/sdb1 720G 449G 235G 66% /usr/home/Documents
/dev/sda8 174G 29G 144G 17% /boot/grub2/i386-pc
In bovenstaande geval werd 3% beschikbare ruimte vrijgegeven. In absolute cijfers heb ik echter 5 GB ruimte vrijgemaakt. Deze 5 GB schijfruimte werd door BTRFS snapshot's gebruikt na anderhalve maand werken op het systeem. M.a.w. in anderhalve maand nam enkel door het gebruik van BTRFS snapshots de gebruikte harde schijfruimte met meer dan 15% toe. Kleine harde schijven of partities raken zo in geen tijd vol.
Met de volgende opdracht wordt een overzicht van de BTRFS snapshots weergegeven:
dany@linux-oj7m:~> sudo snapper list
Type | # | Pre # | Datum | Gebruiker | Opschonen | Beschrijving | Gebruikersgegevens
-------+----+-------+-----------------------------+-----------+-----------+---------------+-------------------
single | 0 | | | root | | current |
pre | 1 | | do 01 jan 2015 14:49:32 CET | root | number | zypp(zypper) | important=yes
post | 2 | 1 | do 01 jan 2015 15:00:28 CET | root | number | | important=yes
pre | 3 | | do 01 jan 2015 15:01:34 CET | root | number | zypp(zypper) | important=no
post | 4 | 3 | do 01 jan 2015 15:02:03 CET | root | number | | important=no
pre | 5 | | za 28 feb 2015 14:13:37 CET | root | number | zypp(zypper) | important=yes
post | 6 | 5 | za 28 feb 2015 14:25:43 CET | root | number | | important=yes
pre | 7 | | za 28 feb 2015 14:42:55 CET | root | number | zypp(zypper) | important=no
post | 8 | 7 | za 28 feb 2015 14:42:56 CET | root | number | | important=no
pre | 9 | | za 28 feb 2015 14:42:58 CET | root | number | zypp(zypper) | important=no
post | 10 | 9 | za 28 feb 2015 14:43:00 CET | root | number | | important=no
pre | 11 | | za 28 feb 2015 14:43:01 CET | root | number | zypp(zypper) | important=no
post | 12 | 11 | za 28 feb 2015 14:43:03 CET | root | number | | important=no
pre | 13 | | za 28 feb 2015 14:43:08 CET | root | number | yast firewall |
post | 14 | 13 | za 28 feb 2015 14:43:09 CET | root | number | |
pre | 15 | | za 28 feb 2015 14:43:12 CET | root | number | zypp(zypper) | important=no
post | 16 | 15 | za 28 feb 2015 14:43:26 CET | root | number | | important=no
pre | 17 | | za 28 feb 2015 14:43:27 CET | root | number | zypp(zypper) | important=no
post | 18 | 17 | za 28 feb 2015 14:43:34 CET | root | number | | important=no
pre | 19 | | za 28 feb 2015 14:44:18 CET | root | number | zypp(zypper) | important=yes
post | 20 | 19 | za 28 feb 2015 14:44:41 CET | root | number | | important=yes
pre | 21 | | za 28 feb 2015 14:44:51 CET | root | number | zypp(zypper) | important=no
post | 22 | 21 | za 28 feb 2015 14:45:10 CET | root | number | | important=no
pre | 23 | | za 28 feb 2015 14:45:13 CET | root | number | zypp(zypper) | important=no
post | 24 | 23 | za 28 feb 2015 14:45:14 CET | root | number | | important=no
pre | 25 | | za 28 feb 2015 14:45:15 CET | root | number | yast firewall |
post | 26 | 25 | za 28 feb 2015 14:45:16 CET | root | number | |
Elke snapshot heeft zijn eigen ID (in het voorbeeld hierboven van ID 0 tot en met 26). Met de volgende opdracht wis je alle snapshots met ID's tussen 1 en 999. In ons geval veel te veel, maar bij een poging om een snapshot met een onbestaande ID te wissen, krijg je enkel een onschuldige foutmelding. Het snapshot met het ID 0 wis je nooit, want dit is uw huidig systeem.
dany@linux-oj7m:~> su -c 'for i in `seq 1 999`; do snapper delete $i; done'
Wachtwoord:
Ongeldige momentopname.
Ongeldige momentopname.
Ongeldige momentopname.
Ongeldige momentopname.
Ongeldige momentopname.
...