Différences

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

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
tutoriel:donnees_stockees_dans_un_systeme_de_fichiers_zfs [Le 08/04/2026, 17:20] – [Mise disposition de cet espace disque] Plus de détails. geoletutoriel:donnees_stockees_dans_un_systeme_de_fichiers_zfs [Le 13/05/2026, 16:29] (Version actuelle) – [Solution automatique.] geole
Ligne 9: Ligne 9:
  
 [[https://wiki.ubuntu.com/Kernel/Reference/ZFS|Lire aussi le wiki Ubuntu en anglais.]] [[https://wiki.ubuntu.com/Kernel/Reference/ZFS|Lire aussi le wiki Ubuntu en anglais.]]
 +[[https://openzfs.github.io/openzfs-docs/man/index.html|et les commandes]]
  
  
Ligne 23: Ligne 24:
 Grâce à l'application [[https://doc.ubuntu-fr.org/gparted|gparted]], fabriquer deux partitions de tailles identiques, de préférence dans deux disques différents. \\ Grâce à l'application [[https://doc.ubuntu-fr.org/gparted|gparted]], fabriquer deux partitions de tailles identiques, de préférence dans deux disques différents. \\
 Si les partitions utilisées sont déjà formatées ZFS, il est nécessaire de les reformater (en EXT4 par exemple) car la création sera refusée. Sinon, les partitions peuvent être déclarées non-formatées. La taille minimale des partitions est de **64 Mo.** Si les partitions utilisées sont déjà formatées ZFS, il est nécessaire de les reformater (en EXT4 par exemple) car la création sera refusée. Sinon, les partitions peuvent être déclarées non-formatées. La taille minimale des partitions est de **64 Mo.**
-==== Mise  disposition de cet espace disque ====+!==== Mise  disposition de cet espace disque ====
 La mise à disposition pour  l'utilisateur de cet espace prévu, se fait obligatoirement en ligne de commande.\\ L'auto-documentation (man zpool create) n'est pas mauvaise mais elle dispose de peu d'exemples pratiques.  \\ Voici un exemple de commande à exécuter. La mise à disposition pour  l'utilisateur de cet espace prévu, se fait obligatoirement en ligne de commande.\\ L'auto-documentation (man zpool create) n'est pas mauvaise mais elle dispose de peu d'exemples pratiques.  \\ Voici un exemple de commande à exécuter.
 <code bash>sudo zpool create -f -m /media/ZFS -O encryption=on -O keyformat=passphrase -O keylocation=prompt -o feature@lz4_compress=enabled MesDonneesPersonnelles raidz1 /dev/sda18 /dev/sdb11</code>  <code bash>sudo zpool create -f -m /media/ZFS -O encryption=on -O keyformat=passphrase -O keylocation=prompt -o feature@lz4_compress=enabled MesDonneesPersonnelles raidz1 /dev/sda18 /dev/sdb11</code> 
   * ''-f'' Indique de forcer le montage.    * ''-f'' Indique de forcer le montage. 
       - Permet de détruire le contenu des espaces disques sélectionnés.       - Permet de détruire le contenu des espaces disques sélectionnés.
-  * ''-m'' Indique le point de montage à utiliser. +  * ''-m'' Indique le point de montage à utiliser.        
-  *       - Ne pas mettre cette option équivaut à effectuer le montage dans le point de montage racine **/**.+      - Ne pas mettre cette option équivaut à effectuer le montage dans le point de montage racine **/**.
       - Choisir **/media/** en 24.04 à cause des applications snap.       - Choisir **/media/** en 24.04 à cause des applications snap.
       - Choisir **/run/media/** en 26.04 à cause des applications snap.        - Choisir **/run/media/** en 26.04 à cause des applications snap. 
Ligne 40: Ligne 41:
        - Est obligatoire lorsque le logiciel n'est pas lui-même chiffré afin d'éviter que quiconque  puisse en connaître la valeur.        - Est obligatoire lorsque le logiciel n'est pas lui-même chiffré afin d'éviter que quiconque  puisse en connaître la valeur.
        - Sera à frapper **en mode aveugle** à chaque demande de montage ((Sauf à utiliser  un service systemd)). Ce qui exclu quelque chose de compliqué.        - Sera à frapper **en mode aveugle** à chaque demande de montage ((Sauf à utiliser  un service systemd)). Ce qui exclu quelque chose de compliqué.
-   * ''-O  keylocation=/ / /etc/secret'' (( Attention: Les 2 premiers slashs ne sont pas suivis d'espace)) Indique que la valeur de la phrase de chiffrement est stockée  dans le fichier indiqué.+   * ''-O  keylocation=file:/ / /etc/secret'' (( Attention: Les 2 premiers slashs ne sont pas suivis d'espace)) Indique que la valeur de la phrase de chiffrement est stockée  dans le fichier indiqué.
         - Est utilisable lorsque le logiciel est  lui-même chiffré. Ce qui normalement exclu le risque que quiconque puisse en connaître la valeur.         - Est utilisable lorsque le logiciel est  lui-même chiffré. Ce qui normalement exclu le risque que quiconque puisse en connaître la valeur.
         - Sera à frapper  uniquement à l'initialisation du fichier. Ce qui permet quelque chose de compliqué.         - Sera à frapper  uniquement à l'initialisation du fichier. Ce qui permet quelque chose de compliqué.
Ligne 63: Ligne 64:
 <code bash>sudo zfs mount -vl MesDonneesPersonnelles</code> <code bash>sudo zfs mount -vl MesDonneesPersonnelles</code>
 Le mot de déchiffrement sera demandé  à l'écran de l'utilisateur. Le mot de déchiffrement sera demandé  à l'écran de l'utilisateur.
-==== Solution standard==== +<note tip>Si l'espace disque n'est pas chiffré,  le  montage automatique de cet espace disque   est bien réalisé à condition que ses caractéristiques soient restées identiques. Notamment que  l'O.S.  qui veut l'utiliser soit celui  que venait de l' utiliser.</note> 
-Un service **utilisateur** demande la valeur  de la clé de chiffrement au moment de la connexion de l'utilisateur+==== Solution automatique. ==== 
-=== Le script de montage === +Des services utilisateur [[:/systemd|systemd]] peuvent prendre en charge ce montage afin de [[https://forum.ubuntu-fr.org/viewtopic.php?pid=22895246#p22895246|simplifier]] cette contrainte. 
-<code bash>cat<<'EOF'>$HOME/ZFS.sh +===== Réutilisation de cet espace disque par un autre O.S. ===== 
-#!/bin/bash +==== De type ubuntu ==== 
-Data=MesDonneesPersonnelles +Si cet espaace est chiffré en utilisant un fichier de chiffrement, il faut penser à cŕéer un tel fichier avec le bon contenu dans cet O.S\\ Dans tous les cas, il est nécessaire d’importer l’espace en utilisant cette commande. 
-Statut=$(zpool list  $Data |tail -1 ) +<code bash>sudo import MesDonneesPersonnelles</code> 
-if [[ !  $Statut =~  "$Data"  ]] ; then  +==== De type windows ==== 
-   echo  Importation des données par  le service USER de ZFS   +En plus des contraintes ubuntu, comme les noms de fichiers n’utilisent pas la méme norme, il sera nécessaire de modifier les noms des disques décrivant les entités  utilisées, le nom du point de montage qui devient **UneLettre:** et le nom du fichier contenant la phrase de déchiffrement\\ Si ces modifications sont faites en dur, un retour dans ubuntu, obligera à remettre en état
-   sudo zpool export  $Data ### Pour se prémunir des noms de partitions des disques externes susceptible de changer de valeur si besoin + 
-   sudo zpool import -f $Data +   
-fi + 
-sudo zfs set mountpoint=/media/$Data $Data + 
-for (( i=1; i < 9; i++ ));  do  +
-    echo  itération-$i dans le service USER de ZFS   +
-    Statut=$(zfs get mounted  $Data |tail -1 ) +
-    if [[  $Statut =~  "no"  ]] ; then  +
-       ret=`DISPLAY=:1 zenity --entry --title="Montage de la partition $Data ($i/8)." --text "veuillez fournir la phrase de déchiffrement de $Data." ` +
-       sleep 2 +
-       sudo zfs mount -l $Data <<<$ret +
-    else i=10     +
-    fi    +
-done +
-if  [[ ! $Statut =~  "yes"  ]] ; then +
-    DISPLAY=:1 zenity --error --text "La partition $Data n'est pas disponible; veuillez investiguer!" +
-fi +
-EOF +
-sleep 1 +
-chmod +x /$HOME/ZFS.sh +
-cat $HOME/ZFS.sh +
-$HOME/ZFS.sh</code> +
-=== Le script d'automatisation === +
-<code bash>mkdir -pv $HOME/.config/systemd/user +
-cat <<'EOF'>$HOME/.config/systemd/user/ZFS.service +
-[Unit] +
-Description=Montage de la partition de données personnelles. +
-DefaultDependencies=no +
-[Service] +
-Type=simple +
-ExecStartPre=echo  Montage de la partition de données personnelles ZFS.  +
-ExecStart=/home/%u/ZFS.sh +
-ExecStopPost=echo Le ontage de la partition de données personnelles ZFS  est terminé. +
-StandardOutput=journal+console +
-[Install] +
-WantedBy=default.target +
-EOF +
-sleep 1 +
-systemctl  --user stop ZFS.service ; systemctl --user  disable ZFS.service ; systemctl --user daemon-reload;  +
-systemctl --user enable ZFS.service ; systemctl --user start ZFS.service  +
-systemctl --user --no-pager -l status ZFS.service</code> +
  
-**La valeur de la clé de déchiffrement doit être dans un fichier**. Il  existe quatre solutions:  
-  - Le logiciel  est déjà chiffré. Dans ce cas  la valeur de la clé de chiffrement  peut être dans un fichier stocké sous** /root**. Solution aisément installable. 
-  - Le logiciel n'est pas chiffré, La clé de chiffrement  peut être dans une clé usb que l'utilisateur branche au moment de se connecter et enlève aussitôt la connexion réalisée. C'est la solution privilégiée par les concepteurs. Solution aisément installable avec un risque de  perdre la clé ou qu'elle soit lue par une  personne non-habilitée. 
-  - La clé de déchiffrement est stockée dans le [[:seahorse|trousseau de clé]]. 
-  - Un service **système** demande à l'utilisateur la valeur  de la clé de chiffrement, la stocke dans un fichier, ouvre la structure chiffrée et détruit le contenu du fichier. Cela ne laisse que quelques instants cette valeur disponible à la vue de tout le monde.... C'est un développement personnel susceptible d'être amélioré par qui connaît mieux. \\ Il est basé sur  les services de [[:/systemd|systemd]] qui  semblent destinés à se passer d'utilisateur. Le dialogue à l'écran étant inconnu. 
-S'affranchir de la contrainte des mots de passe si cela n'a pas déjà été fait: 
-<code bash>echo $USER  ALL = '(ALL)' NOPASSWD: /usr/sbin/zpool, /usr/sbin/zfs |sudo tee /etc/sudoers.d/zfsbis</code> 
-Devenir administrateur en frappant **sudo -i** pour définir la nouvelle commande de création de l'espace à utiliser.  
-<code bash>echo -n LeBonMotDeDéchiffrement | tee /root/ZFS.pwd 
-wc /root/ZFS.pwd ; cat /root/ZFS.pwd 
-zpool create -f -m   /media/ZFS -O encryption=on -O keyformat=passphrase -O keylocation=file:///root/ZFS.pwd -o feature@lz4_compress=enabled MesDonneesPersonnelles raidz /dev/sda18 /dev/sdc11 
-shred  /root/ZFS.pwd</code> 
-Penser à personnaliser la première ligne  et le nom retenu pour la désignation de l'espace de stockage. 
-=== Le script de montage avec demande de mot de passe  la connexion.=== 
-<code bash>cat<<'EOF'>/root/ZFS.sh 
-#!/bin/bash 
-Data=MesDonneesPersonnelles 
-echo  Entrée dans le service USER de ZFS  | tee -a  /dev/kmsg 
-for (( i=1; i < 300; i++ ));  do 
-MOI=$(loginctl list-users | head -2 | tail -1) 
-IDn=$(echo $MOI | cut -d" " -f1) ; IDx=$(echo $MOI | cut -d" " -f2) ; 
-if [[  $IDn -gt  999   ]] ; then 
-   i=300 
-else    
-   sleep 1 
-   echo  itération-1-$i dans le module USER de ZFS  | tee -a  /dev/kmsg 
-fi  
-done 
-for (( i=1; i < 9; i++ ));  do  
-    echo  itération-2-1-$i dans le service USER de ZFS  | tee -a  /dev/kmsg 
-    Statut=$(zfs get mounted  $Data |tail -1 ) 
-    if [[  $Statut =~  "no"  ]] ; then  
-       ret=`sudo -u $IDx DISPLAY=:1 zenity --entry --title="Montage de la partition $Data ($i/8)." --text "veuillez fournir la phrase de déchiffrement de $Data." ` 
-       echo $ret  > /root/ZFS.pwd 
-       sleep 1 
-       zfs mount -vl $Data        
-       shred -n 0 -z  /root/ZFS.pwd  
-    else i=10     
-    fi    
-done 
-if  [[ ! $Statut =~  "yes"  ]] ; then 
-   sudo -u $IDx DISPLAY=:1 zenity --error --text "La partition $Data n'est pas disponible; veuillez investiguer!" 
-fi 
-EOF 
-sleep 1 
-chmod +x /root/ZFS.sh 
-cat /roo/ZFS.sh 
-/root/ZFS.sh</code> 
-Penser à personnaliser la troisième ligne. Cela ne coùte rien de l'essayer. 
-=== Le script de montage avec avec utilisation du trousseau de clé.=== 
-Voir chapitre dédié. 
-=== Le script d'automatisation === 
-<code bash>cat <<'EOF'>/etc/systemd/system/ZFS.service 
-[Unit]  
-Description=Montage de la partition de données personnelles. 
-DefaultDependencies=no 
-[Service] 
-Type=simple 
-TimeoutSec=5minutes 
-ExecStartPre=echo  Montage de la partition de données personnelles ZFS. |  tee -a  /dev/kmsg 
-ExecStartPre=sleep 60 
-# Temps approximatif pour l'arrivée de l'écran d'accueil 
-ExecStartPre=echo  Montage de la partition de données personnelles ZFS ( Fin de sommeil ) |  tee -a  /dev/kmsg 
-ExecStart=/root/ZFS.sh 
-ExecStopPost=echo Montage de la partition de données personnelles ZFS  est terminé  |  tee -a  /dev/kmsg 
-StandardOutput=journal+console 
-StandardError=journal+console 
-[Install] 
-WantedBy=multi-user.target 
-EOF 
-sleep 1 
-##### Essais. 
-systemctl  stop ZFS.service ; systemctl  disable ZFS.service ; systemctl --user daemon-reload;  
-systemctl enable ZFS.service ; systemctl start ZFS.service  
-systemctl  --no-pager -l status ZFS.service   
-exit</code> 
-==== Solution avec utilisation du trousseau de clé==== 
-Il est nécessaire d'installer une application permettant de mettre à jour le trousseau de clé et de récupérer son contenu sans utiliser le mode graphique. Voir [[https://forum.ubuntu-fr.org/viewtopic.php?id=2094167|cette discussion]] 
-  - Installer un logiciel. <code bash>sudo apt install libsecret-tools</code> 
-  - Y stocker la phrase secrète.<code bash>secret-tool store --label='Pour accéder à la partition ZFS'  keyn valuen </code> La réponse à la première question est la valeur de la clé de chiffrement. Il faudra par la suite fournir son mot de passe  pour valider l'opération . Il semble risqué d'en mettre un autre qu'il faudrait alors gérer.  
-  - Vérifier que la clé de chiffrement correspond bien. <code bash>echo -n .$(secret-tool lookup keyn valuen).</code> 
-  - En cas de gros problème, il est possible de supprimer cette saisie <code bash>rm -v $HOME/.local/share/keyrings/Trousseau_de_clés_par_défaut.keyring </code> 
  
-puis créer le script de montage de la partition. <code bash>cat<<'EOF'>$HOME/ZFS.sh 
-#!/bin/bash 
-Data=MesDonneesPersonnelles 
  
-if [[ !  $Statut =~  "$Data"  ]] ; then  
-   echo  Importation des données par  le service USER de ZFS 
-   sudo zpool clear   $Data 
-   sudo zpool export  $Data ### Pour se prémunir des noms de partitions des disques externes susceptible de changer de valeur si besoin 
-   sudo zpool import -f $Data 
-fi 
-sudo zfs set mountpoint=/media/$Data $Data 
-sudo zfs mount -l $Data <<<$(secret-tool lookup keyn valuen) 
-Statut=$(zfs get mounted  $Data |tail -1 ) 
-[ ! $Statut =~  "yes"  ]] ; then 
-    DISPLAY=:1 zenity --error --text "La partition $Data n'est pas disponible; veuillez investiguer!" 
-fi 
-EOF 
-sleep 1 
-chmod +x /$HOME/ZFS.sh 
-cat $HOME/ZFS.sh 
-$HOME/ZFS.sh </code> 
-Le script d'automatisation reste identique au précédant. \\ 
-Nota. Si le trousseau de clé a été fabriqué avant la création  de la partition, cette technique  est utilisable pour fournir la phrase de déchiffrement lors de cette création.