Comment déplacer un dossier, exemple /home ?
Il y a quelque temps, vous avez installé votre distribution favorite. Mais comme c'était la première fois, vous avez sous ou sur estimé des partitions, notamment votre /home qui devient maintenant trop à l'étroit dans son espace mémoire. Nous allons voir ici comment le déplacer.
La problématique est simple, mais la mise en œuvre est assez délicate. Donc avant toute chose SAUVEGARDEZ !
Cet article n'explique pas comment installer, partitionner et "formater" un disque dur.
Pour vraiment comprendre ce qui est fait, il vaut mieux déjà avoir manipulé sous Linux.
Les exemples qui seront donnés correspondent au déplacement d'un /home/user1 positionné sur un Volume Logique vers un autre Volume Logique lui-même situé sur un autre Groupe de Volumes. Cependant c'est exactement la même démarche avec des partitions classiques, il n'y a que le chemin qui change :
- /dev/sdb1 par exemple pour une partition sur un disque dur que l'on vient d'ajouter, de partitionner et de "formater"
- /dev/vg_user_data/lv_user1 par exemple pour un espace mémoire sur un Volume Logique
Cette page trouve son application dans l'article "Installer la Mandriva 2010.0 Suite : gérer les LV".
1 - Pré-requis
Lorsqu'on déplace un dossier, LE pré-requis est qu'il ne soit pas en cours d'utilisation. Ainsi on ne peut :
- déplacer son /home/ en étant connecté dessus en session graphique
- déplacer le dossier système en étant connecté sur le système
Par contre on peut :
- en étant connecté en mode console en tant qu'administrateur déplacer le /home, le /usr/var, le /usr/src
- en étant connecté avec un LiveCD on peut tout faire. Mais cela demande un minimum d'attention et de connaissance.
Pour la suite nous serons sur le système connecté en tant qu'administrateur en mode console (ou terminal). Pour cela, plusieurs possibilités selon les distributions :
- démarrer en mode failsafe, recovery ou similaire
- ou plus simple après avoir démarré sa session graphique, tapez dans un terminal :
$ sudo telinit 1
ou en tant qu'administrateur
# telinit 1
Si les screenshots qui illustreront la suite ne correspondent pas à l'environnement que je viens de donner, c'est tout simplement parce que je déplace le home d'un utilisateur qui n'est pas moi.
2 - Déplacement du dossier /home/user1 sur un autre LV
Nous avons créé un Groupe de Volumes (VG), ici vg_user_data, nous allons maintenant pouvoir y créer des Volumes Logiques (LV) et y transférer nos dossiers. (Pour plus d'informations voir Comment gérer son espace mémoire avec LVM (Logical Volume Manager) ?)
La méthode de transfert est la même quelque soit le dossier (enfin presque ! cf. supra), ici il s'agit de déplacer /home/user1 qui se trouve intégré à /home lui-même sur /dev/vg01/3 (qui est un lien sur /dev/mapper/vg01-3) comme on peut le voir avec la commande df :
L'espace mémoire cible est un autre LV sur un autre VG (vg_user_data)
2.1 - Préparer l'espace mémoire cible
Tout d'abord il nous faut créer notre nouvel espace mémoire, ici un Volume Logique (LV) avec lvcreate (mais cela pourrait être la création d'une partition avec fdisk) :
Il nous faut maintenant attribuer un Système de Fichiers (fs) à ce nouvel espace mémoire (les "Windowsiens" parlent de formatage) avec mkfs :
2.2 - Le transfert d'un espace mémoire à un autre
Le déplacement proprement dit, va se faire en 2 temps :
- une copie
du dossier à déplacer sur son nouvel espace de stockage que l'on montera provisoirement sur /mnt,
- puis le montage du nouvel espace de stockage à son emplacement définitif.
# mkdir /mnt/user1 # mount /dev/vg_user_data/lv_user1 /mnt/user1/ # cp -a /home/user1 /mnt
Assurez-vous que vos fichiers ont bien été copiés sous /mnt/user1 (En principe c'est le cas, puisque l'option -a pour archive, inclut la récursivité et le maintien des droits et propriétaires). C'est le cas ici, comme on peut le voir :
Si tout est bon, on peut procéder à la 2ième étape, celle de la bascule :
Quelques remarques :
- au lieu de rm -Rf /home/user1 les plus prudents préféreront un mv /home /home_old qu'ils supprimeront une fois sûrs que tout fonctionne.
- par erreur j'ai oublié de supprimer ce dossier /home/user1 : le montage fonctionne et est fonctionnel. Le seul problème c'est que l'ancien espace mémoire n'est pas libéré, et à moins de démonter le nouvel espace mémoire vous ne pouvez plus le faire.
- l'instruction chown est ici utile, mais elle n'est pas nécessaire s'il s'agit de /home car il n'y a rien à changer puisque les propriétaires (uid et gid) sont root et root.
Et voilà nous avons déplacé notre dossier /home/user1 sur un espace mémoire sous gestion LVM. Une dernière vérification nous montre que c'est bien le cas : nous avons nos fichiers (avec ls) sur leur nouvel espace (avec df)
2.3 - Autres considérations
Vous pouvez facilement (sous session graphique) faire de même pour le dossier /usr/src. En effet ce dossier, vide à l'installation, peut grossir très vite, notamment lorsque vous voudrez modifier votre noyau. Il contiendra alors les sources mais également les fichiers temporaires de compilation et bien sûr le résultat de la compilation. Avec un dizaine de Go vous devriez être tranquille (et si ce n'est pas assez vous agrandirez votre LV !)
Le dossier /var est aussi intéressant à mettre sur un LV, car comme son nom le laisse supposer sa taille peut-être assez variable selon les applications que vous faites tourner sur votre système.
Pour la racine système (/) et ce qu'elle comporte encore, c'est plus compliqué et plus risqué. Car vous vous doutez que toucher aux fichiers système alors que vous êtes en train de travailler dessus ne va pas être possible. C'est pour cela que je conseille d'arrêter là.
Cependant les plus téméraires pourront s'inspirer de ce lien ou de cet autre. L'idée générale est de faire les mêmes manip mais à partir d'un autre système de type liveCD.
Bon c'est pas tout, mais on a pas fini.
3 - Inscrire le tout dans /etc/fstab
Il nous reste une étape importante avant de redémarrer notre micro : il nous faut inscrire nos nouveaux points de montage dans /etc/fstab, sinon plantage assuré !
Pour chaque nouveau point de montage, il faudra ajouter une ligne du genre au fichier /etc/fstab :
/dev/vg_user_data/lv_user1 /home/user1 ext4 relatime 1 2
Pour cela utilisez votre éditeur préféré ou installé (nano, vi ou emacs).
N'oubliez pas de supprimer, s'il y a lieu, les anciennes entrées. Par exemple vous avez déplacé votre /home d'une partition à une autre; dans ce cas vous avez forcément une entrée correspondante à l'ancienne partition qu'il vous faudra remplacer par la nouvelle.
Si vous creusez le sujet, vous découvrirez qu'aujourd'hui on ne donne plus le chemin du device (dans l'exemple ci-dessus : /dev/vg_user_data/lv_user1) mais son UUID ( Universaly Unique IDentifier). Sauf que j'ai essayé pour des LV (l'UUID est donné par lvdisplay) et cela ne marche pas, donc ... retour au path classique.
Si vous êtes sur de partitions classiques, vous connaitrez l'UUID de vos (vrais) partitions, en lançant :
$ ls -al /dev/disk/by-uuid/
4 - Autres liens sur le sujet
Pour ceux qui en veulent plus, ces liens peuvent les intéresser :
- http://astuce.linux.free.fr/Les_partitions/D%E9placement_du_contenu_d%27une_partition.html
- http://www.commentcamarche.net/forum/affich-2154980-home-deplacer-sur-une-autre-partition bon c'est une discussion de forum, mais cela montre qu'une petite erreur d'orthographe peut mettre la panique dans notre tête et dans le système
- http://doc.ubuntu-fr.org/deplacer_root comme son url l'indique : pour déplacer le root
- et pour terminer, j'ai rencontré un problème de reconnaissance de mes LV inscrites dans /etc/fstab. Voir cet article "Comment activer et monter automatiquement des Volumes Logiques (LV) ?" pour la correction.