logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
doc:systeme:btrfs [14/03/2014 17:33]
louispolaire [BTRFS]
doc:systeme:btrfs [01/07/2023 08:06] (Version actuelle)
Croutons [Références]
Ligne 4: Ligne 4:
   * Niveau requis : {{tag>​avisé}}   * Niveau requis : {{tag>​avisé}}
   * Commentaires : //Les principes et commandes principales pour utiliser le BTRFS, les snapshots, les sauvegardes...//​   * Commentaires : //Les principes et commandes principales pour utiliser le BTRFS, les snapshots, les sauvegardes...//​
-  * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|La ligne de commande]] ; [[:​doc:​systeme:​sauvegarde|Les sauvegardes]] ; [[:​doc:​systeme:​partition|Le partitionnement]] ; [[:​doc:​systeme:​fstab|Le montage des partitions]]:​-) +  * [[:​doc:​systeme:​sauvegarde|Les sauvegardes]] ; [[:​doc:​systeme:​partition|Le partitionnement]] ; [[:​doc:​systeme:​fstab|Le montage des partitions]]:​-) 
-  * Suivi : {{tag>​à-placer}} ​{{tag>​à-tester}} +  * Suivi : {{tag>​à-tester}} 
-    * Création par **louispolaire** 12/​03/​2014 +    * Création par [[user>louispolaire]] le 12/​03/​2014 
-    * Testé par <...le <...> FIXME+    * Testé par ...le ....
   * Commentaires sur le forum : [[http://​debian-facile.org/​viewtopic.php?​id=8616 | Lien vers le forum concernant ce tuto]] ((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))   * Commentaires sur le forum : [[http://​debian-facile.org/​viewtopic.php?​id=8616 | Lien vers le forum concernant ce tuto]] ((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
 +
 +
 +
 +
 +
 +Ce Tuto est divisé en trois parties
 +  * Cette première partie présente les principes du  Btrfs et les commandes de base. À la fin de ce tuto vous serez capable de comprendre la terminologie de Btrfs, de créer un volume et de gérer les subvolumes et snapshots.
 +  * [[:​doc:​systeme:​btrfs-root-install-subvol|La deuxième partie présente l'​installation de Debian dans un subvolume]]. À la fin de ce tuto vous serez capable d'​installer Debian dans un subvolume et de modifier Grub pour y booter.
 +  * [[:​doc:​systeme:​btrfs-sauvegarde|La troisième partie présente différentes méthodes pour réaliser des sauvegardes des subvolumes]]. A la fin de cette partie vous aurez des pistes pour élaborer une stratégie de backup de vos données sur Btrfs. ​
  
  
Ligne 28: Ligne 37:
 === RAID logiciel 0,1 & 10 === === RAID logiciel 0,1 & 10 ===
  
-Btrfs gère le RAID en logiciel, c-a-d la réplication des données sur plusieurs disques. Pour l'​instant Btrfs gère bien 3 types de RAID:+Btrfs gère le RAID en logiciel, c-a-d la réplication des données sur plusieurs disques. ​Pour la théorie voir ici : https://​fr.wikipedia.org/​wiki/​RAID_%28informatique%29 
 +Pour l'​instant Btrfs gère bien 3 types de RAID:
  
-  * RAID-0 : +  * RAID-0 : {{/​file-R0ab608c6eef8e74f926f9c1e89753a99.png?​150}}
     Une forme de RAID qui ne permet pas de réparer les erreurs, mais qui répartit une seule copie des données sur plusieurs volumes. Il y a un gain de performance (2X) en lecture et en écriture si les deux volumes sont sur des disques distincts. ​     Une forme de RAID qui ne permet pas de réparer les erreurs, mais qui répartit une seule copie des données sur plusieurs volumes. Il y a un gain de performance (2X) en lecture et en écriture si les deux volumes sont sur des disques distincts. ​
-  * RAID-1 : +  * RAID-1 : {{/​file-R595a2d853196c5b38ceee5d98032baeb.png?​150}}
     Une forme de RAID qui stocke 2 copies complètes sur chacun des disques. Btrfs nécessite au minimum deux partitions pour utiliser le RAID-1. Les métadonnées sont en RAID-1 par défaut dans le cas d'un seul disque. On peut donc utiliser le RAID-1 avec Btrfs sur un seul disque. Il suffit d'y avoir 2 partitions (/dev/sda1 et /dev/sda2) et Btrfs répliquera les données entre ces deux partitions. Évidemment en cas de panne du disque ce type de RAID-1 ne sert à rien. Il faut utiliser 2 disques pour être protégé contre ce type de pannes.     Une forme de RAID qui stocke 2 copies complètes sur chacun des disques. Btrfs nécessite au minimum deux partitions pour utiliser le RAID-1. Les métadonnées sont en RAID-1 par défaut dans le cas d'un seul disque. On peut donc utiliser le RAID-1 avec Btrfs sur un seul disque. Il suffit d'y avoir 2 partitions (/dev/sda1 et /dev/sda2) et Btrfs répliquera les données entre ces deux partitions. Évidemment en cas de panne du disque ce type de RAID-1 ne sert à rien. Il faut utiliser 2 disques pour être protégé contre ce type de pannes.
-  * RAID-10+  * RAID-10 ​: {{/​file-R50e12f7892e267e5d020f7fd98009870.png?​250}}
     Une forme de RAID qui stocke 2 copies complètes des données et répartit également chaque copie sur plusieurs volumes d'où un gain de performance. Il faut au minimum 4 volumes pour pouvoir utiliser le RAID-10.     Une forme de RAID qui stocke 2 copies complètes des données et répartit également chaque copie sur plusieurs volumes d'où un gain de performance. Il faut au minimum 4 volumes pour pouvoir utiliser le RAID-10.
   * RAID-5 et RAID-6 ne sont pas encore totalement implémentés dans Btrfs.   * RAID-5 et RAID-6 ne sont pas encore totalement implémentés dans Btrfs.
Ligne 53: Ligne 63:
 Sauvegardez vos données !!</​note>​ Sauvegardez vos données !!</​note>​
 <note important>​Btrfs est en cours de développement. Bien que le format du système de fichier soit considéré comme stable par les développeurs ((https://​btrfs.wiki.kernel.org/​index.php/​Main_Page#​Stability_status)),​ les outils qui permettent de le manipuler sont eux en développement.\\ ​ <note important>​Btrfs est en cours de développement. Bien que le format du système de fichier soit considéré comme stable par les développeurs ((https://​btrfs.wiki.kernel.org/​index.php/​Main_Page#​Stability_status)),​ les outils qui permettent de le manipuler sont eux en développement.\\ ​
-Il est dont **important d'​utiliser un kernel __à jour__ (>= 3.12)** et **la version la plus à jour de Btrfs-tools ( 3.12-1 à ce jour)**</​note>​+Il est donc **important d'​utiliser un kernel __à jour__ (>= 3.12)** et **la version la plus à jour de Btrfs-tools ( 3.12-1 à ce jour)**</​note>​
  
 ===== Installation ===== ===== Installation =====
Ligne 85: Ligne 95:
 Si on a une partition /dev/sdX1 en ext4 Si on a une partition /dev/sdX1 en ext4
  
-<code root>​umount /dev/sdX1 +<code root>​umount /dev/sdX1</​code>​ 
-fsck.ext3 -f /dev/sdX1 +<code root>fsck.ext3 -f /dev/sdX1</​code>​ 
-btrfs-convert /dev/sdX1 +<code root>btrfs-convert /dev/sdX1</​code>​ 
-mount /dev/sdX1 /​point-de-montage</​code>​+<code root>mount /dev/sdX1 /​point-de-montage</​code>​
  
-Remontez manuellement la partition et vérifiez que tous les fichiers sont là. Si la partition se chargeait via /etc/fstab modifiez le [[syntax#En utilisant fstab|(cf Section sur fstab)]]. À la racine de la partition /dev/sdX1 vous trouverez un subvolume "​ext2_saved"​ qui comporte une image de l'​ancien système de fichiers.+Remontez manuellement la partition et vérifiez que tous les fichiers sont là. Si la partition se chargeait via /etc/fstab modifiez le [[#en-utilisant-etc-fstab|(cf Section sur fstab)]]. À la racine de la partition /dev/sdX1 vous trouverez un subvolume "​ext2_saved"​ qui comporte une image de l'​ancien système de fichiers.
  
 Si tout va bien et que vous avez tous vos fichiers on supprime cette image et le subvolume qui la contient : Si tout va bien et que vous avez tous vos fichiers on supprime cette image et le subvolume qui la contient :
-<code root>rm /​point-de-montage/​ext2_saved/​* +<code root>rm /​point-de-montage/​ext2_saved/​*</​code>​ 
-btrfs subvolume delete /​ext2_saved +<code root>btrfs subvolume delete /ext2_saved</​code>​ 
-btrfs balance start /​point-de-montage</​code>​+<code root>btrfs balance start /​point-de-montage</​code>​
  
 Si tout ne va pas bien, qu'il y a eu un problème ou que vous avez les jetons :-P : Si tout ne va pas bien, qu'il y a eu un problème ou que vous avez les jetons :-P :
-<code root>​umount /dev/sdX1 +<code root>​umount /dev/sdX1</​code>​ 
-btrfs-convert -r /​dev/​SdX1</​code>​+<code root>btrfs-convert -r /​dev/​SdX1</​code>​
  
 ==== Options de montage ==== ==== Options de montage ====
Ligne 142: Ligne 152:
 Pour voir l'​espace utilisé dans le volume Btrfs monté dans /mnt : Pour voir l'​espace utilisé dans le volume Btrfs monté dans /mnt :
 <code user>​btrfs filesystem df /​mnt</​code>​ <code user>​btrfs filesystem df /​mnt</​code>​
-<​file>​Data,​ single: total=27.00GiB,​ used=24.28GiB+<​file ​config retour de la commande>Data, single: total=27.00GiB,​ used=24.28GiB
 System, DUP: total=32.00MiB,​ used=4.00KiB System, DUP: total=32.00MiB,​ used=4.00KiB
 Metadata, DUP: total=2.50GiB,​ used=1.70GiB</​file>​ Metadata, DUP: total=2.50GiB,​ used=1.70GiB</​file>​
Ligne 150: Ligne 160:
 Pour avoir des informations sur le disque, l'UUID du volume etc : Pour avoir des informations sur le disque, l'UUID du volume etc :
 <code root>​btrfs filesystem show /​mnt</​code>​ <code root>​btrfs filesystem show /​mnt</​code>​
-<​file>​Label:​ none  uuid: a69d9182-f4c7-4276-b35d-7d5f9bd50a57+<​file ​config retour de la commande>Label: none  uuid: a69d9182-f4c7-4276-b35d-7d5f9bd50a57
  Total devices 1 FS bytes used 25.98GiB  Total devices 1 FS bytes used 25.98GiB
  devid ​   1 size 115.43GiB used 32.06GiB path /dev/sdb6  devid ​   1 size 115.43GiB used 32.06GiB path /dev/sdb6
Ligne 157: Ligne 167:
  
 Dans le cas d'un volume en RAID (ici RAID 10) on peut voir la répartition des données sur les différents disques : Dans le cas d'un volume en RAID (ici RAID 10) on peut voir la répartition des données sur les différents disques :
-<​file>​Label:​ stockage ​ uuid: ca7fc4a0-3bf6-4d86-b4b9-3ef025af5d31+<​file ​config retour de la commande>Label: stockage ​ uuid: ca7fc4a0-3bf6-4d86-b4b9-3ef025af5d31
  Total devices 4 FS bytes used 350.62GiB  Total devices 4 FS bytes used 350.62GiB
  devid ​   1 size 931.51GiB used 182.04GiB path /dev/sdd  devid ​   1 size 931.51GiB used 182.04GiB path /dev/sdd
Ligne 169: Ligne 179:
 On peut aussi voir si le disque a fait des erreurs On peut aussi voir si le disque a fait des erreurs
 <code root>​btrfs device stats /​dev/​sdX</​code>​ <code root>​btrfs device stats /​dev/​sdX</​code>​
-<​file>​[/​dev/​sdX].write_io_errs ​  0+<​file ​config retour de la commande>​[/​dev/​sdX].write_io_errs ​  0
 [/​dev/​sdX].read_io_errs ​   0 [/​dev/​sdX].read_io_errs ​   0
 [/​dev/​sdX].flush_io_errs ​  0 [/​dev/​sdX].flush_io_errs ​  0
Ligne 181: Ligne 191:
 Pour créer un subvolume : Pour créer un subvolume :
 <code root>​btrfs subvolume create NOM</​code>​ <code root>​btrfs subvolume create NOM</​code>​
 +
 +Un subvolume apparaît dans votre gestionnaire de fichiers comme un dossier. Vous pouvez le manipuler comme tel.
 +Par contre la suppression devra se faire avec **btrfs subvolume delete SNAP**.
  
 Pour avoir la liste des subvolumes dans le volume Btrfs : Pour avoir la liste des subvolumes dans le volume Btrfs :
 <code root>​btrfs subvolume list /​mnt</​code>​ <code root>​btrfs subvolume list /​mnt</​code>​
 +
 +Pour supprimer un subvolume :
 +<code root>​btrfs subvolume delete NOM</​code>​
  
 ==== Monter un subvolume ==== ==== Monter un subvolume ====
Ligne 196: Ligne 212:
 Pour réaliser un snapshot du subvolume NOM : Pour réaliser un snapshot du subvolume NOM :
 <code root>​btrfs subvolume snapshot NOM SNAP</​code>​ <code root>​btrfs subvolume snapshot NOM SNAP</​code>​
 +
 +Il est possible de réaliser des snapshots en lecture seule avec l'​option **-r**.
 +
 +Un snapshot est un subvolume comme un autre, c'est juste sa méthode de création qui change.
 +En tant que subvolume vous pouvez le manipuler comme un dossier, avec cd, ls, mv etc... La suppression devra se faire avec **btrfs subvolume delete SNAP**.
 +
 +Par exemple si vous voulez remplacer le subvolume NOM par le subvolume(ex-snapshot) SNAP
 +<code user>ls /​point-de-montage</​code>​
 +<​code>​NOM SNAP</​code>​
 +<code user>cd /​point-de-montage</​code>​
 +<code user>mv NOM NOM_old</​code>​
 +<code user>mv SNAP NOM</​code>​
 +<code user>ls /​point-de-montage/</​code>​
 +<​code>​NOM NOM_old</​code>​
 +Et on peut faire un snapshot de snapshot...
 +<code root>
 +btrfs subvolume snapshot NOM NOM_snap</​code>​
 +<code root>​btrfs subvolume snapshot NOM_snap NOM_snap_snap</​code>​
 +<code root>ls /​point-de-montage</​code>​
 +<​code>​NOM NOM_old NOM_snap NOM_snap_snap</​code>​
 +
 +Et pendant ce temps là si aucune modification n'est faire dans les subvolumes/​snapshots... L'​espace libre sur le disque reste le même.
  
 ===== La compression ===== ===== La compression =====
Ligne 246: Ligne 284:
  
 Il est aussi possible de supprimer des disques si nécessaire. Il est aussi possible de supprimer des disques si nécessaire.
- 
-===== Installation de / (root) dans un volume Btrfs ===== 
- 
-Depuis Wheezy, Debian gère le Btrfs lors du processus d'​installation. Il y a trois méthodes au moins pour installer Debian sur un système de fichiers Btrfs : 
-  * Utiliser le Btrfs comme un système de fichiers classique et installer Debian à la racine du volume. 
-    * C'est la méthode la plus simple, mais c'est dommage. L’intérêt de Btrfs c'est de répartir ses données dans différents subvolumes de façon à pouvoir en réaliser des snapshots. Mettre / à la racine du Btrfs ne permet pas cela. 
-    * Le processus d'​installation est le même que pour un autre système de fichiers. Il faudra cependant revoir les options de montages dans le fstab. 
-    * Il sera éventuellement possible de déplacer tous les fichiers de / dans un subvolume par la suite (avec un cp -Ra par exemple). **MAIS ATTENTION !!!** Il faudra apporter des modifications au grub.cfg sinon le système ne bootera plus automatiquement. Cet aspect sera traité par la suite. 
-  * Utiliser un méthode d'​installation via chroot. La méthode est flexible donc l'​installation du système de base directement dans un subvolume sera aisé. 
-    * C'est la méthode la plus élégante, puisqu'​elle est très flexible. 
-    * Je ne vais pas détailler cette méthode ici, il y a des tutoriels bien faits [[:​doc:​install:​debootstrap-chroot|(par exemple ici)]]. Sachez juste qu'il suffit au moment du montage des partitions d'​ajouter dans les options de montage **subvol=//​chemin/​vers/​le/​subvolume/​racine//​** pour utiliser le subvolume comme racine. 
-    * Grub sait maintenant bien gérer le Btrfs même à l'​intérieur d'un subvolume. Par contre, dans le cas d'un multi-boot, os-prober ne va pas fouiller dans tous les subvolumes, donc votre nouveau système ne saura pas trouvé par la commande update-grub d'un autre système. [[syntax#​GRUB|Je propose une méthode plus bas]]. 
-    * La méthode d'​installation via chroot est utilisée par Arch et Gentoo entre autre. Il est donc simple d'​installer ces distributions dans un subvolume. 
-  * Utiliser le mode d'​installation expert pour installer Debian dans un subvolume. 
-    * La méthode est moins élégante que la précédente et c'est pour ça que je vais la détailler. :-P 
-    * Il est possible d'​utiliser un cd d'​installation de Wheezy, même si, encore une fois, il vaut mieux avoir un kernel à jour. Rien ne vous empêche d'​activer les dépôts de testing ou sid après installation. 
- 
-==== Installation dans un subvolume à l'aide du cd d'​installation Debian ==== 
- 
-On se place ici dans le cas où vous avez un système déjà bootable (par exemple Debian sur une partition ext4 qui boote avec Grub). Je suppose que vous avez de l'​espace sur votre disque pour créer une partition de 20Go environs en Btrfs. (le but étant de tester) 
- 
-Si vous utilisez un disque vierge, c'est pareil au niveau de l'​installation,​ par contre Grub ne gère pas les disques Btrfs sans table de partition (mkfs.Btrfs /dev/sda). Il vous faut créer un table des partitions avec un MBR et juste une partition primaire sur tout le disque (ou avec un swap aussi si vous voulez). 
-<​note>​Donc : 
-  * Pour un disque bootable il faut une table des partitions (MBR, GPT..) et donc le volume ​ Btrfs sera du type /dev/sdaX 
-  * Pour un disque de donnée vous pouvez vous passer de la table de partitions, le volume Btrfs sera de type /dev/sda, mais le disque ne sera pas bootable seul. Rien ne vous empêche cependant de booter depuis un autre disque. Par contre l'​installateur de Debian ne fonctionnera pas sur ce type de disque, il faudra passer pas la méthode chroot. 
-</​note>​ 
- 
-Dans le cas où il y aurais déjà des données ou un système d'​exploitation dans le volume Btrfs cette méthode marche aussi. 
- 
-Rebootez sur le CD ou l'USB d'​installation. 
- 
-Allez dans les Options Avancées et choisissez l'​Installation Expert (graphique ou pas) 
- 
-Faites l'​installation comme normalement jusqu'​au partitionnement. 
-<​file>​Choisir la langue 
-Configurer le clavier 
-Détecter et monter le CD 
-Charger des composants d'​installation à partir du CD 
-Détecter le réseau 
-Configurer le réseau 
-Créer les utilisateurs et choisir les mots de passe 
-Configurer l'​horloge 
-Détecter les Disques</​file>​ 
- 
-Une fois les disques détectés : 
-<​file>​Exécuter un shell (ligne de commande)</​file>​ 
- 
-On monte le volume Btrfs dans /mnt 
-<code root>​mount -t btrfs -o ..options.. /dev/sdaX /​mnt</​code>​ 
- 
-On va créer les subvolumes où l'on désire installer Debian : 
-<code root>cd /mnt 
-btrfs subvolume create debian 
-cd debian 
-btrfs subvolume create root 
-btrfs subvolume create home 
-</​code>​ 
- 
-Si vous êtes adepte d'un /usr séparé ajoutez le subvolume correspondant. Après c'est une histoire d'​organisation. 
-<​note>​Étant donné que les snapshots ne sont pas récursifs il peut être intéressant de mettre /proc et /var dans des subvolumes afin de limiter la taille des snapshots.</​note>​ 
- 
-On monte les subvolumes dans /target : 
-<code root>cd / 
-mkdir -p /target 
-mount -t btrfs -o ..options..,​subvol=debian/​root /dev/sdaX /target 
-mkdir /​target/​home 
-mount -t btrfs -o ..options..,​subvol=debian/​home /dev/sdaX /​target/​home 
-(umount /mnt) 
-cat /​proc/​self/​mountinfo 
-exit</​code>​ 
- 
-La dernière commande devrais vous donner la liste des volumes montés y compris les subvolumes. 
- 
-Et on se lance pour l'​installation du système de base (qui va s'​installer dans /target donc...) 
-<​file>​Installer le système de base</​file>​ 
- 
-Normalement l'​installateur va se plaindre que vous n’êtes pas passés par l'​étape "​Partitionner les disques"​ 
-Choisissez "​Revenir en arrière"​ jusqu’à qu'il lâche l'​affaire (2 fois) et installe le système de base. 
- 
-Et voilà ! le système s'​installe et le reste de l'​installation peut se faire normalement. 
- 
-==== GRUB ==== 
- 
-Grub est maintenant capable d'​ajouter lui même les options de montage dans grub.cfg. 
-Donc si vous installez un système tout neuf il n'y aura pas de soucis, il s'​occupera de détecter que le /boot est dans un subvolume, écrira dans le MBR et tout ira bien. 
- 
-<​note>​Grub est même capable de booter depuis un /boot compressé en lzo ou zlib ! \\  
-Ce n'est pas le cas de Syslinux. Pour utiliser syslinux il vous faudra empêcher la compression de /boot : 
-<​code>​cd /​subvolume/​racine/​ 
-mv /boot /boot-old 
-mkdir /boot 
-chattr -c /boot 
-mv /boot-old/* /boot/ 
-rm -R /​boot-old</​code></​note>​ 
- 
-Ceci dit je vais quand même expliquer ici comment configurer le grub.cfg, pour tous les autres cas et au cas où vous fassiez un erreur. 
- 
-<note warning> **ATTENTION** assurez vous d'​avoir une solution de secours **__AVANT__** d'​installer votre système. \\  
-Personne n'est à l'abri d'une faute de frappe. \\  
-Et une faute de frappe peut rendre votre système non-bootable. \\  
-Donc **munissez vous d'un LiveCD ou d'un LiveUSB** afin de pouvoir avoir accès à votre grub.cfg en cas de pb.</​note>​ 
- 
-Avant de vous lancer soyez sur que vous avez bien lu les tutoriels suivants : 
-  * [[:​doc:​systeme:​grub2|Grub2 vision d'​ensemble]] 
-  * [[:​doc:​systeme:​grub2:​installation|Grub2 l'​installation]] 
-  * [[:​doc:​systeme:​grub2:​configuration-2|Scripts manuels]] 
- 
-Dans le cas ou vous voudriez que votre "​vieux"​ système continue de booter depuis le mbr et que son grub.cfg s'​occupe de faire booter le "​nouveau"​ système sur Btrfs : 
- 
-Toujours dans l'​installateur Debian installez grub. **__Mais n'​installez pas le programme de démarrage GRUB sur le secteur d'​amorçage !__** 
-<​note>​Vous pourrez désinstaller grub une fois que vous aurez booté le "​nouveau"​ système. \\  
-Vous pouvez aussi continuer sans programme d’amorçage et utiliser le modèle de fichier 40_custom donné ci dessous **à vos risques et périls**</​note>​ 
- 
-<​file>​Installer le programme de démarrage GRUB sur le secteur d'​amorçage ? 
--> Non 
-puis.. 
-Périphérique où sera installé le programme de démarrage 
-Laissez le champ vide</​file>​ 
-De cette façon on va pouvoir utiliser directement la partie concernant le boot du "​nouveau"​ système du grub.cfg dans le "​vieux"​ grub.cfg. 
- 
-<​file>​Terminer l'​installation</​file>​ 
- 
-Redémarrez votre "​vieux"​ système 
- 
-Ouvrez le grub.cfg du nouveau système : 
-<code root>​mount /dev/sdaX -o ..options.. /mnt 
-cd /​mnt/​debian/​root/​boot/​grub 
-mousepad grub.cfg</​code>​ 
- 
-Copiez la partie après ### BEGIN ... 
-<file bash> 
-menuentry '​Debian GNU/Linux, avec Linux 3.2.0-4-amd64'​ --class debian --class gnu-linux --class gnu --class os { 
- load_video 
- insmod gzio 
- insmod part_gpt 
- insmod Btrfs 
- set root='​(hd0,​gpt3)'​ 
- search --no-floppy --fs-uuid --set=root 9201243d-1559-4b27-8973-070aeefa1079 
- echo '​Chargement de Linux 3.2.0-4-amd64 ...' 
- linux /​debian/​root/​boot/​vmlinuz-3.2.0-4-amd64 root=UUID=9201243d-1559-4b27-8973-070aeefa1079 ro rootflags=subvol=debian/​root ​ quiet 
- echo '​Chargement du disque mémoire initial ...' 
- initrd /​debian/​root/​boot/​initrd.img-3.2.0-4-amd64 
-} 
-</​file>​ 
- 
-Il faut que vous pensiez à modifier/​vérifier les paramètres suivants : 
-  * set root='​(hd0,​gpt3)'​ pour adapter au numéro de votre partition 
-  * les UUIDs 
-  * il faut indiquer le chemin vers vmlinuz et initrd depuis la racine du volume Btrfs (**/​debian/​root/​**boot/​vmlinuz...) 
-  * ajouter une option de boot : **rootflags=subvol=//​chemin-vers-la-racine//​** 
- 
-Si vous n'avez pas installé Grub et n'avez donc pas de grub.cfg vous pouvez utiliser le schéma ci dessus en prenant soin de l'​adapter à votre système 
- 
- 
-Ouvrez 40_custom de votre "​vieux"​ système et collez y le menuentry précédent dûment modifié. 
-Attention à ne pas effacer les premières lignes ! 
-<code root>​nano /​etc/​grub.d/​40_custom</​code>​ 
-<file bash>#​!/​bin/​sh 
-exec tail -n +3 $0 
-# This file provides an easy way to add custom menu entries. ​ Simply type the 
-# menu entries you want to add after this comment. ​ Be careful not to change 
-# the 'exec tail' line above. 
-menuentry '​Debian GNU/Linux, avec Linux 3.2.0-4-amd64'​ --class debian --class gnu-linux --class gnu --class os { 
- load_video 
- insmod gzio 
- insmod part_gpt 
- insmod Btrfs 
- set root='​(hd0,​gpt3)'​ 
- search --no-floppy --fs-uuid --set=root 9201243d-1559-4b27-8973-070aeefa1079 
- echo '​Chargement de Linux 3.2.0-4-amd64 ...' 
- linux /​debian/​root/​boot/​vmlinuz-3.2.0-4-amd64 root=UUID=9201243d-1559-4b27-8973-070aeefa1079 ro rootflags=subvol=debian/​root ​ quiet 
- echo '​Chargement du disque mémoire initial ...' 
- initrd /​debian/​root/​boot/​initrd.img-3.2.0-4-amd64 
-} 
-</​file>​ 
-<code root>​chmod +x /​etc/​grub.d/​40_custom 
-update-grub</​code>​ 
- 
-<note warning> **Profitez en pour éditer le fstab du nouveau système :** 
-<code root>​nano /​mnt/​debian/​root/​etc/​fstab</​code>​ 
-<file fstab>#​l'​entrée pour la racine 
-UUID=a69d9182-f4c7-4276-b35d-7d5f9bd50a57 ​     /      Btrfs      rw,​noatime,​ssd,​discard,​autodefrag,​subvol=debian/​root ​     0      0 
-#​l'​entrée pour le home 
-UUID=a69d9182-f4c7-4276-b35d-7d5f9bd50a57 ​     /home      Btrfs      rw,​noatime,​ssd,​discard,​autodefrag,​subvol=debian/​home ​     0      0 
-#swap et tmpfs 
-swap... 
-tmpfs /tmp tmpfs default 0 0 
- 
-#Je vous conseille de monter le volume Btrfs à la racine quelque part afin d'y avoir accès facilement 
-UUID=a69d9182-f4c7-4276-b35d-7d5f9bd50a57 ​     /​home/​Btrfs ​     Btrfs      rw,​noatime,​ssd,​discard,​autodefrag,​nodev,​nosuid,​noexec,​subvolid=0 ​    ​0 ​     0 
-</​file></​note>​ 
- 
-Et voilà ! Au redémarrage vous aurez une entrée "​Debian GNU/Linux, avec Linux 3.2.0-4-amd64"​ dans votre menu Grub et ça devrais booter !! 
- 
-===== Backups incrémentales ===== 
- 
-L’intérêt d'​avoir la racine de son OS dans un subvolume est que l'on peut en faire des snapshots et booter dans ces snapshots en utilisant la methode ci dessus. 
-Par exemple : 
-<code root>cp 40_custom 41_debian2 
-chmod +x 41_debian2</​code>​ 
-Changer les subvolumes dans le menuentry pour correspondre au snapshot. 
-<code root>​update-grub</​code>​ 
- 
-C'est pratique pour : 
-  * Essayer un autre gestionnaire de fenêtre sans abîmer la config actuelle. 
-  * Essayer systemd (puisque c'est d'​actualité) 
-  * Faire des bêtises avec rm ... 
-  * Assurer ses arrières quand on est sous sid... 
-  * Ai-je besoin d'​énumérer toutes les raisons de casser son système ?? :-P 
-  ​ 
-Pour cela je vais présenter 2 méthodes, une qui sera basée sur des scripts et **cron** et l'​autre sur **snapper** qui est dans les dépôts 
- 
-==== Sur un même volume physique ==== 
- 
-Dans ce cas on veut faire des snapshot et les garder dans la même partition. Ça protège des erreurs de manipulation mais pas des pannes de disques. 
- 
-=== Snapper === 
- 
-Snapper est un programme qui gère les snapshots et qui a été développé par OpenSuse ((http://​snapper.io/​manpages/​snapper.html)). 
- 
-<code root> apt-get install snapper 
-man snapper</​code>​ 
- 
-Pour des snapshots automatiques de la racine : 
-<code root>​snapper -c root create-config /</​code>​ 
-Ceci va créer un subvolume /.snapshot à la racine et les snapshots seront placés dedans. 
-Les snaphots se font toutes les heures 
- 
-Vous pouvez éditer /​etc/​snapper/​configs/​root pour changer le nombre de snaphsots que snapper va garder au fil du temps. 
-<​file>#​ limits for timeline cleanup 
-TIMELINE_MIN_AGE="​1800"​ 
-TIMELINE_LIMIT_HOURLY="​10"​ 
-TIMELINE_LIMIT_DAILY="​10"​ 
-TIMELINE_LIMIT_MONTHLY="​10"​ 
-TIMELINE_LIMIT_YEARLY="​10"</​file>​ 
- 
-La configuration par défaut garde les 10 derniers snapshots (pris toutes les heures), 10 snapshots par jour, 10 snapshots par mois et 10 snapshots par an... Changez ces paramètres selon vos besoins. <​note>​ Sachant que la taille d'un snapshot sur le disque correspond aux modifications sur les fichiers entre le snapshot et son subvolume parent. Je vous laisse donc imaginer la place pris sur le disque d'un snapshot qui a un an !</​note>​ 
- 
-<​note>​ Notez encore une fois que les snapshots ne sont pas récursifs ! \\  
-Si vous avez /home dans un subvolume, alors votre /home ne sera pas snapshotté. 
-recréez alors une configuration pour home <code root>​snapper -c home create-config /​home</​code></​note>​ 
- 
-Voici ce que vous aurez une semaine après : 
-<code user>​snapper list</​code>​ 
-<​file>​Type ​  | #   | Pré # | Date                           | Utilisateur | Nettoyage | Description | Données utilisateur 
--------+-----+-------+--------------------------------+-------------+-----------+-------------+-------------------- 
-single | 0   ​| ​      ​| ​                               | root        |           | current ​    ​| ​                   ​ 
-single | 475 |       | jeu. 06 mars 2014 00:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 488 |       | ven. 07 mars 2014 00:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 501 |       | sam. 08 mars 2014 00:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 507 |       | dim. 09 mars 2014 00:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 519 |       | lun. 10 mars 2014 00:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 531 |       | mar. 11 mars 2014 00:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 538 |       | mer. 12 mars 2014 09:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 548 |       | mer. 12 mars 2014 19:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 549 |       | mer. 12 mars 2014 20:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 550 |       | mer. 12 mars 2014 21:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 551 |       | mer. 12 mars 2014 22:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 552 |       | mer. 12 mars 2014 23:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 553 |       | jeu. 13 mars 2014 12:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 554 |       | jeu. 13 mars 2014 13:17:02 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 555 |       | jeu. 13 mars 2014 14:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 556 |       | jeu. 13 mars 2014 16:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 557 |       | jeu. 13 mars 2014 17:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 558 |       | jeu. 13 mars 2014 18:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 559 |       | jeu. 13 mars 2014 19:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 560 |       | jeu. 13 mars 2014 20:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 561 |       | jeu. 13 mars 2014 21:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-single | 562 |       | jeu. 13 mars 2014 22:17:01 CET | root        | timeline ​ | timeline ​   |                    ​ 
-</​file>​ 
- 
-=== Manuellement === 
- 
-Le principe de base est simple : un [[:​doc:​programmation:​shell:​scripts|script bash]] et [[:​doc:​systeme:​crontab|cron]]. 
- 
-<code root>​btrfs subvolume snapshot /​home/​btrfs/​debian/​home /​home/​btrfs/​snapshots/​home-backup-$(date)</​code>​ 
- 
- 
-==== Entre deux volumes physiques ==== 
- 
-On a deux disques formatés en btrfs /dev/sda monté en /mnt/sda et /dev/sdb monté en /mnt/sdb. 
- 
-== Mise à jour initiale == 
- 
-On veut sauvegarder le subvolume home qui se trouve dans /​mnt/​sda/​home et l'​envoyer dans /mnt/sdb. 
- 
-On réalise un snapshot de home en lecture seule 
-<code root>​btrfs subvolume snapshot -r /​mnt/​sda/​home /​mnt/​sda/​home@a-envoyer</​code>​ 
- 
-On l'​envoie sur /mnt/sdb 
-<code root>​btrfs send /​mnt/​sda/​home@a-envoyer | btrfs receive /​mnt/​sdb/</​code>​ 
- 
-On a maintenant la configuration suivante : 
-^/dev/sda ^/dev/sdb ^ 
-|home| | 
-|home@a-envoyer|home@a-envoyer| 
- 
-On renomme les snapshots pour l'​étape suivante et on réalise un snapshot de home@a-envoyer qui ne soit pas en lecture seule : 
-<code root>mv /​mnt/​sda/​home@a-envoyer /​mnt/​sda/​home@envoye 
-mv /mnt /​sdb/​home@a-envoyer /​mnt/​sdb/​home@envoye 
-btrfs subvolume snapshot /​mnt/​sdb/​home@envoye /​mnt/​sdb/​home</​code>​ 
- 
-On a ainsi deux subvolumes home qui sont identiques sur sda et sdb. 
-^/dev/sda ^/dev/sdb ^ 
-|home|home| 
-|home@envoye|home@envoye| 
- 
-== Maintenant pour la mise a jour incrémentale : == 
- ​Après avoir fait des modification dans /​mnt/​sda/​home on réalise un nouveau snapshot en lecture seule : 
-<code root>​btrfs subvolume snapshot -r home home@a-envoyer</​code>​ 
-On a donc : 
-^/dev/sda ^/dev/sdb ^ 
-|home (modifié)|home| 
-|home@envoye|home@envoye| 
-|home@a-envoyer (modifié)| | 
- 
-On signifie à **btrf send** qu'il ne faut envoyer que les différences entre home@envoye et home@a-envoyer 
-<​note>​Ce qui est très intéressant parce que les différences ne se font pas au niveau des fichiers mais des clunks, ainsi si vous modifiez le une partie seulement d'un gros fichier, seuls les clunks correspondant aux modifications seront envoyés... du coup ça va __beaucoup__ plus vite.\\ ​ 
-Mais cela veut aussi dire qu'il est important que le subvolume home@envoye soit présent et identique sur les deux disques et en lecture seule.</​note>​ 
-<code root> btrfs send -p /​mnt/​sda/​home@envoye /​mnt/​sda/​home@a-envoyer | btrfs receive /​mnt/​sdb/</​code>​ 
- 
-On a maintenant : 
-^/dev/sda ^/dev/sdb ^ 
-|home (modifié)|home| 
-|home@envoye|home@envoye| 
-|home@a-envoyer (modifié)|home@a-envoyer(modifié)| 
- 
-Il ne reste plus qu'a faire le ménage pour se préparer à répéter cette itération : 
-<code root>​btrfs subvolume delete /​mnt/​sda/​home@envoye 
-mv /​mnt/​sda/​home@a-envoyer /​mnt/​sda/​home@envoye 
-btrfs subvolume delete /​mnt/​sdb/​home@envoye 
-mv /​mnt/​sdb/​home@a-envoyer /​mnt/​sdb/​home@envoye 
-btrfs subvolume delete /​mnt/​sdb/​home 
-btrfs subvolume snapshot /​mnt/​sdb/​home@a-envoyer /​mnt/​sdb/​home</​code>​ 
- 
-Ce qui nous donne : 
-^/dev/sda ^/dev/sdb ^ 
-|home (modifié)|home (modifié)| 
-|home@envoye (modifié)|home@envoye (modifié)| 
- 
-On est prêt à recommencer dès que /​mnt/​sda/​home sera modifié ! Je vous conseille un petit script et une tache cron pour automatiser tout ça. 
- 
- 
-==== Entre deux machines via ssh ==== 
- 
-Les principes de bases sont les mêmes. 
-Dans ce cas /mnt/sdb se trouve sur le serveur root@stockage.local 
- 
-Pour la mise a jour initiale : 
-<code root>​btrfs send /​mnt/​sda/​home@a-envoyer | ssh root@stockage.local /sbin/btrfs receive /​mnt/​sdb</​code>​ 
- 
-Pour la mise a jour incrémentale : 
-<code root>​btrfs send -p /​mnt/​sda/​home@envoye /​mnt/​sda/​home@a-envoyer | ssh root@stockage.local /sbin/btrfs receive /​mnt/​sdb</​code>​ 
- 
-Note : pour la lisibilité du tuto je me connecte en root sur le serveur, ce n'est pas la meilleure idée. 
- 
-<​note>​Il est crucial que les subvolumes home@envoye soient identiques sur le serveur et le client. Sinon la transaction échouera. Je conseille de vérifier que le transfert s'est bien passé comparant les md5sums. Inconvénient : c'est long et ça utilise le processeur.\\ 
-Il n'y a pas, à ma connaissance,​ de système de checksum accessible à l'​utilisateur intégré à btrfs. 
-J'​utilise donc un script qui compare les md5sums des ls chez le client et le serveur. 
-Sur le client : <code root>​export LANG=C ​ 
-cd /​mnt/​sda/​home@envoye 
-ls -lnARs > /tmp/md5 
-md5sum /​tmp/​md5</​code>​ 
- 
-Sur le Serveur: <code root>ssh root@stockage.local "​LANG=C cd /​mnt/​sdb/​home@envoye && ls -lnARs"​ > /tmp/md5 
-md5sum /​tmp/​md5</​code>​ 
- 
-Si les deux md5sum ne sont pas identiques alors il faut refaire une mise à jour complète.</​note>​ 
- 
  
 ===== Références ==== ===== Références ====
   * [[https://​btrfs.wiki.kernel.org|Le wiki de Btrfs]]   * [[https://​btrfs.wiki.kernel.org|Le wiki de Btrfs]]
   * [[https://​wiki.archlinux.org/​index.php/​Btrfs|La page sur Btrfs sur le wiki d'​Archlinux]]   * [[https://​wiki.archlinux.org/​index.php/​Btrfs|La page sur Btrfs sur le wiki d'​Archlinux]]
-  * [[http://​zythmer.acyclic.org/​blog/​2013/​01/​27/​debian-full-disk-encryption-btrfs-subvolumes.html|http://​zythmer.acyclic.org/​blog/​2013/​01/​27/​debian-full-disk-encryption-btrfs-subvolumes.html]]+
doc/systeme/btrfs.1394814785.txt.gz · Dernière modification: 14/03/2014 17:33 par louispolaire

Pied de page des forums

Propulsé par FluxBB