Pour créer un sous volume
btrfs subvolume create NOM_DU_SOUS-VOLUME
Pour faire un snapshot du sous volume
btrfs subvolume snapshot NOM_DU_SOUS-VOLUME NOM_SNAPSHOT
Pour afficher la liste des sous volume
btrfs subvolume list /chemin/du/montage
Pour affiche des infos sur un sous volumes ou un snaphot
btrfs subvolume show /chemin/du/sous-volume
Un snapshot est aussi un sous volume, on peut très bien supprimer son parent sans poser de problème
Faire un checkdisk sans modif
btrfsck /dev/sda1
Faire un checkdisk avec option de réparation
btrfs check --repair /dev/sda1
Vérifier le checksum des blocksd
btrfs scrub start /dev/sda1
Vous pouvez voir l’avancement avec la commande suivante
btrfs scrub status /dev/sda1
Pour arrêter le scrub
btrfs scrub cancel /dev/sda1
Hugo Mills on the btrfs mailing list wrote:
Let’s assume that you don’t have a physical device failure (which
is a different set of tools – mount -odegraded, btrfs dev del
missing).
First thing to do is to take a btrfs-image -c9 -t4 of the
filesystem, and keep a copy of the output to show josef. smile
Then start with -orecovery and -oro,recovery for pretty much
anything.
If those fail, then look in dmesg for errors relating to the log
tree – if that’s corrupt and can’t be read (or causes a crash), use
btrfs-zero-log.
If there’s problems with the chunk tree – the only one I’ve seen
recently was reporting something like “can’t map address” – then
chunk-recover may be of use.
After that, btrfsck is probably the next thing to try. If options
-s1, -s2, -s3 have any success, then btrfs-select-super will help by
replacing the superblock with one that works. If that’s not going to
be useful, fall back to btrfsck –repair.
Finally, btrfsck –repair –init-extent-tree may be necessary if
there’s a damaged extent tree. Finally, if you’ve got corruption in
the checksums, there’s –init-csum-tree.
Hugo.
Dans le cas d’une conversion d’une partition racine, il faudra booter sur un live système.
1ère vérification, repérer le disque, son UUID, sa config fstab
Avec mount
mount /dev/sda2 on / type ext4 (rw,noatime,errors=remount-ro,data=ordered)
L’UUID
blkid /dev/sda2 /dev/sda2: UUID="3b3f3e41-c1cf-437f-a90f-80aeda99110d" TYPE="ext4" PARTUUID="8d9a85bd-2d6f-4412-b375-2bcb33859c26"
On doit le retrouver dans le /etc/fstab
vi /etc/fstab # <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda2 during installation UUID=3b3f3e41-c1cf-437f-a90f-80aeda99110d / ext4 noatime,errors=remount-ro 0 1
Lancer la conversion
btrfs-convert /dev/sda2
Monter le disque pour vérifier que tout s’est bien passé
mount /dev/sda2 /mnt/mon_disque
Si vous constatez des problèmes
umount /mnt/mon_disque btrfs-convert -r /dev/sda2
Si tout vous semble ok, supprimez la possibilité de revenir en ext4 afin de ne pas alourdir le système et gagner en performance
rm -fr /mnt/mon_disque/ext2_saved btrfs subvolume delete /ext2_saved btrfs balance start /mnt/mon_disque
Maintenant, il va falloir mettre à jour votre fstab sinon votre système ne redémarrera pas.
Options de montage
OPTION DE MONTAGE PROPRES À BTRFS | RÔLE |
autodefrag | Autorise la défragmentation en arrière plan |
compress=zlib | La compression la plus importante. Par défaut |
compress=lzo | La compression la plus rapide |
compress=no | Pas de compression |
degraded | Utilisé dans le cas des RAID. Permet de monter le volume même si certains disques sont manquants |
discard | Utilise le TRIM pour les disques SSD |
recovery | Lance la réparation automatique après le montage. A utilise si le volume ne veut plus se monter. un fois monté réaliser un scrub pour réparer les erreurs. (Ne fonctionne qu’avec les volumes crées avec la version 3.2 ou +) |
ssd | Utilise l’optimisation pour disques SSD de Btrfs. C’est utilisé par défaut si votre système reconnaît le SSD. Cette option ne lance pas le TRIM ! |
subvol=/chemin/vers/subvolume | Permet de monter un subvolume |
subvolid=id | Permet de monter un subvolume par son id. La racine a un id=0 |
Pour un ssd par exemple
mount /dev/sda2 -o rw,noatime,ssd,discard,autodefrag,compress=lzo,space_cache,inode_cache /mnt/mon_disque
Pour hdd
mount /dev/sda2 -o rw,noatime,compress=lzo,autodefrag
Dans un fichier fstab, refaite la commande blkid et mettez à jour votre fstab
UUID=a69d9182-f4c7-4276-b35d-7d5f9bd50a57 / btrfs rw,noatime,ssd,discard,autodefrag,compress=lzo 0 0
Mettre à jour grub
mount /dev/sda2 /mnt mount /dev/sda1 /mnt/boot/efi for fs in proc sys dev dev/pts; do mount --bind /$fs /mnt/$fs; done chroot /mnt update-initramfs -u -k all update-grub
La suite peut aider mais pas nécessaire normalement.
With Grub Legacy we need to modify root=UUID value in menu.lst file to btrfs partition’s manually. I used the following lines for Grub’s menu.lst file.
title Linux 2.6.32.67 uuid 89591593-766e-4565-9d5c-017fb0e33298 kernel /vmlinuz-2.6.32.67 root=UUID=a90c79b1-5883-44cc-9e74-752db9ca764d ro initrd /initrd.img-2.6.32.67
In this example, a90c79b1-5883-44cc-9e74-752db9ca764d is the UUID of btrfs partition and 89591593-766e-4565-9d5c-017fb0e33298 is UUID of /boot partition.
Also, I used following lines for my /etc/fstab file.
/dev/sda3 /boot ext4 defaults 0 0 /dev/sda1 / btrfs defaults 0 1
As you can see, I just wrote a path (/dev/sda1) instead of UUID as described in the referenced site.
Update initrd images Because some scripts and hooking are added to initramfs, initrd images in /boot directory should be updated.
I could not update them with command (i.e. update-initramfs -u -k all) described in the referenced site. It was guessed due to the kernel version difference between Live USB and my original installation. I designated the kernel version as a parameter like below and it worked.
update-initramfs -u -k 2.6.32.67
Si votre grub est coincé au redémarrage
grub>ls #pour lister les partition set root=(hd0,gpt2) # faite TAB en cours de frappe montre pas mal d'info sur la partition à choisir) linux /vmlinuz root=/dev/sda2 ro initrd /initrd.img boot
ensuite, pour réparer grub
update-grub
# btrfs-list: a wrapper to btrfs-progs to show a nice overview of your btrfs subvolumes and snapshots, a la 'zfs list' # # Check for the latest version at: # https://github.com/speed47/btrfs-list # git clone https://github.com/speed47/btrfs-list.git # or wget https://raw.githubusercontent.com/speed47/btrfs-list/master/btrfs-list -O btrfs-list # or curl -L https://raw.githubusercontent.com/speed47/btrfs-list/master/btrfs-list -o btrfs-list
– source: https://kinvolk.io/docs/flatcar-container-linux/latest/setup/debug/btrfs-troubleshooting/
Disable copy-on-write
Copy-On-write isn’t ideal for workloads that create or modify many small files, such as databases. Without disabling COW, you can heavily fragment the file system as explained above.
The best strategy for successfully running a database in a container is to disable COW on directory/volume that is mounted into the container.
The COW setting is stored as a file attribute and is modified with a utility called chattr. To disable COW for a MySQL container’s volume, run:
chattr -R +C /var/lib/mysql
The directory /var/lib/mysql is now ready to be used by a Docker container without COW. Let’s break down the command:
-R indicates that want to recursively change the file attribute +C means we want to set the NOCOW attribute on the file/directory
To verify, we can run:
$ lsattr /var/lib/ ---------------- /var/lib/portage ---------------- /var/lib/gentoo ---------------- /var/lib/iptables ---------------- /var/lib/ip6tables ---------------- /var/lib/arpd ---------------- /var/lib/ipset ---------------- /var/lib/dbus ---------------- /var/lib/systemd ---------------- /var/lib/polkit-1 ---------------- /var/lib/dhcpcd ---------------- /var/lib/ntp ---------------- /var/lib/nfs ---------------- /var/lib/etcd ---------------- /var/lib/docker ---------------- /var/lib/update_engine ---------------C /var/lib/mysql