<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>http://blaireaulinux.fr//wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AdminWiki</id>
	<title>BlaireauLinux - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="http://blaireaulinux.fr//wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AdminWiki"/>
	<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Sp%C3%A9cial:Contributions/AdminWiki"/>
	<updated>2026-05-28T06:04:30Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.37.0</generator>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Trucs_%26_astuces&amp;diff=639</id>
		<title>Trucs &amp; astuces</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Trucs_%26_astuces&amp;diff=639"/>
		<updated>2025-10-10T14:43:55Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Afficher en colonnes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Vérifier le type d&amp;#039;un fichier=&lt;br /&gt;
&lt;br /&gt;
Si vous ne savez plus ce que contient un fichier, utilisez la commande file qui vous le dira, parfois de façon très détaillée.&lt;br /&gt;
&lt;br /&gt;
Exemples :&lt;br /&gt;
&lt;br /&gt;
 $ file toto.txt&lt;br /&gt;
 toto.txt: ASCII text&lt;br /&gt;
 $ file &amp;quot;01 - Surfing With the Alien.ogg&amp;quot;&lt;br /&gt;
 01 - Surfing With the Alien.ogg: Ogg data, Vorbis audio, stereo, 44100 Hz, ~160000 bps, created by: Xiph.Org libVorbis I (1.1.0 RC1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Lister les partitions du disque dur=&lt;br /&gt;
&lt;br /&gt;
Pour obtenir la liste des partitions de vos disques, tapez&lt;br /&gt;
&lt;br /&gt;
 fdisk -l&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Faire une calculatrice sous bash=&lt;br /&gt;
&lt;br /&gt;
On peut facilement faire des calculs directement en ligne de commande. Attention, ça ne fonctionne qu&amp;#039;avec des nombres entiers.&lt;br /&gt;
&lt;br /&gt;
 # echo $((1 + 2 * 3 ))&lt;br /&gt;
 # 7 Ca marche aussi avec des variables.&lt;br /&gt;
 # i=5; echo $(( $i + $i ))&lt;br /&gt;
 # 10 Le plus efficace reste quand même d&amp;#039;utiliser &amp;quot;bc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Voir le partage de connexions=&lt;br /&gt;
&lt;br /&gt;
Pour voir les connexion en cours sur votre machine tapez :&lt;br /&gt;
&lt;br /&gt;
 netstat -M&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Rechercher un texte dans plusieurs fichiers=&lt;br /&gt;
&lt;br /&gt;
==si tous les fichiers sont dans le même répertoire==&lt;br /&gt;
&lt;br /&gt;
 # grep &amp;quot;mon_texte&amp;quot; *&lt;br /&gt;
&lt;br /&gt;
On va alors obtenir la liste des fichiers qui contiennent le texte, suivie de la ligne du fichier contenant le texte.&lt;br /&gt;
&lt;br /&gt;
Pour voir le numéro de la ligne concernée on mettra &amp;#039;&amp;#039;&amp;#039;grep -n&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Pour ne voir que le nom des fichiers on mettre &amp;#039;&amp;#039;&amp;#039;grep -l&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==si les fichiers sont dans des répertoires différents==&lt;br /&gt;
&lt;br /&gt;
 # find . -type f -exec grep -l &amp;quot;mon_texte&amp;quot; {} \;&lt;br /&gt;
&lt;br /&gt;
explication :&lt;br /&gt;
&lt;br /&gt;
* find . =&amp;gt; rechercher à partir du répertoire courant&lt;br /&gt;
* -type f =&amp;gt; on cherche un fichier&lt;br /&gt;
* -exec =&amp;gt; à chaque fichier trouvé on exécute la commande qui suit&lt;br /&gt;
* grep -l &amp;quot;mon_texte&amp;quot; {} =&amp;gt; on recherche &amp;quot;mon_texte&amp;quot; dans les fichiers ({} remplace le nom des fichiers trouvés) et on affiche le nom du fichier&lt;br /&gt;
* \; =&amp;gt; fin de l&amp;#039;option exec&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;remarques&amp;#039;&amp;#039; : cette procédure n&amp;#039;affiche que le nom des fichiers, mais pas la ligne de texte correspondante. Si on veut voir la ligne de texte, il faut retirer l&amp;#039;iption &amp;quot;-l&amp;quot;, mais dans ce cas on ne voit plus le nom du fichier... On peut encore remplacer &amp;quot;-l&amp;quot; par &amp;quot;-n&amp;quot;, dans ce cas on voit la ligne de texte avec le numéro de ligne, mais là encore, on ne voit plus le nom du fichier. Je n&amp;#039;ai pas trouvé de moyen simple (sans passer par un script) d&amp;#039;afficher à la fois le nom du fichier et la ligne de texte. Si quelqu&amp;#039;un sait faire, ça m&amp;#039;intéresse ;-).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Dernière connexion=&lt;br /&gt;
&lt;br /&gt;
Pour savoir quand l&amp;#039;utilisateur fred s&amp;#039;est connecté la dernière fois :&lt;br /&gt;
&lt;br /&gt;
 lastlog -u fred&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Surveiller à intervalles réguliers=&lt;br /&gt;
&lt;br /&gt;
La commande watch permet de voir le résultat d&amp;#039;une commande à intervalles réguliers :&lt;br /&gt;
&lt;br /&gt;
 watch cat /proc/meminfo&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; permet de voir l&amp;#039;évolution de la mémoire&lt;br /&gt;
&lt;br /&gt;
 watch -n 6 ls /home/fred&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; permet de voir le contenu de /home/fred (utile pour voir la progression d&amp;#039;une copie de fichiers par exemple).&lt;br /&gt;
L&amp;#039;option -n 6 permet de rafraîchir toutes les 6 secondes (2 secondes par défaut).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Geler / dégeler un terminal=&lt;br /&gt;
&lt;br /&gt;
pour geler :&lt;br /&gt;
 ctrl-s&lt;br /&gt;
pour dégeler :&lt;br /&gt;
 ctrl-q&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ignorer les alias=&lt;br /&gt;
&lt;br /&gt;
Si vous voulez utiliser une commande sans passer par les alias pour retrouver ses paramètres par défaut, précédez la d&amp;#039;un \.&lt;br /&gt;
Par exemple :&lt;br /&gt;
 \ls&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Code ASCII d&amp;#039;une touche=&lt;br /&gt;
&lt;br /&gt;
Pour connaitre le code ASCII d&amp;#039;une touche, faites : &amp;#039;&amp;#039;&amp;#039;showkey -a&amp;#039;&amp;#039;&amp;#039; puis appuyez sur la/les touche(s) désirées. Tapez &amp;#039;&amp;#039;&amp;#039;ctrl-d&amp;#039;&amp;#039;&amp;#039; pour sortir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concaténer des PDF=&lt;br /&gt;
&lt;br /&gt;
Pour concaténer des fichiers PDF :&lt;br /&gt;
 texexec --pdfarrange --result=fic-final.pdf fic1.pdf fic2.pdf fic3.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=changer la résolution de l&amp;#039;écran en mode texte=&lt;br /&gt;
&lt;br /&gt;
Lorsqu&amp;#039;on est sur un serveur, on est souvant en mode texte. Par défaut, on est en 640x480, ce qui n&amp;#039;est pas toujours pratique. Avec grub, on peut facilement changer ça en éditant le fichier /boot/grub/menu.lst, et en ajoutant &amp;quot;vga=711&amp;quot; à la fin de la ligne qui commence par &amp;quot;kernel&amp;quot;. La valeur &amp;quot;771&amp;quot; est à adapter en fonction du tableau ci-dessous. La modification ne sera prise en compte qu&amp;#039;au prochain reboot.&lt;br /&gt;
&lt;br /&gt;
Exemple de ligne sur CentOS 5.3 pour passer en 800x600 en 8 bits :&lt;br /&gt;
 kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/vg00/lvroot vga=771&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | || 640x480 || 800x600 || 1024x768 || 1280x1024 || 1600x1200 || demander à l&amp;#039;utilisateur&lt;br /&gt;
 |-&lt;br /&gt;
 | 8 bits || 769 || 771 || 773 || 775 || 796 || ask&lt;br /&gt;
 |-&lt;br /&gt;
 | 16 bits || 785 || 788 || 791 || 794 || 798 || ask&lt;br /&gt;
 |-&lt;br /&gt;
 | 32 bits || 786 || 789 || 792 || 795 || 799 || ask&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=Afficher en colonnes=&lt;br /&gt;
Parfois, il peut être utile d&amp;#039;afficher une liste ou la sortie d&amp;#039;une commande en colonne. L&amp;#039;utilitaire &amp;quot;pr&amp;quot; permet de faire ça. On peut choisir le nombre de colonne, la largeur d&amp;#039;affichage et si l&amp;#039;ordre se fait par ligne ou par colonnes. Voici deux exemples, un peu bidon, certes, mais clairs.&lt;br /&gt;
&lt;br /&gt;
Options : -4 pour le nombre de colonnes, -w pour la largeur d&amp;#039;affichage en nombre de caractères (72 par défaut), -a pour classer par ligne (voir exemple 2), -t sinon ça ne va pas fonctionner dans ce cas.&lt;br /&gt;
&lt;br /&gt;
 # ls -1 /etc | pr -t -4 -w 80 |head -6&lt;br /&gt;
 abrt		    filesystems		ld.so.conf.d	    phpMyAdmin&lt;br /&gt;
 adjtime		    filezilla		libaudit.conf	    pinforc&lt;br /&gt;
 aliases		    firefox		libblockdev	    pkcs11&lt;br /&gt;
 alsa		    firewalld		libibverbs.d	    pkgconfig&lt;br /&gt;
 alternatives	    flatpak		libnl		    pki&lt;br /&gt;
 anaconda	    flexiblasrc		libreport	    plymouth&lt;br /&gt;
&lt;br /&gt;
 # ls -1 /etc | pr -t -4 -w 80 -a |head -6&lt;br /&gt;
 abrt		    adjtime		aliases		    alsa&lt;br /&gt;
 alternatives	    anaconda		anacrontab	    anthy-unicode.conf&lt;br /&gt;
 asound.conf	    audit		authselect	    avahi&lt;br /&gt;
 bash_completion.d   bashrc		bindresvport.blackl binfmt.d&lt;br /&gt;
 bluetooth	    brlapi.key		brltty		    brltty.conf&lt;br /&gt;
 ceph		    chkconfig.d		chromium	    chrony.conf&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Trucs_%26_astuces&amp;diff=638</id>
		<title>Trucs &amp; astuces</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Trucs_%26_astuces&amp;diff=638"/>
		<updated>2025-10-10T14:43:07Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Afficher en colonnes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Vérifier le type d&amp;#039;un fichier=&lt;br /&gt;
&lt;br /&gt;
Si vous ne savez plus ce que contient un fichier, utilisez la commande file qui vous le dira, parfois de façon très détaillée.&lt;br /&gt;
&lt;br /&gt;
Exemples :&lt;br /&gt;
&lt;br /&gt;
 $ file toto.txt&lt;br /&gt;
 toto.txt: ASCII text&lt;br /&gt;
 $ file &amp;quot;01 - Surfing With the Alien.ogg&amp;quot;&lt;br /&gt;
 01 - Surfing With the Alien.ogg: Ogg data, Vorbis audio, stereo, 44100 Hz, ~160000 bps, created by: Xiph.Org libVorbis I (1.1.0 RC1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Lister les partitions du disque dur=&lt;br /&gt;
&lt;br /&gt;
Pour obtenir la liste des partitions de vos disques, tapez&lt;br /&gt;
&lt;br /&gt;
 fdisk -l&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Faire une calculatrice sous bash=&lt;br /&gt;
&lt;br /&gt;
On peut facilement faire des calculs directement en ligne de commande. Attention, ça ne fonctionne qu&amp;#039;avec des nombres entiers.&lt;br /&gt;
&lt;br /&gt;
 # echo $((1 + 2 * 3 ))&lt;br /&gt;
 # 7 Ca marche aussi avec des variables.&lt;br /&gt;
 # i=5; echo $(( $i + $i ))&lt;br /&gt;
 # 10 Le plus efficace reste quand même d&amp;#039;utiliser &amp;quot;bc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Voir le partage de connexions=&lt;br /&gt;
&lt;br /&gt;
Pour voir les connexion en cours sur votre machine tapez :&lt;br /&gt;
&lt;br /&gt;
 netstat -M&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Rechercher un texte dans plusieurs fichiers=&lt;br /&gt;
&lt;br /&gt;
==si tous les fichiers sont dans le même répertoire==&lt;br /&gt;
&lt;br /&gt;
 # grep &amp;quot;mon_texte&amp;quot; *&lt;br /&gt;
&lt;br /&gt;
On va alors obtenir la liste des fichiers qui contiennent le texte, suivie de la ligne du fichier contenant le texte.&lt;br /&gt;
&lt;br /&gt;
Pour voir le numéro de la ligne concernée on mettra &amp;#039;&amp;#039;&amp;#039;grep -n&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Pour ne voir que le nom des fichiers on mettre &amp;#039;&amp;#039;&amp;#039;grep -l&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==si les fichiers sont dans des répertoires différents==&lt;br /&gt;
&lt;br /&gt;
 # find . -type f -exec grep -l &amp;quot;mon_texte&amp;quot; {} \;&lt;br /&gt;
&lt;br /&gt;
explication :&lt;br /&gt;
&lt;br /&gt;
* find . =&amp;gt; rechercher à partir du répertoire courant&lt;br /&gt;
* -type f =&amp;gt; on cherche un fichier&lt;br /&gt;
* -exec =&amp;gt; à chaque fichier trouvé on exécute la commande qui suit&lt;br /&gt;
* grep -l &amp;quot;mon_texte&amp;quot; {} =&amp;gt; on recherche &amp;quot;mon_texte&amp;quot; dans les fichiers ({} remplace le nom des fichiers trouvés) et on affiche le nom du fichier&lt;br /&gt;
* \; =&amp;gt; fin de l&amp;#039;option exec&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;remarques&amp;#039;&amp;#039; : cette procédure n&amp;#039;affiche que le nom des fichiers, mais pas la ligne de texte correspondante. Si on veut voir la ligne de texte, il faut retirer l&amp;#039;iption &amp;quot;-l&amp;quot;, mais dans ce cas on ne voit plus le nom du fichier... On peut encore remplacer &amp;quot;-l&amp;quot; par &amp;quot;-n&amp;quot;, dans ce cas on voit la ligne de texte avec le numéro de ligne, mais là encore, on ne voit plus le nom du fichier. Je n&amp;#039;ai pas trouvé de moyen simple (sans passer par un script) d&amp;#039;afficher à la fois le nom du fichier et la ligne de texte. Si quelqu&amp;#039;un sait faire, ça m&amp;#039;intéresse ;-).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Dernière connexion=&lt;br /&gt;
&lt;br /&gt;
Pour savoir quand l&amp;#039;utilisateur fred s&amp;#039;est connecté la dernière fois :&lt;br /&gt;
&lt;br /&gt;
 lastlog -u fred&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Surveiller à intervalles réguliers=&lt;br /&gt;
&lt;br /&gt;
La commande watch permet de voir le résultat d&amp;#039;une commande à intervalles réguliers :&lt;br /&gt;
&lt;br /&gt;
 watch cat /proc/meminfo&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; permet de voir l&amp;#039;évolution de la mémoire&lt;br /&gt;
&lt;br /&gt;
 watch -n 6 ls /home/fred&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; permet de voir le contenu de /home/fred (utile pour voir la progression d&amp;#039;une copie de fichiers par exemple).&lt;br /&gt;
L&amp;#039;option -n 6 permet de rafraîchir toutes les 6 secondes (2 secondes par défaut).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Geler / dégeler un terminal=&lt;br /&gt;
&lt;br /&gt;
pour geler :&lt;br /&gt;
 ctrl-s&lt;br /&gt;
pour dégeler :&lt;br /&gt;
 ctrl-q&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ignorer les alias=&lt;br /&gt;
&lt;br /&gt;
Si vous voulez utiliser une commande sans passer par les alias pour retrouver ses paramètres par défaut, précédez la d&amp;#039;un \.&lt;br /&gt;
Par exemple :&lt;br /&gt;
 \ls&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Code ASCII d&amp;#039;une touche=&lt;br /&gt;
&lt;br /&gt;
Pour connaitre le code ASCII d&amp;#039;une touche, faites : &amp;#039;&amp;#039;&amp;#039;showkey -a&amp;#039;&amp;#039;&amp;#039; puis appuyez sur la/les touche(s) désirées. Tapez &amp;#039;&amp;#039;&amp;#039;ctrl-d&amp;#039;&amp;#039;&amp;#039; pour sortir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concaténer des PDF=&lt;br /&gt;
&lt;br /&gt;
Pour concaténer des fichiers PDF :&lt;br /&gt;
 texexec --pdfarrange --result=fic-final.pdf fic1.pdf fic2.pdf fic3.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=changer la résolution de l&amp;#039;écran en mode texte=&lt;br /&gt;
&lt;br /&gt;
Lorsqu&amp;#039;on est sur un serveur, on est souvant en mode texte. Par défaut, on est en 640x480, ce qui n&amp;#039;est pas toujours pratique. Avec grub, on peut facilement changer ça en éditant le fichier /boot/grub/menu.lst, et en ajoutant &amp;quot;vga=711&amp;quot; à la fin de la ligne qui commence par &amp;quot;kernel&amp;quot;. La valeur &amp;quot;771&amp;quot; est à adapter en fonction du tableau ci-dessous. La modification ne sera prise en compte qu&amp;#039;au prochain reboot.&lt;br /&gt;
&lt;br /&gt;
Exemple de ligne sur CentOS 5.3 pour passer en 800x600 en 8 bits :&lt;br /&gt;
 kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/vg00/lvroot vga=771&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | || 640x480 || 800x600 || 1024x768 || 1280x1024 || 1600x1200 || demander à l&amp;#039;utilisateur&lt;br /&gt;
 |-&lt;br /&gt;
 | 8 bits || 769 || 771 || 773 || 775 || 796 || ask&lt;br /&gt;
 |-&lt;br /&gt;
 | 16 bits || 785 || 788 || 791 || 794 || 798 || ask&lt;br /&gt;
 |-&lt;br /&gt;
 | 32 bits || 786 || 789 || 792 || 795 || 799 || ask&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=Afficher en colonnes=&lt;br /&gt;
Parfois, il peut être utile d&amp;#039;afficher une liste ou la sortie d&amp;#039;une commande en colonne. L&amp;#039;utilitaire &amp;quot;pr&amp;quot; permet de faire ça. On peut choisir le nombre de colonne, la largeur d&amp;#039;affichage et si l&amp;#039;ordre se fait par ligne ou par colonnes. Voici deux exemples, un peu bidon, certes, mais clairs.&lt;br /&gt;
&lt;br /&gt;
Options : -4 pour le nombre de colonnes, -w pour la largeur d&amp;#039;affichage en nombre de caractères (72 par défaut), -t sinon ça ne va pas fonctionner dans ce cas.&lt;br /&gt;
&lt;br /&gt;
 # ls -1 /etc | pr -t -4 -w 80 |head -6&lt;br /&gt;
 abrt		    filesystems		ld.so.conf.d	    phpMyAdmin&lt;br /&gt;
 adjtime		    filezilla		libaudit.conf	    pinforc&lt;br /&gt;
 aliases		    firefox		libblockdev	    pkcs11&lt;br /&gt;
 alsa		    firewalld		libibverbs.d	    pkgconfig&lt;br /&gt;
 alternatives	    flatpak		libnl		    pki&lt;br /&gt;
 anaconda	    flexiblasrc		libreport	    plymouth&lt;br /&gt;
&lt;br /&gt;
 # ls -1 /etc | pr -t -4 -w 80 -a |head -6&lt;br /&gt;
 abrt		    adjtime		aliases		    alsa&lt;br /&gt;
 alternatives	    anaconda		anacrontab	    anthy-unicode.conf&lt;br /&gt;
 asound.conf	    audit		authselect	    avahi&lt;br /&gt;
 bash_completion.d   bashrc		bindresvport.blackl binfmt.d&lt;br /&gt;
 bluetooth	    brlapi.key		brltty		    brltty.conf&lt;br /&gt;
 ceph		    chkconfig.d		chromium	    chrony.conf&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Trucs_%26_astuces&amp;diff=637</id>
		<title>Trucs &amp; astuces</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Trucs_%26_astuces&amp;diff=637"/>
		<updated>2025-10-10T14:39:00Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : afficher en colonnes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Vérifier le type d&amp;#039;un fichier=&lt;br /&gt;
&lt;br /&gt;
Si vous ne savez plus ce que contient un fichier, utilisez la commande file qui vous le dira, parfois de façon très détaillée.&lt;br /&gt;
&lt;br /&gt;
Exemples :&lt;br /&gt;
&lt;br /&gt;
 $ file toto.txt&lt;br /&gt;
 toto.txt: ASCII text&lt;br /&gt;
 $ file &amp;quot;01 - Surfing With the Alien.ogg&amp;quot;&lt;br /&gt;
 01 - Surfing With the Alien.ogg: Ogg data, Vorbis audio, stereo, 44100 Hz, ~160000 bps, created by: Xiph.Org libVorbis I (1.1.0 RC1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Lister les partitions du disque dur=&lt;br /&gt;
&lt;br /&gt;
Pour obtenir la liste des partitions de vos disques, tapez&lt;br /&gt;
&lt;br /&gt;
 fdisk -l&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Faire une calculatrice sous bash=&lt;br /&gt;
&lt;br /&gt;
On peut facilement faire des calculs directement en ligne de commande. Attention, ça ne fonctionne qu&amp;#039;avec des nombres entiers.&lt;br /&gt;
&lt;br /&gt;
 # echo $((1 + 2 * 3 ))&lt;br /&gt;
 # 7 Ca marche aussi avec des variables.&lt;br /&gt;
 # i=5; echo $(( $i + $i ))&lt;br /&gt;
 # 10 Le plus efficace reste quand même d&amp;#039;utiliser &amp;quot;bc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Voir le partage de connexions=&lt;br /&gt;
&lt;br /&gt;
Pour voir les connexion en cours sur votre machine tapez :&lt;br /&gt;
&lt;br /&gt;
 netstat -M&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Rechercher un texte dans plusieurs fichiers=&lt;br /&gt;
&lt;br /&gt;
==si tous les fichiers sont dans le même répertoire==&lt;br /&gt;
&lt;br /&gt;
 # grep &amp;quot;mon_texte&amp;quot; *&lt;br /&gt;
&lt;br /&gt;
On va alors obtenir la liste des fichiers qui contiennent le texte, suivie de la ligne du fichier contenant le texte.&lt;br /&gt;
&lt;br /&gt;
Pour voir le numéro de la ligne concernée on mettra &amp;#039;&amp;#039;&amp;#039;grep -n&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Pour ne voir que le nom des fichiers on mettre &amp;#039;&amp;#039;&amp;#039;grep -l&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==si les fichiers sont dans des répertoires différents==&lt;br /&gt;
&lt;br /&gt;
 # find . -type f -exec grep -l &amp;quot;mon_texte&amp;quot; {} \;&lt;br /&gt;
&lt;br /&gt;
explication :&lt;br /&gt;
&lt;br /&gt;
* find . =&amp;gt; rechercher à partir du répertoire courant&lt;br /&gt;
* -type f =&amp;gt; on cherche un fichier&lt;br /&gt;
* -exec =&amp;gt; à chaque fichier trouvé on exécute la commande qui suit&lt;br /&gt;
* grep -l &amp;quot;mon_texte&amp;quot; {} =&amp;gt; on recherche &amp;quot;mon_texte&amp;quot; dans les fichiers ({} remplace le nom des fichiers trouvés) et on affiche le nom du fichier&lt;br /&gt;
* \; =&amp;gt; fin de l&amp;#039;option exec&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;remarques&amp;#039;&amp;#039; : cette procédure n&amp;#039;affiche que le nom des fichiers, mais pas la ligne de texte correspondante. Si on veut voir la ligne de texte, il faut retirer l&amp;#039;iption &amp;quot;-l&amp;quot;, mais dans ce cas on ne voit plus le nom du fichier... On peut encore remplacer &amp;quot;-l&amp;quot; par &amp;quot;-n&amp;quot;, dans ce cas on voit la ligne de texte avec le numéro de ligne, mais là encore, on ne voit plus le nom du fichier. Je n&amp;#039;ai pas trouvé de moyen simple (sans passer par un script) d&amp;#039;afficher à la fois le nom du fichier et la ligne de texte. Si quelqu&amp;#039;un sait faire, ça m&amp;#039;intéresse ;-).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Dernière connexion=&lt;br /&gt;
&lt;br /&gt;
Pour savoir quand l&amp;#039;utilisateur fred s&amp;#039;est connecté la dernière fois :&lt;br /&gt;
&lt;br /&gt;
 lastlog -u fred&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Surveiller à intervalles réguliers=&lt;br /&gt;
&lt;br /&gt;
La commande watch permet de voir le résultat d&amp;#039;une commande à intervalles réguliers :&lt;br /&gt;
&lt;br /&gt;
 watch cat /proc/meminfo&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; permet de voir l&amp;#039;évolution de la mémoire&lt;br /&gt;
&lt;br /&gt;
 watch -n 6 ls /home/fred&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; permet de voir le contenu de /home/fred (utile pour voir la progression d&amp;#039;une copie de fichiers par exemple).&lt;br /&gt;
L&amp;#039;option -n 6 permet de rafraîchir toutes les 6 secondes (2 secondes par défaut).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Geler / dégeler un terminal=&lt;br /&gt;
&lt;br /&gt;
pour geler :&lt;br /&gt;
 ctrl-s&lt;br /&gt;
pour dégeler :&lt;br /&gt;
 ctrl-q&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ignorer les alias=&lt;br /&gt;
&lt;br /&gt;
Si vous voulez utiliser une commande sans passer par les alias pour retrouver ses paramètres par défaut, précédez la d&amp;#039;un \.&lt;br /&gt;
Par exemple :&lt;br /&gt;
 \ls&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Code ASCII d&amp;#039;une touche=&lt;br /&gt;
&lt;br /&gt;
Pour connaitre le code ASCII d&amp;#039;une touche, faites : &amp;#039;&amp;#039;&amp;#039;showkey -a&amp;#039;&amp;#039;&amp;#039; puis appuyez sur la/les touche(s) désirées. Tapez &amp;#039;&amp;#039;&amp;#039;ctrl-d&amp;#039;&amp;#039;&amp;#039; pour sortir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Concaténer des PDF=&lt;br /&gt;
&lt;br /&gt;
Pour concaténer des fichiers PDF :&lt;br /&gt;
 texexec --pdfarrange --result=fic-final.pdf fic1.pdf fic2.pdf fic3.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=changer la résolution de l&amp;#039;écran en mode texte=&lt;br /&gt;
&lt;br /&gt;
Lorsqu&amp;#039;on est sur un serveur, on est souvant en mode texte. Par défaut, on est en 640x480, ce qui n&amp;#039;est pas toujours pratique. Avec grub, on peut facilement changer ça en éditant le fichier /boot/grub/menu.lst, et en ajoutant &amp;quot;vga=711&amp;quot; à la fin de la ligne qui commence par &amp;quot;kernel&amp;quot;. La valeur &amp;quot;771&amp;quot; est à adapter en fonction du tableau ci-dessous. La modification ne sera prise en compte qu&amp;#039;au prochain reboot.&lt;br /&gt;
&lt;br /&gt;
Exemple de ligne sur CentOS 5.3 pour passer en 800x600 en 8 bits :&lt;br /&gt;
 kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/vg00/lvroot vga=771&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | || 640x480 || 800x600 || 1024x768 || 1280x1024 || 1600x1200 || demander à l&amp;#039;utilisateur&lt;br /&gt;
 |-&lt;br /&gt;
 | 8 bits || 769 || 771 || 773 || 775 || 796 || ask&lt;br /&gt;
 |-&lt;br /&gt;
 | 16 bits || 785 || 788 || 791 || 794 || 798 || ask&lt;br /&gt;
 |-&lt;br /&gt;
 | 32 bits || 786 || 789 || 792 || 795 || 799 || ask&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=Afficher en colonnes=&lt;br /&gt;
Parfois, il peut être utile d&amp;#039;afficher une liste ou la sortie d&amp;#039;une commande en colonne. L&amp;#039;utilitaire &amp;quot;pr&amp;quot; permet de faire ça. On peut choisir le nombre de colonne, la largeur d&amp;#039;affichage et si l&amp;#039;ordre se fait par ligne ou par colonnes. Voici deux exemples, un peu bidon, certes, mais clairs.&lt;br /&gt;
&lt;br /&gt;
 # ls -1 /etc | pr -t -4 -w 80 |head -6&lt;br /&gt;
 abrt		    filesystems		ld.so.conf.d	    phpMyAdmin&lt;br /&gt;
 adjtime		    filezilla		libaudit.conf	    pinforc&lt;br /&gt;
 aliases		    firefox		libblockdev	    pkcs11&lt;br /&gt;
 alsa		    firewalld		libibverbs.d	    pkgconfig&lt;br /&gt;
 alternatives	    flatpak		libnl		    pki&lt;br /&gt;
 anaconda	    flexiblasrc		libreport	    plymouth&lt;br /&gt;
&lt;br /&gt;
 # ls -1 /etc | pr -t -4 -w 80 -a |head -6&lt;br /&gt;
 abrt		    adjtime		aliases		    alsa&lt;br /&gt;
 alternatives	    anaconda		anacrontab	    anthy-unicode.conf&lt;br /&gt;
 asound.conf	    audit		authselect	    avahi&lt;br /&gt;
 bash_completion.d   bashrc		bindresvport.blackl binfmt.d&lt;br /&gt;
 bluetooth	    brlapi.key		brltty		    brltty.conf&lt;br /&gt;
 ceph		    chkconfig.d		chromium	    chrony.conf&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Accueil&amp;diff=636</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Accueil&amp;diff=636"/>
		<updated>2025-06-06T12:45:31Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Bienvenue&amp;#039;&amp;#039;&amp;#039; sur le wiki de &amp;#039;&amp;#039;&amp;#039;BlaireauLinux.fr !&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ce site est un recueil de notes personnelles que j&amp;#039;ai essayé de rendre claires et accessibles pour tout le monde.&lt;br /&gt;
&lt;br /&gt;
Attention : certaines pages ne sont plus du tout à jour.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vous pouvez cliquer dans le menu à gauche ou choisir une des catégories ci-dessous. Bonne visite.&lt;br /&gt;
&lt;br /&gt;
== Liste des catégories ==&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:Linux Linux]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:Solaris Solaris]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:BSD BSD]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:AIX AIX]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:HP-UX HP-UX]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:Windows Windows]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:Nagios Nagios]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:MySQL MySQL]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:PHP PHP]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:Perl Perl]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:Divers Divers]&lt;br /&gt;
* [mailto:unixmaniax@gmail.com M&amp;#039;écrire]&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Accueil&amp;diff=635</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Accueil&amp;diff=635"/>
		<updated>2025-05-25T16:46:36Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Liste des catégories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Bienvenue&amp;#039;&amp;#039;&amp;#039; sur le wiki de &amp;#039;&amp;#039;&amp;#039;BlaireauLinux.fr !&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez cliquer dans le menu à gauche ou choisir une des catégories ci-dessous. Bonne visite.&lt;br /&gt;
&lt;br /&gt;
== Liste des catégories ==&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:Linux Linux]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:Solaris Solaris]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:BSD BSD]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:AIX AIX]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:HP-UX HP-UX]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:Windows Windows]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:Nagios Nagios]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:MySQL MySQL]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:PHP PHP]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:Perl Perl]&lt;br /&gt;
* [http://blaireaulinux.fr/wiki/index.php?title=Catégorie:Divers Divers]&lt;br /&gt;
* [mailto:unixmaniax@gmail.com M&amp;#039;écrire]&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Accueil&amp;diff=634</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Accueil&amp;diff=634"/>
		<updated>2025-05-25T15:22:58Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Bienvenue&amp;#039;&amp;#039;&amp;#039; sur le wiki de &amp;#039;&amp;#039;&amp;#039;BlaireauLinux.fr !&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez cliquer dans le menu à gauche ou choisir une des catégories ci-dessous. Bonne visite.&lt;br /&gt;
&lt;br /&gt;
== Liste des catégories ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Linux|Linux]]&lt;br /&gt;
* [[:Category:Solaris|Solaris]]&lt;br /&gt;
* [[:Category:BSD|BSD]]&lt;br /&gt;
* [[:Category:AIX|AIX]]&lt;br /&gt;
* [[:Category:HP-UX|HP-UX]]&lt;br /&gt;
* [[:Category:Windows|Windows]]&lt;br /&gt;
* [[:Category:Nagios|Nagios]]&lt;br /&gt;
* [[:Category:MySQL|MySQL]]&lt;br /&gt;
* [[:Category:PHP|PHP]]&lt;br /&gt;
* [[:Category:Perl|Perl]]&lt;br /&gt;
* [[:Category:Divers|Divers]]&lt;br /&gt;
* [mailto:unixmaniax@gmail.com M&amp;#039;écrire]&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Accueil&amp;diff=633</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Accueil&amp;diff=633"/>
		<updated>2025-05-25T15:21:14Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Liste des catégories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Bienvenue&amp;#039;&amp;#039;&amp;#039; sur le wiki de &amp;#039;&amp;#039;&amp;#039;BlaireauLinux.fr !&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez dérouler le menu à gauche et cliquez sur le lien de votre choix, ou choisir une des catégories ci-dessous. Bonne visite.&lt;br /&gt;
&lt;br /&gt;
== Liste des catégories ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Linux|Linux]]&lt;br /&gt;
* [[:Category:Solaris|Solaris]]&lt;br /&gt;
* [[:Category:BSD|BSD]]&lt;br /&gt;
* [[:Category:AIX|AIX]]&lt;br /&gt;
* [[:Category:HP-UX|HP-UX]]&lt;br /&gt;
* [[:Category:Windows|Windows]]&lt;br /&gt;
* [[:Category:Nagios|Nagios]]&lt;br /&gt;
* [[:Category:MySQL|MySQL]]&lt;br /&gt;
* [[:Category:PHP|PHP]]&lt;br /&gt;
* [[:Category:Perl|Perl]]&lt;br /&gt;
* [[:Category:Divers|Divers]]&lt;br /&gt;
* [mailto:unixmaniax@gmail.com M&amp;#039;écrire]&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Accueil&amp;diff=632</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Accueil&amp;diff=632"/>
		<updated>2025-05-25T15:04:06Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Bienvenue&amp;#039;&amp;#039;&amp;#039; sur le wiki de &amp;#039;&amp;#039;&amp;#039;BlaireauLinux.fr !&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez dérouler le menu à gauche et cliquez sur le lien de votre choix, ou choisir une des catégories ci-dessous. Bonne visite.&lt;br /&gt;
&lt;br /&gt;
== Liste des catégories ==&lt;br /&gt;
&lt;br /&gt;
* [http://blairex.cluster021.hosting.ovh.net/wiki/index.php?title=Catégorie:Linux Linux]&lt;br /&gt;
* [http://blairex.cluster021.hosting.ovh.net/wiki/index.php?title=Catégorie:Solaris Solaris]&lt;br /&gt;
* [http://blairex.cluster021.hosting.ovh.net/wiki/index.php?title=Catégorie:BSD BSD]&lt;br /&gt;
* [http://blairex.cluster021.hosting.ovh.net/wiki/index.php?title=Catégorie:AIX AIX]&lt;br /&gt;
* [http://blairex.cluster021.hosting.ovh.net/wiki/index.php?title=Catégorie:HP-UX HP-UX]&lt;br /&gt;
* [http://blairex.cluster021.hosting.ovh.net/wiki/index.php?title=Catégorie:Windows Windows]&lt;br /&gt;
* [http://blairex.cluster021.hosting.ovh.net/wiki/index.php?title=Catégorie:Nagios Nagios]&lt;br /&gt;
* [http://blairex.cluster021.hosting.ovh.net/wiki/index.php?title=Catégorie:MySQL MySQL]&lt;br /&gt;
* [http://blairex.cluster021.hosting.ovh.net/wiki/index.php?title=Catégorie:PHP PHP]&lt;br /&gt;
* [http://blairex.cluster021.hosting.ovh.net/wiki/index.php?title=Catégorie:Perl Perl]&lt;br /&gt;
* [http://blairex.cluster021.hosting.ovh.net/wiki/index.php?title=Catégorie:Divers Divers]&lt;br /&gt;
* [mailto:unixmaniax@gmail.com M&amp;#039;écrire]&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Logrotate&amp;diff=631</id>
		<title>Logrotate</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Logrotate&amp;diff=631"/>
		<updated>2025-05-15T14:22:14Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Compléments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
Logrotate est la partie de syslog qui gère la rotation des fichiers de log, évitant ainsi qu&amp;#039;ils ne deviennent trop gros ou trop nombreux. Chaque log est paramétrable indépendament des autres.&lt;br /&gt;
&lt;br /&gt;
Logrotate possède un fichier de configuration principal : &amp;#039;&amp;#039;&amp;#039;/etc/logrotate.conf&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
En général, logrotate.conf inclue tout le répertoire &amp;#039;&amp;#039;&amp;#039;/etc/logrorate.d/&amp;#039;&amp;#039;&amp;#039;, ce qui permet d&amp;#039;avoir autant de sous-fichiers de configuration que l&amp;#039;on veut dans ce répertoire. La totalité du sous-répertoire est parcourue. On peut en inclure d&amp;#039;autres. La syntaxe pour inclure /etc/logrotate.d est :&lt;br /&gt;
&lt;br /&gt;
 include /etc/logrotate.d&lt;br /&gt;
&lt;br /&gt;
Donc quand on veut ajouter une configuration, on peut au choix modifier logrotate.conf ou ajouter un nouveau fichier dans logrotate.d, pour ne pas surcharger le fichier principal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Exemple : modifier les droits des logs=&lt;br /&gt;
&lt;br /&gt;
Il peut être intéressant de modifier les droits de certains fichiers de log pour les rendre lisibles à certains comptes, par exemple un compte de surveillance, qui a besoin d&amp;#039;un accès en lecture seule sur des logs qui ne sont nativements accessibles qu&amp;#039;à root.&lt;br /&gt;
&lt;br /&gt;
Bien sûr, on peut faire un chmod directement dessus, mais à la prochaine rotation de fichier, le nouveau log reprendra les droits par défaut.&lt;br /&gt;
&lt;br /&gt;
Voici justement comment modifier les droits par défaut du fichier /var/log/maillog.&lt;br /&gt;
&lt;br /&gt;
Editer le fichier /etc/logrotate.conf, et ajouter les lignes suivantes :&lt;br /&gt;
&lt;br /&gt;
 # ajout des droits 644 sur maillog 				&lt;br /&gt;
 /var/log/maillog { 				&lt;br /&gt;
   create 644 root root				&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Les options après le mot &amp;#039;&amp;#039;&amp;#039;create&amp;#039;&amp;#039;&amp;#039; sont, dans l&amp;#039;ordre, les droits, le propriétaire, le groupe. Ici le fichier appartiendra à root:root avec les droits 644.&lt;br /&gt;
&lt;br /&gt;
Remarque : ce changement de droits ne sera effectué qu&amp;#039;à la prochaine rotation du fichier log.&lt;br /&gt;
&lt;br /&gt;
Attention : si les logs sont dans un répertoire qui est accessible en écriture à un groupe autre que root, logrotate va renvoyer une erreur. Dans ce cas, il faut ajouter une ligne &amp;#039;&amp;#039;&amp;#039;su&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 $ ls -ld /var/log/mon_appli/&lt;br /&gt;
 drwxrwxr-x 6 appli_user appli_grp 20480  4 juin  15:08 /var/log/mon_appli/&lt;br /&gt;
 &lt;br /&gt;
 $ cat /etc/logrotate.d/mon_appli.conf&lt;br /&gt;
 /var/log/mon_appli.log&lt;br /&gt;
 {&lt;br /&gt;
   create 644 root root&lt;br /&gt;
   su root root&lt;br /&gt;
   ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=Exemple plus complet=&lt;br /&gt;
&lt;br /&gt;
Voici notre fichier d&amp;#039;exemple :&lt;br /&gt;
&lt;br /&gt;
 # cat /etc/logrotate.d/httpd &lt;br /&gt;
 /var/log/httpd/*log {&lt;br /&gt;
     create 644 apache apache&lt;br /&gt;
     compress  &lt;br /&gt;
     daily     &lt;br /&gt;
     delaycompress&lt;br /&gt;
     rotate 7&lt;br /&gt;
     missingok&lt;br /&gt;
     notifempty&lt;br /&gt;
     sharedscripts&lt;br /&gt;
     postrotate&lt;br /&gt;
         /sbin/service httpd reload &amp;gt; /dev/null 2&amp;gt;/dev/null || true&lt;br /&gt;
     endscript&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Explications :&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;/var/log/httpd/*log {&amp;#039;&amp;#039;&amp;#039; =&amp;gt; ce qui va être contenu entre les { } concernera tous les fichiers /var/log/httpd/*log&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;create 644 apache apache&amp;#039;&amp;#039;&amp;#039; =&amp;gt; les fichiers appartiendront à apache:apache avec les droits 644 (il ne faut pas mettre les &amp;quot;:&amp;quot; entre le user et le group.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;compress&amp;#039;&amp;#039;&amp;#039; =&amp;gt; les fichiers seront compressés...&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;delaycompress&amp;#039;&amp;#039;&amp;#039; =&amp;gt; ... sauf le log courant et le précédent&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;daily&amp;#039;&amp;#039;&amp;#039; =&amp;gt; la rotation se fait tous les jours&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;rotate 7&amp;#039;&amp;#039;&amp;#039; =&amp;gt; on garde 7 logs en archive (en plus du log courant)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;missingok&amp;#039;&amp;#039;&amp;#039; =&amp;gt; si un fichier de log est manquant, on passe au suivant sans générer d&amp;#039;erreur&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;notifempty&amp;#039;&amp;#039;&amp;#039; =&amp;gt; la rotation ne se fait pas si le log est vide&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;sharedscripts&amp;#039;&amp;#039;&amp;#039; =&amp;gt; les scripts qui suivent ne seront exécutés qu&amp;#039;une seule fois par rotation, et non une fois par rotation et par fichier rencontré&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;postrotate/endscript&amp;#039;&amp;#039;&amp;#039; =&amp;gt; les lignes qui se trouvent entre &amp;#039;&amp;#039;postrotate&amp;#039;&amp;#039; et &amp;#039;&amp;#039;endscript&amp;#039;&amp;#039; seront exécutées après la rotation du fichier de log.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;}&amp;#039;&amp;#039;&amp;#039; =&amp;gt; fin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voici à quoi ressemblent les fichiers de logs après quelques semaines :&lt;br /&gt;
&lt;br /&gt;
 # ls -lh /var/log/httpd/&lt;br /&gt;
 total 158M&lt;br /&gt;
 -rw-r--r-- 1 root root  47M Jun  6 15:29 access_log&lt;br /&gt;
 -rw-r--r-- 1 root root  91M Jun  6 04:02 access_log.1&lt;br /&gt;
 -rw-r--r-- 1 root root 3.9M Jun  6 04:02 access_log.2.gz&lt;br /&gt;
 -rw-r--r-- 1 root root 1.9M Jun  5 04:02 access_log.3.gz&lt;br /&gt;
 -rw-r--r-- 1 root root 2.1M Jun  4 04:02 access_log.4.gz&lt;br /&gt;
 -rw-r--r-- 1 root root 4.0M Jun  3 04:02 access_log.5.gz&lt;br /&gt;
 -rw-r--r-- 1 root root 3.9M Jun  2 04:02 access_log.6.gz&lt;br /&gt;
 -rw-r--r-- 1 root root 5.1M Jun  1 04:02 access_log.7.gz&lt;br /&gt;
 -rw-r--r-- 1 root root 1.6K Jun  6 14:55 error_log&lt;br /&gt;
 -rw-r--r-- 1 root root  578 Jun  6 04:02 error_log.1&lt;br /&gt;
 -rw-r--r-- 1 root root  11K Jun  6 04:02 error_log.2.gz&lt;br /&gt;
 -rw-r--r-- 1 root root  363 Jun  5 04:02 error_log.3.gz&lt;br /&gt;
 -rw-r--r-- 1 root root  276 Jun  4 04:02 error_log.4.gz&lt;br /&gt;
 -rw-r--r-- 1 root root  521 Jun  3 04:02 error_log.5.gz&lt;br /&gt;
 -rw-r--r-- 1 root root  480 Jun  2 04:02 error_log.6.gz&lt;br /&gt;
 -rw-r--r-- 1 root root  717 Jun  1 04:02 error_log.7.gz&lt;br /&gt;
&lt;br /&gt;
=Les autres options de logrotate=&lt;br /&gt;
&lt;br /&gt;
Au lieu de faire une rotation quotidienne, comme c&amp;#039;est le cas dans l&amp;#039;exemple précédent, une option courante est d&amp;#039;effectuer la rotation dès que le log atteint une certaine taille. Dans ce cas on utilise l&amp;#039;option &amp;quot;size&amp;quot; suivie de la taille en octets. Exemple :&lt;br /&gt;
&lt;br /&gt;
 size 300M&lt;br /&gt;
&lt;br /&gt;
Sinon, la page man est tellement bien faite qu&amp;#039;il n&amp;#039;est pas utile de tout refaire. Vous trouverez tout ici : [http://www.delafond.org/traducmanfr/man/man8/logrotate.8.html http://www.delafond.org/traducmanfr/man/man8/logrotate.8.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Compléments=&lt;br /&gt;
&lt;br /&gt;
Logrotate est appelé par la crontab. Donc il n&amp;#039;y a rien à relancer après avoir modifié la conf.&lt;br /&gt;
&lt;br /&gt;
On peut malgré tout le forcer manuellement avec l&amp;#039;option &amp;quot;-f&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 logrotate -f /etc/logrotate.conf&lt;br /&gt;
&lt;br /&gt;
Ceci va forcer l&amp;#039;exécution de toutes les confs logrotate. Si on veut juste forcer un script, par exemple pour tester sa syntaxe, on spécifie le fichier :&lt;br /&gt;
&lt;br /&gt;
 logrotate -f /etc/logrotate.d/mon_logrotate&lt;br /&gt;
&lt;br /&gt;
On peut aussi tester la conf avec l&amp;#039;option -d (pour debug) :&lt;br /&gt;
&lt;br /&gt;
 logrotate -d /etc/logrotate.conf&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Apt&amp;diff=630</id>
		<title>Apt</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Apt&amp;diff=630"/>
		<updated>2023-06-15T13:07:18Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Principales commandes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
Note : je ne fais ici qu&amp;#039;une brève présentation d&amp;#039;apt, avec les commandes qui servent le plus souvent. Pour avoir un cours complet, allez voir les liens dans le chapitre &amp;quot;Plus d&amp;#039;infos&amp;quot; en bas de cet article.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
Le gestionnaire de paquets par défaut de debian et ses dérivés, est dpkg. Apt est une surcouche de dpkg, qui automatise et simplifie de nombreuses commandes dpkg, notamment en gérant tout seul les dépendances. Apt est une suite d&amp;#039;outils, dont le principal est apt &amp;quot;tout court&amp;quot; (anciennement apt-get), qui sert à l&amp;#039;installation et la désinstallation des packages, et à la mise à jour du système.&lt;br /&gt;
&lt;br /&gt;
Les packages pour debian ont l&amp;#039;extention &amp;quot;.deb&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ceux qui n&amp;#039;aiment pas la ligne de commande, il existe &amp;quot;synaptic&amp;quot; qui est un excellent gestionnaire de packages graphique, qui s&amp;#039;appuie sur apt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Dépôts=&lt;br /&gt;
&lt;br /&gt;
Pour installer un package, ou mettre à jour le système, apt va chercher les informations sur internet. Pour savoir où chercher, il va interroger le fichier /etc/apt/sources.list qui contient une liste de serveurs. Pour installer certains packages exotiques, ne figurants pas sur les mirroirs par défaut, il faudra rajouter une ou plusieurs lignes dans ce fichier (la ligne exacte à rajouter est quasiment toujours indiquée sur le site web du package en question, si une version debian existe).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Principales commandes=&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | apt update || mettre à jour la liste des packages disponibles dans les dépôts&lt;br /&gt;
 |-&lt;br /&gt;
 | apt upgrade || met à jour tous les packages installés sur le système (demande confirmation avant)&lt;br /&gt;
 |-&lt;br /&gt;
 | apt dist-upgrade || comme apt upgrade, mais si une nouvelle version de la distribution est disponible, l&amp;#039;installe. Dans ce cas, on aura mis avant à jour /etc/apt/sources.list avec les nouveaux dépôts. Attention, pour les dérivées de debian, il est préférable d&amp;#039;utiliser les outils fournis (cas d&amp;#039;ubuntu qui propose la mise à jour depuis l&amp;#039;interface graphique) ou d&amp;#039;aller voir la procédure complète sur la page web de la distribution.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt install nom_package || installe le package &amp;quot;nom_package&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | dpkg -i ./nom_package.deb || installe (ou met à jour) le package &amp;quot;nom_package.deb&amp;quot;, précédement téléchargé sur le disque dur.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt remove nom_package || désinstalle le package &amp;quot;nom_package&amp;quot;, mais sans supprimer ses fichiers de configuration.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt remove --purge nom_package  || désinstalle totalement le package &amp;quot;nom_package&amp;quot; (y compris ses fichiers de configuration)&lt;br /&gt;
 |-&lt;br /&gt;
 | apt list || affiche la liste de tous les paquets, installés ou non&lt;br /&gt;
 |-&lt;br /&gt;
 | apt list --installed || affiche la liste de tous les paquets installés&lt;br /&gt;
 |-&lt;br /&gt;
 | apt clean || vide le cache de apt, qui peut parfois occuper plusieurs centaines de Mo (fichier téléchargés par apt pour les installations, qui ne sont pas supprimés automatiquement).&lt;br /&gt;
 |-&lt;br /&gt;
 | apt autoclean || idem, mais ne supprime que les paquets qui ne sont plus disponibles sur les dépôts.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-cache search nom_paquet || recherche des infos sur le package &amp;quot;nom_paquet&amp;quot; installé ou non.&lt;br /&gt;
 |-&lt;br /&gt;
 | dpkg --get-selections &amp;quot;*nom_paquet*&amp;quot; (ou dpkg -l) || affiche la liste des packages installés (ou désinstallés sans le --purge)&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-file search nom_fichier || recherche à quel package appartient le fichier &amp;quot;nom_fichier&amp;quot;. Nécessite d&amp;#039;avoir fait au moins une fois &amp;quot;apt-file update&amp;quot;. Nécessite le package apt-file, non installé par défaut. Sinon, préférer dkpg -S.&lt;br /&gt;
 |-&lt;br /&gt;
 | dkpg -S nom_fichier || recherche à quel package appartient le fichier &amp;quot;nom_fichier&amp;quot;. Equivalent de &amp;quot;yum provides&amp;quot; chez Redhat.&lt;br /&gt;
 |-&lt;br /&gt;
 | dpkg -L nom_package || affiche la liste des fichiers du package (package installé)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=Proxy=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apt derrière un serveur mandataire (proxy), éditez le fichier /etc/apt/apt.conf (il faut le créer s&amp;#039;il n&amp;#039;existe pas) et ajoutez la ligne :&lt;br /&gt;
&lt;br /&gt;
 Acquire::http::Proxy &amp;quot;http://proxy:port&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
ou&lt;br /&gt;
&lt;br /&gt;
 Acquire::http::Proxy &amp;quot;http://login:password@proxy:port&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Plus d&amp;#039;infos=&lt;br /&gt;
&lt;br /&gt;
Pour avoir plus d&amp;#039;informations et plus de commandes et options sur l&amp;#039;utilisation de apt et dpkg, allez sur le site [http://www.debian.org/doc/manuals/apt-howto/index.fr.html http://www.debian.org/doc/manuals/apt-howto/index.fr.html] ou sur [http://www.math-linux.com/spip.php?article58 http://www.math-linux.com/spip.php?article58].&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Apt-get&amp;diff=629</id>
		<title>Apt-get</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Apt-get&amp;diff=629"/>
		<updated>2022-08-10T13:22:19Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : AdminWiki a déplacé la page Apt-get vers Apt : apt-get =&amp;gt; apt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECTION [[Apt]]&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Apt&amp;diff=628</id>
		<title>Apt</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Apt&amp;diff=628"/>
		<updated>2022-08-10T13:22:19Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : AdminWiki a déplacé la page Apt-get vers Apt : apt-get =&amp;gt; apt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
Note : je ne fais ici qu&amp;#039;une brève présentation d&amp;#039;apt, avec les commandes qui servent le plus souvent. Pour avoir un cours complet, allez voir les liens dans le chapitre &amp;quot;Plus d&amp;#039;infos&amp;quot; en bas de cet article.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
Le gestionnaire de paquets par défaut de debian et ses dérivés, est dpkg. Apt est une surcouche de dpkg, qui automatise et simplifie de nombreuses commandes dpkg, notamment en gérant tout seul les dépendances. Apt est une suite d&amp;#039;outils, dont le principal est apt &amp;quot;tout court&amp;quot; (anciennement apt-get), qui sert à l&amp;#039;installation et la désinstallation des packages, et à la mise à jour du système.&lt;br /&gt;
&lt;br /&gt;
Les packages pour debian ont l&amp;#039;extention &amp;quot;.deb&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ceux qui n&amp;#039;aiment pas la ligne de commande, il existe &amp;quot;synaptic&amp;quot; qui est un excellent gestionnaire de packages graphique, qui s&amp;#039;appuie sur apt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Dépôts=&lt;br /&gt;
&lt;br /&gt;
Pour installer un package, ou mettre à jour le système, apt va chercher les informations sur internet. Pour savoir où chercher, il va interroger le fichier /etc/apt/sources.list qui contient une liste de serveurs. Pour installer certains packages exotiques, ne figurants pas sur les mirroirs par défaut, il faudra rajouter une ou plusieurs lignes dans ce fichier (la ligne exacte à rajouter est quasiment toujours indiquée sur le site web du package en question, si une version debian existe).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Principales commandes=&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | apt update || mettre à jour la liste des packages disponibles dans les dépôts&lt;br /&gt;
 |-&lt;br /&gt;
 | apt upgrade || met à jour tous les packages installés sur le système (demande confirmation avant)&lt;br /&gt;
 |-&lt;br /&gt;
 | apt dist-upgrade || comme apt upgrade, mais si une nouvelle version de la distribution est disponible, l&amp;#039;installe. Dans ce cas, on aura mis avant à jour /etc/apt/sources.list avec les nouveaux dépôts. Attention, pour les dérivées de debian, il est préférable d&amp;#039;utiliser les outils fournis (cas d&amp;#039;ubuntu qui propose la mise à jour depuis l&amp;#039;interface graphique) ou d&amp;#039;aller voir la procédure complète sur la page web de la distribution.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt install nom_package || installe le package &amp;quot;nom_package&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | dpkg -i ./nom_package.deb || installe le package &amp;quot;nom_package.deb&amp;quot;, précédement téléchargé sur le disque dur.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt remove nom_package || désinstalle le package &amp;quot;nom_package&amp;quot;, mais sans supprimer ses fichiers de configuration.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt remove --purge nom_package  || désinstalle totalement le package &amp;quot;nom_package&amp;quot; (y compris ses fichiers de configuration)&lt;br /&gt;
 |-&lt;br /&gt;
 | apt list || affiche la liste de tous les paquets, installés ou non&lt;br /&gt;
 |-&lt;br /&gt;
 | apt list --installed || affiche la liste de tous les paquets installés&lt;br /&gt;
 |-&lt;br /&gt;
 | apt clean || vide le cache de apt, qui peut parfois occuper plusieurs centaines de Mo (fichier téléchargés par apt pour les installations, qui ne sont pas supprimés automatiquement).&lt;br /&gt;
 |-&lt;br /&gt;
 | apt autoclean || idem, mais ne supprime que les paquets qui ne sont plus disponibles sur les dépôts.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-cache search nom_paquet || recherche des infos sur le package &amp;quot;nom_paquet&amp;quot; installé ou non.&lt;br /&gt;
 |-&lt;br /&gt;
 | dpkg --get-selections &amp;quot;*nom_paquet*&amp;quot; (ou dpkg -l) || affiche la liste des packages installés (ou désinstallés sans le --purge)&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-file search nom_fichier || recherche à quel package appartient le fichier &amp;quot;nom_fichier&amp;quot;. Nécessite d&amp;#039;avoir fait au moins une fois &amp;quot;apt-file update&amp;quot;. Nécessite le package apt-file, non installé par défaut. Sinon, préférer dkpg -S.&lt;br /&gt;
 |-&lt;br /&gt;
 | dkpg -S nom_fichier || recherche à quel package appartient le fichier &amp;quot;nom_fichier&amp;quot;. Equivalent de &amp;quot;yum provides&amp;quot; chez Redhat.&lt;br /&gt;
 |-&lt;br /&gt;
 | dpkg -L nom_package || affiche la liste des fichiers du package (package installé)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=Proxy=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apt derrière un serveur mandataire (proxy), éditez le fichier /etc/apt/apt.conf (il faut le créer s&amp;#039;il n&amp;#039;existe pas) et ajoutez la ligne :&lt;br /&gt;
&lt;br /&gt;
 Acquire::http::Proxy &amp;quot;http://proxy:port&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
ou&lt;br /&gt;
&lt;br /&gt;
 Acquire::http::Proxy &amp;quot;http://login:password@proxy:port&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Plus d&amp;#039;infos=&lt;br /&gt;
&lt;br /&gt;
Pour avoir plus d&amp;#039;informations et plus de commandes et options sur l&amp;#039;utilisation de apt et dpkg, allez sur le site [http://www.debian.org/doc/manuals/apt-howto/index.fr.html http://www.debian.org/doc/manuals/apt-howto/index.fr.html] ou sur [http://www.math-linux.com/spip.php?article58 http://www.math-linux.com/spip.php?article58].&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Apt&amp;diff=627</id>
		<title>Apt</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Apt&amp;diff=627"/>
		<updated>2022-08-10T13:21:56Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : apt-get vers apt + apt list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
Note : je ne fais ici qu&amp;#039;une brève présentation d&amp;#039;apt, avec les commandes qui servent le plus souvent. Pour avoir un cours complet, allez voir les liens dans le chapitre &amp;quot;Plus d&amp;#039;infos&amp;quot; en bas de cet article.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
Le gestionnaire de paquets par défaut de debian et ses dérivés, est dpkg. Apt est une surcouche de dpkg, qui automatise et simplifie de nombreuses commandes dpkg, notamment en gérant tout seul les dépendances. Apt est une suite d&amp;#039;outils, dont le principal est apt &amp;quot;tout court&amp;quot; (anciennement apt-get), qui sert à l&amp;#039;installation et la désinstallation des packages, et à la mise à jour du système.&lt;br /&gt;
&lt;br /&gt;
Les packages pour debian ont l&amp;#039;extention &amp;quot;.deb&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ceux qui n&amp;#039;aiment pas la ligne de commande, il existe &amp;quot;synaptic&amp;quot; qui est un excellent gestionnaire de packages graphique, qui s&amp;#039;appuie sur apt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Dépôts=&lt;br /&gt;
&lt;br /&gt;
Pour installer un package, ou mettre à jour le système, apt va chercher les informations sur internet. Pour savoir où chercher, il va interroger le fichier /etc/apt/sources.list qui contient une liste de serveurs. Pour installer certains packages exotiques, ne figurants pas sur les mirroirs par défaut, il faudra rajouter une ou plusieurs lignes dans ce fichier (la ligne exacte à rajouter est quasiment toujours indiquée sur le site web du package en question, si une version debian existe).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Principales commandes=&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | apt update || mettre à jour la liste des packages disponibles dans les dépôts&lt;br /&gt;
 |-&lt;br /&gt;
 | apt upgrade || met à jour tous les packages installés sur le système (demande confirmation avant)&lt;br /&gt;
 |-&lt;br /&gt;
 | apt dist-upgrade || comme apt upgrade, mais si une nouvelle version de la distribution est disponible, l&amp;#039;installe. Dans ce cas, on aura mis avant à jour /etc/apt/sources.list avec les nouveaux dépôts. Attention, pour les dérivées de debian, il est préférable d&amp;#039;utiliser les outils fournis (cas d&amp;#039;ubuntu qui propose la mise à jour depuis l&amp;#039;interface graphique) ou d&amp;#039;aller voir la procédure complète sur la page web de la distribution.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt install nom_package || installe le package &amp;quot;nom_package&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | dpkg -i ./nom_package.deb || installe le package &amp;quot;nom_package.deb&amp;quot;, précédement téléchargé sur le disque dur.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt remove nom_package || désinstalle le package &amp;quot;nom_package&amp;quot;, mais sans supprimer ses fichiers de configuration.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt remove --purge nom_package  || désinstalle totalement le package &amp;quot;nom_package&amp;quot; (y compris ses fichiers de configuration)&lt;br /&gt;
 |-&lt;br /&gt;
 | apt list || affiche la liste de tous les paquets, installés ou non&lt;br /&gt;
 |-&lt;br /&gt;
 | apt list --installed || affiche la liste de tous les paquets installés&lt;br /&gt;
 |-&lt;br /&gt;
 | apt clean || vide le cache de apt, qui peut parfois occuper plusieurs centaines de Mo (fichier téléchargés par apt pour les installations, qui ne sont pas supprimés automatiquement).&lt;br /&gt;
 |-&lt;br /&gt;
 | apt autoclean || idem, mais ne supprime que les paquets qui ne sont plus disponibles sur les dépôts.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-cache search nom_paquet || recherche des infos sur le package &amp;quot;nom_paquet&amp;quot; installé ou non.&lt;br /&gt;
 |-&lt;br /&gt;
 | dpkg --get-selections &amp;quot;*nom_paquet*&amp;quot; (ou dpkg -l) || affiche la liste des packages installés (ou désinstallés sans le --purge)&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-file search nom_fichier || recherche à quel package appartient le fichier &amp;quot;nom_fichier&amp;quot;. Nécessite d&amp;#039;avoir fait au moins une fois &amp;quot;apt-file update&amp;quot;. Nécessite le package apt-file, non installé par défaut. Sinon, préférer dkpg -S.&lt;br /&gt;
 |-&lt;br /&gt;
 | dkpg -S nom_fichier || recherche à quel package appartient le fichier &amp;quot;nom_fichier&amp;quot;. Equivalent de &amp;quot;yum provides&amp;quot; chez Redhat.&lt;br /&gt;
 |-&lt;br /&gt;
 | dpkg -L nom_package || affiche la liste des fichiers du package (package installé)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=Proxy=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apt derrière un serveur mandataire (proxy), éditez le fichier /etc/apt/apt.conf (il faut le créer s&amp;#039;il n&amp;#039;existe pas) et ajoutez la ligne :&lt;br /&gt;
&lt;br /&gt;
 Acquire::http::Proxy &amp;quot;http://proxy:port&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
ou&lt;br /&gt;
&lt;br /&gt;
 Acquire::http::Proxy &amp;quot;http://login:password@proxy:port&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Plus d&amp;#039;infos=&lt;br /&gt;
&lt;br /&gt;
Pour avoir plus d&amp;#039;informations et plus de commandes et options sur l&amp;#039;utilisation de apt et dpkg, allez sur le site [http://www.debian.org/doc/manuals/apt-howto/index.fr.html http://www.debian.org/doc/manuals/apt-howto/index.fr.html] ou sur [http://www.math-linux.com/spip.php?article58 http://www.math-linux.com/spip.php?article58].&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=MediaWiki:Sidebar&amp;diff=626</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=MediaWiki:Sidebar&amp;diff=626"/>
		<updated>2022-08-10T13:14:22Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : apt-get =&amp;gt; apt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Éléments du menu&lt;br /&gt;
* Linux&lt;br /&gt;
** Linux présentation|présentation&lt;br /&gt;
** Accéder à des partitions BSD sous Linux|accéder à des partitions BSD sous Linux&lt;br /&gt;
** Ajout de disques à chaud - linux|ajout de disques à chaud&lt;br /&gt;
** Apache|apache&lt;br /&gt;
** Apt|apt&lt;br /&gt;
** Arborescence des répertoires|arborescence des répertoires&lt;br /&gt;
** Bande passante - linux|Bande passante&lt;br /&gt;
** Bash - les commandes| bash - les commandes&lt;br /&gt;
** Les scripts bash|bash - les scripts&lt;br /&gt;
** Clamav - antivirus|Clamav - antivirus&lt;br /&gt;
** Configurer / compiler le noyau|configurer / compiler le noyau&lt;br /&gt;
** Controle de ressources - Linux|Controle de ressources&lt;br /&gt;
** Daemon - syntaxe|Daemon - syntaxe&lt;br /&gt;
** ftp washington|ftp washington&lt;br /&gt;
** Introduction à gcc/g++|gcc/g++ - introduction&lt;br /&gt;
** GlusterFS|GlusterFS&lt;br /&gt;
** Les lecteurs de bande sous linux|lecteurs de bande&lt;br /&gt;
** Les logiciels|logiciels&lt;br /&gt;
** Logrotate|logrotate&lt;br /&gt;
** Mandriva - utilisation de URPM|Mandriva - urpm&lt;br /&gt;
** proftpd|proftpd&lt;br /&gt;
** postfix|postfix&lt;br /&gt;
** Protéger un fichier avec un mot de passe (avec gpg)|protéger un fichier avec un mot de passe (avec gpg)&lt;br /&gt;
** Puppet|puppet&lt;br /&gt;
** Les packages RPM|rpm&lt;br /&gt;
** Rsync|Rsync&lt;br /&gt;
** Samba - serveur d&amp;#039;impression|Samba - serveur d&amp;#039;impression&lt;br /&gt;
** Sauvegarder et partitionner son disque dur (Partimage &amp;amp; QTParted)|sauvegarder et partitionner son disque dur (Partimage &amp;amp; QTParted)&lt;br /&gt;
** Sécurité - iptables|sécurité - iptables&lt;br /&gt;
** sendmail|sendmail&lt;br /&gt;
** Single user - linux|single user&lt;br /&gt;
** SVN - Subversion|SVN - Subversion&lt;br /&gt;
** Systemd|Systemd&lt;br /&gt;
** Tar et cpio|tar et cpio&lt;br /&gt;
** Tcpdump|Tcpdump&lt;br /&gt;
** Trucs &amp;amp; astuces|trucs &amp;amp; astuces&lt;br /&gt;
** Déterminer le type de FS|type de filesystem&lt;br /&gt;
** Vi|vi&lt;br /&gt;
** Yum|yum&lt;br /&gt;
&lt;br /&gt;
* Solaris&lt;br /&gt;
** Solaris présentation|présentation&lt;br /&gt;
** Booter en mode maintenance|booter en mode maintenance&lt;br /&gt;
** Solaris - Consommation de ressources|Consommation de ressources&lt;br /&gt;
** Controle de ressources - Solaris|Controle de ressources&lt;br /&gt;
** Création d&amp;#039;un compte utilisateur|création d&amp;#039;un compte utilisateur&lt;br /&gt;
** Date d&amp;#039;installation - Solaris|date d&amp;#039;installation&lt;br /&gt;
** Disques durs et systèmes de fichiers|Disques durs et systèmes de fichiers&lt;br /&gt;
** Du - script - Solaris|du - script&lt;br /&gt;
** En cas d&amp;#039;appel au support : explorer|En cas d&amp;#039;appel au support : explorer&lt;br /&gt;
** Erreurs matérielles - Solaris|Erreurs matérielles&lt;br /&gt;
** Faire une copie d&amp;#039;un disque|Faire une copie d&amp;#039;un disque&lt;br /&gt;
** Faire une installation avec Jumpstart|Faire une installation avec Jumpstart&lt;br /&gt;
** ftp washington|ftp washington&lt;br /&gt;
** Gestion du swap|Gestion du swap&lt;br /&gt;
** Impression - Solaris|Impression&lt;br /&gt;
** Informations sur le matériel|Informations sur le matériel&lt;br /&gt;
** Les logs|Les logs&lt;br /&gt;
** Monter une image iso - Solaris|Monter une image iso&lt;br /&gt;
** NFS - Solaris|NFS&lt;br /&gt;
** OBP (Open Boot Prom) et NVRAM|OBP (Open Boot Prom) et NVRAM&lt;br /&gt;
** Oracle VM Server (LDOM)|Oracle VM Server (LDOM)&lt;br /&gt;
** Packages - Solaris|Packages&lt;br /&gt;
** Password - solaris|Password&lt;br /&gt;
** Patch - Solaris|Patch&lt;br /&gt;
** proftpd|proftpd&lt;br /&gt;
** Quel process écoute sur un port|Quel process écoute sur un port&lt;br /&gt;
** Réseau- Solaris|Réseau Solaris 8,9,10&lt;br /&gt;
** Réseau Solaris 11|Réseau Solaris 11&lt;br /&gt;
** SAN - Solaris|SAN&lt;br /&gt;
** Services - Solaris|Services&lt;br /&gt;
** Solaris Volume Manager (SVM)|Solaris Volume Manager (SVM)&lt;br /&gt;
** Tcpdump|Tcpdump&lt;br /&gt;
** Déterminer le type de FS|type de filesystem&lt;br /&gt;
** Veritas Volume Manager (VxVM)|Veritas Volume Manager (VxVM)&lt;br /&gt;
** Version de Solaris|Version de Solaris&lt;br /&gt;
** XSCF|XSCF&lt;br /&gt;
** ZFS|ZFS&lt;br /&gt;
** Zombie|Zombie&lt;br /&gt;
** Zones - Solaris|Zones&lt;br /&gt;
&lt;br /&gt;
* BSD&lt;br /&gt;
** BSD présentation|présentation&lt;br /&gt;
** Accéder à des partitions BSD sous Linux|Accéder à des partitions BSD sous Linux&lt;br /&gt;
** Tcpdump|Tcpdump&lt;br /&gt;
&lt;br /&gt;
* AIX&lt;br /&gt;
** AIX - Présentation|Présentation&lt;br /&gt;
** Arrêt - relance - AIX|Arrêt - relance&lt;br /&gt;
** Backups - AIX|Backups&lt;br /&gt;
** Erreur matérielle - AIX|Erreur matérielle&lt;br /&gt;
** LVM - AIX|LVM&lt;br /&gt;
** Packages - AIX|Packages&lt;br /&gt;
** Process - classer par conso cpu - AIX|Process - classer par conso cpu&lt;br /&gt;
** Process - classer par conso mémoire - AIX|Process - classer par conso mémoire&lt;br /&gt;
** proftpd|proftpd&lt;br /&gt;
** Réseau - AIX|Réseau&lt;br /&gt;
** RPM - AIX|RPM&lt;br /&gt;
** Services - AIX|Services&lt;br /&gt;
&lt;br /&gt;
* HP-UX&lt;br /&gt;
** HP-UX|HP-UX&lt;br /&gt;
&lt;br /&gt;
* Windows&lt;br /&gt;
** Windows|Windows&lt;br /&gt;
&lt;br /&gt;
* Nagios&lt;br /&gt;
** Nagios|Nagios&lt;br /&gt;
** Installation de nagios|Installation&lt;br /&gt;
** Event_handler|event_handler&lt;br /&gt;
** Scripts nagios - exemples|Exemples de scripts&lt;br /&gt;
** pnp4nagios|pnp4nagios&lt;br /&gt;
** Pnp4nagios - Template|pnp4nagios-template&lt;br /&gt;
** Installation de Shinken|Shinken - Installation&lt;br /&gt;
&lt;br /&gt;
* MySQL&lt;br /&gt;
** Administration de MySQL|Administration de MySQL&lt;br /&gt;
** Perte du mot de passe root - MySQL|Perte du mot de passe root&lt;br /&gt;
** Sauvegardes - MySQL|Sauvegardes&lt;br /&gt;
** MySQL - Tâches courantes|Tâches courantes&lt;br /&gt;
** Vérifier et réparer les tables - MySQL|Vérifier et réparer les tables&lt;br /&gt;
&lt;br /&gt;
* PHP&lt;br /&gt;
** Afficher la date au format &amp;quot;dd-mmmm-yyyy&amp;quot; - PHP|Afficher la date au format &amp;quot;dd-mmmm-yyyy&amp;quot;&lt;br /&gt;
** Faire une galerie d&amp;#039;images - PHP|Galerie d&amp;#039;images&lt;br /&gt;
** Liens - PHP|Liens&lt;br /&gt;
** Scanner une plage d&amp;#039;adresses ip - PHP|Scanner une plage d&amp;#039;adresses ip&lt;br /&gt;
&lt;br /&gt;
* Perl&lt;br /&gt;
** Perl|Perl&lt;br /&gt;
** Perl - exemples|Exemples&lt;br /&gt;
&lt;br /&gt;
* Divers&lt;br /&gt;
** Baie de disques HP MSA1OOO - Command Line Interface (CLI)|Baie de disques HP MSA1OOO - Command Line Interface (CLI)&lt;br /&gt;
** Liens|Liens&lt;br /&gt;
&lt;br /&gt;
* M&amp;#039;écrire&lt;br /&gt;
** mailto:unixmaniax@gmail.com|M&amp;#039;envoyer un email&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=ZFS&amp;diff=625</id>
		<title>ZFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=ZFS&amp;diff=625"/>
		<updated>2022-02-25T11:50:22Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Récupération de zpools détruits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:solaris]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
ZFS est un système de fichiers développé par Sun Microsystems pour remplacer UFS. ZFS est également un gestionnaire de volumes logiques et de raid logiciel. Il est donc le remplaçant du couple UFS+SVM (Solaris Volume Manager ou SDS=Solstice Disk Suite pour les anciens [[File:smiley-langue.gif|frameless]]). C&amp;#039;est donc un concurrent de LVM+JFS2 d&amp;#039;AIX ou mdtools+LVM2+Ext4 de linux. En effet, ce que linux gère avec trois outils différents (raid logiciel+gestionnaire de volumes+filesystem), Solaris le gère maintenant avec un seul : ZFS. Je ne dit pas ça pour dire du mal de linux, que j&amp;#039;utilise au quotidien, mais là, Solaris est clairement en avance.&lt;br /&gt;
&lt;br /&gt;
ZFS s&amp;#039;appuie, comme ses concurrents, sur des partitions de disques dur (difficile de faire autrement...). Dans le langage ZFS, une partition dont il a le contrôle s&amp;#039;appelle un vDev (virtual device), c&amp;#039;est l&amp;#039;équivalent d&amp;#039;un PV en LVM. Par dessus, on va créer des zpools, équivalent des groupes en LVM. C&amp;#039;est au moment ou on créé le zpool qu&amp;#039;on va également définir le niveau de raid. Comme on le verra plus tard, il suffit de lui indiquer le niveau de raid souhaité et les partitions qu&amp;#039;il doit prendre en compte, et il fait tout tout seul. On peut même lui ajouter à chaud des disques pour agrandir les volumes. Ensuite, on va créer les filesystems (FS). Et là, tout devient très différent de ce qu&amp;#039;on a l&amp;#039;habitude de voir, car on ne précise pas la taille du FS. Tous les FS créés dans le zpool se partagent l&amp;#039;espace disque automatiquement, un peu comme des répertoires se partagent l&amp;#039;espace disque sur une partition. Tout se fait de manière dynamique extrêmement rapidement. Les méta-données sont également allouées dynamiquement, donc plus besoin de pré-allouer des inodes, donc plus de risque de saturation du nombre d&amp;#039;inodes. Vous allez me dire : &amp;quot;cette méthode est dangereuse car un FS qui grossit trop va remplir tout le zpool et tous les FS vont être bloqués&amp;quot;. Je répondrai : &amp;quot;oui et non&amp;quot;. Chaque FS créé avec ZFS peut se voir attribuer des quotas et des réservations. Les quotas sont une limite de taille que le FS ne pourra pas dépasser, et les réservations une taille minimum qui lui est garantie. Il est d&amp;#039;ailleurs fortement recommandé d&amp;#039;utiliser ces quotas et réservations pour prévenir tout problème de remplissage incontrôlé. Cette façon de voir les choses est un peu déroutante au début, mais elle est beaucoup plus souple. Il est très rapide de modifier une valeur de quota et de réservation, alors qu&amp;#039;il prend du temps (parfois beaucoup) sous LVM pour modifier la taille d&amp;#039;un volume, puis du FS qui est sur ce volume.&lt;br /&gt;
&lt;br /&gt;
Autre avantage de ZFS : il s&amp;#039;auto répare. ZFS créé des sommes de contrôle de ses données et méta-données et est capable de détecter et réparer les erreurs. Dans un raid, si une donnée est perdue, ZFS va la récupérer sur une autre branche du raid et remettre la bonne valeur. Tout ça est géré automatiquement en arrière plan par le système, aucune intervention humaine n&amp;#039;est nécessaire.&lt;br /&gt;
&lt;br /&gt;
En cas de coupure de courant, pas de problème : ZFS est un système de fichiers transactionnel qui garanti en permanence la cohérence des données sur les disques. C&amp;#039;est à la fois plus rapide et plus efficace que la journalisation. Le principe de transaction est très utilisé dans les bases de données. Plus de détails ici : [http://fr.wikipedia.org/wiki/Transaction_informatique http://fr.wikipedia.org/wiki/Transaction_informatique].&lt;br /&gt;
&lt;br /&gt;
ZFS permet également de faire très rapidement des snapshots et des clones de FS. Les FS peuvent être compressés.&lt;br /&gt;
&lt;br /&gt;
Au quotidien, ZFS fait gagner beaucoup de temps à l&amp;#039;administrateur. Non seulement les commandes sont moins nombreuses à taper, et la gestion des volumes simplifiée, mais les montages se font tout automatiquement et il n&amp;#039;est plus nécessaire de remplir la vfstab.&lt;br /&gt;
&lt;br /&gt;
Pour finir avec cette présentation, parlons de chiffres. ZFS est un système de fichiers 128 bits. Ceci lui permet d&amp;#039;avoir des FS d&amp;#039;une taille maximale de 256 quadrillions de zetta-octets. J&amp;#039;imagine que cela ne vous parle pas trop, alors précisons : un zetta-octet (Zo) est égal à 1 milliard de To, et un quadrillion est égal à un million de milliards de milliards. Donc pour résumer, la taille maximale d&amp;#039;un FS ZFS est de 256 millions de milliards de milliards de To ! Autant dire qu&amp;#039;on est tranquille pour quelques temps... Quant au nombre maximal de fichiers que peut contenir un répertoire, il est de 256 trillions, soit 256 milliards de milliards. Bref, ça a été un peu mieux pensé que le FAT32... [[File:smiley-dents.gif|frameless]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Les bases de ZFS par l&amp;#039;exemple=&lt;br /&gt;
&lt;br /&gt;
Voici quelques petits exemples pour pouvoir utiliser rapidement ZFS. Nous verrons les détails plus tard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Les zpools==&lt;br /&gt;
&lt;br /&gt;
On a un disque c0t2d0 qui possède deux partitions de 20Go : c0t2d0s0 et c0t2d0s1.&lt;br /&gt;
&lt;br /&gt;
Créons un datapool sur chacune des partitions et visualisons le résultat :&lt;br /&gt;
&lt;br /&gt;
 # zpool create testpool c0t2d0s0&lt;br /&gt;
 # zpool create testpool2 c0t2d0s1&lt;br /&gt;
 # zpool list&lt;br /&gt;
 NAME        SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT&lt;br /&gt;
 testpool   19.9G  95.5K  19.9G     0%  ONLINE  -&lt;br /&gt;
 testpool2  19.9G  95.5K  19.9G     0%  ONLINE  -&lt;br /&gt;
 #&lt;br /&gt;
 # zfs list&lt;br /&gt;
 NAME        USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
 testpool     72K  19.6G    21K  /testpool&lt;br /&gt;
 testpool2    72K  19.6G    21K  /testpool2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Les systèmes de fichiers==&lt;br /&gt;
&lt;br /&gt;
===Systèmes de fichiers simples, quotas et réservations===&lt;br /&gt;
&lt;br /&gt;
On va maintenant créer deux systèmes de fichiers simples dans testpool :&lt;br /&gt;
&lt;br /&gt;
 # zfs create testpool/test&lt;br /&gt;
 # zfs create testpool/test/foo&lt;br /&gt;
 # zfs list&lt;br /&gt;
 NAME                USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
 testpool            130K  19.6G    22K  /testpool&lt;br /&gt;
 testpool/test        42K  19.6G    21K  /testpool/test&lt;br /&gt;
 testpool/test/foo    21K  19.6G    21K  /testpool/test/foo&lt;br /&gt;
 testpool2            72K  19.6G    21K  /testpool2&lt;br /&gt;
&lt;br /&gt;
On voit que les filesystems (FS) créés ont la même taille que leur pool. D&amp;#039;ailleurs, il n&amp;#039;y a pas besoin de préciser leur taille. Tous les FS créés se partagent l&amp;#039;espace disponible sur le pool. Cependant, on peut leur affecter des quotas et des réservations (ou les deux à la fois). Les quotas servent à limiter la taille maximale utilisable par un FS, et la réservation sert à garantir au FS un espace minimum qui lui sera réservé, pour être sûr que les autres FS ne prendront pas toute la place. On peut également activer la compression sur un FS. Voyons un exemple.&lt;br /&gt;
&lt;br /&gt;
 # zfs create -o quota=1g testpool/test/foo2&lt;br /&gt;
 # zfs create -o reservation=1g -o compression=on testpool/test/foo3&lt;br /&gt;
 # zfs list&lt;br /&gt;
 NAME                 USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
 testpool            1.00G  18.6G    22K  /testpool&lt;br /&gt;
 testpool/test       1.00G  18.6G    24K  /testpool/test&lt;br /&gt;
 testpool/test/foo     21K  18.6G    21K  /testpool/test/foo&lt;br /&gt;
 testpool/test/foo2    21K  1024M    21K  /testpool/test/foo2&lt;br /&gt;
 testpool/test/foo3    21K  19.6G    21K  /testpool/test/foo3&lt;br /&gt;
 testpool2             72K  19.6G    21K  /testpool2&lt;br /&gt;
&lt;br /&gt;
On voit que l&amp;#039;espace disponible dans testpool diminue de 1Go, ce qui correspond à la taille réservée à testpool/test/foo3. Par contre, la taille disponible pour ce dernier est toujours de 19,6Go car aucun autre FS n&amp;#039;a réservé d&amp;#039;espace disque. On remarque également que l&amp;#039;espace disponible pour testpool/test/foo2 est de 1024Mo, car c&amp;#039;est le quota qu&amp;#039;on lui a fixé.&lt;br /&gt;
&lt;br /&gt;
La compression activée pour testpool/test/foo3 n&amp;#039;est pas visible avec &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs list&amp;#039;&amp;#039;&amp;#039;&amp;quot;. Pour la voir il faut utiliser &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs get&amp;#039;&amp;#039;&amp;#039;&amp;quot; qu&amp;#039;on verra plus tard. Ou plus simplement &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs list -o compression&amp;#039;&amp;#039;&amp;#039;&amp;quot;, mais on ne verra plus les autres informations. Pour tout voir : &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs list -o name,used,avail,refer,mountpoint,compression&amp;#039;&amp;#039;&amp;#039;&amp;quot;. Il existe encore d&amp;#039;autres valeurs qu&amp;#039;on peut afficher, mais je vous laisse lire la page man pour les voir, car elles évoluent avec les versions de ZFS.&lt;br /&gt;
&lt;br /&gt;
 # zfs list -o compression&lt;br /&gt;
 COMPRESS&lt;br /&gt;
  off&lt;br /&gt;
  off&lt;br /&gt;
  off&lt;br /&gt;
  off&lt;br /&gt;
  on&lt;br /&gt;
  off&lt;br /&gt;
 # zfs list -o name,used,avail,refer,mountpoint,compression&lt;br /&gt;
 NAME                 USED  AVAIL  REFER  MOUNTPOINT           COMPRESS&lt;br /&gt;
 testpool            1.00G  18.6G    22K  /testpool                 off&lt;br /&gt;
 testpool/test       1.00G  18.6G    24K  /testpool/test            off&lt;br /&gt;
 testpool/test/foo     21K  18.6G    21K  /testpool/test/foo        off&lt;br /&gt;
 testpool/test/foo2    21K  1024M    21K  /testpool/test/foo2       off&lt;br /&gt;
 testpool/test/foo3    21K  19.6G    21K  /testpool/test/foo3        on&lt;br /&gt;
 testpool2             72K  19.6G    21K  /testpool2                off&lt;br /&gt;
&lt;br /&gt;
Une remarque importante sur la compression : celle-ci compresse les données à la volée. C&amp;#039;est à dire que les nouveaux fichiers seront compressés, mais les anciens resteront non compressés. Il faut donc penser à la compression avant d&amp;#039;avoir des problèmes d&amp;#039;espace disque ! A noter que les différents benchs que j&amp;#039;ai pu lire montrent que la compression ne fait pas perdre de performance et en fait même gagner dans quelques cas. Ça peut donc être une bonne idée de l&amp;#039;activer dès la création du FS.&lt;br /&gt;
&lt;br /&gt;
Les valeurs de quota et de réservation peuvent se changer à tout moment. Exemple.&lt;br /&gt;
&lt;br /&gt;
 # zfs set quota=2g testpool/test/foo2&lt;br /&gt;
 # zfs set reservation=512m testpool/test/foo2&lt;br /&gt;
 # zfs list&lt;br /&gt;
 NAME                 USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
 testpool            1.50G  18.1G    22K  /testpool&lt;br /&gt;
 testpool/test       1.50G  18.1G    25K  /testpool/test&lt;br /&gt;
 testpool/test/foo     21K  18.1G    21K  /testpool/test/foo&lt;br /&gt;
 testpool/test/foo2    21K  2.00G    21K  /testpool/test/foo2&lt;br /&gt;
 testpool/test/foo3    21K  19.1G    21K  /testpool/test/foo3&lt;br /&gt;
 testpool2             72K  19.6G    21K  /testpool2&lt;br /&gt;
&lt;br /&gt;
On remarque les changements de valeur USED et AVAIL qui se répercutent sur les différents FS de testpool. On ne peut pas changer deux valeurs à la fois avec &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs set&amp;#039;&amp;#039;&amp;#039;&amp;quot;, il faut faire plusieurs lignes.&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer un quota ou une réservation, il faut remplacer la valeur par &amp;quot;&amp;#039;&amp;#039;&amp;#039;none&amp;#039;&amp;#039;&amp;#039;&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 # zfs set quota=none testpool/test/foo2&lt;br /&gt;
&lt;br /&gt;
===Points de montage===&lt;br /&gt;
&lt;br /&gt;
Par défaut, les FS sont montés dans l&amp;#039;arborescence qui correspond au nom du zfs (par exemple, testpool/test est monté dans /testpool/test) et les répertoires correspondants sont automatiquement créés. Cependant, on peut modifier le point de montage, soit à la création, soit après coup. Exemples.&lt;br /&gt;
&lt;br /&gt;
 # zfs create -p -o mountpoint=/data testpool/users/data&lt;br /&gt;
 # zfs set mountpoint=/testpool/foo2 testpool/test/foo2&lt;br /&gt;
 # zfs list&lt;br /&gt;
 NAME                  USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
 testpool             1.50G  18.1G    24K  /testpool&lt;br /&gt;
 testpool/test        1.50G  18.1G    25K  /testpool/test&lt;br /&gt;
 testpool/test/foo      21K  18.1G    21K  /testpool/test/foo&lt;br /&gt;
 testpool/test/foo2     21K  2.00G    21K  /testpool/foo2&lt;br /&gt;
 testpool/test/foo3     21K  19.1G    21K  /testpool/test/foo3&lt;br /&gt;
 testpool/users         42K  18.1G    21K  /testpool/users&lt;br /&gt;
 testpool/users/data    21K  18.1G    21K  /data&lt;br /&gt;
 testpool2              72K  19.6G    21K  /testpool2&lt;br /&gt;
&lt;br /&gt;
Et voilà. On remarque au passage l&amp;#039;option &amp;quot;&amp;#039;&amp;#039;&amp;#039;-p&amp;#039;&amp;#039;&amp;#039;&amp;quot; de &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs create&amp;#039;&amp;#039;&amp;#039;&amp;quot; qui permet, à la manière de &amp;quot;&amp;#039;&amp;#039;&amp;#039;mkdir -p&amp;#039;&amp;#039;&amp;#039;&amp;quot;, de créer de manière récursive l&amp;#039;arborescence de testpool/users/data. Sans cette option, il aurait fallu commencer pour faire &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs create testpool/users&amp;#039;&amp;#039;&amp;#039;&amp;quot; puis &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs create testpool/users/data&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
On peu également ne pas vouloir qu&amp;#039;un FS ou un zpool ne soit pas monté. On peut le préciser avec l&amp;#039;option &amp;quot;&amp;#039;&amp;#039;&amp;#039;mountpoint=none&amp;#039;&amp;#039;&amp;#039;&amp;quot; à la création ou après coup, comme dans l&amp;#039;exemple suivant. A noter que si on le fait après coup, le répertoire de montage sera supprimé au passage.&lt;br /&gt;
&lt;br /&gt;
 # zfs set mountpoint=none testpool/test/foo3&lt;br /&gt;
 # zfs list testpool/test/foo3&lt;br /&gt;
 NAME                 USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
 testpool/test/foo3    21K  19.1G    21K  none&lt;br /&gt;
&lt;br /&gt;
A noter que tous les points de montage sont inscrits dans les databases (ou méta données) internes de ZFS, ce qui fait qu&amp;#039;il n&amp;#039;est plus nécessaire de renseigner /etc/vfstab. Les montages seront automatiquement remontés au reboot.&lt;br /&gt;
&lt;br /&gt;
===Obtenir des infos sur les FS===&lt;br /&gt;
&lt;br /&gt;
Pour obtenir des informations sur les FS, on utilise la commande &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs get&amp;#039;&amp;#039;&amp;#039;&amp;quot;. On obtient la totalité des informations avec &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs get all&amp;#039;&amp;#039;&amp;#039;&amp;quot;. Je ne donnerai pas d&amp;#039;exemple ici, car avec les quelques FS qu&amp;#039;on vient de créer, ça nous affiche déjà 345 lignes d&amp;#039;informations !&lt;br /&gt;
&lt;br /&gt;
Mais on peut limiter l&amp;#039;affichage aux seules informations qui nous intéressent, par exemple les quotas ou la compression. On peut réduire encore plus la sélection en précisant le FS. Exemples.&lt;br /&gt;
&lt;br /&gt;
 # zfs get quota&lt;br /&gt;
 NAME                 PROPERTY  VALUE  SOURCE&lt;br /&gt;
 testpool             quota     none   default&lt;br /&gt;
 testpool/test        quota     none   default&lt;br /&gt;
 testpool/test/foo    quota     none   default&lt;br /&gt;
 testpool/test/foo2   quota     2G     local&lt;br /&gt;
 testpool/test/foo3   quota     none   default&lt;br /&gt;
 testpool/users       quota     none   default&lt;br /&gt;
 testpool/users/data  quota     none   default&lt;br /&gt;
 testpool2            quota     none   default&lt;br /&gt;
 # zfs get compression&lt;br /&gt;
 NAME                 PROPERTY     VALUE     SOURCE&lt;br /&gt;
 testpool             compression  off       default&lt;br /&gt;
 testpool/test        compression  off       default&lt;br /&gt;
 testpool/test/foo    compression  off       default&lt;br /&gt;
 testpool/test/foo2   compression  off       default&lt;br /&gt;
 testpool/test/foo3   compression  on        local&lt;br /&gt;
 testpool/users       compression  off       default&lt;br /&gt;
 testpool/users/data  compression  off       default&lt;br /&gt;
 testpool2            compression  off       default&lt;br /&gt;
 # zfs get compression testpool/test/foo&lt;br /&gt;
 NAME               PROPERTY     VALUE     SOURCE&lt;br /&gt;
 testpool/test/foo  compression  off       default&lt;br /&gt;
&lt;br /&gt;
On peut également utiliser &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs list&amp;#039;&amp;#039;&amp;#039;&amp;quot; avec les options souhaitées, comme on l&amp;#039;a vu plus haut. Exemple : &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs list -o name,used,avail,refer,mountpoint,compression&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Suppression de FS===&lt;br /&gt;
&lt;br /&gt;
On utilise &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs destroy&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ATTENTION : cette commande ne demande aucune confirmation !!!&amp;#039;&amp;#039;&amp;#039; A utiliser avec la plus grande précaution donc.&lt;br /&gt;
&lt;br /&gt;
 # zfs list&lt;br /&gt;
 NAME                  USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
 testpool             1.50G  18.1G    25K  /testpool&lt;br /&gt;
 testpool/test        1.50G  18.1G    24K  /testpool/test&lt;br /&gt;
 testpool/test/foo      21K  18.1G    21K  /testpool/test/foo&lt;br /&gt;
 testpool/test/foo2     21K  2.00G    21K  /testpool/foo2&lt;br /&gt;
 testpool/test/foo3     21K  19.1G    21K  /testpool/test/foo3&lt;br /&gt;
 testpool/users         42K  18.1G    21K  /testpool/users&lt;br /&gt;
 testpool/users/data    21K  18.1G    21K  /data&lt;br /&gt;
 testpool2              72K  19.6G    21K  /testpool2&lt;br /&gt;
 # zfs destroy testpool/users/data&lt;br /&gt;
 # zfs destroy testpool/users&lt;br /&gt;
 # zfs list&lt;br /&gt;
 NAME                 USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
 testpool            1.50G  18.1G    25K  /testpool&lt;br /&gt;
 testpool/test       1.50G  18.1G    24K  /testpool/test&lt;br /&gt;
 testpool/test/foo     21K  18.1G    21K  /testpool/test/foo&lt;br /&gt;
 testpool/test/foo2    21K  2.00G    21K  /testpool/foo2&lt;br /&gt;
 testpool/test/foo3    21K  19.1G    21K  /testpool/test/foo3&lt;br /&gt;
 testpool2             72K  19.6G    21K  /testpool2&lt;br /&gt;
&lt;br /&gt;
Et voilà, les deux FS ont été détruits sans sommation !&lt;br /&gt;
&lt;br /&gt;
Pour les pools, on utilise la commande &amp;quot;&amp;#039;&amp;#039;&amp;#039;zpool destroy nom-du-pool&amp;#039;&amp;#039;&amp;#039;&amp;quot; qui est aussi radicale, même si le pool contient des FS ! On peut donc perdre énormément de données en un instant.&lt;br /&gt;
&lt;br /&gt;
Voilà, nous avons vu la plupart des commandes utiles au quotidien pour ZFS. Il reste encore un point important à voir dans le détail avant de se lancer dans l&amp;#039;administration ZFS chez votre patron : la gestion des niveaux de raid avec les zpools. Let&amp;#039;s go !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Les zpools dans le détail=&lt;br /&gt;
&lt;br /&gt;
Comme nous l&amp;#039;avons vu dans la présentation de ZFS, les zpools sont l&amp;#039;équivalent des Volume Group (VG) dans LVM. Mais ce sont également eux qui s&amp;#039;occupent des niveaux de raid (c&amp;#039;est le cas du LVM d&amp;#039;AIX, mais pas de celui de linux). Ceci se gère dès la création du zpool.&lt;br /&gt;
&lt;br /&gt;
Dans les exemples qui suivent, nous avons effacé les zpools précédemment créés et nous repartons avec 7 partitions de 5Go chacune : c0t2d0s0 à c0t2d0s6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un pool simple==&lt;br /&gt;
&lt;br /&gt;
 # zpool create zp_simple c0t2d0s0&lt;br /&gt;
 # zpool list&lt;br /&gt;
 NAME        SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT&lt;br /&gt;
 zp_simple  4.97G  95.5K  4.97G     0%  ONLINE  -&lt;br /&gt;
 # zfs list&lt;br /&gt;
 NAME        USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
 zp_simple    72K  4.89G    21K  /zp_simple&lt;br /&gt;
&lt;br /&gt;
Et voilà. Le résultat est instantané et &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs list&amp;#039;&amp;#039;&amp;#039;&amp;quot; nous indique qu&amp;#039;un FS a été créé et est déjà monté dans /zp_simple.&lt;br /&gt;
&lt;br /&gt;
Supposons maintenant qu&amp;#039;on voulait le créer compressé et sans point de montage.&lt;br /&gt;
&lt;br /&gt;
 # zpool destroy zp_simple&lt;br /&gt;
 # zpool create -m none -O compression=on zp_simple c0t2d0s0&lt;br /&gt;
 # zpool list&lt;br /&gt;
 NAME        SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT&lt;br /&gt;
 zp_simple  4.97G   152K  4.97G     0%  ONLINE  -&lt;br /&gt;
 # zfs list -o name,used,avail,refer,mountpoint,compress&lt;br /&gt;
 NAME        USED  AVAIL  REFER  MOUNTPOINT  COMPRESS&lt;br /&gt;
 zp_simple  82.5K  4.89G    21K  none              on&lt;br /&gt;
&lt;br /&gt;
Et voilà, c&amp;#039;est aussi simple que ça. A noter que les options ne sont pas les mêmes qu&amp;#039;avec la commande zfs. Avec zpool, le point de montage se précise avec l&amp;#039;option &amp;quot;&amp;#039;&amp;#039;&amp;#039;-m&amp;#039;&amp;#039;&amp;#039;&amp;quot; (mise à none ici) et les options concernant les futurs FS se passent avec &amp;quot;&amp;#039;&amp;#039;&amp;#039;-O&amp;#039;&amp;#039;&amp;#039;&amp;quot; (lettre o majuscule). Je dis bien les futurs FS, car la compression sur un zpool n&amp;#039;a pas vraiment de sens, mais il faut savoir que les propriétés d&amp;#039;un FS sont, par défaut, héritées du FS père, ou du zpool père s&amp;#039;il n&amp;#039;y a pas de FS père. Donc dans ce dernier exemple, tous les FS créés dans zp_simple seront compressés et n&amp;#039;auront pas de point de montage. Mais si on spécifie un point de montage au prochain FS créé, alors ses descendants hériteront de son point de montage.&lt;br /&gt;
&lt;br /&gt;
Une autre option qui peut être utile est &amp;quot;&amp;#039;&amp;#039;&amp;#039;-f&amp;#039;&amp;#039;&amp;#039;&amp;quot;. Si le disque a déjà été utilisé en UFS, il est probable que zpool se rende compte qu&amp;#039;il a déjà servi et refuse de créer le pool, car il y a risque de conflit avec un FS existant, qui serait utilisé SVM (anciennement SDS). Si on est sûr que le disque est bien disponible, on va utiliser l&amp;#039;option &amp;quot;&amp;#039;&amp;#039;&amp;#039;-f&amp;#039;&amp;#039;&amp;#039;&amp;quot; qui va forcer la création du zpool.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un pool en raid0==&lt;br /&gt;
&lt;br /&gt;
 # zpool create zp_raid0 c0t2d0s1 c0t2d0s2&lt;br /&gt;
 # zpool list&lt;br /&gt;
 NAME        SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT&lt;br /&gt;
 zp_raid0   9.94G    97K  9.94G     0%  ONLINE  -&lt;br /&gt;
 zp_simple  4.97G   166K  4.97G     0%  ONLINE  -&lt;br /&gt;
 # zfs list&lt;br /&gt;
 NAME        USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
 zp_raid0   73.5K  9.78G    21K  /zp_raid0&lt;br /&gt;
 zp_simple    84K  4.89G    21K  none&lt;br /&gt;
&lt;br /&gt;
Difficile de faire plus simple...&lt;br /&gt;
&lt;br /&gt;
Nous allons en profiter pour voir une nouvelle commande : &amp;quot;&amp;#039;&amp;#039;&amp;#039;zpool status&amp;#039;&amp;#039;&amp;#039;&amp;quot; qui peut se taper seule ou avec une liste de zpools en argument. Exemple.&lt;br /&gt;
&lt;br /&gt;
 # zpool status zp_raid0&lt;br /&gt;
  pool: zp_raid0&lt;br /&gt;
  state: ONLINE&lt;br /&gt;
  scrub: none requested&lt;br /&gt;
 config:&lt;br /&gt;
 &lt;br /&gt;
  NAME        STATE     READ WRITE CKSUM&lt;br /&gt;
  zp_raid0    ONLINE       0     0     0&lt;br /&gt;
  c0t2d0s1  ONLINE       0     0     0&lt;br /&gt;
  c0t2d0s2  ONLINE       0     0     0&lt;br /&gt;
 &lt;br /&gt;
  errors: No known data errors&lt;br /&gt;
&lt;br /&gt;
Cette commande nous permet de voir l&amp;#039;état et la configuration du zpool. On peut voir précisément de quels vdevs (partitions) il est composé, et l&amp;#039;état de chacun des vdevs.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Création d&amp;#039;un pool en miroir (raid1)==&lt;br /&gt;
&lt;br /&gt;
On va rajouter le mot clé &amp;quot;&amp;#039;&amp;#039;&amp;#039;mirror&amp;#039;&amp;#039;&amp;#039;&amp;quot; pour préciser à zpool qu&amp;#039;il s&amp;#039;agit d&amp;#039;un mirroir.&lt;br /&gt;
&lt;br /&gt;
 # zpool create zp_raid1 mirror c0t2d0s3 c0t2d0s4&lt;br /&gt;
 # zpool list&lt;br /&gt;
 NAME        SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT&lt;br /&gt;
 zp_raid0   9.94G    78K  9.94G     0%  ONLINE  -&lt;br /&gt;
 zp_raid1   4.97G  95.5K  4.97G     0%  ONLINE  -&lt;br /&gt;
 zp_simple  4.97G  88.5K  4.97G     0%  ONLINE  -&lt;br /&gt;
&lt;br /&gt;
On voit bien que zp_raid1 ne fait que la moitié de la somme de ses deux vdevs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un pool en raid 1+0==&lt;br /&gt;
&lt;br /&gt;
Il s&amp;#039;agit ici de créer deux miroirs qu&amp;#039;on va assembler. Commençons par supprimer les pools précédents.&lt;br /&gt;
&lt;br /&gt;
 # zpool destroy zp_simple ; zpool destroy zp_raid0 ; zpool destroy zp_raid1&lt;br /&gt;
 # zpool create zp_raid10 mirror c0t2d0s0 c0t2d0s1 mirror c0t2d0s2 c0t2d0s3&lt;br /&gt;
 # zpool list&lt;br /&gt;
 NAME        SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT&lt;br /&gt;
 zp_raid10  9.94G    97K  9.94G     0%  ONLINE  -&lt;br /&gt;
 # zpool status&lt;br /&gt;
  pool: zp_raid10&lt;br /&gt;
  state: ONLINE&lt;br /&gt;
  scrub: none requested&lt;br /&gt;
 config:&lt;br /&gt;
 &lt;br /&gt;
         NAME          STATE     READ WRITE CKSUM&lt;br /&gt;
         zp_raid10     ONLINE       0     0     0&lt;br /&gt;
           mirror-0    ONLINE       0     0     0&lt;br /&gt;
             c0t2d0s0  ONLINE       0     0     0&lt;br /&gt;
             c0t2d0s1  ONLINE       0     0     0&lt;br /&gt;
           mirror-1    ONLINE       0     0     0&lt;br /&gt;
             c0t2d0s2  ONLINE       0     0     0&lt;br /&gt;
             c0t2d0s3  ONLINE       0     0     0&lt;br /&gt;
 &lt;br /&gt;
 errors: No known data errors&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;zpool status&amp;#039;&amp;#039;&amp;#039; nous permet de bien voir que zp_raid10 est composé de deux mirroirs, chacun composé de deux vdevs. On peut ajouter autant de miroirs qu&amp;#039;on veut.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Création d&amp;#039;un zpool en raidz==&lt;br /&gt;
&lt;br /&gt;
En langage zfs, on ne parle pas de raid5 mais de raidz ou raidz1. En fait, le raidz est identique au raid5, à part que le calcul de la parité est différent. A la place du mot clé &amp;quot;&amp;#039;&amp;#039;&amp;#039;mirror&amp;#039;&amp;#039;&amp;#039;&amp;quot;, on va mettre &amp;quot;&amp;#039;&amp;#039;&amp;#039;raidz&amp;#039;&amp;#039;&amp;#039;&amp;quot; ou &amp;quot;&amp;#039;&amp;#039;&amp;#039;raidz1&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
On va également introduire une nouvelle notion : celle de spare disk. Un spare disk est le disque qui va prendre le relais en cas de panne d&amp;#039;un des disques actifs. On ajoute le (ou les) spare disk(s) avec le mot clé &amp;quot;&amp;#039;&amp;#039;&amp;#039;spare&amp;#039;&amp;#039;&amp;#039;&amp;quot; suivit du ou des vdevs. Les spare disks fonctionnent également avec tous les niveaux de raid vu précédemment.&lt;br /&gt;
&lt;br /&gt;
 # zpool create zp_raid5 raidz c0t2d0s0 c0t2d0s1 c0t2d0s2 c0t2d0s3 spare c0t2d0s4&lt;br /&gt;
 # zpool status&lt;br /&gt;
   pool: zp_raid5&lt;br /&gt;
  state: ONLINE&lt;br /&gt;
  scrub: none requested&lt;br /&gt;
 config:&lt;br /&gt;
 &lt;br /&gt;
         NAME          STATE     READ WRITE CKSUM&lt;br /&gt;
         zp_raid5      ONLINE       0     0     0&lt;br /&gt;
           raidz1-0    ONLINE       0     0     0&lt;br /&gt;
             c0t2d0s0  ONLINE       0     0     0&lt;br /&gt;
             c0t2d0s1  ONLINE       0     0     0&lt;br /&gt;
             c0t2d0s2  ONLINE       0     0     0&lt;br /&gt;
             c0t2d0s3  ONLINE       0     0     0&lt;br /&gt;
         spares&lt;br /&gt;
           c0t2d0s4    AVAIL&lt;br /&gt;
 &lt;br /&gt;
 errors: No known data error&lt;br /&gt;
 # zpool list&lt;br /&gt;
 NAME       SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT&lt;br /&gt;
 zp_raid5  19.9G   147K  19.9G     0%  ONLINE  -&lt;br /&gt;
&lt;br /&gt;
Pour les grandes quantités de disques, Oracle recommande l&amp;#039;utilisation de raidz2. Il s&amp;#039;agit d&amp;#039;un raid6, c&amp;#039;est à dire un raid5 avec double calcul de parité, pour pouvoir supporter la perte de deux disques. Les dernières versions de ZFS incluent également un niveau raidz3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Import / export de zpools==&lt;br /&gt;
&lt;br /&gt;
Il peut être utile d&amp;#039;exporter et d&amp;#039;importer un zpool. Par exemple, dans le cas de deux serveurs reliés au même SAN, pour transférer le zpool sur l&amp;#039;autre serveur.&lt;br /&gt;
&lt;br /&gt;
Pour exporter le zpool, on utilise &amp;quot;&amp;#039;&amp;#039;&amp;#039;zpool export&amp;#039;&amp;#039;&amp;#039;&amp;quot; et pour importer &amp;quot;&amp;#039;&amp;#039;&amp;#039;zpool import&amp;#039;&amp;#039;&amp;#039;&amp;quot;. &amp;quot;&amp;#039;&amp;#039;&amp;#039;zpool import&amp;#039;&amp;#039;&amp;#039;&amp;quot; sert également à voir la liste des zpool possibles à importer ; utile pour vérifier que le zpool est bien visible du serveur.&lt;br /&gt;
&lt;br /&gt;
 # zpool list&lt;br /&gt;
 NAME       SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT&lt;br /&gt;
 zp_raid5  19.9G   147K  19.9G     0%  ONLINE  -&lt;br /&gt;
 # zpool export zp_raid5&lt;br /&gt;
 # zpool list&lt;br /&gt;
 no pools available&lt;br /&gt;
 # zpool import&lt;br /&gt;
   pool: zp_raid5&lt;br /&gt;
     id: 8634237456648565539&lt;br /&gt;
  state: ONLINE&lt;br /&gt;
 action: The pool can be imported using its name or numeric identifier.&lt;br /&gt;
 config:&lt;br /&gt;
 &lt;br /&gt;
         zp_raid5      ONLINE&lt;br /&gt;
           raidz1-0    ONLINE&lt;br /&gt;
             c0t2d0s0  ONLINE&lt;br /&gt;
             c0t2d0s1  ONLINE&lt;br /&gt;
             c0t2d0s2  ONLINE&lt;br /&gt;
             c0t2d0s3  ONLINE&lt;br /&gt;
         spares&lt;br /&gt;
           c0t2d0s4&lt;br /&gt;
 # zpool list&lt;br /&gt;
 no pools available&lt;br /&gt;
 # zpool import zp_raid5&lt;br /&gt;
 # zpool list&lt;br /&gt;
 NAME       SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT&lt;br /&gt;
 zp_raid5  19.9G   198K  19.9G     0%  ONLINE  -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Récupération de zpools détruits==&lt;br /&gt;
&lt;br /&gt;
Si on a supprimé par erreur un zpool avec &amp;quot;&amp;#039;&amp;#039;&amp;#039;zpool destroy&amp;#039;&amp;#039;&amp;#039;&amp;quot;, tout espoir n&amp;#039;est pas perdu. Il faut utiliser &amp;quot;&amp;#039;&amp;#039;&amp;#039;zpool import [-D]&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 # zpool list&lt;br /&gt;
 NAME       SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT&lt;br /&gt;
 zp_raid5  19.9G   147K  19.9G     0%  ONLINE  -&lt;br /&gt;
 # zpool destroy zp_raid5&lt;br /&gt;
 # zpool list&lt;br /&gt;
 no pools available&lt;br /&gt;
 # zpool status zp_raid5&lt;br /&gt;
 cannot open &amp;#039;zp_raid5&amp;#039;: no such pool&lt;br /&gt;
 # zpool import&lt;br /&gt;
 no pools available to import&lt;br /&gt;
 # zpool import -D&lt;br /&gt;
  pool: zp_raid5&lt;br /&gt;
  id: 8634237456648565539&lt;br /&gt;
  state: ONLINE (DESTROYED)&lt;br /&gt;
 action: The pool can be imported using its name or numeric identifier.&lt;br /&gt;
 config:&lt;br /&gt;
 &lt;br /&gt;
         zp_raid5      ONLINE&lt;br /&gt;
           raidz1-0    ONLINE&lt;br /&gt;
             c0t2d0s0  ONLINE&lt;br /&gt;
             c0t2d0s1  ONLINE&lt;br /&gt;
             c0t2d0s2  ONLINE&lt;br /&gt;
             c0t2d0s3  ONLINE&lt;br /&gt;
         spares&lt;br /&gt;
             c0t2d0s4&lt;br /&gt;
 # zpool import -D zp_raid5&lt;br /&gt;
 # zpool list&lt;br /&gt;
 NAME       SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT&lt;br /&gt;
 zp_raid5  19.9G   198K  19.9G     0%  ONLINE  -&lt;br /&gt;
&lt;br /&gt;
On remarque l&amp;#039;état &amp;quot;&amp;#039;&amp;#039;&amp;#039;ONLINE (DESTROYED)&amp;#039;&amp;#039;&amp;#039;&amp;quot; renvoyé par &amp;quot;&amp;#039;&amp;#039;&amp;#039;zpool import -D&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Renommer un zpool==&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;est pas possible de renommer un zpool actif. La solution est de l&amp;#039;exporter et de l&amp;#039;importer sous un nouveau nom. Par contre, le zpool est indisponible le temps de la manipulation. Même si ça ne dure que quelques secondes, c&amp;#039;est à réfléchir sur un serveur de production...&lt;br /&gt;
&lt;br /&gt;
 # zpool list&lt;br /&gt;
 NAME       SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT&lt;br /&gt;
 zp_raid5  19.9G   147K  19.9G     0%  ONLINE  -&lt;br /&gt;
 # zpool export zp_raid5&lt;br /&gt;
 # zpool import zp_raid5 zp_data&lt;br /&gt;
 # zpool list&lt;br /&gt;
 NAME      SIZE  ALLOC   FREE    CAP  HEALTH  ALTROOT&lt;br /&gt;
 zp_data  19.9G   198K  19.9G     0%  ONLINE  -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Lister les disques d&amp;#039;un zpool==&lt;br /&gt;
&lt;br /&gt;
Il faut utiliser une commande que nous avons vu au début, lors de la création d&amp;#039;un zpool. La commande est &amp;quot;&amp;#039;&amp;#039;&amp;#039;zpool status&amp;#039;&amp;#039;&amp;#039;&amp;quot;, qui peut se taper seule ou avec une liste de zpools en argument. Exemple.&lt;br /&gt;
&lt;br /&gt;
 # zpool status zp_raid0&lt;br /&gt;
  pool: zp_raid0&lt;br /&gt;
  state: ONLINE&lt;br /&gt;
  scrub: none requested&lt;br /&gt;
 config:&lt;br /&gt;
 &lt;br /&gt;
  NAME        STATE     READ WRITE CKSUM&lt;br /&gt;
  zp_raid0    ONLINE       0     0     0&lt;br /&gt;
  c0t2d0s1  ONLINE       0     0     0&lt;br /&gt;
  c0t2d0s2  ONLINE       0     0     0&lt;br /&gt;
 &lt;br /&gt;
  errors: No known data errors&lt;br /&gt;
&lt;br /&gt;
=Compléments sur les FS=&lt;br /&gt;
&lt;br /&gt;
Nous avons vu toutes les fonctionnalités courantes dans le chapitre &amp;quot;&amp;#039;&amp;#039;Les bases de ZFS par l&amp;#039;exemple&amp;#039;&amp;#039;&amp;quot;. Mais il y a encore quelques points intéressants à voir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Montage et démontage==&lt;br /&gt;
&lt;br /&gt;
On monter et démonter des FS ZFS avec les commandes &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs mount nom-du-FS&amp;#039;&amp;#039;&amp;#039;&amp;quot; et &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs umount nom-du-FS&amp;#039;&amp;#039;&amp;#039;&amp;quot;. Cette action est différente de &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs set mountpoint=none&amp;#039;&amp;#039;&amp;#039;&amp;quot;. Cette dernière commande démonte le FS, mais supprime également le point de montage de la config ZFS et supprime le répertoire, alors que &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs umount&amp;#039;&amp;#039;&amp;#039;&amp;quot; ne fait que démonter le FS, mais conserve répertoire et config ZFS. Exemple.&lt;br /&gt;
&lt;br /&gt;
 # zfs list&lt;br /&gt;
 NAME          USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
 zp_data      10.1M  14.6G  10.0M  /zp_data&lt;br /&gt;
 zp_data/foo  31.4K  2.00G  31.4K  /zp_data/foo&lt;br /&gt;
 # df -h /zp_data/foo&lt;br /&gt;
 Filesystem             size   used  avail capacity  Mounted on&lt;br /&gt;
 zp_data/foo            2.0G    31K   2.0G     1%    /zp_data/foo&lt;br /&gt;
 # zfs umount /zp_data/foo&lt;br /&gt;
 # df -h /zp_data/foo&lt;br /&gt;
 Filesystem             size   used  avail capacity  Mounted on&lt;br /&gt;
 zp_data                 15G    10M    15G     1%    /zp_data&lt;br /&gt;
 # zfs list&lt;br /&gt;
 NAME          USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
 zp_data      10.1M  14.6G  10.0M  /zp_data&lt;br /&gt;
 zp_data/foo  31.4K  2.00G  31.4K  /zp_data/foo&lt;br /&gt;
 # zfs set mountpoint=none zp_data/foo&lt;br /&gt;
 # df -h /zp_data/foo&lt;br /&gt;
 df: (/zp_data/foo) not a block device, directory or mounted resource&lt;br /&gt;
 # zfs list&lt;br /&gt;
 NAME          USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;
 zp_data      10.2M  14.6G  10.0M  /zp_data&lt;br /&gt;
 zp_data/foo  31.4K  2.00G  31.4K  none&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Partage NFS==&lt;br /&gt;
&lt;br /&gt;
On peut partager un FS avec ZFS dès sa création avec &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs create -o sharenfs=ro ...&amp;#039;&amp;#039;&amp;#039;&amp;quot; ou par la suite avec &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs set sharenfs=ro ...&amp;#039;&amp;#039;&amp;#039;&amp;quot;. L&amp;#039;option peut être &amp;quot;&amp;#039;&amp;#039;&amp;#039;=ro&amp;#039;&amp;#039;&amp;#039;&amp;quot; pour un partage en lecture seule, ou &amp;quot;&amp;#039;&amp;#039;&amp;#039;=on&amp;#039;&amp;#039;&amp;#039;&amp;quot; pour un partage en lecture écriture.&lt;br /&gt;
&lt;br /&gt;
On peut désactiver le partage (sans le supprimer) avec &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs unshare nom-du-fs&amp;#039;&amp;#039;&amp;#039;&amp;quot; et le réactiver avec &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs share nom-du-fs&amp;#039;&amp;#039;&amp;#039;&amp;quot;. Au lieu du nom du FS, on peut mettre &amp;quot;&amp;#039;&amp;#039;&amp;#039;-a&amp;#039;&amp;#039;&amp;#039;&amp;quot; et ça va s&amp;#039;appliquer à tous les FS partagés avec ZFS.&lt;br /&gt;
&lt;br /&gt;
On peut supprimer complètement le partage avec &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs set sharenfs=off&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple.&lt;br /&gt;
&lt;br /&gt;
 # zfs list -o name,used,avail,refer,mountpoint,sharenfs&lt;br /&gt;
 NAME          USED  AVAIL  REFER  MOUNTPOINT    SHARENFS&lt;br /&gt;
 zp_data      10.2M  14.6G  10.0M  /zp_data      off&lt;br /&gt;
 zp_data/foo  31.4K  2.00G  31.4K  /zp_data/foo  off&lt;br /&gt;
 # share&lt;br /&gt;
 # zfs set sharenfs=ro zp_data/foo&lt;br /&gt;
 # zfs list -o name,used,avail,refer,mountpoint,sharenfs&lt;br /&gt;
 NAME          USED  AVAIL  REFER  MOUNTPOINT    SHARENFS&lt;br /&gt;
 zp_data      10.2M  14.6G  10.0M  /zp_data      off&lt;br /&gt;
 zp_data/foo  31.4K  2.00G  31.4K  /zp_data/foo  ro&lt;br /&gt;
 # share&lt;br /&gt;
 -               /zp_data/foo   sec=sys,ro   &amp;quot;&amp;quot;&lt;br /&gt;
 # zfs unshare zp_data/foo&lt;br /&gt;
 # zfs list -o name,used,avail,refer,mountpoint,sharenfs&lt;br /&gt;
 NAME          USED  AVAIL  REFER  MOUNTPOINT    SHARENFS&lt;br /&gt;
 zp_data      10.2M  14.6G  10.0M  /zp_data      off&lt;br /&gt;
 zp_data/foo  31.4K  2.00G  31.4K  /zp_data/foo  ro&lt;br /&gt;
 # share&lt;br /&gt;
 # zfs share zp_data/foo&lt;br /&gt;
 # share&lt;br /&gt;
 -               /zp_data/foo   sec=sys,ro   &amp;quot;&amp;quot;&lt;br /&gt;
 # zfs set sharenfs=off zp_data/foo&lt;br /&gt;
 # share&lt;br /&gt;
 # zfs list -o name,used,avail,refer,mountpoint,sharenfs&lt;br /&gt;
 NAME          USED  AVAIL  REFER  MOUNTPOINT    SHARENFS&lt;br /&gt;
 zp_data      10.2M  14.6G  10.0M  /zp_data      off&lt;br /&gt;
 zp_data/foo  31.4K  2.00G  31.4K  /zp_data/foo  off&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Sous Solaris 11===&lt;br /&gt;
&lt;br /&gt;
La syntaxe a évolué sous Solaris 11. Il faut maintenant mettre les paramètres dans la valeur &amp;quot;share&amp;quot; et &amp;quot;sharenfs&amp;quot; n&amp;#039;accepte plus que &amp;quot;on&amp;quot; ou &amp;quot;off&amp;quot;. Exemple :&lt;br /&gt;
&lt;br /&gt;
 zfs set share=name=mon_partage,path=/chemin,prot=nfs,rw=10.36.208.71 rpool/foo&lt;br /&gt;
 zfs set sharenfs=on rpool/foo&lt;br /&gt;
&lt;br /&gt;
==Informations détaillées sur un FS==&lt;br /&gt;
&lt;br /&gt;
On peut obtenir tous les détails sur un FS particulier avec &amp;#039;&amp;#039;&amp;#039;zfs get all&amp;#039;&amp;#039;&amp;#039; comme dans l&amp;#039;exemple ci-dessous :&lt;br /&gt;
&lt;br /&gt;
 # zfs get all rpool/export/home&lt;br /&gt;
 NAME               PROPERTY              VALUE                  SOURCE&lt;br /&gt;
 rpool/export/home  aclinherit            restricted             default&lt;br /&gt;
 rpool/export/home  aclmode               discard                default&lt;br /&gt;
 rpool/export/home  atime                 on                     default&lt;br /&gt;
 rpool/export/home  available             196G                   -&lt;br /&gt;
 rpool/export/home  canmount              on                     default&lt;br /&gt;
 rpool/export/home  casesensitivity       mixed                  -&lt;br /&gt;
 rpool/export/home  checksum              on                     default&lt;br /&gt;
 rpool/export/home  compression           off                    default&lt;br /&gt;
 rpool/export/home  compressratio         1.00x                  -&lt;br /&gt;
 rpool/export/home  copies                1                      default&lt;br /&gt;
 rpool/export/home  creation              Wed Jun  5  7:59 2013  -&lt;br /&gt;
 rpool/export/home  dedup                 off                    default&lt;br /&gt;
 rpool/export/home  devices               on                     default&lt;br /&gt;
 rpool/export/home  encryption            off                    -&lt;br /&gt;
 rpool/export/home  exec                  on                     default&lt;br /&gt;
 rpool/export/home  keychangedate         -                      default&lt;br /&gt;
 rpool/export/home  keysource             none                   default&lt;br /&gt;
 rpool/export/home  keystatus             none                   -&lt;br /&gt;
 rpool/export/home  logbias               latency                default&lt;br /&gt;
 rpool/export/home  mlslabel              none                   -&lt;br /&gt;
 rpool/export/home  mounted               yes                    -&lt;br /&gt;
 rpool/export/home  mountpoint            /export/home           inherited from rpool/export&lt;br /&gt;
 rpool/export/home  multilevel            off                    -&lt;br /&gt;
 rpool/export/home  nbmand                off                    default&lt;br /&gt;
 rpool/export/home  normalization         none                   -&lt;br /&gt;
 rpool/export/home  primarycache          all                    default&lt;br /&gt;
 rpool/export/home  quota                 none                   default&lt;br /&gt;
 rpool/export/home  readonly              off                    default&lt;br /&gt;
 rpool/export/home  recordsize            128K                   default&lt;br /&gt;
 rpool/export/home  referenced            34K                    -&lt;br /&gt;
 rpool/export/home  refquota              none                   default&lt;br /&gt;
 rpool/export/home  refreservation        none                   default&lt;br /&gt;
 rpool/export/home  rekeydate             -                      default&lt;br /&gt;
 rpool/export/home  reservation           none                   default&lt;br /&gt;
 rpool/export/home  rstchown              on                     default&lt;br /&gt;
 rpool/export/home  secondarycache        all                    default&lt;br /&gt;
 rpool/export/home  setuid                on                     default&lt;br /&gt;
 rpool/export/home  shadow                none                   -&lt;br /&gt;
 rpool/export/home  share.*               ...                    inherited&lt;br /&gt;
 rpool/export/home  snapdir               hidden                 default&lt;br /&gt;
 rpool/export/home  sync                  standard               default&lt;br /&gt;
 rpool/export/home  type                  filesystem             -&lt;br /&gt;
 rpool/export/home  used                  2.19G                  -&lt;br /&gt;
 rpool/export/home  usedbychildren        2.19G                  -&lt;br /&gt;
 rpool/export/home  usedbydataset         34K                    -&lt;br /&gt;
 rpool/export/home  usedbyrefreservation  0                      -&lt;br /&gt;
 rpool/export/home  usedbysnapshots       0                      -&lt;br /&gt;
 rpool/export/home  utf8only              off                    -&lt;br /&gt;
 rpool/export/home  version               6                      -&lt;br /&gt;
 rpool/export/home  vscan                 off                    default&lt;br /&gt;
 rpool/export/home  xattr                 on                     default&lt;br /&gt;
 rpool/export/home  zoned                 off                    default&lt;br /&gt;
&lt;br /&gt;
=Snapshots et clones=&lt;br /&gt;
&lt;br /&gt;
==Les snapshots==&lt;br /&gt;
&lt;br /&gt;
Un snapshot (ou instantanné) est une copie en lecture seule d&amp;#039;un FS à un instant donné. Comme sous LVM, un snapshot ne prend aucune place au départ, mais grossi au fur et à mesure que les fichiers changent.&lt;br /&gt;
&lt;br /&gt;
===Création d&amp;#039;un snapshot===&lt;br /&gt;
&lt;br /&gt;
La commande est &amp;quot;&amp;#039;&amp;#039;&amp;#039;zfs snapshot&amp;#039;&amp;#039;&amp;#039;&amp;quot; suivie du nom du FS auquel on attache un &amp;quot;&amp;#039;&amp;#039;&amp;#039;@&amp;#039;&amp;#039;&amp;#039;&amp;quot; puis un nom quelconque. Il convient quand même de mettre un nom compréhensible par ses collègues...&lt;br /&gt;
&lt;br /&gt;
 # zfs snapshot [-r] pool/home@monday&lt;br /&gt;
&lt;br /&gt;
===Lister les snapshots===&lt;br /&gt;
&lt;br /&gt;
 # zfs list -t snapshot&lt;br /&gt;
&lt;br /&gt;
===Détruire un snapshot===&lt;br /&gt;
&lt;br /&gt;
 # zfs destroy [-r] pool/home@monday&lt;br /&gt;
&lt;br /&gt;
===Renommer un snapshot===&lt;br /&gt;
&lt;br /&gt;
 # zfs rename pool/home@monday pool/home@2011-10-06&lt;br /&gt;
 # zfs rename pool/home@monday @2011-10-06&lt;br /&gt;
 # zfs rename pool/home@monday 2011-10-06&lt;br /&gt;
 # zfs rename -r pool/home@monday 2011-10-06&lt;br /&gt;
&lt;br /&gt;
Les exemples ci-dessus montrent que lorsqu&amp;#039;on renomme un snapshot, la partie de nom qui précède l&amp;#039;&amp;quot;@&amp;quot; est facultative, ainsi que l&amp;#039;&amp;quot;@&amp;quot; lui-même. C&amp;#039;est logique, puisque le snapshot est attaché à son FS et ne peut pas être déplacé ailleurs.&lt;br /&gt;
&lt;br /&gt;
===Revenir à l&amp;#039;état au moment du snapshot (annulation des modifs qui ont suivi la création du snapshot)===&lt;br /&gt;
&lt;br /&gt;
 # zfs rollback pool/home@wednesday&lt;br /&gt;
&lt;br /&gt;
Cette commande ne va fonctionner qu&amp;#039;avec le snapshot le plus récent (s&amp;#039;il y en a plusieurs).&lt;br /&gt;
Si on veut revenir à un snapshot antérieur, il faut soit faire un rollback successif de tous les snapshots,&lt;br /&gt;
soit forcer avec l&amp;#039;option &amp;quot;&amp;#039;&amp;#039;&amp;#039;-r&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Les clones==&lt;br /&gt;
&lt;br /&gt;
Un clone est une copie en lecture/écriture d&amp;#039;un FS à un instant donné. Comme le snapshot,&lt;br /&gt;
il ne consomme initialement aucun espace disque. On peut créer un snapshot d&amp;#039;un clone.&lt;br /&gt;
Le clone se créé obligatoirement à partir d&amp;#039;un snapshot. Il peut se trouver dans une autre&lt;br /&gt;
arborescence, mais obligatoirement dans le même zpool. Le snapshot ne pourra pas être détruit&lt;br /&gt;
tant que le clone existera. Le clone n&amp;#039;hérite pas des propriétés du snapshot ni du FS d&amp;#039;origine&lt;br /&gt;
(quota, etc...).&lt;br /&gt;
&lt;br /&gt;
Un clone n&amp;#039;est donc pas un copier/coller d&amp;#039;un FS. Pour ce faire, il faut utiliser &amp;#039;&amp;#039;&amp;#039;zfs send&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;zfs recv&amp;#039;&amp;#039;&amp;#039; (voir juste après).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Créer un clone===&lt;br /&gt;
&lt;br /&gt;
 # zfs snapshot pool/home/toto@thursday&lt;br /&gt;
 # zfs clone pool/home/toto@thursday pool/test/bug123&lt;br /&gt;
&lt;br /&gt;
===Détruire un clone===&lt;br /&gt;
&lt;br /&gt;
 # zfs destroy pool/test/bug123&lt;br /&gt;
&lt;br /&gt;
===Remplacer un FS par un clone de ce même FS.===&lt;br /&gt;
&lt;br /&gt;
 # zfs create pool/test&lt;br /&gt;
 # zfs create pool/test/foo&lt;br /&gt;
 # zfs snapshot pool/test/foo@tuesday&lt;br /&gt;
 # zfs clone pool/test/foo@tuesday pool/test/fooClone&lt;br /&gt;
 # zfs list -r pool/test&lt;br /&gt;
 #   ==&amp;gt; USED à 0 sur snapshot et clone, mais à vraie valeur sur pool/test/foo&lt;br /&gt;
 # zfs promote pool/test/fooClone&lt;br /&gt;
 # zfs list -r pool/test&lt;br /&gt;
 #   ==&amp;gt; USED passe à 0 sur pool/test/foo et à vraie valeur sur pool/test/fooClone&lt;br /&gt;
&lt;br /&gt;
Pour faire plus propre, on renome&lt;br /&gt;
&lt;br /&gt;
 # zfs rename pool/test/foo pool/test/fooOld&lt;br /&gt;
 # zfs rename pool/test/fooClone pool/test/foo&lt;br /&gt;
&lt;br /&gt;
Et éventuellement&lt;br /&gt;
&lt;br /&gt;
 # zfs destroy pool/test/fooOld&lt;br /&gt;
&lt;br /&gt;
=Envoi et réception de données ZFS=&lt;br /&gt;
&lt;br /&gt;
On utilise les commandes zfs send et zfs recv pour envoyer et recevoir une copie d&amp;#039;un flux de snapshot.&lt;br /&gt;
&lt;br /&gt;
On peut envoyer le flux vers un autre pool et même vers un autre pool d&amp;#039;un autre serveur.&lt;br /&gt;
&lt;br /&gt;
 # zfs send pool/data@today | zfs recv pool2/foo&lt;br /&gt;
 # zfs send pool/data@today | ssh rhost zfs recv pool2/foo&lt;br /&gt;
&lt;br /&gt;
Le cas que nous venons de voir est l&amp;#039;envoi/réception d&amp;#039;un flux complet. Le FS de destination ne doit pas&lt;br /&gt;
exister (il est automatiquement créé). Mais on peut envoyer un flux incrémentiel avec l&amp;#039;option &amp;quot;&amp;#039;&amp;#039;&amp;#039;-i&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 # zfs send -i pool/data@yesterday pool/data@today | ssh rhost zfs recv pool2/foo&lt;br /&gt;
&lt;br /&gt;
Dans ce cas, le zpool pool2 doit préalablement exister.&lt;br /&gt;
&lt;br /&gt;
La commande suivante fait exactement la même chose :&lt;br /&gt;
&lt;br /&gt;
 # zfs send -i yesterday pool/data@tody &amp;gt; ssh rhost zfs recv pool2/foo&lt;br /&gt;
&lt;br /&gt;
On peut également envoyer le flux de sortie dans un fichier.&lt;br /&gt;
&lt;br /&gt;
 # zfs send pool/data@yesterday | gzip &amp;gt; backup_zfs.gz&lt;br /&gt;
&lt;br /&gt;
Exemple d&amp;#039;utilisation avec des fichiers.&lt;br /&gt;
&lt;br /&gt;
 # zfs send pool/data@today &amp;gt; /backup/data.bkp&lt;br /&gt;
 # zfs recv pool2/foo &amp;lt; /backup/data.bkp&lt;br /&gt;
&lt;br /&gt;
Autres options :&lt;br /&gt;
&lt;br /&gt;
* -I : envoie tous les flux incrémentiels d&amp;#039;un snapshot à un snapshot cummulé. Permet de créer un clone. Le FS de destination doit préalablement exister.&lt;br /&gt;
* -i n&amp;#039;envoie que le snapshot le plus récent, -I envoie tous les snapshots créés entre les deux snapshots mis en arguments (voir exemple plus bas).&lt;br /&gt;
* -R : envoie le flux de réplication de tous les FS descendants. Les propriétés, snapshots, FS descendants et clones sont conservés&lt;br /&gt;
&lt;br /&gt;
 # zfs send -I pool/fs@snap1 pool/fs@snap4 &amp;gt; /backup/fs@all-I   # =&amp;gt; envoie tous les snapshots de snap1 à snap4&lt;br /&gt;
 # zfs receive -d -F pool/fs &amp;lt; /backup/fs@all-I                 # =&amp;gt; zfs list affichera bien snap1, snap2, snap3 et snap4&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;option -I permet également d&amp;#039;envoyer à la fois des snapshots et des clones.&lt;br /&gt;
&lt;br /&gt;
Exemple de recopie complète d&amp;#039;une arborescence zfs dans un autre pool :&lt;br /&gt;
&lt;br /&gt;
 # zfs snapshot -r users@today&lt;br /&gt;
 # zfs send -R users@today &amp;gt; /backup/users-R&lt;br /&gt;
 # zfs create users2 mirror c0t1d1 c1t1d1&lt;br /&gt;
 # zfs receive -F -d users2 &amp;lt; /backup/users-R&lt;br /&gt;
&lt;br /&gt;
Un zfs list affichera un contenu identique (snapshots, clones, arborescence,...) pour les pools users et users2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Mirrorer le disque système=&lt;br /&gt;
&lt;br /&gt;
Pour voir comment fonctionne le mirroring du système, on va suivre un exemple. Dans cet exemple, le disque système de départ est &amp;#039;&amp;#039;&amp;#039;c1t0d0&amp;#039;&amp;#039;&amp;#039; et celui qui va être son miroir est &amp;#039;&amp;#039;&amp;#039;c1t1d0&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* Installer le système en ZFS sur c1t0d0 ; le pool garde le nom par défaut &amp;quot;rpool&amp;quot;.&lt;br /&gt;
* Vérifier le statut du pool&lt;br /&gt;
&lt;br /&gt;
 # zpool status&lt;br /&gt;
  pool: rpool&lt;br /&gt;
  state: ONLINE&lt;br /&gt;
  scrub: none requested&lt;br /&gt;
 config:&lt;br /&gt;
 &lt;br /&gt;
  NAME        STATE     READ WRITE CKSUM&lt;br /&gt;
  rpool       ONLINE       0     0     0&lt;br /&gt;
  c1t0d0s0  ONLINE       0     0     0&lt;br /&gt;
 &lt;br /&gt;
 errors: No known data errors&lt;br /&gt;
&lt;br /&gt;
* copier le partitionnement du disque principal vers le miroir (le miroir doit être au moins aussi grand que le disque principal)&lt;br /&gt;
&lt;br /&gt;
 # prtvtoc /dev/rdsk/c1t0d0s2 | fmthard -s - /dev/rdsk/c1t1d0s2&lt;br /&gt;
&lt;br /&gt;
* on attache le nouveau disque au premier, ce qui implique qu&amp;#039;il va être mis en miroir (si on ajoute &amp;quot;&amp;#039;&amp;#039;&amp;#039;add&amp;#039;&amp;#039;&amp;#039;&amp;quot; au lieu d&amp;#039;attacher &amp;quot;&amp;#039;&amp;#039;&amp;#039;attach&amp;#039;&amp;#039;&amp;#039;&amp;quot;, on créé des volumes concaténés et pas mirrorés), puis on vérifie le nouvel état du pool&lt;br /&gt;
&lt;br /&gt;
 # zpool attach -f rpool c1t0d0s0 c1t1d0s0&lt;br /&gt;
 Please be sure to invoke installboot(1M) to make &amp;#039;c1t1d0s0&amp;#039; bootable.&lt;br /&gt;
 Make sure to wait until resilver is done before rebooting.&lt;br /&gt;
 &lt;br /&gt;
 # zpool status rpool&lt;br /&gt;
  pool: rpool&lt;br /&gt;
  state: ONLINE&lt;br /&gt;
 status: One or more devices is currently being resilvered.  The pool will&lt;br /&gt;
  continue to function, possibly in a degraded state.&lt;br /&gt;
 action: Wait for the resilver to complete.&lt;br /&gt;
  scrub: resilver in progress for 0h0m, 28.90% done, 0h0m to go&lt;br /&gt;
 config:&lt;br /&gt;
 &lt;br /&gt;
  NAME          STATE     READ WRITE CKSUM&lt;br /&gt;
  rpool         ONLINE       0     0     0&lt;br /&gt;
  mirror-0    ONLINE       0     0     0&lt;br /&gt;
  c1t0d0s0  ONLINE       0     0     0&lt;br /&gt;
  c1t1d0s0  ONLINE       0     0     0  1.65G resilvered&lt;br /&gt;
 &lt;br /&gt;
 errors: No known data errors&lt;br /&gt;
&lt;br /&gt;
Attention, sur l&amp;#039;exemple ci-dessus, on voit que la synchronisation des disques est en cours (28.90%, sur la ligne qui commence par &amp;quot;&amp;#039;&amp;#039;&amp;#039;scrub:&amp;#039;&amp;#039;&amp;#039;&amp;quot;). Il faut bien attendre qu&amp;#039;elle soit terminée avant de passer à la suite. Quand c&amp;#039;est terminé, la ligne &amp;quot;&amp;#039;&amp;#039;&amp;#039;scrub:&amp;#039;&amp;#039;&amp;#039;&amp;quot; ressemble à ceci :&lt;br /&gt;
&lt;br /&gt;
 scrub: resilver completed after 0h4m with 0 errors on Thu Feb  3 16:42:44 2011&lt;br /&gt;
 &lt;br /&gt;
* rendre le disque bootable en appliquant les blocs d&amp;#039;initialisation au disque miroir&lt;br /&gt;
 &lt;br /&gt;
 # installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t1d0s0&lt;br /&gt;
&lt;br /&gt;
* modifier l&amp;#039;OBP pour que les deux disques soient vus comme disques de boot&lt;br /&gt;
&lt;br /&gt;
soit depuis l&amp;#039;OBP (conseillé)&lt;br /&gt;
&lt;br /&gt;
 ok nvalias zfsdisk /pci@0/pci@0/pci@2/scsi@0/disk@0,0:a&lt;br /&gt;
 ok nvalias zfsmirror /pci@0/pci@0/pci@2/scsi@0/disk@1,0:a&lt;br /&gt;
 ok setenv boot-device zfsdisk zfsmirror&lt;br /&gt;
 ok setenv use-nvramrc? true&lt;br /&gt;
 ok reset-all&lt;br /&gt;
&lt;br /&gt;
soit depuis le serveur (moins conseillé, car parfois les lignes trop longues passent mal)&lt;br /&gt;
&lt;br /&gt;
 # eeprom &amp;quot;nvramrc=devalias zfsdsk /pci@0/pci@0/pci@2/scsi@0/disk@0,0:a zfsmirror /pci@0/pci@0/pci@2/scsi@0/disk@1,0:a&amp;quot;&lt;br /&gt;
 # eeprom &amp;quot;boot-device= zfsdisk zfsmirror&amp;quot;&lt;br /&gt;
 # eeprom &amp;quot;use-nvramrc?=true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* on peut verifier que ça fonctionne en retirant un disque et en rebootant sur l&amp;#039;autre. Puis idem avec l&amp;#039;autre disque.&lt;br /&gt;
&lt;br /&gt;
Lorsqu&amp;#039;on retire un des disques, le zpool status rpool renvoie un résultat du genre&lt;br /&gt;
&lt;br /&gt;
 # zpool status rpool&lt;br /&gt;
  pool: rpool&lt;br /&gt;
  state: DEGRADED&lt;br /&gt;
 status: One or more devices has been removed by the administrator.&lt;br /&gt;
  Sufficient replicas exist for the pool to continue functioning in a&lt;br /&gt;
  degraded state.&lt;br /&gt;
 action: Online the device using &amp;#039;zpool online&amp;#039; or replace the device with&lt;br /&gt;
  &amp;#039;zpool replace&amp;#039;.&lt;br /&gt;
  scrub: none requested&lt;br /&gt;
 config:&lt;br /&gt;
 &lt;br /&gt;
  NAME          STATE     READ WRITE CKSUM&lt;br /&gt;
  rpool         DEGRADED     0     0     0&lt;br /&gt;
  mirror-0    DEGRADED     0     0     0&lt;br /&gt;
  c1t0d0s0  REMOVED      0     0     0&lt;br /&gt;
  c1t1d0s0  ONLINE       0     0     0&lt;br /&gt;
 &lt;br /&gt;
 errors: No known data errors&lt;br /&gt;
&lt;br /&gt;
Normalement, lorsqu&amp;#039;on remet le disque, il se réactive tout seul. Sinon on peut le réactiver manuellement :&lt;br /&gt;
&lt;br /&gt;
 # zpool online c1t0d0s0&lt;br /&gt;
&lt;br /&gt;
=Le swap sous ZFS=&lt;br /&gt;
&lt;br /&gt;
Il est possible de faire une partition dédiée au swap sous ZFS, mais on ne peut pas créer un FS comme nous l&amp;#039;avons vu jusque là. Il faut créer ce qui s&amp;#039;appelle un volume ZFS. C&amp;#039;est quasiment pareil, sauf que la taille est fixe, et non redimensionnable. Il faut également préciser la taille du block, qui va être différente entre Sparc et x86. Exemples de création d&amp;#039;un volume de 30Go :&lt;br /&gt;
&lt;br /&gt;
* sur Sparc :&lt;br /&gt;
 # zfs create -V 30G -b 8k zp_data/swap&lt;br /&gt;
&lt;br /&gt;
* sur x86 :&lt;br /&gt;
 # zfs create -V 30G -b 4k zp_data/swap&lt;br /&gt;
&lt;br /&gt;
Ceci va créer un volume qui sera accessible depuis &amp;#039;&amp;#039;&amp;#039;/dev/zvol/dsk/zp_data/swap&amp;#039;&amp;#039;&amp;#039;. C&amp;#039;est ce chemin qu&amp;#039;on va utiliser la vfstab et pour l&amp;#039;ajout à chaud :&lt;br /&gt;
&lt;br /&gt;
 # swap -a /dev/zvol/dsk/zp_data/swap&lt;br /&gt;
 # swap -l&lt;br /&gt;
 swapfile             dev  swaplo blocks   free&lt;br /&gt;
 /dev/zvol/dsk/zp_data/swap 256,1      16 62914544 62914544&lt;br /&gt;
&lt;br /&gt;
Et voilà, notre volume de swap est activé et pris en compte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Attention&amp;#039;&amp;#039;&amp;#039; : il est fortement déconseillé par Oracle de mélanger des volumes swap &amp;quot;classiques&amp;quot; SVM et ZFS. Dans la pratique, il m&amp;#039;est arrivé de voir planter sans raison apparente un serveur configuré avec de la swap ZFS et SVM mélangés, et plus aucun plantage après n&amp;#039;avoir laissé que la swap ZFS (et aucun plantage non plus quand il n&amp;#039;y avait que de la swap &amp;quot;classique&amp;quot; SVM).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Les datasets=&lt;br /&gt;
&lt;br /&gt;
Les datasets permettent de déléguer la gestion des zfs à une zone. Dans la pratique, on créé un ZFS, sans point de montage, on le rajoute via zonecfg, et on redémarre la zone pour prise en compte. Ensuite, toutes les commandes zfs se font depuis la zone.&lt;br /&gt;
&lt;br /&gt;
Je ne vais pas revenir sur la création d&amp;#039;un ZFS. Voici la syntaxe pour ajouter un dataset à une zone :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg -z ma_zone&lt;br /&gt;
 zonecfg:ma_zone&amp;gt; add dataset&lt;br /&gt;
 zonecfg:ma_zone:dataset&amp;gt; set name=zp_mazone/apps&lt;br /&gt;
 zonecfg:ma_zone:dataset&amp;gt; end&lt;br /&gt;
&lt;br /&gt;
Le dataset peut également être un zpool.&lt;br /&gt;
&lt;br /&gt;
Après reboot de la zone, on peut créer les zfs depuis la zone, à partir de ce zfs &amp;quot;père&amp;quot;.&lt;br /&gt;
Avec les versions récentes de Solaris 11 (depuis la 11.2 il me semble), il n&amp;#039;est plus nécessaire de rebooter la zone pour prise en compte des datasets. Maintenant on peut &amp;quot;forcer&amp;quot; l&amp;#039;application de la configuration de la zone, avec la commande :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm -z ma_zone apply&lt;br /&gt;
&lt;br /&gt;
=Tunning=&lt;br /&gt;
&lt;br /&gt;
==Cache (zfs_arc_max)==&lt;br /&gt;
&lt;br /&gt;
Par défaut, ZFS s&amp;#039;octroie la totalité du swap, moins 1Go, comme mémoire cache. Si des applications en ont besoin, il la libère au fur et à mesure. Ça peut poser problème, car il peut mettre un peu de temps à rendre la mémoire, et ça peut être perturbant car on voit que le swap est utilisé quasiment à fond, alors que si on totalise la consommation des applications, on n’atteint pas la valeur réellement consommée. Il existe donc un moyen de limiter cette consommation excessive de swap, avec la variable &amp;#039;&amp;#039;&amp;#039;zfs_arc_max&amp;#039;&amp;#039;&amp;#039; dans &amp;#039;&amp;#039;&amp;#039;/etc/system&amp;#039;&amp;#039;&amp;#039;. Exemple de limitation, ligne à ajouter dans &amp;#039;&amp;#039;&amp;#039;/etc/system&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&lt;br /&gt;
 * Limit ZFS ARC cache to 4GB&lt;br /&gt;
 set zfs:zfs_arc_max=4294967296&lt;br /&gt;
&lt;br /&gt;
Il faut rebooter pour que ce soit pris en compte.&lt;br /&gt;
&lt;br /&gt;
Pour voir la valeur actuellement attribuée : &lt;br /&gt;
&lt;br /&gt;
 $ kstat zfs:0:arcstats:size&lt;br /&gt;
 module: zfs                             instance: 0     &lt;br /&gt;
 name:   arcstats                        class:    misc&lt;br /&gt;
 	size                            43336599728&lt;br /&gt;
 &lt;br /&gt;
 $ echo $((43336599728/1024/1024/1024))&lt;br /&gt;
 40&lt;br /&gt;
&lt;br /&gt;
Ici on est à 40Go.&lt;br /&gt;
&lt;br /&gt;
=Contraintes et préconisations d&amp;#039;Oracle=&lt;br /&gt;
&lt;br /&gt;
* le nom d&amp;#039;un zpool ou d&amp;#039;un FS ne peut contenir que des caractères alphanumériques ainsi que des &amp;quot;-&amp;quot;, &amp;quot;_&amp;quot;, &amp;quot;:&amp;quot; ou &amp;quot;.&amp;quot;&lt;br /&gt;
* la création de FS étant très peu coûteuse en temps et ressources, Oracle recommande de créer un FS par utilisateur, projet, etc. Ceci permet également de contrôler facilement les quotas, réservations et sauvegardes par utilisateur ou projet.&lt;br /&gt;
* Oracle recommande d&amp;#039;utiliser ZFS à partir de l&amp;#039;update 2 de Solaris (6/06)&lt;br /&gt;
* attention aux ACLs qui ne se gèrent plus de la même façon qu&amp;#039;un UFS. Elles sont plus complètes avec ZFS.&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Utilisateur:AdminWiki&amp;diff=623</id>
		<title>Utilisateur:AdminWiki</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Utilisateur:AdminWiki&amp;diff=623"/>
		<updated>2021-12-14T10:59:05Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Astuces wiki=&lt;br /&gt;
&lt;br /&gt;
==catégorie (enlever les espaces)==&lt;br /&gt;
&lt;br /&gt;
 [ [Category:linux] ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==tableau (sans les cottes)==&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;{|class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
  |+ Titre&lt;br /&gt;
  |-&lt;br /&gt;
  | ligne 1 || donnée L1-A || donnée L1-B&lt;br /&gt;
  |-&lt;br /&gt;
  | ligne 2 || donnée L2-A || donnée L2-B&lt;br /&gt;
  |}&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Résultat :&lt;br /&gt;
&lt;br /&gt;
 {|class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
  |+ Titre&lt;br /&gt;
  |-&lt;br /&gt;
  | ligne 1 || donnée L1-A || donnée L1-B&lt;br /&gt;
  |-&lt;br /&gt;
  | ligne 2 || donnée L2-A || donnée L2-B&lt;br /&gt;
  |}&lt;br /&gt;
&lt;br /&gt;
==smiley dans texte==&lt;br /&gt;
&lt;br /&gt;
 [ [File:smiley-clin-oeil.png|frameless] ]&lt;br /&gt;
&lt;br /&gt;
=Menu=&lt;br /&gt;
&lt;br /&gt;
* http://localhost/wiki/index.php?title=MediaWiki:Sidebar - http://www.unixmaniax.fr/wiki/index.php?title=MediaWiki:Sidebar&lt;br /&gt;
* http://localhost/wiki/index.php?title=MediaWiki:NavTree&lt;br /&gt;
* http://localhost/wiki/index.php?title=MediaWiki:Common.css&lt;br /&gt;
&lt;br /&gt;
=Version de php=&lt;br /&gt;
&lt;br /&gt;
https://www.unixmaniax.fr/version-php.php&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=622</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=622"/>
		<updated>2021-12-14T09:40:33Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
* volume distribué : comme du raid0, on perd une brique, on perd tout ! Mais volume total = somme des volumes :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_mini.jpg]]&lt;br /&gt;
&lt;br /&gt;
* volume répliqué : autant de briques que de répliquas désirés. Avec 2 briques, revient à du raid1 = miroring :&lt;br /&gt;
[[Fichier:GlusterFS_volume_replique_mini.jpg]]&lt;br /&gt;
&lt;br /&gt;
* volume distribué répliqué :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=621</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=621"/>
		<updated>2021-12-14T09:40:16Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
* volume distribué : comme du raid0, on perd une brique, on perd tout ! Mais volume total = somme des volumes :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_mini.jpg]]&lt;br /&gt;
&lt;br /&gt;
* volume répliqué : autant de briques que de répliquas désirés. Avec 2 briques, revient à du raid1 = miroring :&lt;br /&gt;
[[Fichier:GlusterFS_volume_replique_mini.jpg]]&lt;br /&gt;
&lt;br /&gt;
* volume distribué répliqué :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_replique.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Fichier:GlusterFS_volume_distribue_mini.jpg&amp;diff=620</id>
		<title>Fichier:GlusterFS volume distribue mini.jpg</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Fichier:GlusterFS_volume_distribue_mini.jpg&amp;diff=620"/>
		<updated>2021-12-14T09:37:46Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : AdminWiki a téléversé une nouvelle version de Fichier:GlusterFS volume distribue mini.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Fichier:GlusterFS_volume_replique_mini.jpg&amp;diff=619</id>
		<title>Fichier:GlusterFS volume replique mini.jpg</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Fichier:GlusterFS_volume_replique_mini.jpg&amp;diff=619"/>
		<updated>2021-12-14T09:34:45Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=618</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=618"/>
		<updated>2021-12-14T09:34:23Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
* volume distribué : comme du raid0, on perd une brique, on perd tout ! Mais volume total = somme des volumes :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_mini.jpg]]&lt;br /&gt;
&lt;br /&gt;
* volume répliqué : autant de briques que de répliquas désirés. Avec 2 briques, revient à du raid1 = miroring :&lt;br /&gt;
[[Fichier:GlusterFS_volume_replique_mini.jpg]]&lt;br /&gt;
&lt;br /&gt;
* volume distribué répliqué :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=617</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=617"/>
		<updated>2021-12-14T09:25:17Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
* volume distribué : comme du raid0, on perd une brique, on perd tout ! Mais volume total = somme des volumes :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_mini.jpg]]&lt;br /&gt;
&lt;br /&gt;
* volume répliqué : autant de briques que de répliquas désirés. Avec 2 briques, revient à du raid1 = miroring :&lt;br /&gt;
[[Fichier:GlusterFS_volume_replique.jpg]]&lt;br /&gt;
&lt;br /&gt;
* volume distribué répliqué :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=616</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=616"/>
		<updated>2021-12-14T09:24:54Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
* volume distribué : comme du raid0, on perd une brique, on perd tout ! Mais volume total = somme des volumes :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_mini.jpg]]&lt;br /&gt;
&lt;br /&gt;
* volume répliqué : autant de briques que de répliquas désirés. Avec 2 briques, revient à du raid1 = miroring :&lt;br /&gt;
[[Fichier:GlusterFS_volume_replique.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
* volume distribué répliqué :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=615</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=615"/>
		<updated>2021-12-13T16:14:40Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
* volume distribué : comme du raid0, on perd une brique, on perd tout ! Mais volume total = somme des volumes :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_mini.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
* volume répliqué : autant de briques que de répliquas désirés. Avec 2 briques, revient à du raid1 = miroring :&lt;br /&gt;
[[Fichier:GlusterFS_volume_replique.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
* volume distribué répliqué :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=614</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=614"/>
		<updated>2021-12-13T16:11:44Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
* volume distribué : comme du raid0, on perd une brique, on perd tout ! Mais volume total = somme des volumes :&lt;br /&gt;
{|class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[File:GlusterFS_volume_distribue_mini.jpg|frameless]]&lt;br /&gt;
 |-&lt;br /&gt;
 | Volume distribué&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_mini.jpg]]&lt;br /&gt;
&lt;br /&gt;
* volume répliqué : autant de briques que de répliquas désirés. Avec 2 briques, revient à du raid1 = miroring :&lt;br /&gt;
[[Fichier:GlusterFS_volume_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
* volume distribué répliqué :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Fichier:GlusterFS_volume_distribue_mini.jpg&amp;diff=613</id>
		<title>Fichier:GlusterFS volume distribue mini.jpg</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Fichier:GlusterFS_volume_distribue_mini.jpg&amp;diff=613"/>
		<updated>2021-12-13T16:10:21Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=612</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=612"/>
		<updated>2021-12-13T16:07:59Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
* volume distribué : comme du raid0, on perd une brique, on perd tout ! Mais volume total = somme des volumes :&lt;br /&gt;
{|class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[File:GlusterFS_volume_distribue.jpg|frameless]]&lt;br /&gt;
 |-&lt;br /&gt;
 | Volume distribué&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_mini.jpg]]&lt;br /&gt;
&lt;br /&gt;
* volume répliqué : autant de briques que de répliquas désirés. Avec 2 briques, revient à du raid1 = miroring :&lt;br /&gt;
[[Fichier:GlusterFS_volume_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
* volume distribué répliqué :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=610</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=610"/>
		<updated>2021-12-13T16:05:44Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
* volume distribué : comme du raid0, on perd une brique, on perd tout ! Mais volume total = somme des volumes :&lt;br /&gt;
{|class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[File:GlusterFS_volume_distribue.jpg|frameless]]&lt;br /&gt;
 |-&lt;br /&gt;
 | Volume distribué&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Gluster_vol_dist.png]]&lt;br /&gt;
&lt;br /&gt;
* volume répliqué : autant de briques que de répliquas désirés. Avec 2 briques, revient à du raid1 = miroring :&lt;br /&gt;
[[Fichier:GlusterFS_volume_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
* volume distribué répliqué :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=609</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=609"/>
		<updated>2021-12-13T16:03:08Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
* volume distribué : comme du raid0, on perd une brique, on perd tout ! Mais volume total = somme des volumes :&lt;br /&gt;
{|class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[File:GlusterFS_volume_distribue.jpg|frameless]]&lt;br /&gt;
 |-&lt;br /&gt;
 | Volume distribué&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue2.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
* volume répliqué : autant de briques que de répliquas désirés. Avec 2 briques, revient à du raid1 = miroring :&lt;br /&gt;
[[Fichier:GlusterFS_volume_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
* volume distribué répliqué :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Fichier:GlusterFS_volume_distribue.jpg&amp;diff=608</id>
		<title>Fichier:GlusterFS volume distribue.jpg</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Fichier:GlusterFS_volume_distribue.jpg&amp;diff=608"/>
		<updated>2021-12-13T11:23:26Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=607</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=607"/>
		<updated>2021-12-13T11:22:30Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
* volume distribué : comme du raid0, on perd une brique, on perd tout ! Mais volume total = somme des volumes :&lt;br /&gt;
{|class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[File:GlusterFS_volume_distribue.jpg|frameless]]&lt;br /&gt;
 |-&lt;br /&gt;
 | Volume distribué&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
* volume répliqué : autant de briques que de répliquas désirés. Avec 2 briques, revient à du raid1 = miroring :&lt;br /&gt;
[[Fichier:GlusterFS_volume_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
* volume distribué répliqué :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=606</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=606"/>
		<updated>2021-12-13T11:03:14Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
* volume distribué : comme du raid0, on perd une brique, on perd tout ! Mais volume total = somme des volumes :&lt;br /&gt;
{|class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | [[File:GlusterFS_volume_distribue.jpg|frameless]]&lt;br /&gt;
 |-&lt;br /&gt;
 | Volume distribué&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
* volume répliqué : autant de briques que de répliquas désirés. Avec 2 briques, revient à du raid1 = miroring :&lt;br /&gt;
[[Fichier:GlusterFS_volume_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
* volume distribué répliqué :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=605</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=605"/>
		<updated>2021-12-13T10:57:59Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
* volume distribué : comme du raid0, on perd une brique, on perd tout ! Mais volume total = somme des volumes :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue.jpg|500px]]&lt;br /&gt;
* volume répliqué : autant de briques que de répliquas désirés. Avec 2 briques, revient à du raid1 = miroring :&lt;br /&gt;
[[Fichier:GlusterFS_volume_replique.jpg|500px]]&lt;br /&gt;
* volume distribué répliqué :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_replique.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Fichier:GlusterFS_volume_distribue_replique.jpg&amp;diff=604</id>
		<title>Fichier:GlusterFS volume distribue replique.jpg</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Fichier:GlusterFS_volume_distribue_replique.jpg&amp;diff=604"/>
		<updated>2021-12-13T10:56:32Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Fichier:GlusterFS_volume_replique.jpg&amp;diff=603</id>
		<title>Fichier:GlusterFS volume replique.jpg</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Fichier:GlusterFS_volume_replique.jpg&amp;diff=603"/>
		<updated>2021-12-13T10:55:07Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=601</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=601"/>
		<updated>2021-12-13T10:52:41Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
* volume distribué : comme du raid0, on perd une brique, on perd tout ! Mais volume total = somme des volumes :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue.jpg]]&lt;br /&gt;
* volume répliqué : autant de briques que de répliquas désirés. Avec 2 briques, revient à du raid1 = miroring :&lt;br /&gt;
[[Fichier:GlusterFS_volume_replique.jpg]]&lt;br /&gt;
* volume distribué répliqué :&lt;br /&gt;
[[Fichier:GlusterFS_volume_distribue_replique.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=600</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=600"/>
		<updated>2021-12-13T10:48:54Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
* volume distribué : comme du raid0, on perd une brique, on perd tout ! Mais volume total = somme des volumes :&lt;br /&gt;
&lt;br /&gt;
* volume répliqué : autant de briques que de répliquas désirés. Avec 2 briques, revient à du raid1 = miroring :&lt;br /&gt;
&lt;br /&gt;
* volume distribué répliqué :&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=599</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=599"/>
		<updated>2021-12-13T10:46:56Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Comparaison avec Ceph */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
Une explication détaillée est disponible ici : https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=598</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=598"/>
		<updated>2021-12-13T10:46:14Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=597</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=597"/>
		<updated>2021-12-13T10:42:38Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : Création initiale suite&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;br /&gt;
&lt;br /&gt;
==Retirer une brique==&lt;br /&gt;
&lt;br /&gt;
Si on veut retirer une brique.&lt;br /&gt;
 # gluster peer detach ma_brique&lt;br /&gt;
&lt;br /&gt;
==Remplacement d&amp;#039;une brique (si panne par exemple)==&lt;br /&gt;
&lt;br /&gt;
Nous avons actuellement un trusted pool composé des deux briques brick1 et brick2.&lt;br /&gt;
&lt;br /&gt;
Supposons que brick1 est tombée en panne et n&amp;#039;est pas réparable. On a préparé un nouveau serveur &amp;quot;brick3&amp;quot; et on installé les packages comme expliqué aux chapitres 3.1 et 3.2. Il faut aussi avoir préparé une arborescence /Gluster/Volumes/Volume1 ou équivalente pour accueillir le volume.&lt;br /&gt;
&lt;br /&gt;
Connectons-nous sur brick2 et ajoutons brick3 au trusted-pool :&lt;br /&gt;
 # gluster peer probe brick3&lt;br /&gt;
&lt;br /&gt;
Maintenant on remplace brick1 par brick3 dans la config du volume &amp;quot;volume1&amp;quot; :&lt;br /&gt;
 # gluster volume replace-brick volume1  brick1:/Gluster/Volumes/Volume1  brick3:/Gluster/Volumes/Volume1 commit force&lt;br /&gt;
&lt;br /&gt;
On réconcilie le volume :&lt;br /&gt;
 # gluster volume heal volume1 full&lt;br /&gt;
&lt;br /&gt;
Depuis la nouvelle brique brick3, on synchronise le volume en récupérant les infos de brick2 :&lt;br /&gt;
 root@brick3 # gluster volume sync brick2 volume1&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite récupérer le volume id depuis les attributs étendus du serveur brick2, pour ensuite les recopier sur brick3.&lt;br /&gt;
&lt;br /&gt;
Récupération volume id :&lt;br /&gt;
 root@brick2 # getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 fichier-depuis-client.rien  .glusterfs/                 &lt;br /&gt;
 [root@centos8-fred ~]# getfattr -n trusted.glusterfs.volume-id /gluster/volumes/volume1/&lt;br /&gt;
 getfattr: Removing leading &amp;#039;/&amp;#039; from absolute path names&lt;br /&gt;
 # file: gluster/volumes/volume1/&lt;br /&gt;
 trusted.glusterfs.volume-id=0s2M71q2FpQoi19v6sUcnyqw==&lt;br /&gt;
&lt;br /&gt;
Recopie volume id sur brick3 :&lt;br /&gt;
 root@brick3 # setfattr -n trusted.glusterfs.volume-id -v &amp;#039;0s2M71q2FpQoi19v6sUcnyqw==&amp;#039; /Gluster/Volumes/Volume1/&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&amp;#039;à retirer brick1 du trusted pool :&lt;br /&gt;
 # gluster peer detach brick1&lt;br /&gt;
&lt;br /&gt;
==Étendre un volume==&lt;br /&gt;
&lt;br /&gt;
Actuellement, notre volume1 est sur un volume répliqué sur un cluster à 2 briques. On peut le voir avec la commande suivante :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Replicate&lt;br /&gt;
 Number of Bricks: 1 x 2 = 2&lt;br /&gt;
&lt;br /&gt;
Pour l&amp;#039;étendre, on peut agrandir les volumes sur chaque brique, si c&amp;#039;est possible. Sinon, on peut aussi ajouter des briques. C&amp;#039;est ce qu&amp;#039;on va faire ici. A noter qu&amp;#039;il faut ajouter un nombre de briques proportionnel au nombre de replicas, donc ici 2. Ou alors il faut modifier le nombre de replicas, c’est ce qu’on va voir au chapitre suivant « ajouter un replica ».&lt;br /&gt;
&lt;br /&gt;
On va donc créer deux nouveaux serveurs brick3 et brick4, y installer les packages nécessaires et démarrer les services (voir chapitres 3.1 et 3.2).&lt;br /&gt;
&lt;br /&gt;
On les ajoute au trusted pool depuis une des briques existantes :&lt;br /&gt;
 brick1# gluster peer probe brick3&lt;br /&gt;
 brick1# gluster peer probe brick4&lt;br /&gt;
&lt;br /&gt;
Sur brick3 et brick4 on créé un point de montage /gluster/volumes/ avec un sous-répertoire volume1, comme présenté au chapitre 3.4.&lt;br /&gt;
&lt;br /&gt;
Pour finir, on va ajouter les volumes des nouvelles briques à volume1 :&lt;br /&gt;
 brick1# gluster volume add-brick volume1 brick3:/gluster/volumes/volume1 brick4:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On voit qu&amp;#039;on a maintenant un volume distribué-répliqué à 4 briques :&lt;br /&gt;
 # gluster volume info volume1 |egrep &amp;quot;Type|Number&amp;quot;&lt;br /&gt;
 Type: Distributed-Replicate&lt;br /&gt;
 Number of Bricks: 2 x 2 = 4&lt;br /&gt;
&lt;br /&gt;
Côté client, l&amp;#039;espace disque a doublé (si les volumes sont tous de taille identique).&lt;br /&gt;
&lt;br /&gt;
Par contre, si on a étendu le volume parce que les montages étaient pleins sur brick1 et 2, alors c&amp;#039;est toujours le cas. Car l&amp;#039;ajout de briques ne réparti pas automatiquement les données sur l&amp;#039;ensemble des briques. On va donc le forcer avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 start&lt;br /&gt;
&lt;br /&gt;
Et on peut voir la progression avec la commande :&lt;br /&gt;
 # gluster volume rebalance volume1 status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ajouter un replica==&lt;br /&gt;
&lt;br /&gt;
Repartons de la situation de départ ou volume1 était réparti uniquement sur 2 briques : brick1 et brick2. On va ajouter une brique brick3. Comme c’est un volume répliqué, ça va ajouter une brique répliquée, on va donc passer le replica à 3. Ça permettra de permettre la perte de 2 serveurs, mais n’augmentera pas la volumétrie. La syntaxe est la suivante.&lt;br /&gt;
 # gluster volume add-brick volume1 replica 3 ubuntu-fred:/gluster/volumes/volume1&lt;br /&gt;
&lt;br /&gt;
On vérifie que ça a fonctionné :&lt;br /&gt;
 # gluster volume info volume1 |grep &amp;quot;Number of Bricks&amp;quot;&lt;br /&gt;
 Number of Bricks: 1 x 3 = 3&lt;br /&gt;
&lt;br /&gt;
==Infos détaillées et perfs==&lt;br /&gt;
&lt;br /&gt;
 root@debian-fred:~# gluster volume profile volume1 info&lt;br /&gt;
 Brick: brick1:/Gluster/Volumes/Volume1&lt;br /&gt;
 -------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 251 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Brick: brick2:/gluster/volumes/volume1&lt;br /&gt;
 --------------------------------------------&lt;br /&gt;
 Cumulative Stats:&lt;br /&gt;
  %-latency   Avg-latency   Min-Latency   Max-Latency   No. of calls         Fop&lt;br /&gt;
  ---------   -----------   -----------   -----------   ------------        ----&lt;br /&gt;
       0.00       0.00 us       0.00 us       0.00 us              3  RELEASEDIR&lt;br /&gt;
  &lt;br /&gt;
     Duration: 252 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
  &lt;br /&gt;
 Interval 1 Stats:&lt;br /&gt;
  &lt;br /&gt;
     Duration: 32 seconds&lt;br /&gt;
    Data Read: 0 bytes&lt;br /&gt;
 Data Written: 0 bytes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Comparaison avec Ceph=&lt;br /&gt;
&lt;br /&gt;
[[https://www.ionos.fr/digitalguide/serveur/know-how/glusterfs-vs-ceph/]]&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=596</id>
		<title>GlusterFS</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=GlusterFS&amp;diff=596"/>
		<updated>2021-12-13T10:30:51Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : Création initiale&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
GlusterFS est un système de fichiers distribué, accessible par le réseau, en mode clients/serveurs.&lt;br /&gt;
On doit utiliser des systèmes de fichiers avec attributs étendus, comme XFS, ext4, ext3, ext2, ZFS, ReiserFS, btrfs et beaucoup d’autres. XFS est recommandé (https://docs.gluster.org/en/v3/Install-Guide/Common_criteria/).&lt;br /&gt;
Chaque serveur s’appelle un nœud ou brique. En réalité, une brique est le filesystem dédié à GlusterFS sur un nœud. Mais par abus de langage, dans la plupart des docs qu’on trouve, les nœuds sont appelés briques.&lt;br /&gt;
Minimum 2 briques. En réalité on peut en n’avoir qu’une, mais ça n’a aucun intérêt, autant faire un serveur NFS dans ce cas.&lt;br /&gt;
Il n&amp;#039;y a pas de notion maître/esclave.&lt;br /&gt;
Chaque fois qu&amp;#039;on ajoute une brique, le système devient plus performant.&lt;br /&gt;
&lt;br /&gt;
Plusieurs types de volumes :&lt;br /&gt;
&lt;br /&gt;
=Mise en place=&lt;br /&gt;
&lt;br /&gt;
Gluster stocke ses fichiers de conf dynamiquement dans &amp;#039;&amp;#039;&amp;#039;/var/lib/glusterd&amp;#039;&amp;#039;&amp;#039;. Si jamais le filesystem se rempli, ça pourrait rendre le service instable, voire le planter complètement. Il est donc conseillé de le séparer de /var/log, voire de le mettre tout seul.&lt;br /&gt;
&lt;br /&gt;
==Installation des packages==&lt;br /&gt;
&lt;br /&gt;
Exemple sur Debian10 :&lt;br /&gt;
 # apt install glusterfs-server -y&lt;br /&gt;
 # systemctl enable --now glusterd&lt;br /&gt;
&lt;br /&gt;
Exemple sur CentOS 8 :&lt;br /&gt;
 # dnf install centos-release-gluster -y&lt;br /&gt;
 # dnf install -y glusterfs-server&lt;br /&gt;
 # systemctl enable --now glusterd glusterfsd&lt;br /&gt;
&lt;br /&gt;
==Ouverture des flux==&lt;br /&gt;
&lt;br /&gt;
Sur CentOS 8, ou une autre distribution avec firewalld actif, il faut ouvrir le service glusterfs :&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs&lt;br /&gt;
 # firewall-cmd --zone=public --add-service=glusterfs --permanent&lt;br /&gt;
&lt;br /&gt;
Ce service inclus les ports suivants : 24007/tcp, 24008/tcp, 24009/tcp, 38465/tcp, 38466/tcp, 38467/tcp, 38468/tcp, 38469/tcp et la plage 49152-49664/tcp.&lt;br /&gt;
A noter que cette liste me paraît très large. Sur le site de glusterfs, pour la 3.7.0 beta 1, ils ne parlent que de  24007/tcp, 24008/tcp et 49152 à 49156/tcp ([[https://docs.gluster.org/en/release-3.7.0beta1/Administrator%20Guide/Setting%20Up%20Clients/]]).&lt;br /&gt;
&lt;br /&gt;
==Trusted pool==&lt;br /&gt;
&lt;br /&gt;
Supposons que nous avons deux briques : brick1 et brick2.&lt;br /&gt;
Une fois que les briques sont installées, il faut les associer. Les briques se reconnaissent au sein de ce qu&amp;#039;on appelle un trusted pool.&lt;br /&gt;
Pour cela, aller sur une des briques, par exemple brick1, et taper :&lt;br /&gt;
 brick1# gluster peer probe brick2&lt;br /&gt;
 peer probe : success.&lt;br /&gt;
&lt;br /&gt;
Pour vérifier :&lt;br /&gt;
 # gluster peer status&lt;br /&gt;
 Number of Peers: 1&lt;br /&gt;
 &lt;br /&gt;
 Hostname: brick2&lt;br /&gt;
 Uuid: 2b5f991b-8a43-43fc-836b-f6292157489a&lt;br /&gt;
 State: Peer in Cluster (Connected)&lt;br /&gt;
&lt;br /&gt;
Pour afficher la liste de briques :&lt;br /&gt;
 # gluster pool list&lt;br /&gt;
 UUID						Hostname     State&lt;br /&gt;
 2b5f991b-8a43-43fc-836b-f6292157489a	brick2		Connected &lt;br /&gt;
 9189775d-c84f-48a8-93bc-85e3a10af75d	localhost    Connected&lt;br /&gt;
&lt;br /&gt;
Si on veut supprimer une brique du pool :&lt;br /&gt;
 # gluster peer detach brick2&lt;br /&gt;
&lt;br /&gt;
==Création d&amp;#039;un volume répliqué==&lt;br /&gt;
&lt;br /&gt;
Sur brick1, on a créé un point de montage /Gluster/Volumes en XFS.&lt;br /&gt;
Sur brick2, on a créé un point de montage /gluster/volumes en ext4.&lt;br /&gt;
On ne peut pas créer de volume directement sur un point de montage, donc on va créer des sous-répertoires.&lt;br /&gt;
Sur brick1, on créé /Gluster/Volumes/Volume1.&lt;br /&gt;
Sur brick2, on créé /gluster/volumes/volume1.&lt;br /&gt;
J&amp;#039;ai fait exprès de mettre des majuscules d&amp;#039;un côté et des minuscules de l&amp;#039;autre, pour montrer que ça n&amp;#039;a aucune importance d&amp;#039;avoir des noms et arborescences différentes sur les briques.&lt;br /&gt;
&lt;br /&gt;
On va créer un volume miroir nommé &amp;quot;volume1&amp;quot;, avec 2 replicas, en utilisant le transport tcp :&lt;br /&gt;
 # gluster volume create volume1 replica 2 transport tcp brick1:/Gluster/Volumes/Volume1 brick2:/gluster/volumes/volume1&lt;br /&gt;
 Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: &lt;br /&gt;
 http://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/.&lt;br /&gt;
 Do you still want to continue?&lt;br /&gt;
  (y/n) y&lt;br /&gt;
 volume create: volume1: success: please start the volume to access data&lt;br /&gt;
&lt;br /&gt;
On voit l&amp;#039;avertissement disant qu&amp;#039;il est préférable d&amp;#039;avoir au moins 3 briques. Malgré tout, on créé le volume.&lt;br /&gt;
Pour voir :&lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 root@emmabuntus:~# gluster volume status&lt;br /&gt;
 Volume volume1 is not started&lt;br /&gt;
&lt;br /&gt;
On voit que le volume est créé, mais pas démarré.&lt;br /&gt;
Pour le démarrer et vérifier :&lt;br /&gt;
 # gluster volume start volume1&lt;br /&gt;
 volume start: volume1: success&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume list&lt;br /&gt;
 volume1&lt;br /&gt;
 &lt;br /&gt;
 # gluster volume status&lt;br /&gt;
 Status of volume: volume1&lt;br /&gt;
 Gluster process				TCP Port  RDMA Port  Online  Pid&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 Brick brick1:/Gluster/Volumes/Volume1	49152     0          Y       1737 &lt;br /&gt;
 Brick brick2:/gluster/volumes/volume1	49152     0          Y       1925 &lt;br /&gt;
 Self-heal Daemon on localhost		N/A       N/A        Y       1948 &lt;br /&gt;
 Self-heal Daemon on brick1		N/A       N/A        Y       1760 &lt;br /&gt;
 &lt;br /&gt;
 Task Status of Volume volume1&lt;br /&gt;
 ------------------------------------------------------------------------------&lt;br /&gt;
 There are no active volume tasks&lt;br /&gt;
&lt;br /&gt;
==Montage depuis un client==&lt;br /&gt;
&lt;br /&gt;
Installer le package &amp;quot;glusterfs-client&amp;quot;.&lt;br /&gt;
Monter en précisant une des briques et en indiquant le point de montage :&lt;br /&gt;
 # mount -t glusterfs brick1:/volume1 /mnt&lt;br /&gt;
Ou depuis /etc/fstab :&lt;br /&gt;
 brick1:/volume1 /mnt glusterfs defaults 0 0&lt;br /&gt;
A noter qu&amp;#039;au lieu d&amp;#039;utiliser le client natif gluster comme on vient de le faire, on peut aussi utiliser NFS ou CIFS/samba. Mais dans ce cas il est préférable de mettre les nœuds en cluster de type CTDB (cluster NFS) pour avoir de la haute disponibilité. C&amp;#039;est donc beaucoup plus contraignant.&lt;br /&gt;
Lors du montage, on doit indiquer le nom d&amp;#039;une des briques (ici brick1). Mais le client récupère ensuite la liste de toutes les briques et peut communiquer avec n&amp;#039;importe laquelle.&lt;br /&gt;
&lt;br /&gt;
==Paramétrage du volume==&lt;br /&gt;
&lt;br /&gt;
===Timeout===&lt;br /&gt;
Par défaut, le timeout pour qu&amp;#039;un client bascule d&amp;#039;une brique à l&amp;#039;autre, en cas d&amp;#039;indisponibilité, est de 42 secondes. Ça peut paraître très long. Voici comment le passer à 5 secondes.&lt;br /&gt;
 # gluster volume set volume1 network.ping-timeout 5&lt;br /&gt;
&lt;br /&gt;
===Limiter les accès===&lt;br /&gt;
Pour limiter l&amp;#039;accès d&amp;#039;un volume aux machines du réseau 10.34.210.0/24 :&lt;br /&gt;
 # gluster volume set volume1 auth.allow 10.34.210.*&lt;br /&gt;
On peut mettre plusieurs ips ou réseaux en les séparant par des virgules.&lt;br /&gt;
Pour revenir au comportement par défaut, il faut autoriser &amp;quot;*&amp;quot;.&lt;br /&gt;
A l&amp;#039;inverse, on peut autoriser tout le monde, sauf des ips, avec le paramètre &amp;#039;&amp;#039;&amp;#039;auth.reject&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Dans ce cas, pour revenir au comportement par défaut, on va rejeter &amp;quot;NONE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Quotas===&lt;br /&gt;
On peut activer des quotas pour le volume au niveau des sous-répertoires.&lt;br /&gt;
Il faut d&amp;#039;abord activer les quotas :&lt;br /&gt;
 # gluster volume quota volume1 enable&lt;br /&gt;
Puis on défini la valeur :&lt;br /&gt;
 # gluster volume quota volume1 limit-usage /sous-repertoire 100M&lt;br /&gt;
Pour voir l&amp;#039;état des quotas :&lt;br /&gt;
 # gluster volume quota volume1 list&lt;br /&gt;
&lt;br /&gt;
===Corbeille===&lt;br /&gt;
On peut activer une corbeille pour conserver les fichiers supprimés. On peut également limiter la taille aux fichiers de moins de 10Mo.&lt;br /&gt;
 # gluster volume set volume1 features.trash on&lt;br /&gt;
 # gluster volume set volume1 features.trash-dir &amp;quot;Poubelle&amp;quot;&lt;br /&gt;
 # gluster volume set volume1 features.trash-max-falesize 10485760&lt;br /&gt;
On peut également activer la corbeille pour les opérations internes comme &amp;quot;rebalance&amp;quot; (par défaut à off) :&lt;br /&gt;
 # gluster volume set volume1 features.trash-internal-op on&lt;br /&gt;
&lt;br /&gt;
=Administration courante=&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=MediaWiki:Sidebar&amp;diff=595</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=MediaWiki:Sidebar&amp;diff=595"/>
		<updated>2021-12-13T10:20:37Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Éléments du menu&lt;br /&gt;
* Linux&lt;br /&gt;
** Linux présentation|présentation&lt;br /&gt;
** Accéder à des partitions BSD sous Linux|accéder à des partitions BSD sous Linux&lt;br /&gt;
** Ajout de disques à chaud - linux|ajout de disques à chaud&lt;br /&gt;
** Apache|apache&lt;br /&gt;
** Apt-get|apt-get&lt;br /&gt;
** Arborescence des répertoires|arborescence des répertoires&lt;br /&gt;
** Bande passante - linux|Bande passante&lt;br /&gt;
** Bash - les commandes| bash - les commandes&lt;br /&gt;
** Les scripts bash|bash - les scripts&lt;br /&gt;
** Clamav - antivirus|Clamav - antivirus&lt;br /&gt;
** Configurer / compiler le noyau|configurer / compiler le noyau&lt;br /&gt;
** Controle de ressources - Linux|Controle de ressources&lt;br /&gt;
** Daemon - syntaxe|Daemon - syntaxe&lt;br /&gt;
** ftp washington|ftp washington&lt;br /&gt;
** Introduction à gcc/g++|gcc/g++ - introduction&lt;br /&gt;
** GlusterFS|GlusterFS&lt;br /&gt;
** Les lecteurs de bande sous linux|lecteurs de bande&lt;br /&gt;
** Les logiciels|logiciels&lt;br /&gt;
** Logrotate|logrotate&lt;br /&gt;
** Mandriva - utilisation de URPM|Mandriva - urpm&lt;br /&gt;
** proftpd|proftpd&lt;br /&gt;
** postfix|postfix&lt;br /&gt;
** Protéger un fichier avec un mot de passe (avec gpg)|protéger un fichier avec un mot de passe (avec gpg)&lt;br /&gt;
** Puppet|puppet&lt;br /&gt;
** Les packages RPM|rpm&lt;br /&gt;
** Rsync|Rsync&lt;br /&gt;
** Samba - serveur d&amp;#039;impression|Samba - serveur d&amp;#039;impression&lt;br /&gt;
** Sauvegarder et partitionner son disque dur (Partimage &amp;amp; QTParted)|sauvegarder et partitionner son disque dur (Partimage &amp;amp; QTParted)&lt;br /&gt;
** Sécurité - iptables|sécurité - iptables&lt;br /&gt;
** sendmail|sendmail&lt;br /&gt;
** Single user - linux|single user&lt;br /&gt;
** SVN - Subversion|SVN - Subversion&lt;br /&gt;
** Systemd|Systemd&lt;br /&gt;
** Tar et cpio|tar et cpio&lt;br /&gt;
** Tcpdump|Tcpdump&lt;br /&gt;
** Trucs &amp;amp; astuces|trucs &amp;amp; astuces&lt;br /&gt;
** Déterminer le type de FS|type de filesystem&lt;br /&gt;
** Vi|vi&lt;br /&gt;
** Yum|yum&lt;br /&gt;
&lt;br /&gt;
* Solaris&lt;br /&gt;
** Solaris présentation|présentation&lt;br /&gt;
** Booter en mode maintenance|booter en mode maintenance&lt;br /&gt;
** Solaris - Consommation de ressources|Consommation de ressources&lt;br /&gt;
** Controle de ressources - Solaris|Controle de ressources&lt;br /&gt;
** Création d&amp;#039;un compte utilisateur|création d&amp;#039;un compte utilisateur&lt;br /&gt;
** Date d&amp;#039;installation - Solaris|date d&amp;#039;installation&lt;br /&gt;
** Disques durs et systèmes de fichiers|Disques durs et systèmes de fichiers&lt;br /&gt;
** Du - script - Solaris|du - script&lt;br /&gt;
** En cas d&amp;#039;appel au support : explorer|En cas d&amp;#039;appel au support : explorer&lt;br /&gt;
** Erreurs matérielles - Solaris|Erreurs matérielles&lt;br /&gt;
** Faire une copie d&amp;#039;un disque|Faire une copie d&amp;#039;un disque&lt;br /&gt;
** Faire une installation avec Jumpstart|Faire une installation avec Jumpstart&lt;br /&gt;
** ftp washington|ftp washington&lt;br /&gt;
** Gestion du swap|Gestion du swap&lt;br /&gt;
** Impression - Solaris|Impression&lt;br /&gt;
** Informations sur le matériel|Informations sur le matériel&lt;br /&gt;
** Les logs|Les logs&lt;br /&gt;
** Monter une image iso - Solaris|Monter une image iso&lt;br /&gt;
** NFS - Solaris|NFS&lt;br /&gt;
** OBP (Open Boot Prom) et NVRAM|OBP (Open Boot Prom) et NVRAM&lt;br /&gt;
** Oracle VM Server (LDOM)|Oracle VM Server (LDOM)&lt;br /&gt;
** Packages - Solaris|Packages&lt;br /&gt;
** Password - solaris|Password&lt;br /&gt;
** Patch - Solaris|Patch&lt;br /&gt;
** proftpd|proftpd&lt;br /&gt;
** Quel process écoute sur un port|Quel process écoute sur un port&lt;br /&gt;
** Réseau- Solaris|Réseau Solaris 8,9,10&lt;br /&gt;
** Réseau Solaris 11|Réseau Solaris 11&lt;br /&gt;
** SAN - Solaris|SAN&lt;br /&gt;
** Services - Solaris|Services&lt;br /&gt;
** Solaris Volume Manager (SVM)|Solaris Volume Manager (SVM)&lt;br /&gt;
** Tcpdump|Tcpdump&lt;br /&gt;
** Déterminer le type de FS|type de filesystem&lt;br /&gt;
** Veritas Volume Manager (VxVM)|Veritas Volume Manager (VxVM)&lt;br /&gt;
** Version de Solaris|Version de Solaris&lt;br /&gt;
** XSCF|XSCF&lt;br /&gt;
** ZFS|ZFS&lt;br /&gt;
** Zombie|Zombie&lt;br /&gt;
** Zones - Solaris|Zones&lt;br /&gt;
&lt;br /&gt;
* BSD&lt;br /&gt;
** BSD présentation|présentation&lt;br /&gt;
** Accéder à des partitions BSD sous Linux|Accéder à des partitions BSD sous Linux&lt;br /&gt;
** Tcpdump|Tcpdump&lt;br /&gt;
&lt;br /&gt;
* AIX&lt;br /&gt;
** AIX - Présentation|Présentation&lt;br /&gt;
** Arrêt - relance - AIX|Arrêt - relance&lt;br /&gt;
** Backups - AIX|Backups&lt;br /&gt;
** Erreur matérielle - AIX|Erreur matérielle&lt;br /&gt;
** LVM - AIX|LVM&lt;br /&gt;
** Packages - AIX|Packages&lt;br /&gt;
** Process - classer par conso cpu - AIX|Process - classer par conso cpu&lt;br /&gt;
** Process - classer par conso mémoire - AIX|Process - classer par conso mémoire&lt;br /&gt;
** proftpd|proftpd&lt;br /&gt;
** Réseau - AIX|Réseau&lt;br /&gt;
** RPM - AIX|RPM&lt;br /&gt;
** Services - AIX|Services&lt;br /&gt;
&lt;br /&gt;
* HP-UX&lt;br /&gt;
** HP-UX|HP-UX&lt;br /&gt;
&lt;br /&gt;
* Windows&lt;br /&gt;
** Windows|Windows&lt;br /&gt;
&lt;br /&gt;
* Nagios&lt;br /&gt;
** Nagios|Nagios&lt;br /&gt;
** Installation de nagios|Installation&lt;br /&gt;
** Event_handler|event_handler&lt;br /&gt;
** Scripts nagios - exemples|Exemples de scripts&lt;br /&gt;
** pnp4nagios|pnp4nagios&lt;br /&gt;
** Pnp4nagios - Template|pnp4nagios-template&lt;br /&gt;
** Installation de Shinken|Shinken - Installation&lt;br /&gt;
&lt;br /&gt;
* MySQL&lt;br /&gt;
** Administration de MySQL|Administration de MySQL&lt;br /&gt;
** Perte du mot de passe root - MySQL|Perte du mot de passe root&lt;br /&gt;
** Sauvegardes - MySQL|Sauvegardes&lt;br /&gt;
** MySQL - Tâches courantes|Tâches courantes&lt;br /&gt;
** Vérifier et réparer les tables - MySQL|Vérifier et réparer les tables&lt;br /&gt;
&lt;br /&gt;
* PHP&lt;br /&gt;
** Afficher la date au format &amp;quot;dd-mmmm-yyyy&amp;quot; - PHP|Afficher la date au format &amp;quot;dd-mmmm-yyyy&amp;quot;&lt;br /&gt;
** Faire une galerie d&amp;#039;images - PHP|Galerie d&amp;#039;images&lt;br /&gt;
** Liens - PHP|Liens&lt;br /&gt;
** Scanner une plage d&amp;#039;adresses ip - PHP|Scanner une plage d&amp;#039;adresses ip&lt;br /&gt;
&lt;br /&gt;
* Perl&lt;br /&gt;
** Perl|Perl&lt;br /&gt;
** Perl - exemples|Exemples&lt;br /&gt;
&lt;br /&gt;
* Divers&lt;br /&gt;
** Baie de disques HP MSA1OOO - Command Line Interface (CLI)|Baie de disques HP MSA1OOO - Command Line Interface (CLI)&lt;br /&gt;
** Liens|Liens&lt;br /&gt;
&lt;br /&gt;
* M&amp;#039;écrire&lt;br /&gt;
** mailto:unixmaniax@gmail.com|M&amp;#039;envoyer un email&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Tcpdump&amp;diff=594</id>
		<title>Tcpdump</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Tcpdump&amp;diff=594"/>
		<updated>2021-07-30T14:04:18Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Exemples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Linux]]&lt;br /&gt;
[[Category: Solaris]]&lt;br /&gt;
[[Category: BSD]]&lt;br /&gt;
&lt;br /&gt;
==Présentation==&lt;br /&gt;
&lt;br /&gt;
Tcpdump est un utilitaire en ligne de commande qui permet de sniffer les paquets entrants et sortant sur les interfaces réseau.&lt;br /&gt;
&lt;br /&gt;
On peut lui passer de nombreuses options et paramètres pour affiner les résultats. On peut voir les détails dans [http://www.tcpdump.org/tcpdump_man.html la page man]. La syntaxe est riche, mais peut vite devenir compliquée. Je vais juste présenter quelques exemples pratiques.&lt;br /&gt;
&lt;br /&gt;
==Exemples==&lt;br /&gt;
&lt;br /&gt;
* capturer ce qui arrive et sort sur l&amp;#039;interface principale :&lt;br /&gt;
 tcpdump&lt;br /&gt;
(on peut ajouter les options -v ou -vv pour augmenter la verbosité&lt;br /&gt;
* ne capturer que ce qui transite sur l&amp;#039;interface eth1 :&lt;br /&gt;
 tcpdump -i eth1&lt;br /&gt;
* ne capturer que ce qui transite sur l&amp;#039;interface eth1 et qui transite vers ou depuis l&amp;#039;hôte &amp;quot;serveur1&amp;quot; :&lt;br /&gt;
 tcpdump -i eth1 host serveur1&lt;br /&gt;
* idem, mais n&amp;#039;affiche que ce qui transite via tcp :&lt;br /&gt;
 tcpdump -i eth1 host serveur1 and tcp&lt;br /&gt;
* idem pour tcp ou icmp :&lt;br /&gt;
 tcpdump -i eth1 host ubuntu-virt and tcp or icmp&lt;br /&gt;
* ne scanner que ce qui transite par les port tcp 22 et 23 :&lt;br /&gt;
 tcpdump tcp port 22 or 23&lt;br /&gt;
* écrire le résultat dans un fichier pcap, pour une analyse précise avec wireshark :&lt;br /&gt;
 tcpdump -i eth1 host serveur1 -w /tmp/fichier.pcap&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Veritas_Volume_Manager_(VxVM)&amp;diff=593</id>
		<title>Veritas Volume Manager (VxVM)</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Veritas_Volume_Manager_(VxVM)&amp;diff=593"/>
		<updated>2021-07-12T13:37:03Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Vérifier l&amp;#039;espace restant sur un volume */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:solaris]]&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Veritas Volume Manager&amp;quot; (ou VxVM) est un gestionnaire de volumes logiques propriétaire et payant, disponible pour de nombreux systèmes Unix, et même pour Windows. En France, on le trouve à peu près une fois sur deux sur les systèmes Solaris, à la place du gestionnaire de volumes logiques de Sun, &amp;quot;Solaris Volume Manager&amp;quot; ou &amp;quot;SVM&amp;quot; (anciennement &amp;quot;Solstice Disk Suite&amp;quot;), qui lui, est offert avec Solaris.&lt;br /&gt;
&lt;br /&gt;
Par rapport à SVM et à beaucoup d&amp;#039;autres concurrents, VxVM apporte :&lt;br /&gt;
&lt;br /&gt;
* pas de problème de nombre d&amp;#039;Inodes : il sont illimités sur VxVM&lt;br /&gt;
* transforme le niveau de Raid à chaud&lt;br /&gt;
* possibilité d&amp;#039;ajouter une patte en stripping (raid 0) à chaud&lt;br /&gt;
* réduction à chaud des partitions (uniquement si elles ont été formattées en VxFS – système de fichiers Veritas. Ne marche pas avec UFS – système de fichiers par défaut de Solaris).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Certains passages sont illustrés d&amp;#039;exemples ; ces exemples sont tirés d&amp;#039;un serveur Solaris 8 HW 7/03 avec Veritas Volume Manager 3.5.&lt;br /&gt;
&lt;br /&gt;
Précision : cet article est issu de mon expérience personnelle, sur le &amp;quot;terrain&amp;quot;, sans avoir reçu de &amp;quot;vraie&amp;quot; formation. Mais certaines commandes m&amp;#039;ont été données par des spécialistes du sujet. Aussi, les méthodes que j&amp;#039;utilise ne sont peut-être pas les meilleures, mais elles fonctionnent.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
==Avant d&amp;#039;installer==&lt;br /&gt;
&lt;br /&gt;
Avant de commencer quoique ce soit, il est préférable de faire une sauvegarde des données, et surtout une copie du disque système, surtout si des patchs sont nécessaires.&lt;br /&gt;
&lt;br /&gt;
===Licence===&lt;br /&gt;
&lt;br /&gt;
Veritas Volume Manager s&amp;#039;installe avec une clé de licence. Pour obtenir cette clé de licence, il faut contacter Sun (si vous avez acheté la licence chez eux) et leur fournir :&lt;br /&gt;
&lt;br /&gt;
* le product name (inscrit sur le certificat de licence fournit avec le cd)&lt;br /&gt;
* le numéro de série (inscrit sur le certificat de licence fournit avec le cd)&lt;br /&gt;
* l&amp;#039;adresse de votre société&lt;br /&gt;
* un contact dans votre société (nom + téléphone + mail)&lt;br /&gt;
* le hostid du serveur (taper hostid sous Solaris)&lt;br /&gt;
&lt;br /&gt;
===Préparation des disques durs===&lt;br /&gt;
&lt;br /&gt;
Lorsqu&amp;#039;on met un disque dur sous contrôle de VxVM, on peut encapsuler ou non. Ne pas encapsuler signifie mettre le disque sous contrôle de VxVM en supprimant tout ce qui est dessus, ce qui ne nécessite aucun prérequis. Encapsuler signifie qu&amp;#039;on rajoute la couche VxVM sur un disque en conservant les données existantes, ce qui implique quelques prérequis. Pour qu&amp;#039;un disque soit &amp;quot;encapsulable&amp;quot;, il faut qu&amp;#039;il ait deux partitions de libres au sens &amp;quot;format&amp;quot; du terme ; c&amp;#039;est à dire qu&amp;#039;il doit y avoir deux slices inutilisées et quelques Mo de non alloués aux autres slices (à prioris, un ou deux cylindres suffisent).&lt;br /&gt;
&lt;br /&gt;
Ces deux slices seront ensuite utilisés par VxVM et taggués 14 et 15 (visible en faisant prtvtoc /dev/rdsk/cxtydzs2). La partition 15 est la &amp;quot;private&amp;quot;, que VxVM utilise pour son fonctionnement interne. La 14 est la &amp;quot;public&amp;quot; qui couvre tout le disque (à l&amp;#039;identique de la slice 2 pour Solaris) et qui représente les données.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Patcher Solaris==&lt;br /&gt;
&lt;br /&gt;
Installer les patchs Sun Solaris pré-requis à l&amp;#039;installation des packages Veritas. Ces patchs dépendent de la version de Solaris, de la version de Veritas Volume Manager et des patchs déjà installés. Ils sont détaillés dans la documentation d&amp;#039;installation de Veritas Volume Manager fournie avec le cd d&amp;#039;installation. Les détails dépassent le cadre de ce document.&lt;br /&gt;
&lt;br /&gt;
Avant de passer à la suite, il est préférable de rebooter le serveur et de vérifier que le serveur se comporte correctement, car certains patchs peuvent apporter des problèmes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Installer les packages Veritas Volume Manager==&lt;br /&gt;
&lt;br /&gt;
Cette étape est facultative : si on ne la rentre pas tout de suite, elle sera demandée plus tard. Pour entrer la clé, taper la commande &amp;#039;&amp;#039;&amp;#039;vxlicinst&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
 # vxlicinst 					&lt;br /&gt;
 &lt;br /&gt;
 VERITAS License Manager vxlicinst utility version 3.00.007d 					&lt;br /&gt;
 Copyright (C) VERITAS Software Corp 2002. All Rights reserved. 					&lt;br /&gt;
 &lt;br /&gt;
 Enter your license key : XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXX 					&lt;br /&gt;
 &lt;br /&gt;
 License key successfully installed for VERITAS Volume Manager 					&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Installer / configurer Veritas==&lt;br /&gt;
&lt;br /&gt;
Taper la commande vxinstall et suivre les instructions en répondant aux questions (des explications sont données au fur et à mesure). Il est conseillé de choisir &amp;quot;custom installation&amp;quot;. Si on veut mettre le disque système sous contrôle de VxVM, il faut répondre &amp;quot;yes&amp;quot; à la question &amp;quot;Encapsulate boot disk ?&amp;quot;. Pour cela, il faut que le disque soit &amp;quot;encapsulable&amp;quot; (voir chapitre &amp;#039;&amp;#039;Préparation des disques durs&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
Une fois l&amp;#039;installation terminée, il faudra rebooter le serveur. Ça sera l&amp;#039;occasion de vérifier que rien n&amp;#039;a été cassé par l&amp;#039;installation, et que tout démarre bien dans le cas où on a encapsulé le système.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Mirrorer le disque système=&lt;br /&gt;
&lt;br /&gt;
==Présentation==&lt;br /&gt;
&lt;br /&gt;
Pour des raisons évidentes de sécurité, il est intéressant de faire un miroir du disque système. Le miroir étant un miroir logiciel géré par VxVM, il est bien sûr impératif que le disque système soit déjà sous contrôle de VxVM.&lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;explication qui suit, on considère que le disque système est &amp;#039;&amp;#039;&amp;#039;c0t0d0&amp;#039;&amp;#039;&amp;#039; et que le disque miroir est &amp;#039;&amp;#039;&amp;#039;c0t2d0&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Créer le mirroir==&lt;br /&gt;
&lt;br /&gt;
Voici les différentes étapes :&lt;br /&gt;
&lt;br /&gt;
* ajouter un nouveau disque dans le serveur&lt;br /&gt;
* vérifier avec format qu&amp;#039;il est bien reconnu par Solaris. S&amp;#039;il ne l&amp;#039;est pas, forcer la reconnaissance du nouveau matériel avec &amp;quot;devfsadm -v&amp;quot;.&lt;br /&gt;
* vérifier qu&amp;#039;il est vu par VxVM avec &amp;quot;vxdisk list&amp;quot;. S&amp;#039;il ne l&amp;#039;est pas, taper les commandes suivantes &amp;quot;drvconfig&amp;quot;, puis &amp;quot;disks&amp;quot;, puis &amp;quot;vxdctl enable&amp;quot;. Vérifier que cette fois il est bien reconnu.&lt;br /&gt;
* mettre le nouveau disque sous contrôle de VxVM, l&amp;#039;appeler &amp;quot;rootmir&amp;quot; et le faire appartenir au même disk group (dg) que le disque système (si on a conservé les choix par défaut, le disque système s&amp;#039;appelle &amp;quot;rootdisk&amp;quot; et appartient au groupe &amp;quot;rootdg&amp;quot;). La commande à utiliser est &amp;quot;vxdiskadd c0t2d0&amp;quot; ; il suffit de répondre aux questions.&lt;br /&gt;
* Mirrorer les disques avec la commande interactive &amp;quot;vxdiskadm&amp;quot; :&lt;br /&gt;
** dans le menu, valider le choix &amp;quot;6 Mirror volumes on a disk&amp;quot;&lt;br /&gt;
** faire &amp;quot;list&amp;quot; pour vérifier qu&amp;#039;on voit bien &amp;quot;rootdisk&amp;quot; et &amp;quot;rootmir&amp;quot;&lt;br /&gt;
** lorsqu&amp;#039;il demande le disque à mirrorer, lui dire &amp;quot;rootdisk&amp;quot;&lt;br /&gt;
** lorsqu&amp;#039;il demande le disque de destination, lui dire &amp;quot;rootmir&amp;quot;&lt;br /&gt;
** confirmer. Il va alors mirrorer chaque volume existant d&amp;#039;un disque à l&amp;#039;autre, en affichant la progression.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On peut taper les commandes &amp;quot;&amp;#039;&amp;#039;&amp;#039;prtvtoc /dev/rdsk/c0t2d0s2&amp;#039;&amp;#039;&amp;#039;&amp;quot; pour vérifier que les tags 14 et 15 ont été créés, preuve que le disque est sous contrôle de VxVM.&lt;br /&gt;
&lt;br /&gt;
 # prtvtoc /dev/rdsk/c0t2d0s2 					&lt;br /&gt;
 * /dev/rdsk/c0t2d0s2 partition map 					&lt;br /&gt;
 * 					&lt;br /&gt;
 * Dimensions: 					&lt;br /&gt;
 *     512 bytes/sector 					&lt;br /&gt;
 *     135 sectors/track 					&lt;br /&gt;
 *      16 tracks/cylinder 					&lt;br /&gt;
 *    2160 sectors/cylinder 					&lt;br /&gt;
 *    3882 cylinders 					&lt;br /&gt;
 *    3880 accessible cylinders 					&lt;br /&gt;
 * 					&lt;br /&gt;
 * Flags: 					&lt;br /&gt;
 *   1: unmountable 					&lt;br /&gt;
 *  10: read-only 					&lt;br /&gt;
 * 					&lt;br /&gt;
 * Unallocated space: 					&lt;br /&gt;
 *       First     Sector    Last 					&lt;br /&gt;
 *       Sector     Count    Sector 					&lt;br /&gt;
 *     2095200 4292874256      2159 					&lt;br /&gt;
 *     8380800 4288681696   2095199 					&lt;br /&gt;
 *     3144960    615600   3760559 					&lt;br /&gt;
 *     7497360    883440   8380799 					&lt;br /&gt;
 * 					&lt;br /&gt;
 *                          First     Sector    Last 					&lt;br /&gt;
 * Partition  Tag  Flags    Sector     Count    Sector  Mount Directory 					&lt;br /&gt;
  0      2    00       2160   2093040   2095199 					&lt;br /&gt;
  1      3    01    2095200   1049760   3144959 					&lt;br /&gt;
  2      5    01          0   8380800   8380799 					&lt;br /&gt;
  3     15    01          0      2160      2159 					&lt;br /&gt;
  4     14    01       2160   8378640   8380799 					&lt;br /&gt;
  6      4    00    3760560   2097360   5857919 					&lt;br /&gt;
  7      7    00    5857920   1639440   7497359 					&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configurer l&amp;#039;Openboot Prom (OBP)==&lt;br /&gt;
&lt;br /&gt;
Maintenant, il va falloir configurer l&amp;#039;OBP pour pouvoir booter sur l&amp;#039;un ou l&amp;#039;autre des disques. Pour cela, on va créer des alias &amp;quot;&amp;#039;&amp;#039;&amp;#039;rootdisk&amp;#039;&amp;#039;&amp;#039;&amp;quot; et &amp;quot;&amp;#039;&amp;#039;&amp;#039;rootmir&amp;#039;&amp;#039;&amp;#039;&amp;quot; qui vont pointer respectivement sur le disque principal et le mirroir.&lt;br /&gt;
&lt;br /&gt;
Pour commencer, sous Solaris, il faut repérer le chemin long des deux devices :&lt;br /&gt;
&lt;br /&gt;
 # ls -l /dev/rdsk/c0t0d0s2 /dev/rdsk/c0t2d0s2&lt;br /&gt;
 lrwxrwxrwx   1 root     root          45 Oct 27 15:31 /dev/rdsk/c0t0d0s2 -&amp;gt; ../../devices/pci@1f,4000/scsi@3/sd@0,0:c,raw&lt;br /&gt;
 lrwxrwxrwx   1 root     other         45 Oct 27 15:31 /dev/rdsk/c0t2d0s2 -&amp;gt; ../../devices/pci@1f,4000/scsi@3/sd@2,0:c,raw&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La partie à retenir, pour cet exemple, est &amp;quot;&amp;#039;&amp;#039;&amp;#039;/pci@1f,4000/scsi@3/sd@0,0&amp;#039;&amp;#039;&amp;#039;&amp;quot; et &amp;quot;&amp;#039;&amp;#039;&amp;#039;/pci@1f,4000/scsi@3/sd@2,0&amp;#039;&amp;#039;&amp;#039;&amp;quot;, c&amp;#039;est à dire le chemin sans &amp;quot;&amp;#039;&amp;#039;&amp;#039;../../devices&amp;#039;&amp;#039;&amp;#039;&amp;quot; au début et sans &amp;quot;&amp;#039;&amp;#039;&amp;#039;:&amp;#039;&amp;#039;&amp;#039;&amp;quot; et les caractères suivants à la fin. Si on a oublié de les noter, on pourra les retrouver dans l&amp;#039;OBP en tapant &amp;#039;&amp;#039;&amp;#039;devalias&amp;#039;&amp;#039;&amp;#039; et en repérant les disques &amp;quot;&amp;#039;&amp;#039;&amp;#039;disk 0&amp;#039;&amp;#039;&amp;#039;&amp;quot; et &amp;quot;&amp;#039;&amp;#039;&amp;#039;disk 2&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut rebooter le serveur pour se retrouver dans l&amp;#039;OBP : init 0.&lt;br /&gt;
&lt;br /&gt;
Une fois dans l&amp;#039;OBP, taper les commandes suivantes :&lt;br /&gt;
&lt;br /&gt;
 setenv use-nvramrc? True&lt;br /&gt;
 nvalias rootdisk /pci@1f,4000/scsi@3/sd@0,0&lt;br /&gt;
 nvalias rootmir /pci@1f,4000/scsi@3/sd@2,0&lt;br /&gt;
 setenv boot-device rootdisk rootmir&lt;br /&gt;
 reset-all&lt;br /&gt;
&lt;br /&gt;
Le serveur va alors rebooter. Par défaut, il va booter sur &amp;quot;&amp;#039;&amp;#039;&amp;#039;rootdisk&amp;#039;&amp;#039;&amp;#039;&amp;quot;. Pour le forcer à booter sur le miroir (il est conseillé de le faire pour vérifier qu&amp;#039;il marche), il faut taper &amp;quot;&amp;#039;&amp;#039;&amp;#039;boot rootmir&amp;#039;&amp;#039;&amp;#039;&amp;quot; dans l&amp;#039;OBP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Mettre un disque non système sous contrôle de VxVM=&lt;br /&gt;
&lt;br /&gt;
==Lister les disques sous contrôle de VxVM==&lt;br /&gt;
&lt;br /&gt;
Avant de mettre un disque sous contrôle de VxVM, on peut s&amp;#039;assurer qu&amp;#039;il n&amp;#039;y est pas déjà, ou simplement regarder quels sont les autres disques gérés par VxVM. Pour cela, on utilise la commande &amp;quot;&amp;#039;&amp;#039;&amp;#039;vxdisk list&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 # vxdisk list 					&lt;br /&gt;
 DEVICE       TYPE      DISK         GROUP        STATUS 					&lt;br /&gt;
 c0t0d0s2     sliced    rootdisk     rootdg       online 					&lt;br /&gt;
 c0t1d0s2     sliced    -            -            error 					&lt;br /&gt;
 c0t2d0s2     sliced    rootmir      rootdg       online 					&lt;br /&gt;
 c0t3d0s2     sliced    -            -            error 					&lt;br /&gt;
 c2t0d0s2     sliced    -            -            error 					&lt;br /&gt;
 c2t3d0s2     sliced    -            -            error 					&lt;br /&gt;
 c3t3d0s2     sliced    -            -            error 					&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Si le disque n&amp;#039;est pas vu par VxVM==&lt;br /&gt;
&lt;br /&gt;
Si le disque qu&amp;#039;on veut ajouter est bien vu par &amp;quot;&amp;#039;&amp;#039;&amp;#039;format&amp;#039;&amp;#039;&amp;#039;&amp;quot;, mais n&amp;#039;est pas listé par &amp;quot;&amp;#039;&amp;#039;&amp;#039;vxdisk list&amp;#039;&amp;#039;&amp;#039;&amp;quot;, alors exécuter les commandes suivantes : &amp;quot;&amp;#039;&amp;#039;&amp;#039;drvconfig&amp;#039;&amp;#039;&amp;#039;&amp;quot;, puis &amp;quot;&amp;#039;&amp;#039;&amp;#039;disks&amp;#039;&amp;#039;&amp;#039;&amp;quot;, puis &amp;quot;&amp;#039;&amp;#039;&amp;#039;vxdctl enable&amp;#039;&amp;#039;&amp;#039;&amp;quot;. Maintenant, &amp;quot;&amp;#039;&amp;#039;&amp;#039;vxdisk list&amp;#039;&amp;#039;&amp;#039;&amp;quot; doit le voir.&lt;br /&gt;
&lt;br /&gt;
Détail des commandes :&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;drvconfig&amp;#039;&amp;#039;&amp;#039; : scanne la chaîne scsi et détecte les nouveaux disques&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;disks&amp;#039;&amp;#039;&amp;#039; : créé les fichiers device dans /dev&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;vxdctl enable&amp;#039;&amp;#039;&amp;#039; : demande à VxVM de prendre les disques en compte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : la méthode ci-dessus est toujours fonctionnelle, mais maintenant il faudrait plutôt utiliser &amp;#039;&amp;#039;&amp;#039;devfsadm&amp;#039;&amp;#039;&amp;#039; pour remplacer les deux premières commandes. Ce qui nous donne, pour faire la même chose, les deux commandes suivantes :&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;devfsadm -Cv&amp;#039;&amp;#039;&amp;#039; : détecte et configure les nouveaux devices (le &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; est facultatif, il fait un clean des devices qui n&amp;#039;existent plus&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;vxdctl enable&amp;#039;&amp;#039;&amp;#039; : demande à VxVM de prendre les disques en compte&lt;br /&gt;
&lt;br /&gt;
==Mettre le disque sous contrôle de VxVM (disk group)==&lt;br /&gt;
&lt;br /&gt;
La commande à utiliser est &amp;#039;&amp;#039;&amp;#039;vxdiskadd&amp;#039;&amp;#039;&amp;#039;. Elle a pour effet d&amp;#039;associer le disque à un groupe (existant ou nouveau).&lt;br /&gt;
&lt;br /&gt;
 vxdiskadd c2t0d0&lt;br /&gt;
&lt;br /&gt;
Il va alors demander si on veut ajouter le disque à un Disk Group existant (il affiche la liste) ou si on veut en créer un nouveau (il va demander le nom).&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite dire si le disque doit être encapsulé ou pas. Pour rappel, encapsuler consiste à conserver les données existantes, mais nécessite que le disque soit encapsulable (voir chapitre &amp;#039;&amp;#039;Préparation des disques durs&amp;#039;&amp;#039;). Si le disque ne contient pas de données, il ne faut pas encapsuler.&lt;br /&gt;
&lt;br /&gt;
Il existe une autre possibilité pour faire la même chose : taper &amp;quot;&amp;#039;&amp;#039;&amp;#039;vxdiskadm&amp;quot; et choisir &amp;quot;1. Add or initialize one or more disks&amp;#039;&amp;#039;&amp;#039;&amp;quot; dans le menu, et répondre aux questions comme avec &amp;#039;&amp;#039;&amp;#039;vxdiskadd&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Il existe même une troisième méthode entièrement en ligne de commandes qui m&amp;#039;a un jour sauvé la vie, car les deux autres ne fonctionnaient pas, je n&amp;#039;ai jamais compris pourquoi (ça m&amp;#039;indiquait que le disque était invalide). La voici :&lt;br /&gt;
&lt;br /&gt;
 vxdg -g mondg adddisk mondg05=c2t0d0&lt;br /&gt;
&lt;br /&gt;
A noter que &amp;quot;mondg05&amp;quot; est le nom du disque dans le disque group. On peut choisir le nom qu&amp;#039;on veut du moment qu&amp;#039;il n&amp;#039;est pas déjà pris. Avec les deux premières méthodes ce nom est déterminé automatiquement (nom du dg suivi de deux chiffres).&lt;br /&gt;
&lt;br /&gt;
Remarque : lorsqu&amp;#039;un disque est géré par VxVM, son raw device n&amp;#039;est plus vu comme &amp;#039;&amp;#039;&amp;#039;/dev/rdsk/...&amp;#039;&amp;#039;&amp;#039;, mais comme &amp;#039;&amp;#039;&amp;#039;/dev/vx/rdsk...&amp;#039;&amp;#039;&amp;#039;. De même, le spécial devient &amp;#039;&amp;#039;&amp;#039;/dev/vx/dsk/...&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=Gestion des volumes=&lt;br /&gt;
&lt;br /&gt;
==Créer un volume==&lt;br /&gt;
&lt;br /&gt;
Pour créer un volume (une partition logique) dans un disk group (dg), on utilise la commande vxassist. Puis on formate le volume avec newfs ou mkfs, comme pour n&amp;#039;importe quelle partition physique. Pour finir, il faudra l&amp;#039;ajouter dans /etc/vfstab.&lt;br /&gt;
&lt;br /&gt;
Syntaxe :&lt;br /&gt;
&lt;br /&gt;
 vxassist -b -g nom_disk_group make nom_volume taille&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 vxassist -b -g dbdg make oraclelv 20g&lt;br /&gt;
&lt;br /&gt;
Création d&amp;#039;un filesystem UFS :&lt;br /&gt;
&lt;br /&gt;
 newfs /dev/vx/rdsk/nom_disk_group/nom_volume&lt;br /&gt;
&lt;br /&gt;
Création d&amp;#039;un filesystem VxFS :&lt;br /&gt;
&lt;br /&gt;
 mkfs -F vxfs /dev/vx/rdsk/nom_disk_group/nom_volume&lt;br /&gt;
&lt;br /&gt;
Ajout de la ligne correspondante dans /etc/vfstab :&lt;br /&gt;
&lt;br /&gt;
 /dev/vx/dsk/nom_disk_group/nom_volume       /dev/vx/rdsk/nom_disk_group/nom_volume      /point_de_montage      vxfs       defaults      1 2&lt;br /&gt;
&lt;br /&gt;
Remarque : la création d&amp;#039;un filesystem VxFS nécessite une licence Veritas File System.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Vérifier l&amp;#039;espace restant sur un volume==&lt;br /&gt;
&lt;br /&gt;
Syntaxe :&lt;br /&gt;
&lt;br /&gt;
 vxdg [-g groupe] free&lt;br /&gt;
&lt;br /&gt;
Renvoie la taille en blocs de 512 octets (colonne OFFSET=taille utilisée, LENGTH=taille restante)&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 # vxdg -g rootdg free 					&lt;br /&gt;
 DISK         DEVICE       TAG          OFFSET    LENGTH    FLAGS 					&lt;br /&gt;
 rootdisk     c0t0d0s2     c0t0d0       71109846  11556     n 					&lt;br /&gt;
 rootmir      c1t0d0s2     c1t0d0       24576723  5778      - 					&lt;br /&gt;
 rootmir      c1t0d0s2     c1t0d0       24588278  1         - 					&lt;br /&gt;
 rootmir      c1t0d0s2     c1t0d0       71121402  2889      -&lt;br /&gt;
&lt;br /&gt;
Voici un script qui permet d&amp;#039;afficher les choses de façon plus claire :&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #&lt;br /&gt;
 # Pour tous les dg veritas existant, affiche l&amp;#039;espace disponible en Go&lt;br /&gt;
 # ainsi que l&amp;#039;espace utilise, l&amp;#039;espace total et le pourcentage d&amp;#039;utilisation.&lt;br /&gt;
 #&lt;br /&gt;
 LISTE_DG=$(vxdg -q list|awk &amp;#039;{print $1}&amp;#039; |sort |uniq)&lt;br /&gt;
 &lt;br /&gt;
 echo -e &amp;quot;Disk Group \t Free space \t Used space \t Total space \t Percent used&amp;quot;&lt;br /&gt;
 for i in ${LISTE_DG}&lt;br /&gt;
 do&lt;br /&gt;
         FREE=`echo $(vxdg -qg $i free |awk &amp;#039;{print $5}&amp;#039; |tr &amp;#039;\n&amp;#039; &amp;#039;+&amp;#039;) |sed &amp;quot;s/.*/(0+&amp;amp;/&amp;quot;| sed &amp;quot;s/+$/)\/2\/1024\/1024/&amp;quot;|bc`&lt;br /&gt;
         TEMP=`vxdisk -qg $i -o size list 2&amp;gt;/dev/null |awk &amp;#039;{print $2}&amp;#039; |tr &amp;#039;\n&amp;#039; &amp;#039;+&amp;#039;`&lt;br /&gt;
         TOTAL=`echo &amp;quot;($TEMP&amp;quot; |sed &amp;quot;s/+$/)\/1024/g&amp;quot; |bc`&lt;br /&gt;
         USED=`echo $(($TOTAL - $FREE))`&lt;br /&gt;
         PERCENT_USED=`echo &amp;quot;scale=2 ; 100*$USED/$TOTAL&amp;quot;|bc`&lt;br /&gt;
         # l&amp;#039;ajout du &amp;quot;0+&amp;quot; est indispensable pour les DG qui n&amp;#039;ont plus d&amp;#039;espace libre, car ils n&amp;#039;apparaissent pas avec &amp;quot;vxfg free&amp;quot;&lt;br /&gt;
         echo -e &amp;quot;$i \t\t ${FREE} Go \t ${USED} Go \t ${TOTAL} Go \t ${PERCENT_USED}%&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
Exemple de résultat :&lt;br /&gt;
 # ./espace_dispo_sur_dg.sh&lt;br /&gt;
 Disk Group           Free space      Used space      Total space     Percent used&lt;br /&gt;
 zone1-applidg        55 Go           100 Go          155 Go          64.51%&lt;br /&gt;
 zone2-datadg         0 Go            100 Go          100 Go          100.00%&lt;br /&gt;
 zone2-applidg        0 Go            250 Go          250 Go          100.00%&lt;br /&gt;
 zone3-applidg        59 Go           200 Go          259 Go          77.22%&lt;br /&gt;
&lt;br /&gt;
==Agrandir ou réduire un volume==&lt;br /&gt;
&lt;br /&gt;
Agrandir de 4 Go :&lt;br /&gt;
&lt;br /&gt;
 vxresize -g nom_disk_group nom_volume +4g&lt;br /&gt;
&lt;br /&gt;
Réduire de 3 Go :&lt;br /&gt;
&lt;br /&gt;
 vxresize -g nom_disk_group nom_volume -3g&lt;br /&gt;
&lt;br /&gt;
Bien sûr, tout ça se fait à chaud, sans avoir besoin de démonter les partitions. Tout le monde peut continuer à travailler. C&amp;#039;est formidable !&lt;br /&gt;
&lt;br /&gt;
Si vxresize n&amp;#039;est pas dans le PATH, le rechercher avec &amp;quot;grep vxresize /var/sadm/install/contents&amp;quot;. Il est normalement dans /usr/lib/vxvm/bin/.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Renommer un volume (et renommer ses plexes)==&lt;br /&gt;
&lt;br /&gt;
Si on veut changer le nom d&amp;#039;un volume, utiliser la syntaxe suivante :&lt;br /&gt;
&lt;br /&gt;
 vxedit rename oldlv newlv&lt;br /&gt;
&lt;br /&gt;
Lorsqu&amp;#039;on fait vxprint, on remarque que le volume possède des plexes qui lui sont associés. Les plexes sont nécessaires au fonctionnement de VxVM, mais n&amp;#039;ont pas vraiment d&amp;#039;intérêt pour l&amp;#039;administrateur système. Cependant, lorsqu&amp;#039;on créé un volume, les plexes associés sont automatiquement créés avec un nom reprenant le nom du volume, mais renommer le volume ne renomme pas les plexes. Il peut être intéressant de renommer également les plexes pour garder une cohérence, notamment quand on fait un vxprint. La syntaxe pour renommer les plexes est la suivante :&lt;br /&gt;
&lt;br /&gt;
 vxedit -g rootdg -p rename oldlv-01 newlv-01&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Supprimer un volume==&lt;br /&gt;
&lt;br /&gt;
Syntaxe :&lt;br /&gt;
&lt;br /&gt;
 vxassist -g nom_groupe remove volume nom_volume&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 vxassist -g dbdg remove volume oraclelv&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Voir la liste de tous les dg==&lt;br /&gt;
&lt;br /&gt;
 # vxdg list 					&lt;br /&gt;
 NAME         STATE          ID 					&lt;br /&gt;
 rootdg       enabled              1247755677.135.uyqev3 					&lt;br /&gt;
 exploitdg    enabled              1151484964.148.uyqev3 					&lt;br /&gt;
 tkappli00dg  enabled              1142590040.99.uyqev3 					&lt;br /&gt;
 tk00dg       enabled              1142591823.119.uyqev3 					&lt;br /&gt;
 tk01dg       enabled              1171641444.4311.bakctl01 					&lt;br /&gt;
 zonedg       enabled              1141381993.11.uyqev3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Retirer un disque d&amp;#039;un DG=&lt;br /&gt;
&lt;br /&gt;
Nous allons suivre l&amp;#039;exemple d&amp;#039;un DG qui est réparti sur deux disques. La totalité des volumes occupe moins de place que la taille d&amp;#039;un disque. Nous allons donc migrer les volumes d&amp;#039;un disque pour tous les placer sur le même disque, puis retirer le disque qui n&amp;#039;a plus de données. Ainsi on pourra réutiliser le disque pour autre chose.&lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple qui suit, le DG s&amp;#039;appelle exampledg composé de exampledg_01 et exampledg_02.&lt;br /&gt;
&lt;br /&gt;
On regarde l&amp;#039;espace utilisé sur chacun des disques :&lt;br /&gt;
&lt;br /&gt;
 # vxdg -g exampledg free&lt;br /&gt;
 DISK         DEVICE       TAG          OFFSET    LENGTH    FLAGS&lt;br /&gt;
 exampledg exampledg_01 emcpower108s2 emcpower108  34213888  175484928 -&lt;br /&gt;
 exampledg exampledg_02 emcpower109s2 emcpower109  134217728 75481088  -&lt;br /&gt;
&lt;br /&gt;
Maintenant on va déplacer les données de exampledg_01 vers exampledg_02 :&lt;br /&gt;
&lt;br /&gt;
 /etc/vx/bin/vxevac -g exampledg exampledg_01 exampledg_02&lt;br /&gt;
&lt;br /&gt;
Ca peut être long. On peut regarder l&amp;#039;avancement avec &amp;quot;vxtask list&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
A noter qu&amp;#039;il n&amp;#039;est pas impératif de préciser le disque de destination (exampledg_02 ici). Dans ce cas, vxvm déplace les données sur un des autres disques du DG.&lt;br /&gt;
&lt;br /&gt;
Une fois que c&amp;#039;est fini, on vérifie que tout l&amp;#039;espace a bien été libéré :&lt;br /&gt;
&lt;br /&gt;
 # vxdg -g exampledg free&lt;br /&gt;
 DISK         DEVICE       TAG          OFFSET    LENGTH    FLAGS&lt;br /&gt;
 exampledg_01 emcpower108s2 emcpower108  0         209698816 -&lt;br /&gt;
 exampledg_02 emcpower109s2 emcpower109  168431616 41267200  -&lt;br /&gt;
&lt;br /&gt;
On peut maintenant retirer le disque du DG :&lt;br /&gt;
&lt;br /&gt;
 # vxdg -g exampledg rmdisk exampledg_01&lt;br /&gt;
&lt;br /&gt;
Et on vérifie qu&amp;#039;il ne fait plus partie du DG :&lt;br /&gt;
&lt;br /&gt;
 # vxdg -g exampledg free&lt;br /&gt;
 DISK         DEVICE       TAG          OFFSET    LENGTH    FLAGS&lt;br /&gt;
 exampledg_02 emcpower109s2 emcpower109  168431616 41267200  -&lt;br /&gt;
&lt;br /&gt;
=Retirer un disque du contrôle de VxVM=&lt;br /&gt;
&lt;br /&gt;
Pour retirer un disque, il faut d&amp;#039;abord avoir supprimé tous les volumes qu&amp;#039;il contenait (voir Supprimer un volume), et également supprimer les disk group.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Détruire un disk group==&lt;br /&gt;
&lt;br /&gt;
 vxdg destroy mon_dg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Retirer le disque==&lt;br /&gt;
&lt;br /&gt;
 vxdisk rm c3t0d0&lt;br /&gt;
&lt;br /&gt;
Puis vérifier que ça a bien fonctionné avec :&lt;br /&gt;
&lt;br /&gt;
 vxdctl enable 					&lt;br /&gt;
 vxdisk list&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Échanger physiquement un disque sous contrôle de VxVM=&lt;br /&gt;
&lt;br /&gt;
Pour changer un disque qui est sous contrôle de VxVM (par exemple parce qu&amp;#039;il est en fin de vie), le principe est de :&lt;br /&gt;
&lt;br /&gt;
* avertir VxVM qu&amp;#039;on va changer le disque&lt;br /&gt;
* faire une copie du disque&lt;br /&gt;
* remettre le disque sous contrôle de VxVM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les détails sont ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Avertir VxVM qu&amp;#039;on va changer le disque==&lt;br /&gt;
&lt;br /&gt;
Taper &amp;quot;&amp;#039;&amp;#039;&amp;#039;vxdiskadm&amp;#039;&amp;#039;&amp;#039;&amp;quot;, choisir l&amp;#039;option &amp;quot;&amp;#039;&amp;#039;&amp;#039;4. Remove a disk for replacement&amp;#039;&amp;#039;&amp;#039;&amp;quot; et indiquer le volume (ex: datadg01, pour le premier volume du groupe datadg).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Faire une copie du disque==&lt;br /&gt;
&lt;br /&gt;
On peut maintenant faire une copie brute du disque vers le nouveau avec dd. C&amp;#039;est brutal, mais ça marche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Remettre le disque sous contrôle de VxVM==&lt;br /&gt;
&lt;br /&gt;
Taper &amp;quot;&amp;#039;&amp;#039;&amp;#039;vxdiskadm&amp;#039;&amp;#039;&amp;#039;&amp;quot;, choisir l&amp;#039;option &amp;quot;&amp;#039;&amp;#039;&amp;#039;5. Replace a failed or removed disk&amp;#039;&amp;#039;&amp;#039;&amp;quot; et indiquer le disque (ex: c1t1d0s2).&lt;br /&gt;
&lt;br /&gt;
Il arrive que cette méthode ne fonctionne pas. Dans ce cas, on peut utiliser les outils en ligne de commande :&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;/etc/vx/bin/vxreattach -b&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* si ça ne marche pas : &amp;#039;&amp;#039;&amp;#039;vxdg -g datadg -k adddisk datadg01=c1t1d0s2&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* on vérifie que les volumes sont ENABLE : &amp;#039;&amp;#039;&amp;#039;vxprint -Ath&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* s&amp;#039;ils ne sont pas ENABLE, faire : &amp;#039;&amp;#039;&amp;#039;vxvol -g datadg startall&amp;#039;&amp;#039;&amp;#039; et si toujours pas ENABLE, forcer avec &amp;#039;&amp;#039;&amp;#039;vxvol -g datadg -f startall&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour finir, remonter les partitions associées avec mount.&lt;br /&gt;
&lt;br /&gt;
Remarque : on peut également faire plus &amp;quot;propre&amp;quot; en copiant d&amp;#039;abord les données du disque, en ne prenant que le contenu des volumes VxVM qui sont sur le disque en question, mais c&amp;#039;est plus long à expliquer et je n&amp;#039;ai pas encore testé.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Export / import=&lt;br /&gt;
&lt;br /&gt;
Les disk group peuvent facilement s&amp;#039;exporter d&amp;#039;un serveur pour s&amp;#039;importer sur un autre serveur. Voici rapidement les différentes étapes sur un dg &amp;quot;testdg&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Sur le serveur source==&lt;br /&gt;
&lt;br /&gt;
1/ démonter les points de montage associés au dg&lt;br /&gt;
 umount /directories&lt;br /&gt;
&lt;br /&gt;
2/ stopper les volumes&lt;br /&gt;
 vxvol -g testdg stopall&lt;br /&gt;
&lt;br /&gt;
3/ exporter le dg&lt;br /&gt;
 vxdg deport testdg&lt;br /&gt;
&lt;br /&gt;
4/ déconnecter physiquement le disque ou la LUN du serveur&lt;br /&gt;
&lt;br /&gt;
==Sur le serveur cible==&lt;br /&gt;
&lt;br /&gt;
5/ connecter physiquement le disque ou la LUN sur le serveur&lt;br /&gt;
&lt;br /&gt;
6/ importer le dg (veritas est capable tout seul de retrouver le dg sur le nouveau volume)&lt;br /&gt;
 vxdg import testdg&lt;br /&gt;
&lt;br /&gt;
7/ démarrer tous les volumes sur le nouveau système et resynchroniser les mirroirs en arrière plan&lt;br /&gt;
 vxrecover -g testdg -sb&lt;br /&gt;
&lt;br /&gt;
8/ monter les répertoires (créer si nécessaire les points de montage et éventuellement mettre à jour la vfstab)&lt;br /&gt;
&lt;br /&gt;
Et voilà. C&amp;#039;est à peine plus compliqué que de passer une clé usb d&amp;#039;un pc à un autre !&lt;br /&gt;
&lt;br /&gt;
==Voir le nom des DGs importables==&lt;br /&gt;
&lt;br /&gt;
Si on ne connait pas le nom du DG à importer, on peut afficher la liste des disques et du DG associé avec la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 vxdisk -o alldgs list&lt;br /&gt;
&lt;br /&gt;
Les disques qui sont sur un DG qui n&amp;#039;a pas été importé vont apparaître avec le nom du DG entre parenthèses.&lt;br /&gt;
&lt;br /&gt;
=Les quotas=&lt;br /&gt;
&lt;br /&gt;
Les quotas s&amp;#039;appliquent pour un utilisateur ou un groupe. Pour un fs, on fixe une limite soft et hard en nombre de blocs et/ou en nombre d&amp;#039;inodes.&lt;br /&gt;
&lt;br /&gt;
==Afficher la valeur actuelle==&lt;br /&gt;
Pour afficher les quotas, on utilise la commande &amp;#039;&amp;#039;&amp;#039;vxquota&amp;#039;&amp;#039;&amp;#039; avec le nom ou l&amp;#039;uid.&lt;br /&gt;
&lt;br /&gt;
 vxquota -v 1399&lt;br /&gt;
 Disk quotas for (no account) (uid 1399):&lt;br /&gt;
 Filesystem     usage  quota  limit     timeleft  files  quota  limit     timeleft&lt;br /&gt;
 /export/home   41304 250000 250000                  33      0      0           &lt;br /&gt;
&lt;br /&gt;
==Modifier les valeurs==&lt;br /&gt;
&lt;br /&gt;
On utilise &amp;#039;&amp;#039;&amp;#039;vxedquota&amp;#039;&amp;#039;&amp;#039; avec le nom ou l&amp;#039;uid. On se retrouve dans un editeur.&lt;br /&gt;
&lt;br /&gt;
 vxedquota -u 1399&lt;br /&gt;
 ==&amp;gt;&lt;br /&gt;
 fs /export/home blocks (soft = 250000, hard = 250000) inodes (soft = 0, hard = 0)&lt;br /&gt;
&lt;br /&gt;
=Divers=&lt;br /&gt;
&lt;br /&gt;
==Afficher la licence Veritas==&lt;br /&gt;
&lt;br /&gt;
On utilise la commande vxlicrep.&lt;br /&gt;
&lt;br /&gt;
 # vxlicrep 					&lt;br /&gt;
  &lt;br /&gt;
 VERITAS License Manager vxlicrep utility version 3.00.007d 					&lt;br /&gt;
 Copyright (C) VERITAS Software Corp 2002. All Rights reserved. 					&lt;br /&gt;
  &lt;br /&gt;
 Creating a report on all VERITAS products installed on this system 					&lt;br /&gt;
  &lt;br /&gt;
  -----------------***********************----------------- 					&lt;br /&gt;
  &lt;br /&gt;
  License Key                         = XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXX 					&lt;br /&gt;
  Product Name                        = VERITAS Volume Manager 					&lt;br /&gt;
  Serial Number                       = 9547 					&lt;br /&gt;
  License Type                        = PERMANENT_NODE_LOCK 					&lt;br /&gt;
  OEM ID                              = 7 					&lt;br /&gt;
  Node Lock Type                      = (Hostid and Architecture ID) 					&lt;br /&gt;
  &lt;br /&gt;
  Features := 					&lt;br /&gt;
  &lt;br /&gt;
  VxVM                                = Enabled 					&lt;br /&gt;
  CPU Count                           = Not Restricted 					&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Gestion des largefiles (fichiers de plus de 2 Go)==&lt;br /&gt;
&lt;br /&gt;
Avec VxFS, on peut activer ou désactiver la gestion des fichiers de plus de 2 Go. C&amp;#039;est l&amp;#039;option &amp;quot;&amp;#039;&amp;#039;&amp;#039;largefiles&amp;#039;&amp;#039;&amp;#039;&amp;quot; qui gère ça. Cette option se met à la création du filesystem, mais peut bien sûr s&amp;#039;activer ou se désactiver à chaud... Il n&amp;#039;y a donc rien à modifier dans &amp;#039;&amp;#039;&amp;#039;/etc/vfstab&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Seules les versions anciennes de VxFS n&amp;#039;activent pas les largefiles par défaut.&lt;br /&gt;
&lt;br /&gt;
===Voir si les largefiles sont activés===&lt;br /&gt;
&lt;br /&gt;
 # fsadm -F vxfs /point/de/montage 						&lt;br /&gt;
 nolargefiles&lt;br /&gt;
&lt;br /&gt;
&amp;quot;-F vxfs&amp;quot; est facultatif.&lt;br /&gt;
&lt;br /&gt;
===Les activer===&lt;br /&gt;
&lt;br /&gt;
 # fsadm -o largefiles /point/de/montage&lt;br /&gt;
&lt;br /&gt;
===Les déactiver===&lt;br /&gt;
&lt;br /&gt;
 # fsadm -o nolargefiles /point/de/montage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Faire un fsck d&amp;#039;un filesystem VxFS==&lt;br /&gt;
&lt;br /&gt;
Si on doit faire un fsck sur un filesystem VxFS, la syntaxe est la suivante :&lt;br /&gt;
&lt;br /&gt;
 /usr/sbin/fsck -F vxfs -o nolog,full /dev/vx/rdsk/mon_dg/mon_volume&lt;br /&gt;
&lt;br /&gt;
Explications :&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;nolog&amp;#039;&amp;#039;&amp;#039; : demande à fsck d&amp;#039;accéder directement au filesystem sans passer par le log&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;full&amp;#039;&amp;#039;&amp;#039; : force à vérifier le filesystem en entier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Voir la liste des tâches en cours==&lt;br /&gt;
&lt;br /&gt;
Pour voir la liste des actions en cours par Veritas (ainsi que la progression en poucentage), taper :&lt;br /&gt;
&lt;br /&gt;
 # vxtask list&lt;br /&gt;
&lt;br /&gt;
On obtient également le numéro de tâche. Avec, on peut mettre en pause la tâche avec &amp;quot;&amp;#039;&amp;#039;&amp;#039;vxtask pause task_id&amp;#039;&amp;#039;&amp;#039;&amp;quot; et la relancer avec &amp;quot;&amp;#039;&amp;#039;&amp;#039;vxtask resume task_id&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Script d&amp;#039;affichage de l&amp;#039;espace restant dans un DG==&lt;br /&gt;
&lt;br /&gt;
Voici un petit script qui permet d&amp;#039;afficher l&amp;#039;espace disque restant, utilisé, total et pourcentage utilisé, dans un DG.&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #&lt;br /&gt;
 # Pour tous les dg veritas existant, affiche l&amp;#039;espace disponible en Go&lt;br /&gt;
 # ainsi que l&amp;#039;espace utilise, l&amp;#039;espace total et le pourcentage d&amp;#039;utilisation.&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 LISTE_DG=$(vxdg -q list|awk &amp;#039;{print $1}&amp;#039; |sort |uniq)&lt;br /&gt;
 &lt;br /&gt;
 echo -e &amp;quot;Disk Group \t Free space \t Used space \t Total space \t Percent used&amp;quot;&lt;br /&gt;
 for i in ${LISTE_DG}&lt;br /&gt;
 do&lt;br /&gt;
         FREE=`echo $(vxdg -qg $i free |awk &amp;#039;{print $5}&amp;#039; |tr &amp;#039;\n&amp;#039; &amp;#039;+&amp;#039;) |sed &amp;quot;s/.*/(0+&amp;amp;/&amp;quot;| sed &amp;quot;s/+$/)\/2\/1024\/1024/&amp;quot;|bc`&lt;br /&gt;
         TEMP=`vxdisk -qg $i -o size list 2&amp;gt;/dev/null |awk &amp;#039;{print $2}&amp;#039; |tr &amp;#039;\n&amp;#039; &amp;#039;+&amp;#039;`&lt;br /&gt;
         USED=`echo &amp;quot;($TEMP&amp;quot; |sed &amp;quot;s/+$/)\/1024/g&amp;quot; |bc`&lt;br /&gt;
         TOTAL=`echo $(($FREE + $USED))`&lt;br /&gt;
         PERCENT_USED=`echo &amp;quot;scale=2 ; 100*$USED/$TOTAL&amp;quot;|bc`&lt;br /&gt;
         # l&amp;#039;ajout du &amp;quot;0+&amp;quot; est indispensable pour les DG qui n&amp;#039;ont plus d&amp;#039;espace libre, car ils n&amp;#039;apparaissent pas avec &amp;quot;vxfg free&amp;quot;&lt;br /&gt;
         echo -e &amp;quot;$i \t\t ${FREE} Go \t ${USED} Go \t ${TOTAL} Go \t ${PERCENT_USED}%&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
Exemple d&amp;#039;utilisation :&lt;br /&gt;
&lt;br /&gt;
 # /root/espace_dispo_sur_dg.sh&lt;br /&gt;
 Disk Group       Free space      Used space      Total space     Percent used&lt;br /&gt;
 bkpdg            359 Go          1400 Go         1759 Go         79.59%&lt;br /&gt;
 datadg           403 Go          1200 Go         1603 Go         74.85%&lt;br /&gt;
 zonedg           169 Go          200 Go          369 Go          54.20%&lt;br /&gt;
&lt;br /&gt;
Ca permet de voir très rapidement où on en est.&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Solaris_Volume_Manager_(SVM)&amp;diff=592</id>
		<title>Solaris Volume Manager (SVM)</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Solaris_Volume_Manager_(SVM)&amp;diff=592"/>
		<updated>2021-06-10T07:17:07Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Supprimer un meta-device */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:solaris]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Solaris Volume Manager&amp;quot; (SVM) est le gestionnaire de volumes natif de Solaris. Avant Solaris 10, il s’appelait &amp;quot;Solstice Disk Suite&amp;quot;. Il sait gérer à la fois les niveaux de raid et les volumes disques ; c&amp;#039;est donc l&amp;#039;équivalent sous linux des mdtools et de lvm réunis. Ça permet d&amp;#039;avoir tout dans un seul outil. SVM gère toutes ses fonctionnalités au niveau des slices (partitions) et pas au niveau du disque. Il est capable de faire du stripping (raid 0), du mirroring (raid 1), les deux combinés (0+1 et 1+0), du raid 5, de la concaténation (additionner les disques physiques pour n&amp;#039;en faire qu&amp;#039;un logique), gestion de hotspare, de pools de hotspares, les DiskSet (groupes de disques qu&amp;#039;on pourra débrancher d&amp;#039;un serveur pour les rebrancher sur un autre, en conservant ses caractéristiques). Le raid est également possible sur le disque système. SVM est également capable d&amp;#039;agrandir les volumes à chaud, mais la structure même d&amp;#039;UFS ne permet pas la réduction, même à froid. Le problème est exactement le même avec ZFS.&lt;br /&gt;
&lt;br /&gt;
SVM se comporte comme une surcouche aux systèmes de fichiers UFS. A l&amp;#039;installation de l&amp;#039;OS, on ne peut donc pas mettre en place SVM, mais après on va &amp;quot;encapsuler&amp;quot; les données dans SVM et les gérer avec SVM.&lt;br /&gt;
&lt;br /&gt;
Dans Solaris 9 et 10, SVM (ou Disk Suite) est installé par défaut avec le système. Dans Solaris 8 et précédents, il faut installer les packages SUNWmdr, SUNWmdu et SUNWmdx.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Les Replica Databases=&lt;br /&gt;
&lt;br /&gt;
SVM conserve sa structure dans des bases de données, qu&amp;#039;on appelle &amp;quot;Replica Databases&amp;quot;. Ces databases font 4Mo chacune et doivent être créées dans un slice dédié sur chaque disque ; on lui attribue traditionnellement le slice 7, qui sera de petite taille (une trentaine de Mo suffit). L&amp;#039;ensemble des disques partagés s&amp;#039;appelle un &amp;quot;diskset&amp;quot;. On a un maximum de 50 replica databases par diskset. Le principe est d&amp;#039;avoir un certain nombre de databases réparties sur chaque disque physique. Tant que le système peut accéder à au moins 50% des databases plus une, alors ça fonctionne. Sinon, il part en panic. Pendant le démarrage, les databases corrompues ou perdues peuvent être restaurées.&lt;br /&gt;
&lt;br /&gt;
Attention : les replica databases doivent obligatoirement se trouver sur des disques locaux et surtout pas sur un volume SAN. C&amp;#039;est dû au fait qu&amp;#039;elles sont vues très tôt dans le mécanisme de démarrage.&lt;br /&gt;
&lt;br /&gt;
Il est conseillé d&amp;#039;avoir au minimum 3 databases par disque lorsqu&amp;#039;on a 1 ou 2 disques, 2 databases si on a 3 ou 4 disques, et 1 database par disque pour 5 disques ou plus.&lt;br /&gt;
&lt;br /&gt;
Pour un maximum de sécurité au niveau redondance, il est conseillé d&amp;#039;avoir les databases sur des contrôleurs disques différents.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;En pratique :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Nous allons prendre pour exemple trois disques c0t0d0, c1t1d1 et c2t2d2. Les replica databases seront créées sur le slice 7. On suppose également que le système est actuellement installé sur c0t0d0 et qu&amp;#039;un petit slice 7 a été créé pour accueillir les databases.&lt;br /&gt;
&lt;br /&gt;
On va utiliser la commande &amp;quot;prtvtoc&amp;quot; pour récupérer la table des partitions du disque système, et l&amp;#039;appliquer sur les deux autres disques avec &amp;quot;fmthard&amp;quot;. Ainsi, on s&amp;#039;assure que les disques sont partitionnés à l&amp;#039;identique.&lt;br /&gt;
&lt;br /&gt;
 # prtvtoc /dev/rdsk/c0t0d0s2 | fmthard –s - /dev/rdsk/c1t1d1s2&lt;br /&gt;
 # prtvtoc /dev/rdsk/c0t0d0s2 | fmthard –s - /dev/rdsk/c2t2d2s2&lt;br /&gt;
&lt;br /&gt;
Maintenant on va créer les databases (3 par disque) :&lt;br /&gt;
&lt;br /&gt;
 # metadb –f –c 3 –a c0t0d0s7 c1t1d1s7 c2t2d2s7&lt;br /&gt;
&lt;br /&gt;
Les options :&lt;br /&gt;
&lt;br /&gt;
* -f : pour forcer la création initiale des databases&lt;br /&gt;
* -c 3 : nombe de databases par partition&lt;br /&gt;
* -a : pour ajouter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On peut visualiser les databases créées :&lt;br /&gt;
&lt;br /&gt;
 # metadb -i&lt;br /&gt;
  flags           first blk       block count&lt;br /&gt;
  a m  p  luo        16              8192            /dev/dsk/c0t0d0s7&lt;br /&gt;
  a    p  luo        8208            8192            /dev/dsk/c0t0d0s7&lt;br /&gt;
  a    p  luo        16400           8192            /dev/dsk/c0t0d0s7&lt;br /&gt;
  a    p  luo        16              8192            /dev/dsk/c1t1d1s7&lt;br /&gt;
  a    p  luo        8208            8192            /dev/dsk/c1t1d1s7&lt;br /&gt;
  a    p  luo        16400           8192            /dev/dsk/c1t1d1s7&lt;br /&gt;
  a    p  luo        16              8192            /dev/dsk/c2t2d2s7&lt;br /&gt;
  a    p  luo        8208            8192            /dev/dsk/c2t2d2s7&lt;br /&gt;
  a    p  luo        16400           8192            /dev/dsk/c2t2d2s7&lt;br /&gt;
 &lt;br /&gt;
  r - la réplique ne contient pas d&amp;#039;informations de transfert de périphérique&lt;br /&gt;
  o - réplique active avant la dernière modification de la configuration de la base de données du métapériphérique mddb&lt;br /&gt;
  u - la réplique est mise à jour&lt;br /&gt;
  l - le localisateur pour cette réplique a été lu avec succès&lt;br /&gt;
  c - la réplique se trouvait dans /etc/lvm/mddb.cf&lt;br /&gt;
  p - un patch a été appliqué à la réplique dans le noyau&lt;br /&gt;
  m - la réplique est maître : elle est sélectionnée comme réplique d&amp;#039;entrée&lt;br /&gt;
  W - la réplique contient des erreurs d&amp;#039;écriture de périphérique&lt;br /&gt;
  a - la réplique est active, des validations ont lieu dans cette réplique&lt;br /&gt;
  M - la réplique a rencontré des problèmes avec les blocs maîtres&lt;br /&gt;
  D - la réplique a rencontré des problèmes avec les blocs de données&lt;br /&gt;
  F - la réplique a rencontré des problèmes liés au format&lt;br /&gt;
  S - la réplique est trop petite pour contenir la base de données actuelle&lt;br /&gt;
  R - la réplique contenait des erreurs de lecture de périphérique&lt;br /&gt;
&lt;br /&gt;
La création ou l&amp;#039;ajout de databases va mettre à jour les fichiers de configuration. Ils diffèrent selon les versions de Solaris :&lt;br /&gt;
&lt;br /&gt;
* Solaris 10 : /kernel/drv/md.conf&lt;br /&gt;
* Solaris 9 : /etc/lvm/mddb.conf&lt;br /&gt;
* Solaris 8 : /etc/system + /etc/lvm/mddb.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour supprimer une database :&lt;br /&gt;
&lt;br /&gt;
 # metadb –d c2t2d2s7&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Création d&amp;#039;un volume (ou meta-device)=&lt;br /&gt;
&lt;br /&gt;
Sous SVM, les volumes logiques s&amp;#039;appellent également des meta-devices. Ils peuvent être de type RAID 0, RAID 1 ou RAID 5. SVM gère également des Hot Spare Pools et des Soft Partitions. Nous allons voir tout ça en détail.&lt;br /&gt;
&lt;br /&gt;
==Syntaxe générale==&lt;br /&gt;
&lt;br /&gt;
Pour créer un volume, on utilise la commande metainit suivie de plusieurs paramètres :&lt;br /&gt;
&lt;br /&gt;
 # metainit &amp;lt;nom_volume&amp;gt; &amp;lt;nb_bandes&amp;gt; &amp;lt;nb_partition_dans_la_bande&amp;gt; &amp;lt;partition&amp;gt; [&amp;lt;nb_partition_dans_la_bande_suivante&amp;gt; &amp;lt;partition&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
Cette syntaxe n&amp;#039;est pas très parlante, mais va devenir plus clair avec les exemples qui vont suivre. Il faut noter que le nom des volumes n&amp;#039;est pas tout à fait libre : on doit choisir un nom compris entre &amp;quot;d0&amp;quot; et &amp;quot;d8192&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Volume contaténé/strippé (RAID 0)==&lt;br /&gt;
&lt;br /&gt;
===Volume simple===&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 # metainit d39 1 1 c1t1d1s5&lt;br /&gt;
&lt;br /&gt;
On créé un volume qui s&amp;#039;appelle d39, composé d&amp;#039;une bande (strippe), elle-même composée d&amp;#039;une partition (c1t1d1s5).&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Volume concaténé===&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 # metainit d30 2 1 c1t1d1s6 1 c2t2d2s5&lt;br /&gt;
&lt;br /&gt;
On créé un volume qui s&amp;#039;appelle d30, composé de deux bandes (strippes). La première bande est composée d&amp;#039;une partition (c1t1d1s6) et la deuxième d&amp;#039;une partition (c2t2d2s5).&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Volume strippé===&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 # metainit d31 1 2 c1t1d1s0 c2t2d2s0 –i 64k&lt;br /&gt;
&lt;br /&gt;
On créé un volume qui s&amp;#039;appelle d31, composé d&amp;#039;une seule bande. Cette bande est composée de deux partitions (c1t1d1s0 et c2t2d2s0).&lt;br /&gt;
&lt;br /&gt;
On ajoute également une nouvelle notion (facultative) via l&amp;#039;option &amp;quot;-i 64k&amp;quot;. Cette option sert à préciser qu&amp;#039;on va utiliser un facteur d&amp;#039;entrelacement de 64ko.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Volume contcaténé / strippé===&lt;br /&gt;
&lt;br /&gt;
C&amp;#039;est simplement un volume à la fois concaténé et strippé, donc composé de plusieurs bandes, composées chacunes de plusieurs partitions.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Ajout d&amp;#039;un slice à un volume===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Attention :&amp;#039;&amp;#039;&amp;#039; on ne pourra pas le retirer, sauf avec perte des données, puisqu&amp;#039;on ne peut pas réduire UFS.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 metattach d15 c2d0s5&lt;br /&gt;
&lt;br /&gt;
la partition est donc agrandie de la taille de la nouvelle, mais pas le FileSystem.&lt;br /&gt;
&lt;br /&gt;
Pour agrandir le FS :&lt;br /&gt;
&lt;br /&gt;
 growfs [-M /point_de_montage ] /dev/md/rdsk/d15&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;option &amp;quot;&amp;#039;&amp;#039;&amp;#039;-M /point_de_montage&amp;#039;&amp;#039;&amp;#039;&amp;quot; sert uniquement si on agrandit à chaud une partition montée.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Utilisation de /etc/lvm/md.tab===&lt;br /&gt;
&lt;br /&gt;
Plutôt que de taper les commandes à la main, on peut également remplir le fichier &amp;#039;&amp;#039;&amp;#039;/etc/lvm/md.tab&amp;#039;&amp;#039;&amp;#039; avec des lignes du type &amp;#039;&amp;#039;&amp;#039;&amp;quot;d15 1 1 c1d0s5&amp;quot;&amp;#039;&amp;#039;&amp;#039; (sans les guillemets), et taper &amp;#039;&amp;#039;&amp;#039;&amp;quot;metainit d15&amp;quot;&amp;#039;&amp;#039;&amp;#039; dans le shell.&lt;br /&gt;
&lt;br /&gt;
Ce fichier ne sert que quand on lance metainit, mais il n&amp;#039;est pas lu au boot (ce sont les databases qui sont lues).&lt;br /&gt;
&lt;br /&gt;
Il est quand même intéressant de le remplir car il peut serveur d&amp;#039;aide mémoire.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;utilisation de ce fichier n&amp;#039;est pas limitée au raid 0, on peut s&amp;#039;en servir pour tous les niveau de raid.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Création du système de fichier===&lt;br /&gt;
&lt;br /&gt;
Jusque là, on a juste créé les volumes logiques, pas les filesystems. Voici comment faire.&lt;br /&gt;
&lt;br /&gt;
Création du filesystem sur le meta-device :&lt;br /&gt;
&lt;br /&gt;
 newfs /dev/md/rdsk/d15&lt;br /&gt;
&lt;br /&gt;
Dans /etc/vfstab on mettra :&lt;br /&gt;
&lt;br /&gt;
 #device to mount  #device to check  #montage  #FS  #ordre fsck  #mount at boot  #options&lt;br /&gt;
 /dev/md/dsk/d15   /dev/md/rdsk/d15  /montage  ufs  3            yes             logging&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Limitations===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ATTENTION&amp;#039;&amp;#039;&amp;#039; : il est interdit d&amp;#039;utiliser les volumes RAID 0 pour tout filesystem utilisé lors d&amp;#039;une installation ou upgrade, c&amp;#039;est-à-dire /, /usr, /var, /opt et les swap.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Volume mirroré (RAID 1)==&lt;br /&gt;
&lt;br /&gt;
On créé d&amp;#039;abord les éléments du miroir :&lt;br /&gt;
&lt;br /&gt;
 metainit d21 1 1 c3d0s0&lt;br /&gt;
 metainit d22 1 1 c4d0s0&lt;br /&gt;
&lt;br /&gt;
Puis on créé le miroir, d&amp;#039;abord avec un seul élément, comme ça on va conserver les données de cet élément (les données des éléments suivants seront perdues) :&lt;br /&gt;
&lt;br /&gt;
 metainit d20 -m d21&lt;br /&gt;
&lt;br /&gt;
Et enfin on rajoute l&amp;#039;autre patte :&lt;br /&gt;
&lt;br /&gt;
 metattach d20 d22&lt;br /&gt;
&lt;br /&gt;
Si on passe par /etc/lvm/md.tab, on met dans le fichier :&lt;br /&gt;
&lt;br /&gt;
 d21 1 1 c3d0s0&lt;br /&gt;
 d22 1 1 c4d0s0&lt;br /&gt;
 d20 -m d21&lt;br /&gt;
&lt;br /&gt;
On initialise avec :&lt;br /&gt;
&lt;br /&gt;
 metainit d21 d22 d20&lt;br /&gt;
&lt;br /&gt;
Puis on attache la deuxième patte pareil :&lt;br /&gt;
&lt;br /&gt;
 metattach d20 d22&lt;br /&gt;
&lt;br /&gt;
Quand on va créér le système de fichiers, on le fera sur d20.&lt;br /&gt;
&lt;br /&gt;
On peut également retirer une patte du miroir (par exemple pour faire une sauvegarde sans que les données bougent) :&lt;br /&gt;
&lt;br /&gt;
 metadetach d20 d21&lt;br /&gt;
&lt;br /&gt;
Puis on la remet :&lt;br /&gt;
&lt;br /&gt;
 metattach d20 d21&lt;br /&gt;
&lt;br /&gt;
Cette méthode a l&amp;#039;inconvénient de resynchroniser tout le disque quand on rattache, ce qui peut être long. Une autre possibilité est de mettre la patte &amp;quot;offline&amp;quot;, puis la remettre &amp;quot;online&amp;quot;. La synchro est alors optimisée et se fait seulement sur ce qui a bougé.&lt;br /&gt;
&lt;br /&gt;
Mettre la patte &amp;quot;offline&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 metaoffline d20 d21&lt;br /&gt;
&lt;br /&gt;
La remettre &amp;quot;online&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 metaonline d20 d21&lt;br /&gt;
&lt;br /&gt;
Panne dans un miroir : on ne peut le savoir que en consultant /var/adm/messages ou en tapant metastat (ou dans Solaris Management Console).&lt;br /&gt;
&lt;br /&gt;
Il faut alors :&lt;br /&gt;
* remplacer physiquement le disque deffectueux&lt;br /&gt;
* vérifier qu&amp;#039;il est bien vu avec format&lt;br /&gt;
* mettre à jour la référence du disque : &amp;quot;metadevadm -u c3d0&amp;quot;&lt;br /&gt;
* refaire le paritionnement (format ou prtvtoc+fmthard)&lt;br /&gt;
* identifier les databases à remplacer : &amp;quot;metadb -i&amp;quot;&lt;br /&gt;
* les recréer : &amp;quot;metadb -d c3d0s7&amp;quot;, puis &amp;quot;metadb -a c3d0s7&amp;quot;&lt;br /&gt;
* si les partitions déffectueuses faisaient parti d&amp;#039;un raid : &amp;quot;metareplace -e d20 c3d0s0&amp;quot;&lt;br /&gt;
* si les partitions étaient dans des Soft Partition, plutôt utiliser : &amp;quot;metarecover c3d0s0 -d -p&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Volume RAID 5==&lt;br /&gt;
&lt;br /&gt;
 metainit d50 -r c5d0s1 c6d0s1 c7d0s1 -i 128k&lt;br /&gt;
 newfs /dev/md/rdsk/d50&lt;br /&gt;
 mount -o logging /dev/md/dsk/d50 /point_de_montage&lt;br /&gt;
&lt;br /&gt;
Dans /etc/vfstab :&lt;br /&gt;
&lt;br /&gt;
 /dev/md/dsk/d50    /dev/md/rdsk/d50    /point_de_montage    ufs    3    yes    logging&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Création d&amp;#039;un hot spare pool==&lt;br /&gt;
&lt;br /&gt;
Un hotspare pool est un groupe de partitions de réserve, au cas ou des partitions utilisées seraient cassées. Le nom qu&amp;#039;on lui donne est obligatoirement de la forme hspxxx, xxx étant des chiffres :&lt;br /&gt;
&lt;br /&gt;
Création :&lt;br /&gt;
&lt;br /&gt;
 metainit hsp000 c8d0s0&lt;br /&gt;
&lt;br /&gt;
Association à un meta-device pendant sa création :&lt;br /&gt;
&lt;br /&gt;
 metainit d50 -h hsp000 ...&lt;br /&gt;
&lt;br /&gt;
Association après coup :&lt;br /&gt;
&lt;br /&gt;
 metaparam -h hsp000 d50&lt;br /&gt;
&lt;br /&gt;
Retirer le hot spare pool :&lt;br /&gt;
&lt;br /&gt;
 metaparam -h none d50&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Informations sur les meta-devices==&lt;br /&gt;
&lt;br /&gt;
 metastat [d15]&lt;br /&gt;
&lt;br /&gt;
* sans options : version longue&lt;br /&gt;
* -c : plus lisible&lt;br /&gt;
* -p : plus compact (format utilisable dans /etc/lvm/md.tab)&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 # metastat d0&lt;br /&gt;
 d0: Miroir&lt;br /&gt;
  Sous-miroir 0: d10&lt;br /&gt;
  Etat : Ok           &lt;br /&gt;
  Sous-miroir 1: d20&lt;br /&gt;
  Etat : Ok           &lt;br /&gt;
  Accès : 1&lt;br /&gt;
  Option de lecture : roundrobin (par défaut)&lt;br /&gt;
  Option d&amp;#039;écriture : parallel (par défaut)&lt;br /&gt;
  Taille : 41950000 blocs (20 GB)&lt;br /&gt;
 &lt;br /&gt;
 d10: Sous-miroir de d0&lt;br /&gt;
  Etat : Ok           &lt;br /&gt;
  Taille : 41950000 blocs (20 GB)&lt;br /&gt;
  Bande 0 :&lt;br /&gt;
  Périphérique     Bloc de débu Base          Etat Redis Tranche dynamique&lt;br /&gt;
  c0t0d0s0                0     Non             Ok   Oui &lt;br /&gt;
 &lt;br /&gt;
 d20: Sous-miroir de d0&lt;br /&gt;
  Etat : Ok           &lt;br /&gt;
  Taille : 41950000 blocs (20 GB)&lt;br /&gt;
  Bande 0 :&lt;br /&gt;
  Périphérique     Bloc de débu Base          Etat Redis Tranche dynamique&lt;br /&gt;
 c0t1d0s0                0     Non             Ok   Oui &lt;br /&gt;
 &lt;br /&gt;
 Device Relocation Information:&lt;br /&gt;
 Device   Reloc  Device ID&lt;br /&gt;
 c0t0d0   Oui    id1,sd@n5000c5001d64d883&lt;br /&gt;
 c0t1d0   Oui    id1,sd@n5000c5001d5f8b8f&lt;br /&gt;
 #&lt;br /&gt;
 #&lt;br /&gt;
 # metastat -c d0&lt;br /&gt;
 d0               m   20GB d10 d20&lt;br /&gt;
  d10          s   20GB c0t0d0s0&lt;br /&gt;
  d20          s   20GB c0t1d0s0&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Supprimer un meta-device==&lt;br /&gt;
&lt;br /&gt;
Pour supprimer un metadevice simple :&lt;br /&gt;
&lt;br /&gt;
 metaclear d15&lt;br /&gt;
&lt;br /&gt;
Pour supprimer un metadevice et sa sous-arborescence :&lt;br /&gt;
&lt;br /&gt;
 metaclear -r d0&lt;br /&gt;
&lt;br /&gt;
==Les soft partitions==&lt;br /&gt;
&lt;br /&gt;
Les soft partitions sont des partitions &amp;quot;virtuelles&amp;quot; crées à l&amp;#039;intérieur d&amp;#039;une partition physique ou d&amp;#039;un metadevice. Ça permet d&amp;#039;avoir autant de partitions (et donc de filesystems) qu&amp;#039;on veut à l&amp;#039;interieur d&amp;#039;un seul disque ou d&amp;#039;une seule partition physique.&lt;br /&gt;
&lt;br /&gt;
Une soft partition étant une partition à part entière (même si elle est virtuelle), il faut préciser sa taille à la création. Il faut également préciser la partition sur laquelle on va créer la soft partition, pour cela on utilise l&amp;#039;option –p.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Exemples :&lt;br /&gt;
&lt;br /&gt;
 metainit d51 -p d50 1g&lt;br /&gt;
 metainit d52 –p c1t2d3s4 –b 204800&lt;br /&gt;
&lt;br /&gt;
Dans le premier exemple, on créé une soft partition &amp;quot;d51&amp;quot; à l&amp;#039;intérieur d&amp;#039;un volume d50, d&amp;#039;une taille de 1Go.&lt;br /&gt;
&lt;br /&gt;
Dans le deuxième exemple, on créé une soft partition &amp;quot;d52&amp;quot; à l&amp;#039;intieur de la partition c1t2d3s4 d&amp;#039;une taille de 204800 blocs, soit 100Mo pour une taille de bloc de 512 octets.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Mirrorer le disque système=&lt;br /&gt;
&lt;br /&gt;
Cette page décrit la mise en place de l&amp;#039;encapsulation sous SVM du disque système du serveur UIRGS48, et de sa mise en miroir.&lt;br /&gt;
&lt;br /&gt;
Solaris a été installé sur le disque c0t0d0 et le disque qui est destiné à être son miroir est c0t1d0.&lt;br /&gt;
&lt;br /&gt;
Le principe est de :&lt;br /&gt;
&lt;br /&gt;
* créer un slice pour accueillir les databases de SVM&lt;br /&gt;
* dupliquer la table des partitions sur le disque miroir&lt;br /&gt;
* créer les databases et les metadevices&lt;br /&gt;
* raccorder le premier disque au miroir et modifier les fichiers de conf pour préparer au reboot (/etc/vfstab)&lt;br /&gt;
* rebooter et vérifier que le miroir est actif&lt;br /&gt;
* raccorder le deuxième disque au miroir&lt;br /&gt;
* modifier l&amp;#039;OBP pour pouvoir booter sur n&amp;#039;importe lequel des deux disques&lt;br /&gt;
* tester que le boot fonctionne sur les deux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==État avant l&amp;#039;encapsulation==&lt;br /&gt;
&lt;br /&gt;
Voici un extrait des infos obtenues avec &amp;quot;format&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 AVAILABLE DISK SELECTIONS:&lt;br /&gt;
  0. c0t0d0 &amp;lt;SUN146G cyl 14087 alt 2 hd 24 sec 848&amp;gt;&lt;br /&gt;
  /pci@0,600000/pci@0/pci@8/pci@0/scsi@1/sd@0,0&lt;br /&gt;
  1. c0t1d0 &amp;lt;SUN146G cyl 14087 alt 2 hd 24 sec 848&amp;gt;  Solaris&lt;br /&gt;
  /pci@0,600000/pci@0/pci@8/pci@0/scsi@1/sd@1,0&lt;br /&gt;
 &lt;br /&gt;
 Disk 0 :&lt;br /&gt;
 &lt;br /&gt;
 Current partition table (original):&lt;br /&gt;
 Total disk cylinders available: 14087 + 2 (reserved cylinders)&lt;br /&gt;
 &lt;br /&gt;
 Part      Tag    Flag     Cylinders         Size            Blocks&lt;br /&gt;
  0       root    wm       0 -  2060       20.00GB    (2061/0/0)   41945472&lt;br /&gt;
  1       swap    wu    2061 -  5358       32.01GB    (3298/0/0)   67120896&lt;br /&gt;
  2     backup    wm       0 - 14086      136.71GB    (14087/0/0) 286698624&lt;br /&gt;
  3        var    wm    5359 -  8656       32.01GB    (3298/0/0)   67120896&lt;br /&gt;
  4 unassigned    wm       0                0         (0/0/0)             0&lt;br /&gt;
  5 unassigned    wm       0                0         (0/0/0)             0&lt;br /&gt;
  6 unassigned    wm       0                0         (0/0/0)             0&lt;br /&gt;
  7 unassigned    wu       0                0         (0/0/0)             0&lt;br /&gt;
 &lt;br /&gt;
 Disk 1 :&lt;br /&gt;
 &lt;br /&gt;
 Volume:  Solaris&lt;br /&gt;
 Current partition table (original):&lt;br /&gt;
 Total disk cylinders available: 14087 + 2 (reserved cylinders)&lt;br /&gt;
 &lt;br /&gt;
 Part      Tag    Flag     Cylinders         Size            Blocks&lt;br /&gt;
  0       root    wm       0 -    12      129.19MB    (13/0/0)       264576&lt;br /&gt;
  1       swap    wu      13 -    25      129.19MB    (13/0/0)       264576&lt;br /&gt;
  2     backup    wu       0 - 14086      136.71GB    (14087/0/0) 286698624&lt;br /&gt;
  3 unassigned    wm       0                0         (0/0/0)             0&lt;br /&gt;
  4 unassigned    wm       0                0         (0/0/0)             0&lt;br /&gt;
  5 unassigned    wm       0                0         (0/0/0)             0&lt;br /&gt;
  6        usr    wm      26 - 14086      136.46GB    (14061/0/0) 286169472&lt;br /&gt;
  7 unassigned    wm       0                0         (0/0/0)             0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les partitions montées apparaissent encore en tant que &amp;quot;/dev/dsk/c0t0d0s0&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 # df -h|grep -v dg&lt;br /&gt;
 Filesystem             size   used  avail capacity  Mounted on&lt;br /&gt;
 /dev/dsk/c0t0d0s0       20G   5.0G    15G    26%    /&lt;br /&gt;
 /devices                 0K     0K     0K     0%    /devices&lt;br /&gt;
 ctfs                     0K     0K     0K     0%    /system/contract&lt;br /&gt;
 proc                     0K     0K     0K     0%    /proc&lt;br /&gt;
 mnttab                   0K     0K     0K     0%    /etc/mnttab&lt;br /&gt;
 swap                    46G   1.7M    46G     1%    /etc/svc/volatile&lt;br /&gt;
 objfs                    0K     0K     0K     0%    /system/object&lt;br /&gt;
 sharefs                  0K     0K     0K     0%    /etc/dfs/sharetab&lt;br /&gt;
 fd                       0K     0K     0K     0%    /dev/fd&lt;br /&gt;
 /dev/dsk/c0t0d0s3       32G   7.9G    23G    26%    /var&lt;br /&gt;
 swap                    46G   213M    46G     1%    /tmp&lt;br /&gt;
 swap                    46G   248K    46G     1%    /var/run&lt;br /&gt;
 swap                    46G     0K    46G     0%    /dev/vx/dmp&lt;br /&gt;
 swap                    46G     0K    46G     0%    /dev/vx/rdmp&lt;br /&gt;
 /dev/odm                 0K     0K     0K     0%    /dev/odm&lt;br /&gt;
 /platform/sun4u-us3/lib/libc_psr/libc_psr_hwcap2.so.1    20G   5.0G    15G    26%    /platform/sun4u-us3/lib /libc_psr.so.1&lt;br /&gt;
 /platform/sun4u-us3/lib/sparcv9/libc_psr/libc_psr_hwcap2.so.1    20G   5.0G    15G    26%    /platform/sun4u-us3/lib/sparcv9 /libc_psr.so.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Encapsulation du disque système et mise en place du miroir==&lt;br /&gt;
&lt;br /&gt;
Il faut créer un slice n°7 de 20 Mo pour accueillir les metadb (4Mo par database, et 3 databases en tout par disque), à l&amp;#039;aide de format. Une fois que c&amp;#039;est fait, voici à quoi ressemble le partitionnement :&lt;br /&gt;
&lt;br /&gt;
 Format disk 0 :&lt;br /&gt;
 Current partition table (original):&lt;br /&gt;
 Total disk cylinders available: 14087 + 2 (reserved cylinders)&lt;br /&gt;
 &lt;br /&gt;
 Part      Tag    Flag     Cylinders         Size            Blocks&lt;br /&gt;
  0       root    wm       0 -  2060       20.00GB    (2061/0/0)   41945472&lt;br /&gt;
  1       swap    wu    2061 -  5358       32.01GB    (3298/0/0)   67120896&lt;br /&gt;
  2     backup    wm       0 - 14086      136.71GB    (14087/0/0) 286698624&lt;br /&gt;
  3        var    wm    5359 -  8656       32.01GB    (3298/0/0)   67120896&lt;br /&gt;
  4 unassigned    wm       0                0         (0/0/0)             0&lt;br /&gt;
  5 unassigned    wm       0                0         (0/0/0)             0&lt;br /&gt;
  6 unassigned    wm       0                0         (0/0/0)             0&lt;br /&gt;
  7 unassigned    wm    8657 -  8659       29.81MB    (3/0/0)         61056&lt;br /&gt;
&lt;br /&gt;
On copie la table des partitions sur le futur miroir :&lt;br /&gt;
&lt;br /&gt;
 # prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s - /dev/rdsk/c0t1d0s2&lt;br /&gt;
&lt;br /&gt;
On vérifie avec un format du disk 1 que c&amp;#039;est ok :&lt;br /&gt;
&lt;br /&gt;
 Volume:  Solaris&lt;br /&gt;
 Current partition table (original):&lt;br /&gt;
 Total disk cylinders available: 14087 + 2 (reserved cylinders)&lt;br /&gt;
 &lt;br /&gt;
 Part      Tag    Flag     Cylinders         Size            Blocks&lt;br /&gt;
  0       root    wm       0 -  2060       20.00GB    (2061/0/0)   41945472&lt;br /&gt;
  1       swap    wu    2061 -  5358       32.01GB    (3298/0/0)   67120896&lt;br /&gt;
  2     backup    wm       0 - 14086      136.71GB    (14087/0/0) 286698624&lt;br /&gt;
  3        var    wm    5359 -  8656       32.01GB    (3298/0/0)   67120896&lt;br /&gt;
  4 unassigned    wu       0                0         (0/0/0)             0&lt;br /&gt;
  5 unassigned    wu       0                0         (0/0/0)             0&lt;br /&gt;
  6 unassigned    wu       0                0         (0/0/0)             0&lt;br /&gt;
  7 unassigned    wm    8657 -  8659       29.81MB    (3/0/0)         61056&lt;br /&gt;
&lt;br /&gt;
On sauvegarde les fichiers /etc/vfstab et /etc/system, car ils vont être altérés par la suite.&lt;br /&gt;
&lt;br /&gt;
 # cp /etc/vfstab /etc/vfstab.20100414&lt;br /&gt;
 # cp /etc/system /etc/system.20100414&lt;br /&gt;
&lt;br /&gt;
On défini à l&amp;#039;avance la structure du futur miroir en ajoutant les lignes suivantes dans /etc/lvm/md.tab&lt;br /&gt;
&lt;br /&gt;
 # Partition /&lt;br /&gt;
 d10 1 1 c0t0d0s0&lt;br /&gt;
 d20 1 1 c0t1d0s0&lt;br /&gt;
 d0 -m d10&lt;br /&gt;
 # Partition de swap&lt;br /&gt;
 d11 1 1 c0t0d0s1&lt;br /&gt;
 d21 1 1 c0t1d0s1&lt;br /&gt;
 d1 -m d11&lt;br /&gt;
 # Partition /var&lt;br /&gt;
 d13 1 1 c0t0d0s3&lt;br /&gt;
 d23 1 1 c0t1d0s3&lt;br /&gt;
 d3 -m d13&lt;br /&gt;
&lt;br /&gt;
Les databases ne sont pas encore créés. On le vérifie ainsi :&lt;br /&gt;
&lt;br /&gt;
 # metadb -i&lt;br /&gt;
 &lt;br /&gt;
 metadb: uirgs48: there are no existing databases&lt;br /&gt;
&lt;br /&gt;
Création des databases&lt;br /&gt;
&lt;br /&gt;
 # metadb -f -c 3 -a c0t0d0s7 c0t1d0s7&lt;br /&gt;
&lt;br /&gt;
Vérification :&lt;br /&gt;
&lt;br /&gt;
 # metadb -i&lt;br /&gt;
  flags           first blk       block count&lt;br /&gt;
  a        u         16              8192            /dev/dsk/c0t0d0s7&lt;br /&gt;
  a        u         8208            8192            /dev/dsk/c0t0d0s7&lt;br /&gt;
  a        u         16400           8192            /dev/dsk/c0t0d0s7&lt;br /&gt;
  a        u         16              8192            /dev/dsk/c0t1d0s7&lt;br /&gt;
  a        u         8208            8192            /dev/dsk/c0t1d0s7&lt;br /&gt;
  a        u         16400           8192            /dev/dsk/c0t1d0s7&lt;br /&gt;
  r - replica does not have device relocation information&lt;br /&gt;
  o - replica active prior to last mddb configuration change&lt;br /&gt;
  u - replica is up to date&lt;br /&gt;
  l - locator for this replica was read successfully&lt;br /&gt;
  c - replica&amp;#039;s location was in /etc/lvm/mddb.cf&lt;br /&gt;
  p - replica&amp;#039;s location was patched in kernel&lt;br /&gt;
  m - replica is master, this is replica selected as input&lt;br /&gt;
  W - replica has device write errors&lt;br /&gt;
  a - replica is active, commits are occurring to this replica&lt;br /&gt;
  M - replica had problem with master blocks&lt;br /&gt;
  D - replica had problem with data blocks&lt;br /&gt;
  F - replica had format problems&lt;br /&gt;
  S - replica is too small to hold current data base&lt;br /&gt;
  R - replica had device read errors&lt;br /&gt;
&lt;br /&gt;
Création des metadevices&lt;br /&gt;
&lt;br /&gt;
 # metainit -a -f&lt;br /&gt;
 d10: Concat/Stripe is setup&lt;br /&gt;
 d20: Concat/Stripe is setup&lt;br /&gt;
 d0: Mirror is setup&lt;br /&gt;
 d11: Concat/Stripe is setup&lt;br /&gt;
 d21: Concat/Stripe is setup&lt;br /&gt;
 d1: Mirror is setup&lt;br /&gt;
 d13: Concat/Stripe is setup&lt;br /&gt;
 d23: Concat/Stripe is setup&lt;br /&gt;
 d3: Mirror is setup&lt;br /&gt;
&lt;br /&gt;
Modifier le vfstab (avec metaroot pour /, et manuellement pour swap et /var):&lt;br /&gt;
&lt;br /&gt;
 # metaroot d0&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; modifie /etc/vfstab mais uniquement pour &amp;quot;/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour le reste, il faut éditer manuellement /etc/vfstab pour obtenir le résultat suivant :&lt;br /&gt;
&lt;br /&gt;
 # vi /etc/vfstab&lt;br /&gt;
 [...]&lt;br /&gt;
 /dev/md/dsk/d0  /dev/md/rdsk/d0 /       ufs     1       no      -&lt;br /&gt;
 /dev/md/dsk/d1  -       -       swap    -       no      -&lt;br /&gt;
 /dev/md/dsk/d3  /dev/md/rdsk/d3 /var    ufs     1       no      -&lt;br /&gt;
 [...]&lt;br /&gt;
&lt;br /&gt;
Rebooter en lockant les filesystems :&lt;br /&gt;
&lt;br /&gt;
 # lockfs -fa&lt;br /&gt;
 # init 6&lt;br /&gt;
&lt;br /&gt;
On vérifie qu&amp;#039;on a bien booté sur le raid :&lt;br /&gt;
&lt;br /&gt;
 # df -h |grep -v dg&lt;br /&gt;
 Filesystem             size   used  avail capacity  Mounted on&lt;br /&gt;
 /dev/md/dsk/d0          20G   5.0G    15G    26%    /&lt;br /&gt;
 /dev/md/dsk/d3          32G   7.9G    23G    26%    /var&lt;br /&gt;
 [...]&lt;br /&gt;
 &lt;br /&gt;
 # swap -l&lt;br /&gt;
 swapfile             dev  swaplo blocks   free&lt;br /&gt;
 /dev/md/dsk/d1      85,1      16 67120880 67120880&lt;br /&gt;
&lt;br /&gt;
Modifier le périphérique de dump.&lt;br /&gt;
&lt;br /&gt;
* avant :&lt;br /&gt;
&lt;br /&gt;
 # dumpadm&lt;br /&gt;
  Dump content: kernel pages&lt;br /&gt;
  Dump device: /dev/dsk/c0t0d0s1 (dedicated)&lt;br /&gt;
 Savecore directory: /var/crash/uirgs48&lt;br /&gt;
 Savecore enabled: yes&lt;br /&gt;
&lt;br /&gt;
* on modifie :&lt;br /&gt;
&lt;br /&gt;
 # dumpadm -d swap&lt;br /&gt;
  Dump content: kernel pages&lt;br /&gt;
  Dump device: /dev/md/dsk/d1 (swap)&lt;br /&gt;
 Savecore directory: /var/crash/uirgs48&lt;br /&gt;
 Savecore enabled: yes&lt;br /&gt;
&lt;br /&gt;
* après :&lt;br /&gt;
&lt;br /&gt;
 # dumpadm&lt;br /&gt;
  Dump content: kernel pages&lt;br /&gt;
  Dump device: /dev/md/dsk/d1 (swap)&lt;br /&gt;
 Savecore directory: /var/crash/uirgs48&lt;br /&gt;
 Savecore enabled: yes&lt;br /&gt;
&lt;br /&gt;
On attache les partitions du deuxième disque au mirroirs :&lt;br /&gt;
&lt;br /&gt;
 # metattach d0 d20&lt;br /&gt;
 # metattach d1 d21&lt;br /&gt;
 # metattach d3 d23&lt;br /&gt;
&lt;br /&gt;
On peut vérifier qu&amp;#039;ils sont bien attachés correctement :&lt;br /&gt;
&lt;br /&gt;
 # metastat |grep -i mirror&lt;br /&gt;
 d3: Mirror&lt;br /&gt;
  Submirror 0: d13&lt;br /&gt;
  Submirror 1: d23&lt;br /&gt;
 d13: Submirror of d3&lt;br /&gt;
 d23: Submirror of d3&lt;br /&gt;
 d1: Mirror&lt;br /&gt;
  Submirror 0: d11&lt;br /&gt;
  Submirror 1: d21&lt;br /&gt;
 d11: Submirror of d1&lt;br /&gt;
 d21: Submirror of d1&lt;br /&gt;
 d0: Mirror&lt;br /&gt;
  Submirror 0: d10&lt;br /&gt;
  Submirror 1: d20&lt;br /&gt;
 d10: Submirror of d0&lt;br /&gt;
 d20: Submirror of d0&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;attachement est immediat, mais la copie des fichiers sur le mirroir prend du temps. On peut contrôler ou on en est avec :&lt;br /&gt;
&lt;br /&gt;
 # metastat |grep -i sync&lt;br /&gt;
  State: Resyncing&lt;br /&gt;
  Resync in progress: 2 % done&lt;br /&gt;
  State: Resyncing&lt;br /&gt;
  State: Resyncing&lt;br /&gt;
  Resync in progress: 2 % done&lt;br /&gt;
  State: Resyncing&lt;br /&gt;
  State: Resyncing&lt;br /&gt;
  Resync in progress: 5 % done&lt;br /&gt;
  State: Resyncing&lt;br /&gt;
&lt;br /&gt;
Ajouter une ligne dans /etc/system pour pouvoir booter en cas de panne disque :&lt;br /&gt;
&lt;br /&gt;
 # echo &amp;quot;set md:mirrored_root_flag=1&amp;quot; &amp;gt;&amp;gt; /etc/system&lt;br /&gt;
&lt;br /&gt;
Configuration de l&amp;#039;OBP pour pouvoir booter sur n&amp;#039;importe lequel des deux disques (nommés &amp;quot;dsk10&amp;quot; pour le disque principal et &amp;quot;mir10&amp;quot; pour le mirroir). On peut le faire depuis Solaris, s&amp;#039;il est démarré, ou depuis l&amp;#039;OBP.&lt;br /&gt;
&lt;br /&gt;
* depuis Solaris&lt;br /&gt;
&lt;br /&gt;
 # eeprom &amp;quot;nvramrc=devalias dsk10 /pci@0,600000/pci@0/pci@8/pci@0/scsi@1/disk@0,0:a mir10 /pci@0,600000/pci@0/pci@8/pci@0/scsi@1/disk@1,0:a&amp;quot;&lt;br /&gt;
 # eeprom boot-device=&amp;quot;dsk10 mir10&amp;quot;&lt;br /&gt;
 # eeprom &amp;quot;use-nvramrc?=true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* ou depuis l&amp;#039;OBP&lt;br /&gt;
&lt;br /&gt;
 ok&amp;gt; nvalias dsk10 /pci@0,600000/pci@0/pci@8/pci@0/scsi@1/disk@0,0:a&lt;br /&gt;
 ok&amp;gt; mir10 /pci@0,600000/pci@0/pci@8/pci@0/scsi@1/disk@1,0:a&lt;br /&gt;
 ok&amp;gt; setenv boot-device dsk10 mir10&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut vérifier qu&amp;#039;on peut booter avec les deux disques.&lt;br /&gt;
Rebooter avec &amp;quot;init 0&amp;quot;.&lt;br /&gt;
Se connecter sur la console du domaine.&lt;br /&gt;
Booter avec &amp;quot;boot mir10&amp;quot;, puis recommencer avec &amp;quot;boot dsk10&amp;quot;.&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Zones_-_Solaris&amp;diff=591</id>
		<title>Zones - Solaris</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Zones_-_Solaris&amp;diff=591"/>
		<updated>2021-05-12T08:13:55Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Création du fichier de configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:solaris]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
Les zones sont une solution de virtualisation intégré à Solaris. Elles sont à mi-chemin entre un chroot et un serveur virtuel. C&amp;#039;est à dire qu&amp;#039;on a un système d&amp;#039;exploitation hôte (appelé zone globale) dans lequel on fait tourner des process chrootés (donc qui ne voient pas les autres process de la zone globale ou des autres zones) qui sont en quelque sorte des &amp;quot;super process&amp;quot;, car ils font tourner un système d&amp;#039;exploitation complet. Une partie des bibliothèques système sont communes entre les zones et la zone globale. C&amp;#039;est exactement le même principe que les jails BSD.&lt;br /&gt;
&lt;br /&gt;
On peut créer des zones solaris 10 sparse (le type par défaut) ou big. Une zone sparse partage avec la zone globale les répertoires /usr, /lib, /sbin et /platform. Une big a une arborescence entièrement indépendante. La sparse va donc consommer moins d&amp;#039;espace disque, et lorsqu&amp;#039;on va patcher le système de la gloable, ça va patcher également les zones sparse. Ҫa peut-être soit un avantage soit un inconvénient. Il faut décider dès la création si on veut une sparse ou une big, car on ne peut pas changer après.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;avantage de cette façon de virtualiser est qu&amp;#039;il n&amp;#039;y a pas besoin d&amp;#039;émuler la partie matérielle, gourmande en ressources. D&amp;#039;ailleurs, une zone qui ne fait pas tourner de process, ne consomme qu&amp;#039;une quarantaine de Mo.&lt;br /&gt;
L&amp;#039;inconvénient est qu&amp;#039;il faut adapter les systèmes d&amp;#039;exploitation pour qu&amp;#039;ils puissent tourner en tant que zone. Dans les premières versions de Solaris 10, on ne pouvait faire tourner que des zones solaris 10. Plus tard, on a introduit le concept de &amp;quot;branded zones&amp;quot;, qui permettent de faire tourner d&amp;#039;autres systèmes d&amp;#039;exploitation en les adaptant. Depuis solaris 10 8/07, il existe des branded zones Solaris 8 et 9 (uniquement sur Sparc). Il existe aussi des branded zones opensolaris (et des solaris 10 pour opensolaris) et des linux. Les branded zones linux ne peuvent faire tourner que des Redhat et CentOS 3.5 à 3.8, donc un noyau 2.4.&lt;br /&gt;
&lt;br /&gt;
Les zones sont gérées par deux daemons : zoneadmd pour la supervision et zsched qui est l&amp;#039;ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Les zones et le NFS=&lt;br /&gt;
&lt;br /&gt;
Il faut noter qu&amp;#039;une zone ne peut pas être serveur NFS, il n&amp;#039;y a que la zone globale qui peut jouer ce rôle. Un astuce peut donc consister à monter le serveur NFS sur la globale et à partager un répertoire qui appartient à la zone (car la globale accède librement à tous les filesystems des zones via le zonepath – voir chapitre &amp;quot;&amp;#039;&amp;#039;Installation/configuration d&amp;#039;une zone Solaris 10)&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par contre, n&amp;#039;importe quelle zone peut sans problème être client NFS.&lt;br /&gt;
&lt;br /&gt;
Mise à jour : il paraît, mais je n&amp;#039;ai pas eu l&amp;#039;occasion de vérifier, qu&amp;#039;une zone peut être serveur NFS si elle a une interface réseau dédiée.&lt;br /&gt;
&lt;br /&gt;
=Installation/configuration d&amp;#039;une zone Solaris 10=&lt;br /&gt;
&lt;br /&gt;
==Prérequis==&lt;br /&gt;
&lt;br /&gt;
Avant de créer une zone, il est nécessaire d&amp;#039;avoir prévu :&lt;br /&gt;
&lt;br /&gt;
* un répertoire pour mettre son système (par exemple /zones/zone1), appelé &amp;quot;zonepath&amp;quot;. Ce répertoire doit obligatoirement avec les droits 700, sans quoi l&amp;#039;installation échouera.&lt;br /&gt;
* une adresse ip&lt;br /&gt;
* l&amp;#039;interface réseau physique sur laquelle on va connecter cette ip (par exemple bge0)&lt;br /&gt;
* éventuellement les filesystems à créer, sinon on peut les rajouter après&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création du fichier de configuration==&lt;br /&gt;
&lt;br /&gt;
Pour créer/configurer une zone, on utilise l&amp;#039;outil zonecfg qui est un outil en mode texte avec un prompt particulier.&lt;br /&gt;
L&amp;#039;exemple ci-dessous montre assez clairement comment utiliser zonecfg :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  create&lt;br /&gt;
  set zonepath=/zones/zone1&lt;br /&gt;
  set autoboot=true&lt;br /&gt;
  add net&lt;br /&gt;
  :set physical=bge0&lt;br /&gt;
  :set address=10.36.210.56/22&lt;br /&gt;
  :end&lt;br /&gt;
  add fs&lt;br /&gt;
  :set dir=/data&lt;br /&gt;
  :set type=vxfs&lt;br /&gt;
  :set raw=/dev/vx/rdsk/datadg/datalv&lt;br /&gt;
  :set special=/dev/vx/dsk/datadg/datalv&lt;br /&gt;
  :end&lt;br /&gt;
  add fs&lt;br /&gt;
  :set dir=/data2&lt;br /&gt;
  :set type=zfs&lt;br /&gt;
  :set special=zone1/data2&lt;br /&gt;
  :end&lt;br /&gt;
  verify&lt;br /&gt;
  commit&lt;br /&gt;
  exit&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
&lt;br /&gt;
* on peut ajouter autant de filesystems (FS) qu&amp;#039;on veut ; on peut également n&amp;#039;en mettre aucun.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Attention :&amp;#039;&amp;#039;&amp;#039; pour les ZFS, pour qu&amp;#039;ils soient &amp;quot;montables&amp;quot; par la zone, il faut que sur la globale on ait &amp;#039;&amp;#039;&amp;#039;&amp;quot;mountpoint=legacy&amp;quot;&amp;#039;&amp;#039;&amp;#039; sur la globale.&lt;br /&gt;
* pour créer une zone big, il suffit de faire &amp;quot;create –b&amp;quot; au lieu de &amp;quot;create&amp;quot;.&lt;br /&gt;
* verify et commit sont facultatifs. Verify sert à vérifier qu&amp;#039;il n&amp;#039;y a pas d&amp;#039;erreur ; il est conseillé de le faire. Commit sert à forcer l&amp;#039;enregistrement ; il est plutôt déconseillé de s&amp;#039;en servir, car il va enregistrer même s&amp;#039;il y a des erreurs. Exit va enregistrer et quitter.&lt;br /&gt;
&lt;br /&gt;
En quittant, zonecfg créé un fichier /etc/zones/zone1.xml. Il est fortement déconseillé de modifier ce fichier directement, sans passer par zonecfg, sauf si on sait parfaitement ce qu&amp;#039;on fait.&lt;br /&gt;
&lt;br /&gt;
==Installation de la zone==&lt;br /&gt;
&lt;br /&gt;
Maintenant que le fichier de configuration est créé, on peut passer à l&amp;#039;installation de la zone (la création de tous les fichiers).&lt;br /&gt;
&lt;br /&gt;
Attention : tous les filesystems déclarés à l&amp;#039;étape précédente avec &amp;quot;add fs&amp;quot; doivent être créés avant de passer à l&amp;#039;installation !&lt;br /&gt;
&lt;br /&gt;
Pour installer la zone, une seule commande suffit :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone1 install&lt;br /&gt;
&lt;br /&gt;
Cette étape dure une dizaine de minutes (en fonction de la puissance du serveur). Ҫa va être un peu plus long pour une zone big.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Booter et paramétrer la zone==&lt;br /&gt;
&lt;br /&gt;
A ce stade, la zone est créée, mais est arrêtée. On va donc la démarrer. Au premier démarrage, on arrive dans l&amp;#039;utilitaire de configuration classique de Solaris, dans lequel on va choisir le type de clavier, la langue, le fuseau horaire, etc…&lt;br /&gt;
&lt;br /&gt;
Pour booter la zone :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone1 boot&lt;br /&gt;
&lt;br /&gt;
Pour se connecter dessus en mode console :&lt;br /&gt;
&lt;br /&gt;
 # zlogin –C zone1&lt;br /&gt;
&lt;br /&gt;
Pour quitter le mode console : taper &amp;quot;~.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Notre zone &amp;quot;zone1&amp;quot; est maintenant accessible comme n&amp;#039;importe quel serveur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Installation/configuration de zones Solaris 8 et 9=&lt;br /&gt;
&lt;br /&gt;
==Prérequis==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;installation de containers Solaris 8 et 9 nécessite l&amp;#039;ajout de packages supplémentaires :&lt;br /&gt;
&lt;br /&gt;
* SUNWs8brandk, SUNWs8brandr et SUNWs8brandu pour Solaris 8&lt;br /&gt;
* SUNWs9brandk, SUNWs9brandr et SUNWs9brandu pour Solaris 9&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Création d&amp;#039;une flash archive==&lt;br /&gt;
&lt;br /&gt;
Une zone Solaris 8 ou 9 s&amp;#039;installe depuis une archive flash (fichier .flar). On peut trouver des archives de ce type sur le web, mais la plupart du temps, ces zones sont destinées à remplacer des serveurs physiques existants. On va donc créer une image flash depuis un serveur existant.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple de création d&amp;#039;image flash (à lancer depuis le serveur à sauvegarder) :&lt;br /&gt;
&lt;br /&gt;
 # flarcreate –S –c –n sol8_204 –x /u01 –x /u02 –x /backup /backup/sol8_204.flar&lt;br /&gt;
&lt;br /&gt;
Explications :&lt;br /&gt;
&lt;br /&gt;
* -S : évite de verifier l&amp;#039;espace dispo sur le disque de destination, et écrit l&amp;#039;image directement sur le disque (passe par la RAM sinon)&lt;br /&gt;
* -c : compresse l&amp;#039;image&lt;br /&gt;
* -n : label&lt;br /&gt;
* -x : filesystems à ne pas inclure. Attention : une image flash intègre par défaut l&amp;#039;ensemble des filesystems locaux et distants, il faut donc bien penser à exclure (ou préalablement démonter) les montages NFS et autres lecteurs DVD.&lt;br /&gt;
* à la fin de la commande, on met le nom du fichier de destination&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Création du fichier de configuration==&lt;br /&gt;
&lt;br /&gt;
La création du fichier de configuration se fait également avec zonecfg.&lt;br /&gt;
&lt;br /&gt;
A noter, quelques petites différences :&lt;br /&gt;
&lt;br /&gt;
* lors du create, il faut taper respectivement pour des Solaris 8 et 9 :&lt;br /&gt;
&lt;br /&gt;
 create –t SUNWsolaris8&lt;br /&gt;
 create –t SUNWsolaris9&lt;br /&gt;
&lt;br /&gt;
* on peut ajouter les attributs suivants (utiles pour la migration d&amp;#039;un serveur existant, principalement pour des questions de licences :&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; add attr&lt;br /&gt;
  set name=hostid&lt;br /&gt;
  set type=string&lt;br /&gt;
  set value=&amp;lt;hostid du serveur à migrer&amp;gt;&lt;br /&gt;
  end&lt;br /&gt;
 &amp;gt; addattr&lt;br /&gt;
  set name=machine&lt;br /&gt;
  set type=string&lt;br /&gt;
  set value=sun4u&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ATTENTION :&amp;#039;&amp;#039;&amp;#039; depuis les dernières versions de Solaris, cette méthode ne fonctionne plus pour le hostid. Il faut juste faire &amp;quot;&amp;#039;&amp;#039;&amp;#039;set hostid=&amp;lt;valeur&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;quot;. C&amp;#039;est encore plus simple.&lt;br /&gt;
&lt;br /&gt;
==Installation de la zone==&lt;br /&gt;
&lt;br /&gt;
On va maintenant procéder à l&amp;#039;installation, en utilisant l&amp;#039;archive flash, qu&amp;#039;on aura déposé au préalable sur la zone globale (par exemple /var/tmp/sol8_204.flar)&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone2 install –u –a /var/tmp/sol8_204.flar&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;option &amp;quot;-u&amp;quot; fait un unconfigure pour forcer la reconfiguration au boot.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Booter et paramétrer la zone==&lt;br /&gt;
&lt;br /&gt;
Ici, c&amp;#039;est exactement comme les zones Solaris 10.&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone2 boot&lt;br /&gt;
 # zlogin –C zone2&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Gestion des zones=&lt;br /&gt;
&lt;br /&gt;
==Lister==&lt;br /&gt;
&lt;br /&gt;
Pour voir la liste des zones, on utilise &amp;quot;zoneadm list&amp;quot;, de préférence avec les options &amp;quot;-cv&amp;quot; pour plus de détails.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 root@uirgs37 # zoneadm list&lt;br /&gt;
 global&lt;br /&gt;
 uirgs39&lt;br /&gt;
 uirgs40&lt;br /&gt;
 uirgs41&lt;br /&gt;
 uirgs42&lt;br /&gt;
 uirgs43&lt;br /&gt;
 uirgs44&lt;br /&gt;
 uirgs45&lt;br /&gt;
 uirgs46&lt;br /&gt;
 uirgs85&lt;br /&gt;
 uirgs38&lt;br /&gt;
 root@uirgs37 # zoneadm list -cv&lt;br /&gt;
  ID NAME             STATUS     PATH                           BRAND    IP    &lt;br /&gt;
  0 global           running    /                              native   shared&lt;br /&gt;
  12 uirgs39          running    /zones/uirgs39                 native   shared&lt;br /&gt;
  13 uirgs40          running    /zones/uirgs40                 native   shared&lt;br /&gt;
  14 uirgs41          running    /zones/uirgs41                 solaris8 shared&lt;br /&gt;
  15 uirgs42          running    /zones/uirgs42                 solaris9 shared&lt;br /&gt;
  16 uirgs43          running    /zones/uirgs43                 solaris9 shared&lt;br /&gt;
  17 uirgs44          running    /zones/uirgs44                 native   shared&lt;br /&gt;
  18 uirgs45          running    /zones/uirgs45                 native   shared&lt;br /&gt;
  19 uirgs46          running    /zones/uirgs46                 native   shared&lt;br /&gt;
  20 uirgs85          running    /zones/uirgs85                 solaris8 shared&lt;br /&gt;
  21 uirgs38          running    /zones/uirgs38                 solaris8 shared&lt;br /&gt;
 root@uirgs37 #&lt;br /&gt;
&lt;br /&gt;
On voit que la globale apparait comme une zone dans la liste.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;option &amp;quot;-cv&amp;quot; permet également de voir l&amp;#039;état d&amp;#039;une zone. Voici les principaux états que peut avoir une zone :&lt;br /&gt;
&lt;br /&gt;
* configured : configurée, mais pas encore installée&lt;br /&gt;
* installed : installée et arrêtée&lt;br /&gt;
* running : elle fonctionne&lt;br /&gt;
&lt;br /&gt;
==Connexion==&lt;br /&gt;
&lt;br /&gt;
Pour se connecter à une zone, on utilise zlogin, suivi du nom de la zone.&lt;br /&gt;
&lt;br /&gt;
 # zlogin zone1&lt;br /&gt;
&lt;br /&gt;
Pour se connecter comme si on était sur la console (permet par exemple de voir les messages au boot) :&lt;br /&gt;
&lt;br /&gt;
 # zlogin -C zone1&lt;br /&gt;
&lt;br /&gt;
Pour quitter on fait ~. en tapant rapidement. Il est parfois nécessaire d&amp;#039;appuyer plusieurs fois sur &amp;quot;.&amp;quot;. Il ne peut y avoir qu&amp;#039;une seule personne connectée en mode console.&lt;br /&gt;
&lt;br /&gt;
==Arrêt/reboot==&lt;br /&gt;
&lt;br /&gt;
Pour arrêter, démarrer ou rebooter une zone, on utilise :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone1 halt&lt;br /&gt;
 # zoneadm –z zone1 boot&lt;br /&gt;
 # zoneadm –z zone1 reboot&lt;br /&gt;
&lt;br /&gt;
==Forcer l&amp;#039;arrêt==&lt;br /&gt;
&lt;br /&gt;
Il arrive parfois qu&amp;#039;une zone refuse de s&amp;#039;arrêter et reste dans l&amp;#039;état &amp;quot;down&amp;quot; ou &amp;quot;shutting down&amp;quot;. Il est difficile de déterminer quel est ou quels sont les process qui refusent de mourir. Dans ce cas, la commande suivante peut nous sauver :&lt;br /&gt;
&lt;br /&gt;
 # pkill -9 -z zonename&lt;br /&gt;
&lt;br /&gt;
Si même cette commande ne fonctionne pas, on est mal barré ! Il est probable qu&amp;#039;on soit obligé de rebooter la globale.&lt;br /&gt;
&lt;br /&gt;
A noter que parfois il est nécessaire de relancer un &amp;quot;zoneadm -z zone halt&amp;quot; après le pkill.&lt;br /&gt;
&lt;br /&gt;
=Supprimer une zone=&lt;br /&gt;
&lt;br /&gt;
Pour supprimer une zone, il faut d&amp;#039;abort la passer à l&amp;#039;état &amp;quot;configured&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone3 uninstall&lt;br /&gt;
&lt;br /&gt;
Puis on la supprime définitivement :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone3 delete&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Cloner une zone=&lt;br /&gt;
&lt;br /&gt;
Le clonage permet de dupliquer une zone existant sans avoir à refaire une archive flash. Le clone ne concerne que la partie système, c&amp;#039;est à dire qu&amp;#039;une fois le clone terminé, il va falloir recopier à la main les filesystems additionnels.&lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple qui suit, on va cloner la zone &amp;quot;zoneA&amp;quot; vers &amp;quot;zoneB&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* exporter la configuration de la zone zoneA&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zoneA export –f /tmp/zoneB.zonecfg&lt;br /&gt;
&lt;br /&gt;
* éditer le fichier /tmp/zoneB.zonecfg et modifier tout ce qu&amp;#039;il faut adapter (adresse ip, zonepath, etc)&lt;br /&gt;
* créer les systèmes de fichiers qui seront utilisés par la zone zoneB&lt;br /&gt;
* modifier les droits du zonepath du futur clone&lt;br /&gt;
&lt;br /&gt;
 # chmod 700 /zones/zoneB&lt;br /&gt;
&lt;br /&gt;
* créer la nouvelle zone&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zoneB –f /tmp/zoneB.zonecfg&lt;br /&gt;
&lt;br /&gt;
* arrêter zoneA (indispensable pour que la copie des fichiers soit cohérente)&lt;br /&gt;
&lt;br /&gt;
 # zlogin zoneA init 0&lt;br /&gt;
&lt;br /&gt;
* cloner les contenus&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zoneB clone zoneA&lt;br /&gt;
&lt;br /&gt;
* redémarrer zoneA&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zoneA boot&lt;br /&gt;
&lt;br /&gt;
* on peut maintenant démarrer et configurer la nouvelle zone&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zoneB boot&lt;br /&gt;
 # zlogin –C zoneB&lt;br /&gt;
&lt;br /&gt;
Dans certains cas, il peut être nécessaire de forcer la nouvelle zone à passer de l&amp;#039;état &amp;quot;configured&amp;quot; à &amp;quot;installed&amp;quot;. On le fait avec la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zoneB attach -F&lt;br /&gt;
&lt;br /&gt;
=Flying zones=&lt;br /&gt;
&lt;br /&gt;
==Présentation==&lt;br /&gt;
&lt;br /&gt;
Flying zone est le terme commercial employé par Sun/Oracle pour décrire la procédure qui consiste à migrer une zone d&amp;#039;une globale vers une autre. En réalité, tout se fait manuellement, rien n&amp;#039;est automatique, c&amp;#039;est 100 fois moins bien que vmware, mais le terme &amp;quot;Flying zone&amp;quot;, ça pète !&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir migrer les données de la zone, il faut soit copier les données de la globale de départ vers celle d&amp;#039;arrivée, soit avoir ces données accessibles par les deux serveurs (par exemple un SAN).&lt;br /&gt;
&lt;br /&gt;
Nous allons ici prendre l&amp;#039;exemple de la zone &amp;#039;&amp;#039;&amp;#039;zone1&amp;#039;&amp;#039;&amp;#039; qui se trouve sur la globale &amp;#039;&amp;#039;&amp;#039;zglobale1&amp;#039;&amp;#039;&amp;#039; et qu&amp;#039;on va migrer sur la &amp;#039;&amp;#039;&amp;#039;zglobale2&amp;#039;&amp;#039;&amp;#039;. Les données de la zone sont dans deux zpools &amp;quot;zp_zone1&amp;quot; et &amp;quot;zp_zone1_data&amp;quot;. Les zpools sont sur un SAN connecté aux deux globales. Ils sont actuellement montés sur la première ; ils sont visibles de la deuxième, mais pas importés (on ne peut pas importer des zpools sur deux serveurs à la fois).&lt;br /&gt;
&lt;br /&gt;
==Procédure==&lt;br /&gt;
&lt;br /&gt;
La procédure se fait en 7 étapes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Sur la première globale :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* éteindre la zone :&lt;br /&gt;
&lt;br /&gt;
 zglobale1# zlogin zone1 init 5&lt;br /&gt;
&lt;br /&gt;
* detacher la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale1# zoneadm -z zone1 detach&lt;br /&gt;
&lt;br /&gt;
* exporter les zpools &lt;br /&gt;
&lt;br /&gt;
 zglobale1# zpool export zp_zone1&lt;br /&gt;
 zglobale1# zpool export zp_zone1_data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Sur la deuxième globale :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* importer les zpools &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zpool import zp_zone1&lt;br /&gt;
 zglobale2# zpool import zp_zone1_data&lt;br /&gt;
&lt;br /&gt;
* récuperer la configuration de la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# scp zglobale1:/etc/zones/zone1.xml /etc/zones/&lt;br /&gt;
&lt;br /&gt;
* attacher la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zoneadm -z zone1 attach&lt;br /&gt;
&lt;br /&gt;
* démarrer la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zoneadm -z zone1 boot&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Remarque :&amp;#039;&amp;#039;&amp;#039; il se peut que l&amp;#039;attachement de la zone ne fonctionne pas la première fois, même en forçant avec l&amp;#039;option &amp;quot;-F&amp;quot;. Dans ce cas, il faut ajouter une ligne dans le fichier &amp;#039;&amp;#039;&amp;#039;/etc/zones/index&amp;#039;&amp;#039;&amp;#039;, puis refaire le attach :&lt;br /&gt;
&lt;br /&gt;
 zglobale2# echo &amp;#039;zone1:configured:/zones/zone1:&amp;#039; &amp;gt;&amp;gt; /etc/zones/index&lt;br /&gt;
 zglobale2# zglobale2# zoneadm -z zone1 attach&lt;br /&gt;
&lt;br /&gt;
==Retour arrière==&lt;br /&gt;
&lt;br /&gt;
On fait l&amp;#039;inverse, tout simplement...&lt;br /&gt;
&lt;br /&gt;
* éteindre la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zlogin zone1 init 5&lt;br /&gt;
&lt;br /&gt;
* détacher la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zoneadm -z zone1 detach&lt;br /&gt;
&lt;br /&gt;
* exporter les zpools &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zpool export zp_zone1&lt;br /&gt;
 zglobale2# zpool export zp_zone1_data&lt;br /&gt;
&lt;br /&gt;
* importer les zpools &lt;br /&gt;
&lt;br /&gt;
 zglobale1# zpool import zp_zone1&lt;br /&gt;
 zglobale1# zpool import zp_zone1_data&lt;br /&gt;
&lt;br /&gt;
* récuperer la configuration de la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# scp /etc/zones/zone1.xml zglobale1:/etc/zones/&lt;br /&gt;
&lt;br /&gt;
* attacher la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale1# zoneadm -z zone1 attach&lt;br /&gt;
&lt;br /&gt;
* démarrer la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale1# zoneadm -z zone1 boot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Gestion des ressources=&lt;br /&gt;
&lt;br /&gt;
==Présentation==&lt;br /&gt;
&lt;br /&gt;
Par défaut, les ressources RAM, swap et CPU sont communes à toutes les zones, y compris la globale. C&amp;#039;est-à-dire qu&amp;#039;une zone qui a un problème peut s&amp;#039;attribuer toutes les ressources, écrouler toutes les autres zones et même planter la globale. Il existe des moyens de limiter les ressources de chaque zone pour empêcher ça.&lt;br /&gt;
&lt;br /&gt;
Toutes ces manipulations se font depuis la zone globale.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Limitation de la RAM==&lt;br /&gt;
&lt;br /&gt;
Pour voir la RAM actuellement attribuée aux zones :&lt;br /&gt;
&lt;br /&gt;
 # rcapstat -z&lt;br /&gt;
  id zone            nproc    vm   rss   cap    at avgat    pg avgpg&lt;br /&gt;
  1 uirgs50             -  833M  921M 8192M    0K    0K    0K    0K&lt;br /&gt;
  2 uirgs52             -  712M  767M 8192M    0K    0K    0K    0K&lt;br /&gt;
  3 uirgs49             - 2789M 2816M 8192M    0K    0K    0K    0K&lt;br /&gt;
 […]&lt;br /&gt;
&lt;br /&gt;
Ҫa va afficher les valeurs pour toutes les zones. Il faut regarder la colonne &amp;quot;&amp;#039;&amp;#039;&amp;#039;cap&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour modifier la valeur à chaud (attention, la modification sera perdue au prochain reboot) :&lt;br /&gt;
&lt;br /&gt;
 # rcapadm –z zone1 –m 4g&lt;br /&gt;
&lt;br /&gt;
Il faut attendre quelques secondes pour que ce soit pris en compte.&lt;br /&gt;
&lt;br /&gt;
Si on obtient un message du genre &amp;#039;&amp;#039;&amp;#039;&amp;quot;rcapadm: resource caps not configured&amp;quot;&amp;#039;&amp;#039;&amp;#039;, alors c&amp;#039;est qu&amp;#039;il faut &amp;quot;enabler&amp;quot; les memory caps avec la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 # rcapadm -E&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut retaper la commande rcapadm ci-dessus.&lt;br /&gt;
&lt;br /&gt;
Pour limiter la RAM dans la configuration (pour qu&amp;#039;elle soit permanente à chaque reboot), suivre l&amp;#039;exemple suivant :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  &amp;gt; add capped-memory&lt;br /&gt;
  &amp;gt; set physical=4g&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
La limitation ne sera effective qu&amp;#039;au prochain boot de la zone.&lt;br /&gt;
&lt;br /&gt;
Si le paramètre &amp;quot;&amp;#039;&amp;#039;&amp;#039;capped-memory&amp;#039;&amp;#039;&amp;#039;&amp;quot; existe déjà, on peut le modifier de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  &amp;gt; select capped-memory&lt;br /&gt;
  &amp;gt; set physical=4g&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
==Limitation du swap==&lt;br /&gt;
&lt;br /&gt;
Pour voir la quantité de swap actuellement allouée :&lt;br /&gt;
&lt;br /&gt;
 # prctl -n zone.max-swap -i zone zoneB&lt;br /&gt;
 zone: 21: zoneB&lt;br /&gt;
 NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT&lt;br /&gt;
 zone.max-swap&lt;br /&gt;
  privileged      4,00GB      -   deny                                 -&lt;br /&gt;
  system          16,0EB    max   deny                                 -&lt;br /&gt;
&lt;br /&gt;
Il faut lire la ligne &amp;quot;&amp;#039;&amp;#039;&amp;#039;privileged&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour modifier la valeur à chaud (attention, la modification sera perdue au prochain reboot) :&lt;br /&gt;
&lt;br /&gt;
 # prctl -r -n zone.max-swap -i zone -v 6g ma_zone&lt;br /&gt;
&lt;br /&gt;
Attention, cette commande ne fonctionne que pour modifier une valeur existante. Si aucune limitation de swap n&amp;#039;a jamais été appliquée sur cette zone, utiliser la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 # prctl -n zone.max-swap -v 6g -t privileged -e deny -s -i zone ma_zone&lt;br /&gt;
&lt;br /&gt;
Re-attention, si vous venez de taper la commande ci-dessus alors que vous aviez déjà une limitation, alors vous n&amp;#039;avez pas modifié la limitation, vous en avez ajouté une deuxième ! Du coup, le système applique la plus restrictive. Pour réparer cette bêtise (c&amp;#039;est du vécu...), annulez la dernière commande avec :&lt;br /&gt;
&lt;br /&gt;
 # prctl -n zone.max-swap -i zone -t privileged -x ma_zone&lt;br /&gt;
&lt;br /&gt;
Pour limiter le swap dans la configuration (pour qu&amp;#039;il soit permanent à chaque reboot), suivre l&amp;#039;exemple suivant :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg -z zone1&lt;br /&gt;
  &amp;gt; add capped-memory&lt;br /&gt;
  &amp;gt; set swap=4g&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
La limitation ne sera effective qu&amp;#039;au prochain boot de la zone.&lt;br /&gt;
&lt;br /&gt;
Si le paramètre &amp;quot;&amp;#039;&amp;#039;&amp;#039;capped-memory&amp;#039;&amp;#039;&amp;#039;&amp;quot; existe déjà, on peut le modifier de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg -z zone1&lt;br /&gt;
  &amp;gt; select capped-memory&lt;br /&gt;
  &amp;gt; set swap=4g&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
==Limitation du CPU==&lt;br /&gt;
&lt;br /&gt;
Il y a trois méthodes possibles pour limiter l&amp;#039;utilisation CPU :&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;le Fair Share Scheduler (FSS)&amp;#039;&amp;#039;&amp;#039; : on attribue une part minimale de CPU à une zone&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;les Ressource Pools&amp;#039;&amp;#039;&amp;#039; : dédie exclusivement des CPUs à une zone&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;les CPU caps&amp;#039;&amp;#039;&amp;#039; : alloue statiquement des pourcentages de CPU à une zone&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Le Fair Share Scheduler (FSS)===&lt;br /&gt;
&lt;br /&gt;
On alloue un certain nombre de parts de CPU à une zone. Il n&amp;#039;y a pas de nombre de parts prédéfini à partager. Le principe est que plus une zone a de parts, plus elle aura de temps CPU attribué. Par exemple, une zone qui a 20 parts aura deux fois plus de temps CPU qu&amp;#039;une zone à 10 parts. Peu importe le nombre total de parts, il ne représente rien de physique. Donc en fait, on attribue une priorité à chaque zone, et cette priorité ne sert que en cas de conflit. C&amp;#039;est à dire que si tous les cpus sont à 100%, les priorités s&amp;#039;appliquent, mais si les zones les plus prioritaires ne consomment pas de cpu, alors la totalité des cpus physiques peut être utilisé par une zone de petite priorité. C&amp;#039;est donc la manière la plus souple de gérer l&amp;#039;attribution cpu et celle que je recommande.&lt;br /&gt;
&lt;br /&gt;
Par défaut, une zone possède une part.&lt;br /&gt;
&lt;br /&gt;
Mise en œuvre :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  &amp;gt; set cpu-shares=20&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
Remarque : on peut utiliser d&amp;#039;autres schedulers que le FSS, mais c&amp;#039;est celui qui est recommandé par Sun/Oracle.&lt;br /&gt;
&lt;br /&gt;
===Les Ressource Pools===&lt;br /&gt;
&lt;br /&gt;
On attribue exclusivement des CPUs à une zone.&lt;br /&gt;
&lt;br /&gt;
Pour &amp;quot;donner&amp;quot; 3 cpus à la zone zone1  :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  &amp;gt; add dedicated-cpu&lt;br /&gt;
  &amp;gt; set ncpus=3&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;utilisation des ressource pool peut être intéressante en cas d&amp;#039;utilisation de logiciels dont la licence est fonction du nombre de processeurs.&lt;br /&gt;
&lt;br /&gt;
===Les CPU caps===&lt;br /&gt;
&lt;br /&gt;
Les CPUs caps définissent un pourcentage d&amp;#039;utilisation maximum d&amp;#039;un CPU pour une zone. Par exemple, une valeur de 3 signifie qu&amp;#039;une zone pourra utiliser au maximum 3 CPUs ; une valeur de 0.37 signifie qu&amp;#039;elle ne pourra utiliser que 37% d&amp;#039;un CPU.&lt;br /&gt;
&lt;br /&gt;
Mise en œuvre :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  &amp;gt; add capped-cpu&lt;br /&gt;
  &amp;gt; set ncpus=0.37&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
Pour changer la valeur à chaud :&lt;br /&gt;
&lt;br /&gt;
 prctl -r -n zone.cpu-cap -i zone -v 37 zone1&lt;br /&gt;
&lt;br /&gt;
A noter que pour avoir 37% d&amp;#039;un cpu, il faut mettre 0.37 dans zonecfg, alors qu&amp;#039;avec prctl il faut mettre 37.&lt;br /&gt;
&lt;br /&gt;
==Monitoring==&lt;br /&gt;
&lt;br /&gt;
Les zones étant des process de la zone globale, il est difficile de distinguer la part de ressources utilisée par une zone.&lt;br /&gt;
&lt;br /&gt;
On trouve quand même quelques commandes capable de donner des informations fiables :&lt;br /&gt;
&lt;br /&gt;
* prstat –Z : pour afficher la quantité de mémoire et le pourcentage de CPU utilisés par zone&lt;br /&gt;
&lt;br /&gt;
 # prstat -Z&lt;br /&gt;
  PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP       &lt;br /&gt;
  17147 1303     1184M 1171M sleep   59    0  10:31:35 2,5% oracle/258&lt;br /&gt;
  17137 1303     1184M 1166M sleep   39    0  11:12:27 2,5% oracle/258&lt;br /&gt;
  17144 1303     1184M 1171M cpu10   19    0  12:33:59 2,5% oracle/258&lt;br /&gt;
 […]&lt;br /&gt;
  1069 root     6752K 3048K sleep   59    0   0:00:13 0,0% top/1&lt;br /&gt;
  9511 4109       46M   20M sleep   47    4   0:15:55 0,0% LINT/1&lt;br /&gt;
 ZONEID    NPROC  SWAP   RSS MEMORY      TIME  CPU ZONE                        &lt;br /&gt;
  20       73 1394M 1417M   4,3%  69:11:11  11% uirgs85                     &lt;br /&gt;
  12      129 3466M 3407M    10%  20:46:52 1,7% uirgs39                     &lt;br /&gt;
  0       75  222M  228M   0,7%  39:42:54 0,9% global                      &lt;br /&gt;
  21       86 2887M 2911M   8,9%  23:52:49 0,6% uirgs38                     &lt;br /&gt;
  17       58 2417M 2490M   7,6%   1:57:15 0,0% uirgs44                     &lt;br /&gt;
  19       76 1403M 1462M   4,5%   1:35:22 0,0% uirgs46                     &lt;br /&gt;
  13       45  703M  761M   2,3%   1:16:57 0,0% uirgs40                     &lt;br /&gt;
  18       69  857M  931M   2,8%   1:44:56 0,0% uirgs45                     &lt;br /&gt;
  14       46  351M  155M   0,5%   2:09:13 0,0% uirgs41                     &lt;br /&gt;
  16       46 3194M 3209M   9,8%   8:46:48 0,0% uirgs43                     &lt;br /&gt;
  15       29   18M   19M   0,1%   0:12:19 0,0% uirgs42                     &lt;br /&gt;
 &lt;br /&gt;
 Total: 732 processes, 7586 lwps, load averages: 5,23, 5,53, 5,50&lt;br /&gt;
&lt;br /&gt;
* prctl : pour afficher les paramètres actuels d&amp;#039;une zone&lt;br /&gt;
&lt;br /&gt;
 # prctl -i zone uirgs69&lt;br /&gt;
 zone: 21: uirgs69&lt;br /&gt;
 NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT&lt;br /&gt;
 zone.max-swap&lt;br /&gt;
  privileged      8,00GB      -   deny                                 -&lt;br /&gt;
  system          16,0EB    max   deny                                 -&lt;br /&gt;
 zone.max-locked-memory&lt;br /&gt;
  system          16,0EB    max   deny                                 -&lt;br /&gt;
 zone.max-shm-memory&lt;br /&gt;
  system          16,0EB    max   deny                                 -&lt;br /&gt;
 zone.max-shm-ids&lt;br /&gt;
  system          16,8M     max   deny                                 -&lt;br /&gt;
 zone.max-sem-ids&lt;br /&gt;
  system          16,8M     max   deny                                 -&lt;br /&gt;
 zone.max-msg-ids&lt;br /&gt;
  system          16,8M     max   deny                                 -&lt;br /&gt;
 zone.max-lwps&lt;br /&gt;
  system          2,15G     max   deny                                 -&lt;br /&gt;
 zone.cpu-cap&lt;br /&gt;
  system          4,29G     inf   deny                                 -&lt;br /&gt;
 zone.cpu-shares&lt;br /&gt;
  privileged          1       -   none                                 -&lt;br /&gt;
  system          65,5K     max   none                                 -&lt;br /&gt;
&lt;br /&gt;
* pour voir la consommation cpu en temps réel, et la valeur du cappage, on peut utiliser kstat. Par contre, la valeur retournée est affichée avec l&amp;#039;id de la zone, pas son nom. Il faudra donc faire la correspondance. Exemple :&lt;br /&gt;
&lt;br /&gt;
 kstat -p &amp;#039;caps::/^cpucaps_zone/:&amp;#039; |egrep &amp;quot;:usage|:value&amp;quot;&lt;br /&gt;
 caps:1:cpucaps_zone_1:usage	114&lt;br /&gt;
 caps:1:cpucaps_zone_1:value	770&lt;br /&gt;
 caps:3:cpucaps_zone_3:usage	5&lt;br /&gt;
 caps:3:cpucaps_zone_3:value	400&lt;br /&gt;
 caps:26:cpucaps_zone_26:usage	1&lt;br /&gt;
 caps:26:cpucaps_zone_26:value	50&lt;br /&gt;
 caps:34:cpucaps_zone_34:usage	5&lt;br /&gt;
 caps:34:cpucaps_zone_34:value	50&lt;br /&gt;
 caps:36:cpucaps_zone_36:usage	146&lt;br /&gt;
 caps:36:cpucaps_zone_36:value	800&lt;br /&gt;
 caps:42:cpucaps_zone_42:usage	3&lt;br /&gt;
 caps:42:cpucaps_zone_42:value	80&lt;br /&gt;
&lt;br /&gt;
A noter que &amp;quot;value 770&amp;quot; correspond à un &amp;quot;ncpu 7.7&amp;quot;. &amp;quot;zone_26&amp;quot; correspond à la zone dont l&amp;#039;id est 26 (visible avec &amp;quot;zoneadm list -cv&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* il y a également les utilitaires habituels vmstat, iostat, mpstat et sar qui fonctionnent à l&amp;#039;intérieur de zones, mais il faut être très méfiant avec leur résultat : certaines informations concernent uniquement la zone, d&amp;#039;autres concernent le serveur (la zone globale).&lt;br /&gt;
&lt;br /&gt;
=Automatiser/scripter la configuration des zones=&lt;br /&gt;
&lt;br /&gt;
Il est possible de scripter la configuration des zones, plutôt que d&amp;#039;aller systématiquement dans le shell interractif de zonecfg. Ceci est particulièrement utile pour configurer un grand nombre de zones.&lt;br /&gt;
&lt;br /&gt;
* Première méthode : zonecfg sur une seule ligne&lt;br /&gt;
&lt;br /&gt;
On peut passer tous les paramètres désirés à zonecfg pour que tout tienne sur une seule ligne. Voici un exemple :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone2 &amp;#039;add capped-memory ; set swap=4g ; set physical=4g; end&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Ainsi, on peut facilement faire un script avec une ou quelques lignes par zone.&lt;br /&gt;
&lt;br /&gt;
* Deuxième méthode : créer un fichier de configuration et l&amp;#039;injecter dans zonecfg (principe utilisé pour les clones)&lt;br /&gt;
&lt;br /&gt;
D&amp;#039;abord, on créé un fichier de configuration. Par exemple :&lt;br /&gt;
&lt;br /&gt;
 # vi zoneC.conf&lt;br /&gt;
 create&lt;br /&gt;
 set zonepath=/zones/zoneC&lt;br /&gt;
 set autoboot=true&lt;br /&gt;
 set ip-type=shared&lt;br /&gt;
 add inherit-pkg-dir&lt;br /&gt;
 set dir=/lib&lt;br /&gt;
 end&lt;br /&gt;
 add inherit-pkg-dir&lt;br /&gt;
 set dir=/platform&lt;br /&gt;
 end&lt;br /&gt;
 add inherit-pkg-dir&lt;br /&gt;
 set dir=/sbin&lt;br /&gt;
 end&lt;br /&gt;
 add inherit-pkg-dir&lt;br /&gt;
 set dir=/usr&lt;br /&gt;
 end&lt;br /&gt;
 add fs&lt;br /&gt;
 set dir=/opt&lt;br /&gt;
 set special=/dev/vx/dsk/datadg/zoneC-opt&lt;br /&gt;
 set raw=/dev/vx/rdsk/datadg/zoneC-opt&lt;br /&gt;
 set type=vxfs&lt;br /&gt;
 end&lt;br /&gt;
 add net&lt;br /&gt;
 set address=10.36.209.207/22&lt;br /&gt;
 set physical=bge0&lt;br /&gt;
 end&lt;br /&gt;
 add rctl&lt;br /&gt;
 set name=zone.max-swap&lt;br /&gt;
 add value (priv=privileged,limit=8589934592,action=deny)&lt;br /&gt;
 end&lt;br /&gt;
 add capped-memory&lt;br /&gt;
 set physical=8G&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
Ensuite on insère le tout dans la conf de zoneC :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zoneC –f zoneC.conf&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Apt&amp;diff=590</id>
		<title>Apt</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Apt&amp;diff=590"/>
		<updated>2021-05-11T09:31:48Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Principales commandes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
&lt;br /&gt;
Note : je ne fais ici qu&amp;#039;une brève présentation d&amp;#039;apt-get, avec les commandes qui servent le plus souvent. Pour avoir un cours complet, allez voir les liens dans le chapitre &amp;quot;Plus d&amp;#039;infos&amp;quot; en bas de cet article.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
Le gestionnaire de paquets par défaut de debian et ses dérivés, est dpkg. Apt est une surcouche de dpkg, qui automatise et simplifie de nombreuses commandes dpkg, notamment en gérant tout seul les dépendances. Apt est une suite d&amp;#039;outils, dont le principal est apt-get, qui sert à l&amp;#039;installation et la désinstallation des packages, et à la mise à jour du système.&lt;br /&gt;
&lt;br /&gt;
Les packages pour debian ont l&amp;#039;extention &amp;quot;.deb&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour ceux qui n&amp;#039;aiment pas la ligne de commande, il existe &amp;quot;synaptic&amp;quot; qui est un excellent gestionnaire de packages graphique, qui s&amp;#039;appuie sur apt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Dépôts=&lt;br /&gt;
&lt;br /&gt;
Pour installer un package, ou mettre à jour le système, apt-get va chercher les informations sur internet. Pour savoir où chercher, il va interroger le fichier /etc/apt/sources.list qui contient une liste de serveurs. Pour installer certains packages exotiques, ne figurants pas sur les mirroirs par défaut, il faudra rajouter une ou plusieurs lignes dans ce fichier (la ligne exacte à rajouter est quasiment toujours indiquée sur le site web du package en question, si une version debian existe).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Principales commandes=&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-get update || mettre à jour la liste des packages disponibles dans les dépôts&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-get upgrade || met à jour tous les packages installés sur le système (demande confirmation avant)&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-get dist-upgrade || comme apt-get upgrade, mais si une nouvelle version de la distribution est disponible, l&amp;#039;installe. Dans ce cas, on aura mis avant à jour /etc/apt/sources.list avec les nouveaux dépôts. Attention, pour les dérivées de debian, il est préférable d&amp;#039;utiliser les outils fournis (cas d&amp;#039;ubuntu qui propose la mise à jour depuis l&amp;#039;interface graphique) ou d&amp;#039;aller voir la procédure complète sur la page web de la distribution.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-get install nom_package || installe le package &amp;quot;nom_package&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 | dpkg -i ./nom_package.deb || installe le package &amp;quot;nom_package.deb&amp;quot;, précédement téléchargé sur le disque dur.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-get remove nom_package || désinstalle le package &amp;quot;nom_package&amp;quot;, mais sans supprimer ses fichiers de configuration.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-get remove --purge nom_package  || désinstalle totalement le package &amp;quot;nom_package&amp;quot; (y compris ses fichiers de configuration)&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-get clean || vide le cache de apt, qui peut parfois occuper plusieurs centaines de Mo (fichier téléchargés par apt pour les installations, qui ne sont pas supprimés automatiquement).&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-get autoclean || idem, mais ne supprime que les paquets qui ne sont plus disponibles sur les dépôts.&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-cache search nom_paquet || recherche des infos sur le package &amp;quot;nom_paquet&amp;quot; installé ou non.&lt;br /&gt;
 |-&lt;br /&gt;
 | dpkg --get-selections &amp;quot;*nom_paquet*&amp;quot; (ou dpkg -l) || affiche la liste des packages installés (ou désinstallés sans le --purge)&lt;br /&gt;
 |-&lt;br /&gt;
 | apt-file search nom_fichier || recherche à quel package appartient le fichier &amp;quot;nom_fichier&amp;quot;. Nécessite d&amp;#039;avoir fait au moins une fois &amp;quot;apt-file update&amp;quot;. Nécessite le package apt-file, non installé par défaut. Sinon, préférer dkpg -S.&lt;br /&gt;
 |-&lt;br /&gt;
 | dkpg -S nom_fichier || recherche à quel package appartient le fichier &amp;quot;nom_fichier&amp;quot;. Equivalent de &amp;quot;yum provides&amp;quot; chez Redhat.&lt;br /&gt;
 |-&lt;br /&gt;
 | dpkg -L nom_package || affiche la liste des fichiers du package (package installé)&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=Proxy=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apt-get derrière un serveur mandataire (proxy), éditez le fichier /etc/apt/apt.conf (il faut le créer s&amp;#039;il n&amp;#039;existe pas) et ajoutez la ligne :&lt;br /&gt;
&lt;br /&gt;
 Acquire::http::Proxy &amp;quot;http://proxy:port&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
ou&lt;br /&gt;
&lt;br /&gt;
 Acquire::http::Proxy &amp;quot;http://login:password@proxy:port&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Plus d&amp;#039;infos=&lt;br /&gt;
&lt;br /&gt;
Pour avoir plus d&amp;#039;informations et plus de commandes et options sur l&amp;#039;utilisation de apt et dpkg, allez sur le site [http://www.debian.org/doc/manuals/apt-howto/index.fr.html http://www.debian.org/doc/manuals/apt-howto/index.fr.html] ou sur [http://www.math-linux.com/spip.php?article58 http://www.math-linux.com/spip.php?article58].&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Zones_-_Solaris&amp;diff=589</id>
		<title>Zones - Solaris</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Zones_-_Solaris&amp;diff=589"/>
		<updated>2021-05-07T13:26:29Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Création du fichier de configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:solaris]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
Les zones sont une solution de virtualisation intégré à Solaris. Elles sont à mi-chemin entre un chroot et un serveur virtuel. C&amp;#039;est à dire qu&amp;#039;on a un système d&amp;#039;exploitation hôte (appelé zone globale) dans lequel on fait tourner des process chrootés (donc qui ne voient pas les autres process de la zone globale ou des autres zones) qui sont en quelque sorte des &amp;quot;super process&amp;quot;, car ils font tourner un système d&amp;#039;exploitation complet. Une partie des bibliothèques système sont communes entre les zones et la zone globale. C&amp;#039;est exactement le même principe que les jails BSD.&lt;br /&gt;
&lt;br /&gt;
On peut créer des zones solaris 10 sparse (le type par défaut) ou big. Une zone sparse partage avec la zone globale les répertoires /usr, /lib, /sbin et /platform. Une big a une arborescence entièrement indépendante. La sparse va donc consommer moins d&amp;#039;espace disque, et lorsqu&amp;#039;on va patcher le système de la gloable, ça va patcher également les zones sparse. Ҫa peut-être soit un avantage soit un inconvénient. Il faut décider dès la création si on veut une sparse ou une big, car on ne peut pas changer après.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;avantage de cette façon de virtualiser est qu&amp;#039;il n&amp;#039;y a pas besoin d&amp;#039;émuler la partie matérielle, gourmande en ressources. D&amp;#039;ailleurs, une zone qui ne fait pas tourner de process, ne consomme qu&amp;#039;une quarantaine de Mo.&lt;br /&gt;
L&amp;#039;inconvénient est qu&amp;#039;il faut adapter les systèmes d&amp;#039;exploitation pour qu&amp;#039;ils puissent tourner en tant que zone. Dans les premières versions de Solaris 10, on ne pouvait faire tourner que des zones solaris 10. Plus tard, on a introduit le concept de &amp;quot;branded zones&amp;quot;, qui permettent de faire tourner d&amp;#039;autres systèmes d&amp;#039;exploitation en les adaptant. Depuis solaris 10 8/07, il existe des branded zones Solaris 8 et 9 (uniquement sur Sparc). Il existe aussi des branded zones opensolaris (et des solaris 10 pour opensolaris) et des linux. Les branded zones linux ne peuvent faire tourner que des Redhat et CentOS 3.5 à 3.8, donc un noyau 2.4.&lt;br /&gt;
&lt;br /&gt;
Les zones sont gérées par deux daemons : zoneadmd pour la supervision et zsched qui est l&amp;#039;ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Les zones et le NFS=&lt;br /&gt;
&lt;br /&gt;
Il faut noter qu&amp;#039;une zone ne peut pas être serveur NFS, il n&amp;#039;y a que la zone globale qui peut jouer ce rôle. Un astuce peut donc consister à monter le serveur NFS sur la globale et à partager un répertoire qui appartient à la zone (car la globale accède librement à tous les filesystems des zones via le zonepath – voir chapitre &amp;quot;&amp;#039;&amp;#039;Installation/configuration d&amp;#039;une zone Solaris 10)&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par contre, n&amp;#039;importe quelle zone peut sans problème être client NFS.&lt;br /&gt;
&lt;br /&gt;
Mise à jour : il paraît, mais je n&amp;#039;ai pas eu l&amp;#039;occasion de vérifier, qu&amp;#039;une zone peut être serveur NFS si elle a une interface réseau dédiée.&lt;br /&gt;
&lt;br /&gt;
=Installation/configuration d&amp;#039;une zone Solaris 10=&lt;br /&gt;
&lt;br /&gt;
==Prérequis==&lt;br /&gt;
&lt;br /&gt;
Avant de créer une zone, il est nécessaire d&amp;#039;avoir prévu :&lt;br /&gt;
&lt;br /&gt;
* un répertoire pour mettre son système (par exemple /zones/zone1), appelé &amp;quot;zonepath&amp;quot;. Ce répertoire doit obligatoirement avec les droits 700, sans quoi l&amp;#039;installation échouera.&lt;br /&gt;
* une adresse ip&lt;br /&gt;
* l&amp;#039;interface réseau physique sur laquelle on va connecter cette ip (par exemple bge0)&lt;br /&gt;
* éventuellement les filesystems à créer, sinon on peut les rajouter après&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création du fichier de configuration==&lt;br /&gt;
&lt;br /&gt;
Pour créer/configurer une zone, on utilise l&amp;#039;outil zonecfg qui est un outil en mode texte avec un prompt particulier.&lt;br /&gt;
L&amp;#039;exemple ci-dessous montre assez clairement comment utiliser zonecfg :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  create&lt;br /&gt;
  set zonepath=/zones/zone1&lt;br /&gt;
  set autoboot=true&lt;br /&gt;
  add net&lt;br /&gt;
  :set physical=bge0&lt;br /&gt;
  :set address=10.36.210.56/22&lt;br /&gt;
  :end&lt;br /&gt;
  add fs&lt;br /&gt;
  :set dir=/data&lt;br /&gt;
  :set type=vxfs&lt;br /&gt;
  :set raw=/dev/vx/rdsk/datadg/datalv&lt;br /&gt;
  :set special==/dev/vx/dsk/datadg/datalv&lt;br /&gt;
  :end&lt;br /&gt;
  add fs&lt;br /&gt;
  :set dir=/data2&lt;br /&gt;
  :set type=zfs&lt;br /&gt;
  :set special==zone1/data2&lt;br /&gt;
  :end&lt;br /&gt;
  verify&lt;br /&gt;
  commit&lt;br /&gt;
  exit&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
&lt;br /&gt;
* on peut ajouter autant de filesystems (FS) qu&amp;#039;on veut ; on peut également n&amp;#039;en mettre aucun.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Attention :&amp;#039;&amp;#039;&amp;#039; pour les ZFS, pour qu&amp;#039;ils soient &amp;quot;montables&amp;quot; par la zone, il faut que sur la globale on ait &amp;#039;&amp;#039;&amp;#039;&amp;quot;mountpoint=legacy&amp;quot;&amp;#039;&amp;#039;&amp;#039; sur la globale.&lt;br /&gt;
* pour créer une zone big, il suffit de faire &amp;quot;create –b&amp;quot; au lieu de &amp;quot;create&amp;quot;.&lt;br /&gt;
* verify et commit sont facultatifs. Verify sert à vérifier qu&amp;#039;il n&amp;#039;y a pas d&amp;#039;erreur ; il est conseillé de le faire. Commit sert à forcer l&amp;#039;enregistrement ; il est plutôt déconseillé de s&amp;#039;en servir, car il va enregistrer même s&amp;#039;il y a des erreurs. Exit va enregistrer et quitter.&lt;br /&gt;
&lt;br /&gt;
En quittant, zonecfg créé un fichier /etc/zones/zone1.xml. Il est fortement déconseillé de modifier ce fichier directement, sans passer par zonecfg, sauf si on sait parfaitement ce qu&amp;#039;on fait.&lt;br /&gt;
&lt;br /&gt;
==Installation de la zone==&lt;br /&gt;
&lt;br /&gt;
Maintenant que le fichier de configuration est créé, on peut passer à l&amp;#039;installation de la zone (la création de tous les fichiers).&lt;br /&gt;
&lt;br /&gt;
Attention : tous les filesystems déclarés à l&amp;#039;étape précédente avec &amp;quot;add fs&amp;quot; doivent être créés avant de passer à l&amp;#039;installation !&lt;br /&gt;
&lt;br /&gt;
Pour installer la zone, une seule commande suffit :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone1 install&lt;br /&gt;
&lt;br /&gt;
Cette étape dure une dizaine de minutes (en fonction de la puissance du serveur). Ҫa va être un peu plus long pour une zone big.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Booter et paramétrer la zone==&lt;br /&gt;
&lt;br /&gt;
A ce stade, la zone est créée, mais est arrêtée. On va donc la démarrer. Au premier démarrage, on arrive dans l&amp;#039;utilitaire de configuration classique de Solaris, dans lequel on va choisir le type de clavier, la langue, le fuseau horaire, etc…&lt;br /&gt;
&lt;br /&gt;
Pour booter la zone :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone1 boot&lt;br /&gt;
&lt;br /&gt;
Pour se connecter dessus en mode console :&lt;br /&gt;
&lt;br /&gt;
 # zlogin –C zone1&lt;br /&gt;
&lt;br /&gt;
Pour quitter le mode console : taper &amp;quot;~.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Notre zone &amp;quot;zone1&amp;quot; est maintenant accessible comme n&amp;#039;importe quel serveur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Installation/configuration de zones Solaris 8 et 9=&lt;br /&gt;
&lt;br /&gt;
==Prérequis==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;installation de containers Solaris 8 et 9 nécessite l&amp;#039;ajout de packages supplémentaires :&lt;br /&gt;
&lt;br /&gt;
* SUNWs8brandk, SUNWs8brandr et SUNWs8brandu pour Solaris 8&lt;br /&gt;
* SUNWs9brandk, SUNWs9brandr et SUNWs9brandu pour Solaris 9&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Création d&amp;#039;une flash archive==&lt;br /&gt;
&lt;br /&gt;
Une zone Solaris 8 ou 9 s&amp;#039;installe depuis une archive flash (fichier .flar). On peut trouver des archives de ce type sur le web, mais la plupart du temps, ces zones sont destinées à remplacer des serveurs physiques existants. On va donc créer une image flash depuis un serveur existant.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple de création d&amp;#039;image flash (à lancer depuis le serveur à sauvegarder) :&lt;br /&gt;
&lt;br /&gt;
 # flarcreate –S –c –n sol8_204 –x /u01 –x /u02 –x /backup /backup/sol8_204.flar&lt;br /&gt;
&lt;br /&gt;
Explications :&lt;br /&gt;
&lt;br /&gt;
* -S : évite de verifier l&amp;#039;espace dispo sur le disque de destination, et écrit l&amp;#039;image directement sur le disque (passe par la RAM sinon)&lt;br /&gt;
* -c : compresse l&amp;#039;image&lt;br /&gt;
* -n : label&lt;br /&gt;
* -x : filesystems à ne pas inclure. Attention : une image flash intègre par défaut l&amp;#039;ensemble des filesystems locaux et distants, il faut donc bien penser à exclure (ou préalablement démonter) les montages NFS et autres lecteurs DVD.&lt;br /&gt;
* à la fin de la commande, on met le nom du fichier de destination&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Création du fichier de configuration==&lt;br /&gt;
&lt;br /&gt;
La création du fichier de configuration se fait également avec zonecfg.&lt;br /&gt;
&lt;br /&gt;
A noter, quelques petites différences :&lt;br /&gt;
&lt;br /&gt;
* lors du create, il faut taper respectivement pour des Solaris 8 et 9 :&lt;br /&gt;
&lt;br /&gt;
 create –t SUNWsolaris8&lt;br /&gt;
 create –t SUNWsolaris9&lt;br /&gt;
&lt;br /&gt;
* on peut ajouter les attributs suivants (utiles pour la migration d&amp;#039;un serveur existant, principalement pour des questions de licences :&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; add attr&lt;br /&gt;
  set name=hostid&lt;br /&gt;
  set type=string&lt;br /&gt;
  set value=&amp;lt;hostid du serveur à migrer&amp;gt;&lt;br /&gt;
  end&lt;br /&gt;
 &amp;gt; addattr&lt;br /&gt;
  set name=machine&lt;br /&gt;
  set type=string&lt;br /&gt;
  set value=sun4u&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ATTENTION :&amp;#039;&amp;#039;&amp;#039; depuis les dernières versions de Solaris, cette méthode ne fonctionne plus pour le hostid. Il faut juste faire &amp;quot;&amp;#039;&amp;#039;&amp;#039;set hostid=&amp;lt;valeur&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;quot;. C&amp;#039;est encore plus simple.&lt;br /&gt;
&lt;br /&gt;
==Installation de la zone==&lt;br /&gt;
&lt;br /&gt;
On va maintenant procéder à l&amp;#039;installation, en utilisant l&amp;#039;archive flash, qu&amp;#039;on aura déposé au préalable sur la zone globale (par exemple /var/tmp/sol8_204.flar)&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone2 install –u –a /var/tmp/sol8_204.flar&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;option &amp;quot;-u&amp;quot; fait un unconfigure pour forcer la reconfiguration au boot.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Booter et paramétrer la zone==&lt;br /&gt;
&lt;br /&gt;
Ici, c&amp;#039;est exactement comme les zones Solaris 10.&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone2 boot&lt;br /&gt;
 # zlogin –C zone2&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Gestion des zones=&lt;br /&gt;
&lt;br /&gt;
==Lister==&lt;br /&gt;
&lt;br /&gt;
Pour voir la liste des zones, on utilise &amp;quot;zoneadm list&amp;quot;, de préférence avec les options &amp;quot;-cv&amp;quot; pour plus de détails.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 root@uirgs37 # zoneadm list&lt;br /&gt;
 global&lt;br /&gt;
 uirgs39&lt;br /&gt;
 uirgs40&lt;br /&gt;
 uirgs41&lt;br /&gt;
 uirgs42&lt;br /&gt;
 uirgs43&lt;br /&gt;
 uirgs44&lt;br /&gt;
 uirgs45&lt;br /&gt;
 uirgs46&lt;br /&gt;
 uirgs85&lt;br /&gt;
 uirgs38&lt;br /&gt;
 root@uirgs37 # zoneadm list -cv&lt;br /&gt;
  ID NAME             STATUS     PATH                           BRAND    IP    &lt;br /&gt;
  0 global           running    /                              native   shared&lt;br /&gt;
  12 uirgs39          running    /zones/uirgs39                 native   shared&lt;br /&gt;
  13 uirgs40          running    /zones/uirgs40                 native   shared&lt;br /&gt;
  14 uirgs41          running    /zones/uirgs41                 solaris8 shared&lt;br /&gt;
  15 uirgs42          running    /zones/uirgs42                 solaris9 shared&lt;br /&gt;
  16 uirgs43          running    /zones/uirgs43                 solaris9 shared&lt;br /&gt;
  17 uirgs44          running    /zones/uirgs44                 native   shared&lt;br /&gt;
  18 uirgs45          running    /zones/uirgs45                 native   shared&lt;br /&gt;
  19 uirgs46          running    /zones/uirgs46                 native   shared&lt;br /&gt;
  20 uirgs85          running    /zones/uirgs85                 solaris8 shared&lt;br /&gt;
  21 uirgs38          running    /zones/uirgs38                 solaris8 shared&lt;br /&gt;
 root@uirgs37 #&lt;br /&gt;
&lt;br /&gt;
On voit que la globale apparait comme une zone dans la liste.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;option &amp;quot;-cv&amp;quot; permet également de voir l&amp;#039;état d&amp;#039;une zone. Voici les principaux états que peut avoir une zone :&lt;br /&gt;
&lt;br /&gt;
* configured : configurée, mais pas encore installée&lt;br /&gt;
* installed : installée et arrêtée&lt;br /&gt;
* running : elle fonctionne&lt;br /&gt;
&lt;br /&gt;
==Connexion==&lt;br /&gt;
&lt;br /&gt;
Pour se connecter à une zone, on utilise zlogin, suivi du nom de la zone.&lt;br /&gt;
&lt;br /&gt;
 # zlogin zone1&lt;br /&gt;
&lt;br /&gt;
Pour se connecter comme si on était sur la console (permet par exemple de voir les messages au boot) :&lt;br /&gt;
&lt;br /&gt;
 # zlogin -C zone1&lt;br /&gt;
&lt;br /&gt;
Pour quitter on fait ~. en tapant rapidement. Il est parfois nécessaire d&amp;#039;appuyer plusieurs fois sur &amp;quot;.&amp;quot;. Il ne peut y avoir qu&amp;#039;une seule personne connectée en mode console.&lt;br /&gt;
&lt;br /&gt;
==Arrêt/reboot==&lt;br /&gt;
&lt;br /&gt;
Pour arrêter, démarrer ou rebooter une zone, on utilise :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone1 halt&lt;br /&gt;
 # zoneadm –z zone1 boot&lt;br /&gt;
 # zoneadm –z zone1 reboot&lt;br /&gt;
&lt;br /&gt;
==Forcer l&amp;#039;arrêt==&lt;br /&gt;
&lt;br /&gt;
Il arrive parfois qu&amp;#039;une zone refuse de s&amp;#039;arrêter et reste dans l&amp;#039;état &amp;quot;down&amp;quot; ou &amp;quot;shutting down&amp;quot;. Il est difficile de déterminer quel est ou quels sont les process qui refusent de mourir. Dans ce cas, la commande suivante peut nous sauver :&lt;br /&gt;
&lt;br /&gt;
 # pkill -9 -z zonename&lt;br /&gt;
&lt;br /&gt;
Si même cette commande ne fonctionne pas, on est mal barré ! Il est probable qu&amp;#039;on soit obligé de rebooter la globale.&lt;br /&gt;
&lt;br /&gt;
A noter que parfois il est nécessaire de relancer un &amp;quot;zoneadm -z zone halt&amp;quot; après le pkill.&lt;br /&gt;
&lt;br /&gt;
=Supprimer une zone=&lt;br /&gt;
&lt;br /&gt;
Pour supprimer une zone, il faut d&amp;#039;abort la passer à l&amp;#039;état &amp;quot;configured&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone3 uninstall&lt;br /&gt;
&lt;br /&gt;
Puis on la supprime définitivement :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone3 delete&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Cloner une zone=&lt;br /&gt;
&lt;br /&gt;
Le clonage permet de dupliquer une zone existant sans avoir à refaire une archive flash. Le clone ne concerne que la partie système, c&amp;#039;est à dire qu&amp;#039;une fois le clone terminé, il va falloir recopier à la main les filesystems additionnels.&lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple qui suit, on va cloner la zone &amp;quot;zoneA&amp;quot; vers &amp;quot;zoneB&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* exporter la configuration de la zone zoneA&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zoneA export –f /tmp/zoneB.zonecfg&lt;br /&gt;
&lt;br /&gt;
* éditer le fichier /tmp/zoneB.zonecfg et modifier tout ce qu&amp;#039;il faut adapter (adresse ip, zonepath, etc)&lt;br /&gt;
* créer les systèmes de fichiers qui seront utilisés par la zone zoneB&lt;br /&gt;
* modifier les droits du zonepath du futur clone&lt;br /&gt;
&lt;br /&gt;
 # chmod 700 /zones/zoneB&lt;br /&gt;
&lt;br /&gt;
* créer la nouvelle zone&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zoneB –f /tmp/zoneB.zonecfg&lt;br /&gt;
&lt;br /&gt;
* arrêter zoneA (indispensable pour que la copie des fichiers soit cohérente)&lt;br /&gt;
&lt;br /&gt;
 # zlogin zoneA init 0&lt;br /&gt;
&lt;br /&gt;
* cloner les contenus&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zoneB clone zoneA&lt;br /&gt;
&lt;br /&gt;
* redémarrer zoneA&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zoneA boot&lt;br /&gt;
&lt;br /&gt;
* on peut maintenant démarrer et configurer la nouvelle zone&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zoneB boot&lt;br /&gt;
 # zlogin –C zoneB&lt;br /&gt;
&lt;br /&gt;
Dans certains cas, il peut être nécessaire de forcer la nouvelle zone à passer de l&amp;#039;état &amp;quot;configured&amp;quot; à &amp;quot;installed&amp;quot;. On le fait avec la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zoneB attach -F&lt;br /&gt;
&lt;br /&gt;
=Flying zones=&lt;br /&gt;
&lt;br /&gt;
==Présentation==&lt;br /&gt;
&lt;br /&gt;
Flying zone est le terme commercial employé par Sun/Oracle pour décrire la procédure qui consiste à migrer une zone d&amp;#039;une globale vers une autre. En réalité, tout se fait manuellement, rien n&amp;#039;est automatique, c&amp;#039;est 100 fois moins bien que vmware, mais le terme &amp;quot;Flying zone&amp;quot;, ça pète !&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir migrer les données de la zone, il faut soit copier les données de la globale de départ vers celle d&amp;#039;arrivée, soit avoir ces données accessibles par les deux serveurs (par exemple un SAN).&lt;br /&gt;
&lt;br /&gt;
Nous allons ici prendre l&amp;#039;exemple de la zone &amp;#039;&amp;#039;&amp;#039;zone1&amp;#039;&amp;#039;&amp;#039; qui se trouve sur la globale &amp;#039;&amp;#039;&amp;#039;zglobale1&amp;#039;&amp;#039;&amp;#039; et qu&amp;#039;on va migrer sur la &amp;#039;&amp;#039;&amp;#039;zglobale2&amp;#039;&amp;#039;&amp;#039;. Les données de la zone sont dans deux zpools &amp;quot;zp_zone1&amp;quot; et &amp;quot;zp_zone1_data&amp;quot;. Les zpools sont sur un SAN connecté aux deux globales. Ils sont actuellement montés sur la première ; ils sont visibles de la deuxième, mais pas importés (on ne peut pas importer des zpools sur deux serveurs à la fois).&lt;br /&gt;
&lt;br /&gt;
==Procédure==&lt;br /&gt;
&lt;br /&gt;
La procédure se fait en 7 étapes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Sur la première globale :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* éteindre la zone :&lt;br /&gt;
&lt;br /&gt;
 zglobale1# zlogin zone1 init 5&lt;br /&gt;
&lt;br /&gt;
* detacher la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale1# zoneadm -z zone1 detach&lt;br /&gt;
&lt;br /&gt;
* exporter les zpools &lt;br /&gt;
&lt;br /&gt;
 zglobale1# zpool export zp_zone1&lt;br /&gt;
 zglobale1# zpool export zp_zone1_data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Sur la deuxième globale :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* importer les zpools &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zpool import zp_zone1&lt;br /&gt;
 zglobale2# zpool import zp_zone1_data&lt;br /&gt;
&lt;br /&gt;
* récuperer la configuration de la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# scp zglobale1:/etc/zones/zone1.xml /etc/zones/&lt;br /&gt;
&lt;br /&gt;
* attacher la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zoneadm -z zone1 attach&lt;br /&gt;
&lt;br /&gt;
* démarrer la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zoneadm -z zone1 boot&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Remarque :&amp;#039;&amp;#039;&amp;#039; il se peut que l&amp;#039;attachement de la zone ne fonctionne pas la première fois, même en forçant avec l&amp;#039;option &amp;quot;-F&amp;quot;. Dans ce cas, il faut ajouter une ligne dans le fichier &amp;#039;&amp;#039;&amp;#039;/etc/zones/index&amp;#039;&amp;#039;&amp;#039;, puis refaire le attach :&lt;br /&gt;
&lt;br /&gt;
 zglobale2# echo &amp;#039;zone1:configured:/zones/zone1:&amp;#039; &amp;gt;&amp;gt; /etc/zones/index&lt;br /&gt;
 zglobale2# zglobale2# zoneadm -z zone1 attach&lt;br /&gt;
&lt;br /&gt;
==Retour arrière==&lt;br /&gt;
&lt;br /&gt;
On fait l&amp;#039;inverse, tout simplement...&lt;br /&gt;
&lt;br /&gt;
* éteindre la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zlogin zone1 init 5&lt;br /&gt;
&lt;br /&gt;
* détacher la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zoneadm -z zone1 detach&lt;br /&gt;
&lt;br /&gt;
* exporter les zpools &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zpool export zp_zone1&lt;br /&gt;
 zglobale2# zpool export zp_zone1_data&lt;br /&gt;
&lt;br /&gt;
* importer les zpools &lt;br /&gt;
&lt;br /&gt;
 zglobale1# zpool import zp_zone1&lt;br /&gt;
 zglobale1# zpool import zp_zone1_data&lt;br /&gt;
&lt;br /&gt;
* récuperer la configuration de la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# scp /etc/zones/zone1.xml zglobale1:/etc/zones/&lt;br /&gt;
&lt;br /&gt;
* attacher la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale1# zoneadm -z zone1 attach&lt;br /&gt;
&lt;br /&gt;
* démarrer la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale1# zoneadm -z zone1 boot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Gestion des ressources=&lt;br /&gt;
&lt;br /&gt;
==Présentation==&lt;br /&gt;
&lt;br /&gt;
Par défaut, les ressources RAM, swap et CPU sont communes à toutes les zones, y compris la globale. C&amp;#039;est-à-dire qu&amp;#039;une zone qui a un problème peut s&amp;#039;attribuer toutes les ressources, écrouler toutes les autres zones et même planter la globale. Il existe des moyens de limiter les ressources de chaque zone pour empêcher ça.&lt;br /&gt;
&lt;br /&gt;
Toutes ces manipulations se font depuis la zone globale.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Limitation de la RAM==&lt;br /&gt;
&lt;br /&gt;
Pour voir la RAM actuellement attribuée aux zones :&lt;br /&gt;
&lt;br /&gt;
 # rcapstat -z&lt;br /&gt;
  id zone            nproc    vm   rss   cap    at avgat    pg avgpg&lt;br /&gt;
  1 uirgs50             -  833M  921M 8192M    0K    0K    0K    0K&lt;br /&gt;
  2 uirgs52             -  712M  767M 8192M    0K    0K    0K    0K&lt;br /&gt;
  3 uirgs49             - 2789M 2816M 8192M    0K    0K    0K    0K&lt;br /&gt;
 […]&lt;br /&gt;
&lt;br /&gt;
Ҫa va afficher les valeurs pour toutes les zones. Il faut regarder la colonne &amp;quot;&amp;#039;&amp;#039;&amp;#039;cap&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour modifier la valeur à chaud (attention, la modification sera perdue au prochain reboot) :&lt;br /&gt;
&lt;br /&gt;
 # rcapadm –z zone1 –m 4g&lt;br /&gt;
&lt;br /&gt;
Il faut attendre quelques secondes pour que ce soit pris en compte.&lt;br /&gt;
&lt;br /&gt;
Si on obtient un message du genre &amp;#039;&amp;#039;&amp;#039;&amp;quot;rcapadm: resource caps not configured&amp;quot;&amp;#039;&amp;#039;&amp;#039;, alors c&amp;#039;est qu&amp;#039;il faut &amp;quot;enabler&amp;quot; les memory caps avec la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 # rcapadm -E&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut retaper la commande rcapadm ci-dessus.&lt;br /&gt;
&lt;br /&gt;
Pour limiter la RAM dans la configuration (pour qu&amp;#039;elle soit permanente à chaque reboot), suivre l&amp;#039;exemple suivant :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  &amp;gt; add capped-memory&lt;br /&gt;
  &amp;gt; set physical=4g&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
La limitation ne sera effective qu&amp;#039;au prochain boot de la zone.&lt;br /&gt;
&lt;br /&gt;
Si le paramètre &amp;quot;&amp;#039;&amp;#039;&amp;#039;capped-memory&amp;#039;&amp;#039;&amp;#039;&amp;quot; existe déjà, on peut le modifier de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  &amp;gt; select capped-memory&lt;br /&gt;
  &amp;gt; set physical=4g&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
==Limitation du swap==&lt;br /&gt;
&lt;br /&gt;
Pour voir la quantité de swap actuellement allouée :&lt;br /&gt;
&lt;br /&gt;
 # prctl -n zone.max-swap -i zone zoneB&lt;br /&gt;
 zone: 21: zoneB&lt;br /&gt;
 NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT&lt;br /&gt;
 zone.max-swap&lt;br /&gt;
  privileged      4,00GB      -   deny                                 -&lt;br /&gt;
  system          16,0EB    max   deny                                 -&lt;br /&gt;
&lt;br /&gt;
Il faut lire la ligne &amp;quot;&amp;#039;&amp;#039;&amp;#039;privileged&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour modifier la valeur à chaud (attention, la modification sera perdue au prochain reboot) :&lt;br /&gt;
&lt;br /&gt;
 # prctl -r -n zone.max-swap -i zone -v 6g ma_zone&lt;br /&gt;
&lt;br /&gt;
Attention, cette commande ne fonctionne que pour modifier une valeur existante. Si aucune limitation de swap n&amp;#039;a jamais été appliquée sur cette zone, utiliser la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 # prctl -n zone.max-swap -v 6g -t privileged -e deny -s -i zone ma_zone&lt;br /&gt;
&lt;br /&gt;
Re-attention, si vous venez de taper la commande ci-dessus alors que vous aviez déjà une limitation, alors vous n&amp;#039;avez pas modifié la limitation, vous en avez ajouté une deuxième ! Du coup, le système applique la plus restrictive. Pour réparer cette bêtise (c&amp;#039;est du vécu...), annulez la dernière commande avec :&lt;br /&gt;
&lt;br /&gt;
 # prctl -n zone.max-swap -i zone -t privileged -x ma_zone&lt;br /&gt;
&lt;br /&gt;
Pour limiter le swap dans la configuration (pour qu&amp;#039;il soit permanent à chaque reboot), suivre l&amp;#039;exemple suivant :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg -z zone1&lt;br /&gt;
  &amp;gt; add capped-memory&lt;br /&gt;
  &amp;gt; set swap=4g&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
La limitation ne sera effective qu&amp;#039;au prochain boot de la zone.&lt;br /&gt;
&lt;br /&gt;
Si le paramètre &amp;quot;&amp;#039;&amp;#039;&amp;#039;capped-memory&amp;#039;&amp;#039;&amp;#039;&amp;quot; existe déjà, on peut le modifier de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg -z zone1&lt;br /&gt;
  &amp;gt; select capped-memory&lt;br /&gt;
  &amp;gt; set swap=4g&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
==Limitation du CPU==&lt;br /&gt;
&lt;br /&gt;
Il y a trois méthodes possibles pour limiter l&amp;#039;utilisation CPU :&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;le Fair Share Scheduler (FSS)&amp;#039;&amp;#039;&amp;#039; : on attribue une part minimale de CPU à une zone&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;les Ressource Pools&amp;#039;&amp;#039;&amp;#039; : dédie exclusivement des CPUs à une zone&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;les CPU caps&amp;#039;&amp;#039;&amp;#039; : alloue statiquement des pourcentages de CPU à une zone&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Le Fair Share Scheduler (FSS)===&lt;br /&gt;
&lt;br /&gt;
On alloue un certain nombre de parts de CPU à une zone. Il n&amp;#039;y a pas de nombre de parts prédéfini à partager. Le principe est que plus une zone a de parts, plus elle aura de temps CPU attribué. Par exemple, une zone qui a 20 parts aura deux fois plus de temps CPU qu&amp;#039;une zone à 10 parts. Peu importe le nombre total de parts, il ne représente rien de physique. Donc en fait, on attribue une priorité à chaque zone, et cette priorité ne sert que en cas de conflit. C&amp;#039;est à dire que si tous les cpus sont à 100%, les priorités s&amp;#039;appliquent, mais si les zones les plus prioritaires ne consomment pas de cpu, alors la totalité des cpus physiques peut être utilisé par une zone de petite priorité. C&amp;#039;est donc la manière la plus souple de gérer l&amp;#039;attribution cpu et celle que je recommande.&lt;br /&gt;
&lt;br /&gt;
Par défaut, une zone possède une part.&lt;br /&gt;
&lt;br /&gt;
Mise en œuvre :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  &amp;gt; set cpu-shares=20&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
Remarque : on peut utiliser d&amp;#039;autres schedulers que le FSS, mais c&amp;#039;est celui qui est recommandé par Sun/Oracle.&lt;br /&gt;
&lt;br /&gt;
===Les Ressource Pools===&lt;br /&gt;
&lt;br /&gt;
On attribue exclusivement des CPUs à une zone.&lt;br /&gt;
&lt;br /&gt;
Pour &amp;quot;donner&amp;quot; 3 cpus à la zone zone1  :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  &amp;gt; add dedicated-cpu&lt;br /&gt;
  &amp;gt; set ncpus=3&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;utilisation des ressource pool peut être intéressante en cas d&amp;#039;utilisation de logiciels dont la licence est fonction du nombre de processeurs.&lt;br /&gt;
&lt;br /&gt;
===Les CPU caps===&lt;br /&gt;
&lt;br /&gt;
Les CPUs caps définissent un pourcentage d&amp;#039;utilisation maximum d&amp;#039;un CPU pour une zone. Par exemple, une valeur de 3 signifie qu&amp;#039;une zone pourra utiliser au maximum 3 CPUs ; une valeur de 0.37 signifie qu&amp;#039;elle ne pourra utiliser que 37% d&amp;#039;un CPU.&lt;br /&gt;
&lt;br /&gt;
Mise en œuvre :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  &amp;gt; add capped-cpu&lt;br /&gt;
  &amp;gt; set ncpus=0.37&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
Pour changer la valeur à chaud :&lt;br /&gt;
&lt;br /&gt;
 prctl -r -n zone.cpu-cap -i zone -v 37 zone1&lt;br /&gt;
&lt;br /&gt;
A noter que pour avoir 37% d&amp;#039;un cpu, il faut mettre 0.37 dans zonecfg, alors qu&amp;#039;avec prctl il faut mettre 37.&lt;br /&gt;
&lt;br /&gt;
==Monitoring==&lt;br /&gt;
&lt;br /&gt;
Les zones étant des process de la zone globale, il est difficile de distinguer la part de ressources utilisée par une zone.&lt;br /&gt;
&lt;br /&gt;
On trouve quand même quelques commandes capable de donner des informations fiables :&lt;br /&gt;
&lt;br /&gt;
* prstat –Z : pour afficher la quantité de mémoire et le pourcentage de CPU utilisés par zone&lt;br /&gt;
&lt;br /&gt;
 # prstat -Z&lt;br /&gt;
  PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP       &lt;br /&gt;
  17147 1303     1184M 1171M sleep   59    0  10:31:35 2,5% oracle/258&lt;br /&gt;
  17137 1303     1184M 1166M sleep   39    0  11:12:27 2,5% oracle/258&lt;br /&gt;
  17144 1303     1184M 1171M cpu10   19    0  12:33:59 2,5% oracle/258&lt;br /&gt;
 […]&lt;br /&gt;
  1069 root     6752K 3048K sleep   59    0   0:00:13 0,0% top/1&lt;br /&gt;
  9511 4109       46M   20M sleep   47    4   0:15:55 0,0% LINT/1&lt;br /&gt;
 ZONEID    NPROC  SWAP   RSS MEMORY      TIME  CPU ZONE                        &lt;br /&gt;
  20       73 1394M 1417M   4,3%  69:11:11  11% uirgs85                     &lt;br /&gt;
  12      129 3466M 3407M    10%  20:46:52 1,7% uirgs39                     &lt;br /&gt;
  0       75  222M  228M   0,7%  39:42:54 0,9% global                      &lt;br /&gt;
  21       86 2887M 2911M   8,9%  23:52:49 0,6% uirgs38                     &lt;br /&gt;
  17       58 2417M 2490M   7,6%   1:57:15 0,0% uirgs44                     &lt;br /&gt;
  19       76 1403M 1462M   4,5%   1:35:22 0,0% uirgs46                     &lt;br /&gt;
  13       45  703M  761M   2,3%   1:16:57 0,0% uirgs40                     &lt;br /&gt;
  18       69  857M  931M   2,8%   1:44:56 0,0% uirgs45                     &lt;br /&gt;
  14       46  351M  155M   0,5%   2:09:13 0,0% uirgs41                     &lt;br /&gt;
  16       46 3194M 3209M   9,8%   8:46:48 0,0% uirgs43                     &lt;br /&gt;
  15       29   18M   19M   0,1%   0:12:19 0,0% uirgs42                     &lt;br /&gt;
 &lt;br /&gt;
 Total: 732 processes, 7586 lwps, load averages: 5,23, 5,53, 5,50&lt;br /&gt;
&lt;br /&gt;
* prctl : pour afficher les paramètres actuels d&amp;#039;une zone&lt;br /&gt;
&lt;br /&gt;
 # prctl -i zone uirgs69&lt;br /&gt;
 zone: 21: uirgs69&lt;br /&gt;
 NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT&lt;br /&gt;
 zone.max-swap&lt;br /&gt;
  privileged      8,00GB      -   deny                                 -&lt;br /&gt;
  system          16,0EB    max   deny                                 -&lt;br /&gt;
 zone.max-locked-memory&lt;br /&gt;
  system          16,0EB    max   deny                                 -&lt;br /&gt;
 zone.max-shm-memory&lt;br /&gt;
  system          16,0EB    max   deny                                 -&lt;br /&gt;
 zone.max-shm-ids&lt;br /&gt;
  system          16,8M     max   deny                                 -&lt;br /&gt;
 zone.max-sem-ids&lt;br /&gt;
  system          16,8M     max   deny                                 -&lt;br /&gt;
 zone.max-msg-ids&lt;br /&gt;
  system          16,8M     max   deny                                 -&lt;br /&gt;
 zone.max-lwps&lt;br /&gt;
  system          2,15G     max   deny                                 -&lt;br /&gt;
 zone.cpu-cap&lt;br /&gt;
  system          4,29G     inf   deny                                 -&lt;br /&gt;
 zone.cpu-shares&lt;br /&gt;
  privileged          1       -   none                                 -&lt;br /&gt;
  system          65,5K     max   none                                 -&lt;br /&gt;
&lt;br /&gt;
* pour voir la consommation cpu en temps réel, et la valeur du cappage, on peut utiliser kstat. Par contre, la valeur retournée est affichée avec l&amp;#039;id de la zone, pas son nom. Il faudra donc faire la correspondance. Exemple :&lt;br /&gt;
&lt;br /&gt;
 kstat -p &amp;#039;caps::/^cpucaps_zone/:&amp;#039; |egrep &amp;quot;:usage|:value&amp;quot;&lt;br /&gt;
 caps:1:cpucaps_zone_1:usage	114&lt;br /&gt;
 caps:1:cpucaps_zone_1:value	770&lt;br /&gt;
 caps:3:cpucaps_zone_3:usage	5&lt;br /&gt;
 caps:3:cpucaps_zone_3:value	400&lt;br /&gt;
 caps:26:cpucaps_zone_26:usage	1&lt;br /&gt;
 caps:26:cpucaps_zone_26:value	50&lt;br /&gt;
 caps:34:cpucaps_zone_34:usage	5&lt;br /&gt;
 caps:34:cpucaps_zone_34:value	50&lt;br /&gt;
 caps:36:cpucaps_zone_36:usage	146&lt;br /&gt;
 caps:36:cpucaps_zone_36:value	800&lt;br /&gt;
 caps:42:cpucaps_zone_42:usage	3&lt;br /&gt;
 caps:42:cpucaps_zone_42:value	80&lt;br /&gt;
&lt;br /&gt;
A noter que &amp;quot;value 770&amp;quot; correspond à un &amp;quot;ncpu 7.7&amp;quot;. &amp;quot;zone_26&amp;quot; correspond à la zone dont l&amp;#039;id est 26 (visible avec &amp;quot;zoneadm list -cv&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* il y a également les utilitaires habituels vmstat, iostat, mpstat et sar qui fonctionnent à l&amp;#039;intérieur de zones, mais il faut être très méfiant avec leur résultat : certaines informations concernent uniquement la zone, d&amp;#039;autres concernent le serveur (la zone globale).&lt;br /&gt;
&lt;br /&gt;
=Automatiser/scripter la configuration des zones=&lt;br /&gt;
&lt;br /&gt;
Il est possible de scripter la configuration des zones, plutôt que d&amp;#039;aller systématiquement dans le shell interractif de zonecfg. Ceci est particulièrement utile pour configurer un grand nombre de zones.&lt;br /&gt;
&lt;br /&gt;
* Première méthode : zonecfg sur une seule ligne&lt;br /&gt;
&lt;br /&gt;
On peut passer tous les paramètres désirés à zonecfg pour que tout tienne sur une seule ligne. Voici un exemple :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone2 &amp;#039;add capped-memory ; set swap=4g ; set physical=4g; end&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Ainsi, on peut facilement faire un script avec une ou quelques lignes par zone.&lt;br /&gt;
&lt;br /&gt;
* Deuxième méthode : créer un fichier de configuration et l&amp;#039;injecter dans zonecfg (principe utilisé pour les clones)&lt;br /&gt;
&lt;br /&gt;
D&amp;#039;abord, on créé un fichier de configuration. Par exemple :&lt;br /&gt;
&lt;br /&gt;
 # vi zoneC.conf&lt;br /&gt;
 create&lt;br /&gt;
 set zonepath=/zones/zoneC&lt;br /&gt;
 set autoboot=true&lt;br /&gt;
 set ip-type=shared&lt;br /&gt;
 add inherit-pkg-dir&lt;br /&gt;
 set dir=/lib&lt;br /&gt;
 end&lt;br /&gt;
 add inherit-pkg-dir&lt;br /&gt;
 set dir=/platform&lt;br /&gt;
 end&lt;br /&gt;
 add inherit-pkg-dir&lt;br /&gt;
 set dir=/sbin&lt;br /&gt;
 end&lt;br /&gt;
 add inherit-pkg-dir&lt;br /&gt;
 set dir=/usr&lt;br /&gt;
 end&lt;br /&gt;
 add fs&lt;br /&gt;
 set dir=/opt&lt;br /&gt;
 set special=/dev/vx/dsk/datadg/zoneC-opt&lt;br /&gt;
 set raw=/dev/vx/rdsk/datadg/zoneC-opt&lt;br /&gt;
 set type=vxfs&lt;br /&gt;
 end&lt;br /&gt;
 add net&lt;br /&gt;
 set address=10.36.209.207/22&lt;br /&gt;
 set physical=bge0&lt;br /&gt;
 end&lt;br /&gt;
 add rctl&lt;br /&gt;
 set name=zone.max-swap&lt;br /&gt;
 add value (priv=privileged,limit=8589934592,action=deny)&lt;br /&gt;
 end&lt;br /&gt;
 add capped-memory&lt;br /&gt;
 set physical=8G&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
Ensuite on insère le tout dans la conf de zoneC :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zoneC –f zoneC.conf&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Zones_-_Solaris&amp;diff=588</id>
		<title>Zones - Solaris</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Zones_-_Solaris&amp;diff=588"/>
		<updated>2021-05-07T13:25:51Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Création du fichier de configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:solaris]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
Les zones sont une solution de virtualisation intégré à Solaris. Elles sont à mi-chemin entre un chroot et un serveur virtuel. C&amp;#039;est à dire qu&amp;#039;on a un système d&amp;#039;exploitation hôte (appelé zone globale) dans lequel on fait tourner des process chrootés (donc qui ne voient pas les autres process de la zone globale ou des autres zones) qui sont en quelque sorte des &amp;quot;super process&amp;quot;, car ils font tourner un système d&amp;#039;exploitation complet. Une partie des bibliothèques système sont communes entre les zones et la zone globale. C&amp;#039;est exactement le même principe que les jails BSD.&lt;br /&gt;
&lt;br /&gt;
On peut créer des zones solaris 10 sparse (le type par défaut) ou big. Une zone sparse partage avec la zone globale les répertoires /usr, /lib, /sbin et /platform. Une big a une arborescence entièrement indépendante. La sparse va donc consommer moins d&amp;#039;espace disque, et lorsqu&amp;#039;on va patcher le système de la gloable, ça va patcher également les zones sparse. Ҫa peut-être soit un avantage soit un inconvénient. Il faut décider dès la création si on veut une sparse ou une big, car on ne peut pas changer après.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;avantage de cette façon de virtualiser est qu&amp;#039;il n&amp;#039;y a pas besoin d&amp;#039;émuler la partie matérielle, gourmande en ressources. D&amp;#039;ailleurs, une zone qui ne fait pas tourner de process, ne consomme qu&amp;#039;une quarantaine de Mo.&lt;br /&gt;
L&amp;#039;inconvénient est qu&amp;#039;il faut adapter les systèmes d&amp;#039;exploitation pour qu&amp;#039;ils puissent tourner en tant que zone. Dans les premières versions de Solaris 10, on ne pouvait faire tourner que des zones solaris 10. Plus tard, on a introduit le concept de &amp;quot;branded zones&amp;quot;, qui permettent de faire tourner d&amp;#039;autres systèmes d&amp;#039;exploitation en les adaptant. Depuis solaris 10 8/07, il existe des branded zones Solaris 8 et 9 (uniquement sur Sparc). Il existe aussi des branded zones opensolaris (et des solaris 10 pour opensolaris) et des linux. Les branded zones linux ne peuvent faire tourner que des Redhat et CentOS 3.5 à 3.8, donc un noyau 2.4.&lt;br /&gt;
&lt;br /&gt;
Les zones sont gérées par deux daemons : zoneadmd pour la supervision et zsched qui est l&amp;#039;ordonnanceur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Les zones et le NFS=&lt;br /&gt;
&lt;br /&gt;
Il faut noter qu&amp;#039;une zone ne peut pas être serveur NFS, il n&amp;#039;y a que la zone globale qui peut jouer ce rôle. Un astuce peut donc consister à monter le serveur NFS sur la globale et à partager un répertoire qui appartient à la zone (car la globale accède librement à tous les filesystems des zones via le zonepath – voir chapitre &amp;quot;&amp;#039;&amp;#039;Installation/configuration d&amp;#039;une zone Solaris 10)&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Par contre, n&amp;#039;importe quelle zone peut sans problème être client NFS.&lt;br /&gt;
&lt;br /&gt;
Mise à jour : il paraît, mais je n&amp;#039;ai pas eu l&amp;#039;occasion de vérifier, qu&amp;#039;une zone peut être serveur NFS si elle a une interface réseau dédiée.&lt;br /&gt;
&lt;br /&gt;
=Installation/configuration d&amp;#039;une zone Solaris 10=&lt;br /&gt;
&lt;br /&gt;
==Prérequis==&lt;br /&gt;
&lt;br /&gt;
Avant de créer une zone, il est nécessaire d&amp;#039;avoir prévu :&lt;br /&gt;
&lt;br /&gt;
* un répertoire pour mettre son système (par exemple /zones/zone1), appelé &amp;quot;zonepath&amp;quot;. Ce répertoire doit obligatoirement avec les droits 700, sans quoi l&amp;#039;installation échouera.&lt;br /&gt;
* une adresse ip&lt;br /&gt;
* l&amp;#039;interface réseau physique sur laquelle on va connecter cette ip (par exemple bge0)&lt;br /&gt;
* éventuellement les filesystems à créer, sinon on peut les rajouter après&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Création du fichier de configuration==&lt;br /&gt;
&lt;br /&gt;
Pour créer/configurer une zone, on utilise l&amp;#039;outil zonecfg qui est un outil en mode texte avec un prompt particulier.&lt;br /&gt;
L&amp;#039;exemple ci-dessous montre assez clairement comment utiliser zonecfg :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  create&lt;br /&gt;
  set zonepath=/zones/zone1&lt;br /&gt;
  set autoboot=true&lt;br /&gt;
  add net&lt;br /&gt;
  :set physical=bge0&lt;br /&gt;
  :set address=10.36.210.56/22&lt;br /&gt;
  :end&lt;br /&gt;
  add fs&lt;br /&gt;
  :set dir=/data&lt;br /&gt;
  :set type=vxfs&lt;br /&gt;
  :set raw=/dev/vx/rdsk/datadg/datalv&lt;br /&gt;
  :set special==/dev/vx/dsk/datadg/datalv&lt;br /&gt;
  :end&lt;br /&gt;
  add fs&lt;br /&gt;
  :set dir=/data2&lt;br /&gt;
  :set type=zfs&lt;br /&gt;
  :set special==zone1/data2&lt;br /&gt;
  :end&lt;br /&gt;
  verify&lt;br /&gt;
  commit&lt;br /&gt;
  exit&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
&lt;br /&gt;
* on peut ajouter autant de filesystems (FS) qu&amp;#039;on veut ; on peut également n&amp;#039;en mettre aucun.&lt;br /&gt;
* Attention : pour les ZFS, pour qu&amp;#039;ils soient &amp;quot;montables&amp;quot; par la zone, il faut que sur la globale on ait &amp;#039;&amp;#039;&amp;#039;&amp;quot;mountpoint=legacy&amp;quot;&amp;#039;&amp;#039;&amp;#039; sur la globale.&lt;br /&gt;
* pour créer une zone big, il suffit de faire &amp;quot;create –b&amp;quot; au lieu de &amp;quot;create&amp;quot;.&lt;br /&gt;
* verify et commit sont facultatifs. Verify sert à vérifier qu&amp;#039;il n&amp;#039;y a pas d&amp;#039;erreur ; il est conseillé de le faire. Commit sert à forcer l&amp;#039;enregistrement ; il est plutôt déconseillé de s&amp;#039;en servir, car il va enregistrer même s&amp;#039;il y a des erreurs. Exit va enregistrer et quitter.&lt;br /&gt;
&lt;br /&gt;
En quittant, zonecfg créé un fichier /etc/zones/zone1.xml. Il est fortement déconseillé de modifier ce fichier directement, sans passer par zonecfg, sauf si on sait parfaitement ce qu&amp;#039;on fait.&lt;br /&gt;
&lt;br /&gt;
==Installation de la zone==&lt;br /&gt;
&lt;br /&gt;
Maintenant que le fichier de configuration est créé, on peut passer à l&amp;#039;installation de la zone (la création de tous les fichiers).&lt;br /&gt;
&lt;br /&gt;
Attention : tous les filesystems déclarés à l&amp;#039;étape précédente avec &amp;quot;add fs&amp;quot; doivent être créés avant de passer à l&amp;#039;installation !&lt;br /&gt;
&lt;br /&gt;
Pour installer la zone, une seule commande suffit :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone1 install&lt;br /&gt;
&lt;br /&gt;
Cette étape dure une dizaine de minutes (en fonction de la puissance du serveur). Ҫa va être un peu plus long pour une zone big.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Booter et paramétrer la zone==&lt;br /&gt;
&lt;br /&gt;
A ce stade, la zone est créée, mais est arrêtée. On va donc la démarrer. Au premier démarrage, on arrive dans l&amp;#039;utilitaire de configuration classique de Solaris, dans lequel on va choisir le type de clavier, la langue, le fuseau horaire, etc…&lt;br /&gt;
&lt;br /&gt;
Pour booter la zone :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone1 boot&lt;br /&gt;
&lt;br /&gt;
Pour se connecter dessus en mode console :&lt;br /&gt;
&lt;br /&gt;
 # zlogin –C zone1&lt;br /&gt;
&lt;br /&gt;
Pour quitter le mode console : taper &amp;quot;~.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Notre zone &amp;quot;zone1&amp;quot; est maintenant accessible comme n&amp;#039;importe quel serveur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Installation/configuration de zones Solaris 8 et 9=&lt;br /&gt;
&lt;br /&gt;
==Prérequis==&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;installation de containers Solaris 8 et 9 nécessite l&amp;#039;ajout de packages supplémentaires :&lt;br /&gt;
&lt;br /&gt;
* SUNWs8brandk, SUNWs8brandr et SUNWs8brandu pour Solaris 8&lt;br /&gt;
* SUNWs9brandk, SUNWs9brandr et SUNWs9brandu pour Solaris 9&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Création d&amp;#039;une flash archive==&lt;br /&gt;
&lt;br /&gt;
Une zone Solaris 8 ou 9 s&amp;#039;installe depuis une archive flash (fichier .flar). On peut trouver des archives de ce type sur le web, mais la plupart du temps, ces zones sont destinées à remplacer des serveurs physiques existants. On va donc créer une image flash depuis un serveur existant.&lt;br /&gt;
&lt;br /&gt;
Voici un exemple de création d&amp;#039;image flash (à lancer depuis le serveur à sauvegarder) :&lt;br /&gt;
&lt;br /&gt;
 # flarcreate –S –c –n sol8_204 –x /u01 –x /u02 –x /backup /backup/sol8_204.flar&lt;br /&gt;
&lt;br /&gt;
Explications :&lt;br /&gt;
&lt;br /&gt;
* -S : évite de verifier l&amp;#039;espace dispo sur le disque de destination, et écrit l&amp;#039;image directement sur le disque (passe par la RAM sinon)&lt;br /&gt;
* -c : compresse l&amp;#039;image&lt;br /&gt;
* -n : label&lt;br /&gt;
* -x : filesystems à ne pas inclure. Attention : une image flash intègre par défaut l&amp;#039;ensemble des filesystems locaux et distants, il faut donc bien penser à exclure (ou préalablement démonter) les montages NFS et autres lecteurs DVD.&lt;br /&gt;
* à la fin de la commande, on met le nom du fichier de destination&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Création du fichier de configuration==&lt;br /&gt;
&lt;br /&gt;
La création du fichier de configuration se fait également avec zonecfg.&lt;br /&gt;
&lt;br /&gt;
A noter, quelques petites différences :&lt;br /&gt;
&lt;br /&gt;
* lors du create, il faut taper respectivement pour des Solaris 8 et 9 :&lt;br /&gt;
&lt;br /&gt;
 create –t SUNWsolaris8&lt;br /&gt;
 create –t SUNWsolaris9&lt;br /&gt;
&lt;br /&gt;
* on peut ajouter les attributs suivants (utiles pour la migration d&amp;#039;un serveur existant, principalement pour des questions de licences :&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; add attr&lt;br /&gt;
  set name=hostid&lt;br /&gt;
  set type=string&lt;br /&gt;
  set value=&amp;lt;hostid du serveur à migrer&amp;gt;&lt;br /&gt;
  end&lt;br /&gt;
 &amp;gt; addattr&lt;br /&gt;
  set name=machine&lt;br /&gt;
  set type=string&lt;br /&gt;
  set value=sun4u&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ATTENTION :&amp;#039;&amp;#039;&amp;#039; depuis les dernières versions de Solaris, cette méthode ne fonctionne plus pour le hostid. Il faut juste faire &amp;quot;&amp;#039;&amp;#039;&amp;#039;set hostid=&amp;lt;valeur&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;quot;. C&amp;#039;est encore plus simple.&lt;br /&gt;
&lt;br /&gt;
==Installation de la zone==&lt;br /&gt;
&lt;br /&gt;
On va maintenant procéder à l&amp;#039;installation, en utilisant l&amp;#039;archive flash, qu&amp;#039;on aura déposé au préalable sur la zone globale (par exemple /var/tmp/sol8_204.flar)&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone2 install –u –a /var/tmp/sol8_204.flar&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;option &amp;quot;-u&amp;quot; fait un unconfigure pour forcer la reconfiguration au boot.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Booter et paramétrer la zone==&lt;br /&gt;
&lt;br /&gt;
Ici, c&amp;#039;est exactement comme les zones Solaris 10.&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone2 boot&lt;br /&gt;
 # zlogin –C zone2&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Gestion des zones=&lt;br /&gt;
&lt;br /&gt;
==Lister==&lt;br /&gt;
&lt;br /&gt;
Pour voir la liste des zones, on utilise &amp;quot;zoneadm list&amp;quot;, de préférence avec les options &amp;quot;-cv&amp;quot; pour plus de détails.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 root@uirgs37 # zoneadm list&lt;br /&gt;
 global&lt;br /&gt;
 uirgs39&lt;br /&gt;
 uirgs40&lt;br /&gt;
 uirgs41&lt;br /&gt;
 uirgs42&lt;br /&gt;
 uirgs43&lt;br /&gt;
 uirgs44&lt;br /&gt;
 uirgs45&lt;br /&gt;
 uirgs46&lt;br /&gt;
 uirgs85&lt;br /&gt;
 uirgs38&lt;br /&gt;
 root@uirgs37 # zoneadm list -cv&lt;br /&gt;
  ID NAME             STATUS     PATH                           BRAND    IP    &lt;br /&gt;
  0 global           running    /                              native   shared&lt;br /&gt;
  12 uirgs39          running    /zones/uirgs39                 native   shared&lt;br /&gt;
  13 uirgs40          running    /zones/uirgs40                 native   shared&lt;br /&gt;
  14 uirgs41          running    /zones/uirgs41                 solaris8 shared&lt;br /&gt;
  15 uirgs42          running    /zones/uirgs42                 solaris9 shared&lt;br /&gt;
  16 uirgs43          running    /zones/uirgs43                 solaris9 shared&lt;br /&gt;
  17 uirgs44          running    /zones/uirgs44                 native   shared&lt;br /&gt;
  18 uirgs45          running    /zones/uirgs45                 native   shared&lt;br /&gt;
  19 uirgs46          running    /zones/uirgs46                 native   shared&lt;br /&gt;
  20 uirgs85          running    /zones/uirgs85                 solaris8 shared&lt;br /&gt;
  21 uirgs38          running    /zones/uirgs38                 solaris8 shared&lt;br /&gt;
 root@uirgs37 #&lt;br /&gt;
&lt;br /&gt;
On voit que la globale apparait comme une zone dans la liste.&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;option &amp;quot;-cv&amp;quot; permet également de voir l&amp;#039;état d&amp;#039;une zone. Voici les principaux états que peut avoir une zone :&lt;br /&gt;
&lt;br /&gt;
* configured : configurée, mais pas encore installée&lt;br /&gt;
* installed : installée et arrêtée&lt;br /&gt;
* running : elle fonctionne&lt;br /&gt;
&lt;br /&gt;
==Connexion==&lt;br /&gt;
&lt;br /&gt;
Pour se connecter à une zone, on utilise zlogin, suivi du nom de la zone.&lt;br /&gt;
&lt;br /&gt;
 # zlogin zone1&lt;br /&gt;
&lt;br /&gt;
Pour se connecter comme si on était sur la console (permet par exemple de voir les messages au boot) :&lt;br /&gt;
&lt;br /&gt;
 # zlogin -C zone1&lt;br /&gt;
&lt;br /&gt;
Pour quitter on fait ~. en tapant rapidement. Il est parfois nécessaire d&amp;#039;appuyer plusieurs fois sur &amp;quot;.&amp;quot;. Il ne peut y avoir qu&amp;#039;une seule personne connectée en mode console.&lt;br /&gt;
&lt;br /&gt;
==Arrêt/reboot==&lt;br /&gt;
&lt;br /&gt;
Pour arrêter, démarrer ou rebooter une zone, on utilise :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone1 halt&lt;br /&gt;
 # zoneadm –z zone1 boot&lt;br /&gt;
 # zoneadm –z zone1 reboot&lt;br /&gt;
&lt;br /&gt;
==Forcer l&amp;#039;arrêt==&lt;br /&gt;
&lt;br /&gt;
Il arrive parfois qu&amp;#039;une zone refuse de s&amp;#039;arrêter et reste dans l&amp;#039;état &amp;quot;down&amp;quot; ou &amp;quot;shutting down&amp;quot;. Il est difficile de déterminer quel est ou quels sont les process qui refusent de mourir. Dans ce cas, la commande suivante peut nous sauver :&lt;br /&gt;
&lt;br /&gt;
 # pkill -9 -z zonename&lt;br /&gt;
&lt;br /&gt;
Si même cette commande ne fonctionne pas, on est mal barré ! Il est probable qu&amp;#039;on soit obligé de rebooter la globale.&lt;br /&gt;
&lt;br /&gt;
A noter que parfois il est nécessaire de relancer un &amp;quot;zoneadm -z zone halt&amp;quot; après le pkill.&lt;br /&gt;
&lt;br /&gt;
=Supprimer une zone=&lt;br /&gt;
&lt;br /&gt;
Pour supprimer une zone, il faut d&amp;#039;abort la passer à l&amp;#039;état &amp;quot;configured&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zone3 uninstall&lt;br /&gt;
&lt;br /&gt;
Puis on la supprime définitivement :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone3 delete&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Cloner une zone=&lt;br /&gt;
&lt;br /&gt;
Le clonage permet de dupliquer une zone existant sans avoir à refaire une archive flash. Le clone ne concerne que la partie système, c&amp;#039;est à dire qu&amp;#039;une fois le clone terminé, il va falloir recopier à la main les filesystems additionnels.&lt;br /&gt;
&lt;br /&gt;
Dans l&amp;#039;exemple qui suit, on va cloner la zone &amp;quot;zoneA&amp;quot; vers &amp;quot;zoneB&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* exporter la configuration de la zone zoneA&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zoneA export –f /tmp/zoneB.zonecfg&lt;br /&gt;
&lt;br /&gt;
* éditer le fichier /tmp/zoneB.zonecfg et modifier tout ce qu&amp;#039;il faut adapter (adresse ip, zonepath, etc)&lt;br /&gt;
* créer les systèmes de fichiers qui seront utilisés par la zone zoneB&lt;br /&gt;
* modifier les droits du zonepath du futur clone&lt;br /&gt;
&lt;br /&gt;
 # chmod 700 /zones/zoneB&lt;br /&gt;
&lt;br /&gt;
* créer la nouvelle zone&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zoneB –f /tmp/zoneB.zonecfg&lt;br /&gt;
&lt;br /&gt;
* arrêter zoneA (indispensable pour que la copie des fichiers soit cohérente)&lt;br /&gt;
&lt;br /&gt;
 # zlogin zoneA init 0&lt;br /&gt;
&lt;br /&gt;
* cloner les contenus&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zoneB clone zoneA&lt;br /&gt;
&lt;br /&gt;
* redémarrer zoneA&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zoneA boot&lt;br /&gt;
&lt;br /&gt;
* on peut maintenant démarrer et configurer la nouvelle zone&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zoneB boot&lt;br /&gt;
 # zlogin –C zoneB&lt;br /&gt;
&lt;br /&gt;
Dans certains cas, il peut être nécessaire de forcer la nouvelle zone à passer de l&amp;#039;état &amp;quot;configured&amp;quot; à &amp;quot;installed&amp;quot;. On le fait avec la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 # zoneadm –z zoneB attach -F&lt;br /&gt;
&lt;br /&gt;
=Flying zones=&lt;br /&gt;
&lt;br /&gt;
==Présentation==&lt;br /&gt;
&lt;br /&gt;
Flying zone est le terme commercial employé par Sun/Oracle pour décrire la procédure qui consiste à migrer une zone d&amp;#039;une globale vers une autre. En réalité, tout se fait manuellement, rien n&amp;#039;est automatique, c&amp;#039;est 100 fois moins bien que vmware, mais le terme &amp;quot;Flying zone&amp;quot;, ça pète !&lt;br /&gt;
&lt;br /&gt;
Pour pouvoir migrer les données de la zone, il faut soit copier les données de la globale de départ vers celle d&amp;#039;arrivée, soit avoir ces données accessibles par les deux serveurs (par exemple un SAN).&lt;br /&gt;
&lt;br /&gt;
Nous allons ici prendre l&amp;#039;exemple de la zone &amp;#039;&amp;#039;&amp;#039;zone1&amp;#039;&amp;#039;&amp;#039; qui se trouve sur la globale &amp;#039;&amp;#039;&amp;#039;zglobale1&amp;#039;&amp;#039;&amp;#039; et qu&amp;#039;on va migrer sur la &amp;#039;&amp;#039;&amp;#039;zglobale2&amp;#039;&amp;#039;&amp;#039;. Les données de la zone sont dans deux zpools &amp;quot;zp_zone1&amp;quot; et &amp;quot;zp_zone1_data&amp;quot;. Les zpools sont sur un SAN connecté aux deux globales. Ils sont actuellement montés sur la première ; ils sont visibles de la deuxième, mais pas importés (on ne peut pas importer des zpools sur deux serveurs à la fois).&lt;br /&gt;
&lt;br /&gt;
==Procédure==&lt;br /&gt;
&lt;br /&gt;
La procédure se fait en 7 étapes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Sur la première globale :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* éteindre la zone :&lt;br /&gt;
&lt;br /&gt;
 zglobale1# zlogin zone1 init 5&lt;br /&gt;
&lt;br /&gt;
* detacher la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale1# zoneadm -z zone1 detach&lt;br /&gt;
&lt;br /&gt;
* exporter les zpools &lt;br /&gt;
&lt;br /&gt;
 zglobale1# zpool export zp_zone1&lt;br /&gt;
 zglobale1# zpool export zp_zone1_data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Sur la deuxième globale :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* importer les zpools &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zpool import zp_zone1&lt;br /&gt;
 zglobale2# zpool import zp_zone1_data&lt;br /&gt;
&lt;br /&gt;
* récuperer la configuration de la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# scp zglobale1:/etc/zones/zone1.xml /etc/zones/&lt;br /&gt;
&lt;br /&gt;
* attacher la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zoneadm -z zone1 attach&lt;br /&gt;
&lt;br /&gt;
* démarrer la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zoneadm -z zone1 boot&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Remarque :&amp;#039;&amp;#039;&amp;#039; il se peut que l&amp;#039;attachement de la zone ne fonctionne pas la première fois, même en forçant avec l&amp;#039;option &amp;quot;-F&amp;quot;. Dans ce cas, il faut ajouter une ligne dans le fichier &amp;#039;&amp;#039;&amp;#039;/etc/zones/index&amp;#039;&amp;#039;&amp;#039;, puis refaire le attach :&lt;br /&gt;
&lt;br /&gt;
 zglobale2# echo &amp;#039;zone1:configured:/zones/zone1:&amp;#039; &amp;gt;&amp;gt; /etc/zones/index&lt;br /&gt;
 zglobale2# zglobale2# zoneadm -z zone1 attach&lt;br /&gt;
&lt;br /&gt;
==Retour arrière==&lt;br /&gt;
&lt;br /&gt;
On fait l&amp;#039;inverse, tout simplement...&lt;br /&gt;
&lt;br /&gt;
* éteindre la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zlogin zone1 init 5&lt;br /&gt;
&lt;br /&gt;
* détacher la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zoneadm -z zone1 detach&lt;br /&gt;
&lt;br /&gt;
* exporter les zpools &lt;br /&gt;
&lt;br /&gt;
 zglobale2# zpool export zp_zone1&lt;br /&gt;
 zglobale2# zpool export zp_zone1_data&lt;br /&gt;
&lt;br /&gt;
* importer les zpools &lt;br /&gt;
&lt;br /&gt;
 zglobale1# zpool import zp_zone1&lt;br /&gt;
 zglobale1# zpool import zp_zone1_data&lt;br /&gt;
&lt;br /&gt;
* récuperer la configuration de la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale2# scp /etc/zones/zone1.xml zglobale1:/etc/zones/&lt;br /&gt;
&lt;br /&gt;
* attacher la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale1# zoneadm -z zone1 attach&lt;br /&gt;
&lt;br /&gt;
* démarrer la zone &lt;br /&gt;
&lt;br /&gt;
 zglobale1# zoneadm -z zone1 boot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Gestion des ressources=&lt;br /&gt;
&lt;br /&gt;
==Présentation==&lt;br /&gt;
&lt;br /&gt;
Par défaut, les ressources RAM, swap et CPU sont communes à toutes les zones, y compris la globale. C&amp;#039;est-à-dire qu&amp;#039;une zone qui a un problème peut s&amp;#039;attribuer toutes les ressources, écrouler toutes les autres zones et même planter la globale. Il existe des moyens de limiter les ressources de chaque zone pour empêcher ça.&lt;br /&gt;
&lt;br /&gt;
Toutes ces manipulations se font depuis la zone globale.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Limitation de la RAM==&lt;br /&gt;
&lt;br /&gt;
Pour voir la RAM actuellement attribuée aux zones :&lt;br /&gt;
&lt;br /&gt;
 # rcapstat -z&lt;br /&gt;
  id zone            nproc    vm   rss   cap    at avgat    pg avgpg&lt;br /&gt;
  1 uirgs50             -  833M  921M 8192M    0K    0K    0K    0K&lt;br /&gt;
  2 uirgs52             -  712M  767M 8192M    0K    0K    0K    0K&lt;br /&gt;
  3 uirgs49             - 2789M 2816M 8192M    0K    0K    0K    0K&lt;br /&gt;
 […]&lt;br /&gt;
&lt;br /&gt;
Ҫa va afficher les valeurs pour toutes les zones. Il faut regarder la colonne &amp;quot;&amp;#039;&amp;#039;&amp;#039;cap&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour modifier la valeur à chaud (attention, la modification sera perdue au prochain reboot) :&lt;br /&gt;
&lt;br /&gt;
 # rcapadm –z zone1 –m 4g&lt;br /&gt;
&lt;br /&gt;
Il faut attendre quelques secondes pour que ce soit pris en compte.&lt;br /&gt;
&lt;br /&gt;
Si on obtient un message du genre &amp;#039;&amp;#039;&amp;#039;&amp;quot;rcapadm: resource caps not configured&amp;quot;&amp;#039;&amp;#039;&amp;#039;, alors c&amp;#039;est qu&amp;#039;il faut &amp;quot;enabler&amp;quot; les memory caps avec la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 # rcapadm -E&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut retaper la commande rcapadm ci-dessus.&lt;br /&gt;
&lt;br /&gt;
Pour limiter la RAM dans la configuration (pour qu&amp;#039;elle soit permanente à chaque reboot), suivre l&amp;#039;exemple suivant :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  &amp;gt; add capped-memory&lt;br /&gt;
  &amp;gt; set physical=4g&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
La limitation ne sera effective qu&amp;#039;au prochain boot de la zone.&lt;br /&gt;
&lt;br /&gt;
Si le paramètre &amp;quot;&amp;#039;&amp;#039;&amp;#039;capped-memory&amp;#039;&amp;#039;&amp;#039;&amp;quot; existe déjà, on peut le modifier de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  &amp;gt; select capped-memory&lt;br /&gt;
  &amp;gt; set physical=4g&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
==Limitation du swap==&lt;br /&gt;
&lt;br /&gt;
Pour voir la quantité de swap actuellement allouée :&lt;br /&gt;
&lt;br /&gt;
 # prctl -n zone.max-swap -i zone zoneB&lt;br /&gt;
 zone: 21: zoneB&lt;br /&gt;
 NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT&lt;br /&gt;
 zone.max-swap&lt;br /&gt;
  privileged      4,00GB      -   deny                                 -&lt;br /&gt;
  system          16,0EB    max   deny                                 -&lt;br /&gt;
&lt;br /&gt;
Il faut lire la ligne &amp;quot;&amp;#039;&amp;#039;&amp;#039;privileged&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour modifier la valeur à chaud (attention, la modification sera perdue au prochain reboot) :&lt;br /&gt;
&lt;br /&gt;
 # prctl -r -n zone.max-swap -i zone -v 6g ma_zone&lt;br /&gt;
&lt;br /&gt;
Attention, cette commande ne fonctionne que pour modifier une valeur existante. Si aucune limitation de swap n&amp;#039;a jamais été appliquée sur cette zone, utiliser la commande suivante :&lt;br /&gt;
&lt;br /&gt;
 # prctl -n zone.max-swap -v 6g -t privileged -e deny -s -i zone ma_zone&lt;br /&gt;
&lt;br /&gt;
Re-attention, si vous venez de taper la commande ci-dessus alors que vous aviez déjà une limitation, alors vous n&amp;#039;avez pas modifié la limitation, vous en avez ajouté une deuxième ! Du coup, le système applique la plus restrictive. Pour réparer cette bêtise (c&amp;#039;est du vécu...), annulez la dernière commande avec :&lt;br /&gt;
&lt;br /&gt;
 # prctl -n zone.max-swap -i zone -t privileged -x ma_zone&lt;br /&gt;
&lt;br /&gt;
Pour limiter le swap dans la configuration (pour qu&amp;#039;il soit permanent à chaque reboot), suivre l&amp;#039;exemple suivant :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg -z zone1&lt;br /&gt;
  &amp;gt; add capped-memory&lt;br /&gt;
  &amp;gt; set swap=4g&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
La limitation ne sera effective qu&amp;#039;au prochain boot de la zone.&lt;br /&gt;
&lt;br /&gt;
Si le paramètre &amp;quot;&amp;#039;&amp;#039;&amp;#039;capped-memory&amp;#039;&amp;#039;&amp;#039;&amp;quot; existe déjà, on peut le modifier de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg -z zone1&lt;br /&gt;
  &amp;gt; select capped-memory&lt;br /&gt;
  &amp;gt; set swap=4g&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
==Limitation du CPU==&lt;br /&gt;
&lt;br /&gt;
Il y a trois méthodes possibles pour limiter l&amp;#039;utilisation CPU :&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;le Fair Share Scheduler (FSS)&amp;#039;&amp;#039;&amp;#039; : on attribue une part minimale de CPU à une zone&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;les Ressource Pools&amp;#039;&amp;#039;&amp;#039; : dédie exclusivement des CPUs à une zone&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;les CPU caps&amp;#039;&amp;#039;&amp;#039; : alloue statiquement des pourcentages de CPU à une zone&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
===Le Fair Share Scheduler (FSS)===&lt;br /&gt;
&lt;br /&gt;
On alloue un certain nombre de parts de CPU à une zone. Il n&amp;#039;y a pas de nombre de parts prédéfini à partager. Le principe est que plus une zone a de parts, plus elle aura de temps CPU attribué. Par exemple, une zone qui a 20 parts aura deux fois plus de temps CPU qu&amp;#039;une zone à 10 parts. Peu importe le nombre total de parts, il ne représente rien de physique. Donc en fait, on attribue une priorité à chaque zone, et cette priorité ne sert que en cas de conflit. C&amp;#039;est à dire que si tous les cpus sont à 100%, les priorités s&amp;#039;appliquent, mais si les zones les plus prioritaires ne consomment pas de cpu, alors la totalité des cpus physiques peut être utilisé par une zone de petite priorité. C&amp;#039;est donc la manière la plus souple de gérer l&amp;#039;attribution cpu et celle que je recommande.&lt;br /&gt;
&lt;br /&gt;
Par défaut, une zone possède une part.&lt;br /&gt;
&lt;br /&gt;
Mise en œuvre :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  &amp;gt; set cpu-shares=20&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
Remarque : on peut utiliser d&amp;#039;autres schedulers que le FSS, mais c&amp;#039;est celui qui est recommandé par Sun/Oracle.&lt;br /&gt;
&lt;br /&gt;
===Les Ressource Pools===&lt;br /&gt;
&lt;br /&gt;
On attribue exclusivement des CPUs à une zone.&lt;br /&gt;
&lt;br /&gt;
Pour &amp;quot;donner&amp;quot; 3 cpus à la zone zone1  :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  &amp;gt; add dedicated-cpu&lt;br /&gt;
  &amp;gt; set ncpus=3&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;utilisation des ressource pool peut être intéressante en cas d&amp;#039;utilisation de logiciels dont la licence est fonction du nombre de processeurs.&lt;br /&gt;
&lt;br /&gt;
===Les CPU caps===&lt;br /&gt;
&lt;br /&gt;
Les CPUs caps définissent un pourcentage d&amp;#039;utilisation maximum d&amp;#039;un CPU pour une zone. Par exemple, une valeur de 3 signifie qu&amp;#039;une zone pourra utiliser au maximum 3 CPUs ; une valeur de 0.37 signifie qu&amp;#039;elle ne pourra utiliser que 37% d&amp;#039;un CPU.&lt;br /&gt;
&lt;br /&gt;
Mise en œuvre :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone1&lt;br /&gt;
  &amp;gt; add capped-cpu&lt;br /&gt;
  &amp;gt; set ncpus=0.37&lt;br /&gt;
  &amp;gt; end&lt;br /&gt;
  &amp;gt; exit&lt;br /&gt;
&lt;br /&gt;
Pour changer la valeur à chaud :&lt;br /&gt;
&lt;br /&gt;
 prctl -r -n zone.cpu-cap -i zone -v 37 zone1&lt;br /&gt;
&lt;br /&gt;
A noter que pour avoir 37% d&amp;#039;un cpu, il faut mettre 0.37 dans zonecfg, alors qu&amp;#039;avec prctl il faut mettre 37.&lt;br /&gt;
&lt;br /&gt;
==Monitoring==&lt;br /&gt;
&lt;br /&gt;
Les zones étant des process de la zone globale, il est difficile de distinguer la part de ressources utilisée par une zone.&lt;br /&gt;
&lt;br /&gt;
On trouve quand même quelques commandes capable de donner des informations fiables :&lt;br /&gt;
&lt;br /&gt;
* prstat –Z : pour afficher la quantité de mémoire et le pourcentage de CPU utilisés par zone&lt;br /&gt;
&lt;br /&gt;
 # prstat -Z&lt;br /&gt;
  PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP       &lt;br /&gt;
  17147 1303     1184M 1171M sleep   59    0  10:31:35 2,5% oracle/258&lt;br /&gt;
  17137 1303     1184M 1166M sleep   39    0  11:12:27 2,5% oracle/258&lt;br /&gt;
  17144 1303     1184M 1171M cpu10   19    0  12:33:59 2,5% oracle/258&lt;br /&gt;
 […]&lt;br /&gt;
  1069 root     6752K 3048K sleep   59    0   0:00:13 0,0% top/1&lt;br /&gt;
  9511 4109       46M   20M sleep   47    4   0:15:55 0,0% LINT/1&lt;br /&gt;
 ZONEID    NPROC  SWAP   RSS MEMORY      TIME  CPU ZONE                        &lt;br /&gt;
  20       73 1394M 1417M   4,3%  69:11:11  11% uirgs85                     &lt;br /&gt;
  12      129 3466M 3407M    10%  20:46:52 1,7% uirgs39                     &lt;br /&gt;
  0       75  222M  228M   0,7%  39:42:54 0,9% global                      &lt;br /&gt;
  21       86 2887M 2911M   8,9%  23:52:49 0,6% uirgs38                     &lt;br /&gt;
  17       58 2417M 2490M   7,6%   1:57:15 0,0% uirgs44                     &lt;br /&gt;
  19       76 1403M 1462M   4,5%   1:35:22 0,0% uirgs46                     &lt;br /&gt;
  13       45  703M  761M   2,3%   1:16:57 0,0% uirgs40                     &lt;br /&gt;
  18       69  857M  931M   2,8%   1:44:56 0,0% uirgs45                     &lt;br /&gt;
  14       46  351M  155M   0,5%   2:09:13 0,0% uirgs41                     &lt;br /&gt;
  16       46 3194M 3209M   9,8%   8:46:48 0,0% uirgs43                     &lt;br /&gt;
  15       29   18M   19M   0,1%   0:12:19 0,0% uirgs42                     &lt;br /&gt;
 &lt;br /&gt;
 Total: 732 processes, 7586 lwps, load averages: 5,23, 5,53, 5,50&lt;br /&gt;
&lt;br /&gt;
* prctl : pour afficher les paramètres actuels d&amp;#039;une zone&lt;br /&gt;
&lt;br /&gt;
 # prctl -i zone uirgs69&lt;br /&gt;
 zone: 21: uirgs69&lt;br /&gt;
 NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT&lt;br /&gt;
 zone.max-swap&lt;br /&gt;
  privileged      8,00GB      -   deny                                 -&lt;br /&gt;
  system          16,0EB    max   deny                                 -&lt;br /&gt;
 zone.max-locked-memory&lt;br /&gt;
  system          16,0EB    max   deny                                 -&lt;br /&gt;
 zone.max-shm-memory&lt;br /&gt;
  system          16,0EB    max   deny                                 -&lt;br /&gt;
 zone.max-shm-ids&lt;br /&gt;
  system          16,8M     max   deny                                 -&lt;br /&gt;
 zone.max-sem-ids&lt;br /&gt;
  system          16,8M     max   deny                                 -&lt;br /&gt;
 zone.max-msg-ids&lt;br /&gt;
  system          16,8M     max   deny                                 -&lt;br /&gt;
 zone.max-lwps&lt;br /&gt;
  system          2,15G     max   deny                                 -&lt;br /&gt;
 zone.cpu-cap&lt;br /&gt;
  system          4,29G     inf   deny                                 -&lt;br /&gt;
 zone.cpu-shares&lt;br /&gt;
  privileged          1       -   none                                 -&lt;br /&gt;
  system          65,5K     max   none                                 -&lt;br /&gt;
&lt;br /&gt;
* pour voir la consommation cpu en temps réel, et la valeur du cappage, on peut utiliser kstat. Par contre, la valeur retournée est affichée avec l&amp;#039;id de la zone, pas son nom. Il faudra donc faire la correspondance. Exemple :&lt;br /&gt;
&lt;br /&gt;
 kstat -p &amp;#039;caps::/^cpucaps_zone/:&amp;#039; |egrep &amp;quot;:usage|:value&amp;quot;&lt;br /&gt;
 caps:1:cpucaps_zone_1:usage	114&lt;br /&gt;
 caps:1:cpucaps_zone_1:value	770&lt;br /&gt;
 caps:3:cpucaps_zone_3:usage	5&lt;br /&gt;
 caps:3:cpucaps_zone_3:value	400&lt;br /&gt;
 caps:26:cpucaps_zone_26:usage	1&lt;br /&gt;
 caps:26:cpucaps_zone_26:value	50&lt;br /&gt;
 caps:34:cpucaps_zone_34:usage	5&lt;br /&gt;
 caps:34:cpucaps_zone_34:value	50&lt;br /&gt;
 caps:36:cpucaps_zone_36:usage	146&lt;br /&gt;
 caps:36:cpucaps_zone_36:value	800&lt;br /&gt;
 caps:42:cpucaps_zone_42:usage	3&lt;br /&gt;
 caps:42:cpucaps_zone_42:value	80&lt;br /&gt;
&lt;br /&gt;
A noter que &amp;quot;value 770&amp;quot; correspond à un &amp;quot;ncpu 7.7&amp;quot;. &amp;quot;zone_26&amp;quot; correspond à la zone dont l&amp;#039;id est 26 (visible avec &amp;quot;zoneadm list -cv&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* il y a également les utilitaires habituels vmstat, iostat, mpstat et sar qui fonctionnent à l&amp;#039;intérieur de zones, mais il faut être très méfiant avec leur résultat : certaines informations concernent uniquement la zone, d&amp;#039;autres concernent le serveur (la zone globale).&lt;br /&gt;
&lt;br /&gt;
=Automatiser/scripter la configuration des zones=&lt;br /&gt;
&lt;br /&gt;
Il est possible de scripter la configuration des zones, plutôt que d&amp;#039;aller systématiquement dans le shell interractif de zonecfg. Ceci est particulièrement utile pour configurer un grand nombre de zones.&lt;br /&gt;
&lt;br /&gt;
* Première méthode : zonecfg sur une seule ligne&lt;br /&gt;
&lt;br /&gt;
On peut passer tous les paramètres désirés à zonecfg pour que tout tienne sur une seule ligne. Voici un exemple :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zone2 &amp;#039;add capped-memory ; set swap=4g ; set physical=4g; end&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Ainsi, on peut facilement faire un script avec une ou quelques lignes par zone.&lt;br /&gt;
&lt;br /&gt;
* Deuxième méthode : créer un fichier de configuration et l&amp;#039;injecter dans zonecfg (principe utilisé pour les clones)&lt;br /&gt;
&lt;br /&gt;
D&amp;#039;abord, on créé un fichier de configuration. Par exemple :&lt;br /&gt;
&lt;br /&gt;
 # vi zoneC.conf&lt;br /&gt;
 create&lt;br /&gt;
 set zonepath=/zones/zoneC&lt;br /&gt;
 set autoboot=true&lt;br /&gt;
 set ip-type=shared&lt;br /&gt;
 add inherit-pkg-dir&lt;br /&gt;
 set dir=/lib&lt;br /&gt;
 end&lt;br /&gt;
 add inherit-pkg-dir&lt;br /&gt;
 set dir=/platform&lt;br /&gt;
 end&lt;br /&gt;
 add inherit-pkg-dir&lt;br /&gt;
 set dir=/sbin&lt;br /&gt;
 end&lt;br /&gt;
 add inherit-pkg-dir&lt;br /&gt;
 set dir=/usr&lt;br /&gt;
 end&lt;br /&gt;
 add fs&lt;br /&gt;
 set dir=/opt&lt;br /&gt;
 set special=/dev/vx/dsk/datadg/zoneC-opt&lt;br /&gt;
 set raw=/dev/vx/rdsk/datadg/zoneC-opt&lt;br /&gt;
 set type=vxfs&lt;br /&gt;
 end&lt;br /&gt;
 add net&lt;br /&gt;
 set address=10.36.209.207/22&lt;br /&gt;
 set physical=bge0&lt;br /&gt;
 end&lt;br /&gt;
 add rctl&lt;br /&gt;
 set name=zone.max-swap&lt;br /&gt;
 add value (priv=privileged,limit=8589934592,action=deny)&lt;br /&gt;
 end&lt;br /&gt;
 add capped-memory&lt;br /&gt;
 set physical=8G&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
Ensuite on insère le tout dans la conf de zoneC :&lt;br /&gt;
&lt;br /&gt;
 # zonecfg –z zoneC –f zoneC.conf&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
	<entry>
		<id>http://blaireaulinux.fr//wiki/index.php?title=Oracle_VM_Server_(LDOM)&amp;diff=587</id>
		<title>Oracle VM Server (LDOM)</title>
		<link rel="alternate" type="text/html" href="http://blaireaulinux.fr//wiki/index.php?title=Oracle_VM_Server_(LDOM)&amp;diff=587"/>
		<updated>2021-04-25T02:44:19Z</updated>

		<summary type="html">&lt;p&gt;AdminWiki : /* Création et configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:solaris]]&lt;br /&gt;
&lt;br /&gt;
=Présentation=&lt;br /&gt;
&lt;br /&gt;
Oracle VM Server (anciennement LDOM, pour &amp;quot;Logical Domains&amp;quot;) est une solution de virtualisation disponible pour les architectures à base de processeurs Sparc T1 et T2. Elle n&amp;#039;est disponible que sous Solaris 10 et plus. Une couche logicielle doit être ajoutée au système Solaris 10 de base. Celle-ci va mettre un place un hyperviseur qui va s&amp;#039;appuyer sur des fonctions internes aux processeurs pour gérer les domaines logiques.&lt;br /&gt;
&lt;br /&gt;
Un domaine logique est une machine virtuelle qui possède son propre système d&amp;#039;exploitation. Le système d&amp;#039;exploitation hôte est le domaine de contrôle. Les autres sont des domaines invités ; ils sont indépendants. Le domaine de contrôle est celui depuis lequel on peut gérer les autres.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Installation du logiciel=&lt;br /&gt;
&lt;br /&gt;
Il s&amp;#039;agit d&amp;#039;un simple package à installer.&lt;br /&gt;
&lt;br /&gt;
Récupérer le fichier OracleVMServer2.0_&amp;lt;version&amp;gt;.zip en allant sur [http://www.oracle.com/virtualization http://www.oracle.com/virtualization].&lt;br /&gt;
&lt;br /&gt;
Il faut ensuite décompresser le fichier et suivre les instructions du README. Je ne détaillerai, car cela peut dépendre  de la version. Et puis c&amp;#039;est relativement simple.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Configuration du domaine de contrôle=&lt;br /&gt;
&lt;br /&gt;
==Création des services du domaine de contrôle.==&lt;br /&gt;
&lt;br /&gt;
 bash-3.00# ldm list&lt;br /&gt;
 NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME&lt;br /&gt;
 primary          active     -n-c--  SP      32    16256M   0.1%  4d 21h 7m&lt;br /&gt;
 bash-3.00# ldm add-vds primary-vds0 primary&lt;br /&gt;
 bash-3.00# ldm list&lt;br /&gt;
 NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME&lt;br /&gt;
 primary          active     -n-cv-  SP      32    16256M   1.8%  4d 21h 14m&lt;br /&gt;
 bash-3.00# ldm list-services primary&lt;br /&gt;
 VDS&lt;br /&gt;
  NAME             LDOM             VOLUME         OPTIONS          MPGROUP        DEVICE&lt;br /&gt;
  primary-vds0     primary         &lt;br /&gt;
 &lt;br /&gt;
 bash-3.00# &lt;br /&gt;
 bash-3.00# &lt;br /&gt;
 bash-3.00# ldm add-vcc port-range=5000-5100 primary-vcc0 primary&lt;br /&gt;
 bash-3.00# ldm add-vsw net-dev=e1000g0 primary-vsw0 primary&lt;br /&gt;
 bash-3.00# &lt;br /&gt;
 bash-3.00# &lt;br /&gt;
 bash-3.00# ldm list-services primary&lt;br /&gt;
 VCC&lt;br /&gt;
  NAME             LDOM             PORT-RANGE&lt;br /&gt;
  primary-vcc0     primary          5000-5100&lt;br /&gt;
 &lt;br /&gt;
 VSW&lt;br /&gt;
  NAME             LDOM             MAC               NET-DEV   ID   DEVICE     LINKPROP   DEFAULT-VLAN-ID PVID VID                  MTU   MODE  &lt;br /&gt;
  primary-vsw0     primary          00:14:4f:fb:85:7d e1000g0   0    switch@0              1               1                         1500        &lt;br /&gt;
 &lt;br /&gt;
 VDS&lt;br /&gt;
  NAME             LDOM             VOLUME         OPTIONS          MPGROUP        DEVICE&lt;br /&gt;
  primary-vds0     primary         &lt;br /&gt;
 &lt;br /&gt;
 bash-3.00#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Affecter des ressources au domaine de contrôle==&lt;br /&gt;
&lt;br /&gt;
Affecter des vcpu et de la RAM au domaine primary. On peut également affecter des périphériques de cryptographie avec le paramètre &amp;quot;set-mau&amp;quot; ; il y en a un par cœur physique.&lt;br /&gt;
&lt;br /&gt;
 # ldm set-mau 1 primary&lt;br /&gt;
 # ldm set-memory 2G primary&lt;br /&gt;
 # ldm set-vcpu 4 primary&lt;br /&gt;
 # ldm list&lt;br /&gt;
 NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME&lt;br /&gt;
 primary          active     -n-cv-  SP      4     2G       0.3%  12m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sauvegarde de la configuration==&lt;br /&gt;
&lt;br /&gt;
Sauvegarde de la configuration, et vérification qu&amp;#039;elle est bien prise en compte&lt;br /&gt;
&lt;br /&gt;
 # ldm list-config&lt;br /&gt;
 factory-default [next poweron]&lt;br /&gt;
 # &lt;br /&gt;
 # ldm add-config initial&lt;br /&gt;
 # &lt;br /&gt;
 # ldm list-config&lt;br /&gt;
 factory-default&lt;br /&gt;
 initial [current]&lt;br /&gt;
&lt;br /&gt;
Si on modifie une valeur, il faut mettre à jour la config, sinon elle sera perdue au reboot.&lt;br /&gt;
&lt;br /&gt;
 # ldm set-config initial&lt;br /&gt;
&lt;br /&gt;
==Activation du daemon du serveur de terminal du réseau virtuel==&lt;br /&gt;
&lt;br /&gt;
Ce daemon est indispensable pour pouvoir se connecter à la console virtuelle de chaque domaine invité.&lt;br /&gt;
&lt;br /&gt;
 # svcadm enable vntsd&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Finalisation==&lt;br /&gt;
&lt;br /&gt;
Il faut maintenant rebooter pour que tout soit pris en compte.&lt;br /&gt;
&lt;br /&gt;
 # init 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Création d&amp;#039;un domaine invité=&lt;br /&gt;
&lt;br /&gt;
==Création et configuration==&lt;br /&gt;
&lt;br /&gt;
Il faut avoir préparé un fichier, une partition ou un disque pour accueillir le système d&amp;#039;exploitation de l&amp;#039;invité. Par exemple, on va créer un volume ZFS de 20g pour accueillir le domaine invité UIRGS88.&lt;br /&gt;
&lt;br /&gt;
 # zfs create rpool/ldoms&lt;br /&gt;
 # zfs create -V 20g rpool/ldoms/uirgs88&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du domaine uirgs88.&lt;br /&gt;
&lt;br /&gt;
 # ldm add-domain uirgs88&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ajout de mémoire.&lt;br /&gt;
&lt;br /&gt;
 # ldm add-memory 12G uirgs88&lt;br /&gt;
&lt;br /&gt;
Pour adapter la valeur après, on peut utiliser &amp;quot;delete-memory 2g&amp;quot; pour retirer 2Go ou &amp;quot;set-memory 10g&amp;quot; pour fixer à 10Go.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ajout de vcpu ou de cores.&lt;br /&gt;
&lt;br /&gt;
 # ldm add-vcpu 16 uirgs88&lt;br /&gt;
&lt;br /&gt;
Ou si on veut ajouter des cores entiers :&lt;br /&gt;
&lt;br /&gt;
 # ldm add-core 2 uirgs88&lt;br /&gt;
&lt;br /&gt;
Et si on veut modifier par la suite :&lt;br /&gt;
&lt;br /&gt;
 # ldm set-core 3 uirgs88&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ajout d&amp;#039;un périphérique de réseau virtuel.&lt;br /&gt;
&lt;br /&gt;
 # ldm add-vnet [linkprop=phys-state] vnet1 primary-vsw0 uirgs88&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;option &amp;#039;&amp;#039;&amp;#039;linkprop=phys-state&amp;#039;&amp;#039;&amp;#039; est nécessaire si on monte deux interfaces pour faire de l&amp;#039;ipmp sur le ldom. Si ce n&amp;#039;est pas votre cas, ne pas utiliser l&amp;#039;option.&lt;br /&gt;
&lt;br /&gt;
Si on doit ajouter des vlans :&lt;br /&gt;
 # ldm set-vnet pvid=60 vid=61, 62, 63 vnet1 primary-vsw0 uirgs88&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;pvid&amp;#039;&amp;#039;&amp;#039; est le vlan principal, celui qui est utilisé si on n&amp;#039;utilise pas de tagging, et aussi durant l&amp;#039;installation. Les &amp;#039;&amp;#039;&amp;#039;vid&amp;#039;&amp;#039;&amp;#039; sont les vlans accessibles si on fait du tagging.&lt;br /&gt;
&lt;br /&gt;
Exporter le volume ZFS en tant que disque virtuel, en l&amp;#039;associant au domaine d&amp;#039;E/S (qui dans notre cas est le domaine de contrôle). (En dessous, respectivement le cas d&amp;#039;un disque dur local entier, une LUN gérée par Veritas (par exemple un DG veritas exporté d&amp;#039;un autre serveur) et un simple fichier).&lt;br /&gt;
&lt;br /&gt;
 Volume ZFS :&lt;br /&gt;
 # ldm add-vdsdev /dev/zvol/dsk/rpool/ldoms/uirgs88 vol1@primary-vds0&lt;br /&gt;
 Disque local :&lt;br /&gt;
 # ldm add-vdsdev /dev/dsk/c2t1d0s2 vol2@primary-vds0&lt;br /&gt;
 LUN sous veritas :&lt;br /&gt;
 # ldm add-vdsdev /dev/vx/dmp/emc_clariion0_18s2 vol3@primary-vds0&lt;br /&gt;
 Simple fichier :&lt;br /&gt;
 # ldm add-vdsdev /chemin/vers/fichier vol4@primary-vds0&lt;br /&gt;
&lt;br /&gt;
Assignation du volume ZFS au domaine invité.&lt;br /&gt;
&lt;br /&gt;
 # ldm add-vdisk vdisk1 vol1@primary-vds0 uirgs88&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition des paramètres de l&amp;#039;eeprom.&lt;br /&gt;
&lt;br /&gt;
 # ldm set-var auto-boot\?=true uirgs88&lt;br /&gt;
 # ldm set-var boot-device=vdisk1 uirgs88&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lier les ressources réseau avec le domaine de contrôle. On vérifie ensuite que le statut est passé à bound.&lt;br /&gt;
&lt;br /&gt;
 # ldm bind-domain uirgs88&lt;br /&gt;
 # ldm list&lt;br /&gt;
 NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME&lt;br /&gt;
 primary          active     -n-cv-  SP      4     2G       0.5%  1d 1h 20m&lt;br /&gt;
 uirgs88          bound      ------  5000    16    12G&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Démarrer le LDOM et s&amp;#039;y connecter. Pour la connexion, il faut noter le port TCP retourné par la commande &amp;quot;ldm list&amp;quot; (ci-dessus c&amp;#039;est le port 5000). Le daemon vntsd doit obligatoirement être démarré.&lt;br /&gt;
&lt;br /&gt;
 # ldm start-domain uirgs88&lt;br /&gt;
 # telnet localhost 5000&lt;br /&gt;
&lt;br /&gt;
==Installation de Solaris sur un domaine invité==&lt;br /&gt;
&lt;br /&gt;
On va maintenant installer Solaris sur le domaine invité. Ҫa peut se faire depuis un dvd, depuis une image iso ou depuis un serveur jumpstart. Nous allons voir comment faire depuis une image iso.&lt;br /&gt;
&lt;br /&gt;
On suppose que l’image iso a été déposée dans /var/tmp/ sur le LDOM de contrôle, par exemple &amp;quot;/var/tmp/sol-10-u9-ga-sparc-dvd.iso&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Arrêter le domaine et dissocier son réseau&lt;br /&gt;
&lt;br /&gt;
 # ldm stop uirgs88&lt;br /&gt;
 # ldm unbind uirgs88&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ajouter le fichier iso en tant que disque du domaine&lt;br /&gt;
&lt;br /&gt;
 # ldm add-vdsdev /var/tmp/sol-10-u9-ga-sparc-dvd.iso iso_vol@primary-vds0&lt;br /&gt;
 # ldm add-vdisk sol10_dvd iso_vol@primary-vds0 uirgs88&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vérifier que le dvd est ajouté dans les volumes :&lt;br /&gt;
&lt;br /&gt;
 # ldm list-bindings&lt;br /&gt;
 [...]&lt;br /&gt;
 VDS&lt;br /&gt;
  NAME             VOLUME         OPTIONS          MPGROUP        DEVICE&lt;br /&gt;
  primary-vds0     vol1                                           /rpool/ldoms/uirgs88&lt;br /&gt;
  iso_vol                                        /var/tmp/sol-10-u9-ga-sparc-dvd.iso&lt;br /&gt;
 [...]&lt;br /&gt;
 DISK&lt;br /&gt;
  NAME             VOLUME                      TOUT ID   DEVICE  SERVER         MPGROUP&lt;br /&gt;
  vdisk1           vol1@primary-vds0                0&lt;br /&gt;
  sol10_dvd        iso_vol@primary-vds0             1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Avant de redémarrer le ldom, il est préférable, mais pas obligatoire, de désactiver l&amp;#039;auto-boot, pour pouvoir booter tranquillement sur l&amp;#039;image du dvd.&lt;br /&gt;
&lt;br /&gt;
 # ldm set-var auto-boot\?=false uirgs88&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On associe et on démarre le ldom.&lt;br /&gt;
&lt;br /&gt;
 # ldm bind uirgs88&lt;br /&gt;
 # ldm start uirgs88&lt;br /&gt;
 LDom uirgs88 started&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite on se connecte et on arrive au prompt &amp;quot;ok&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 # telnet localhost 5000&lt;br /&gt;
 Trying 127.0.0.1...&lt;br /&gt;
 Connected to localhost.&lt;br /&gt;
 Escape character is &amp;#039;^]&amp;#039;.&lt;br /&gt;
 &lt;br /&gt;
 Connecting to console &amp;quot;uirgs88&amp;quot; in group &amp;quot;uirgs88&amp;quot; ....&lt;br /&gt;
 Press ~? for control options ..&lt;br /&gt;
 &lt;br /&gt;
 {0} ok&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On va maintenant afficher les alias pour vérifier qu&amp;#039;on voit bien celui associé à notre DVD, puis on va booter sur le slice &amp;quot;f&amp;quot; de cd DVD.&lt;br /&gt;
&lt;br /&gt;
 {0} ok devalias&lt;br /&gt;
 sol10_dvd                /virtual-devices@100/channel-devices@200/disk@1&lt;br /&gt;
 vdisk1                   /virtual-devices@100/channel-devices@200/disk@0&lt;br /&gt;
 vnet1                    /virtual-devices@100/channel-devices@200/network@0&lt;br /&gt;
 net                      /virtual-devices@100/channel-devices@200/network@0&lt;br /&gt;
 disk                     /virtual-devices@100/channel-devices@200/disk@0&lt;br /&gt;
 virtual-console          /virtual-devices/console@1&lt;br /&gt;
 name                     aliases&lt;br /&gt;
 {0} ok boot sol10_dvd:f&lt;br /&gt;
&lt;br /&gt;
Et cette fois l&amp;#039;installation démarre.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Dans le cas ou on n&amp;#039;arriverais pas à obtenir le prompt &amp;quot;ok&amp;quot; à cause de messages, on peut le forcer à y aller avec la combinaison de touches &amp;quot;~#&amp;quot; qui envoie un break ; ça revient à faire un ctrl-A.&lt;br /&gt;
&lt;br /&gt;
Pour voir les séquences de touche existantes, il faut faire &amp;quot;~?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat obtenu :&lt;br /&gt;
&lt;br /&gt;
 VNTSD commands&lt;br /&gt;
 ~# --Send break&lt;br /&gt;
 ~^B --Send alternate break&lt;br /&gt;
 ~. --Exit from this console&lt;br /&gt;
 ~w --Force write access&lt;br /&gt;
 ~n --Console next&lt;br /&gt;
 ~p --Console previous&lt;br /&gt;
 ~? --Help&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Retirer des ressources au domaine invité==&lt;br /&gt;
&lt;br /&gt;
Voici quelques exemples de suppression de ressources :&lt;br /&gt;
&lt;br /&gt;
 ldm rm-vdisk [-f] emc_clariion0_34 mon_ldom&lt;br /&gt;
 ldm rm-vnet monldom_vnet0 mon_ldom&lt;br /&gt;
&lt;br /&gt;
Lorsqu&amp;#039;on retire un vdisk d&amp;#039;un ldom en marche, on peut avoir une erreur avec le message &amp;#039;&amp;#039;&amp;#039;&amp;quot;Device being used by VxVM&amp;quot;&amp;#039;&amp;#039;&amp;#039;. Ca arrive quand le vdisk était utilisé par VxVM (Veritas Volume Manager), même si on a retiré le vdisk du DG et qu&amp;#039;on a fait un &amp;#039;&amp;#039;&amp;#039;&amp;quot;vxdisk rm&amp;quot;&amp;#039;&amp;#039;&amp;#039;. Si c&amp;#039;est le cas, inutile de faire &amp;quot;vxdisk rm&amp;quot;, à la place il faut libérer le vdisk avec :&lt;br /&gt;
&lt;br /&gt;
 vxdmpadm disable dmpnodename=emc_clariion0_27&lt;br /&gt;
&lt;br /&gt;
Ensuite on peut faire &amp;#039;&amp;#039;&amp;#039;&amp;quot;ldm rm-vdisk&amp;quot;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==Supprimer un domaine invité==&lt;br /&gt;
&lt;br /&gt;
 ldm destroy mon_ldom&lt;/div&gt;</summary>
		<author><name>AdminWiki</name></author>
	</entry>
</feed>