« Monter un système de fichiers endommagé | Home | Grub, quelques détails. »
Comment déplacer son /home
posté par tellmewhy le 6 décembre 2006
Article rédigé par tellmewhy.
Si on a oublié de faire une partition séparée au moment de l’installation, ou pour toutes autres raisons, on peut être améné à déplacer ses données personnelles pour les mettre sur une partition dédiée. Je vous propose ci-dessous une procédure détaillée pour faire cela.
1° On veut désolidariser /home de / et le placer dans une partition séparée.
Préalable à ceci, la partition cible doit être préparée et formatée en conséquence (système de fichiers ext3). Petite commande simple pour formater au format ext3 :
sudo mkfs.ext3 -v -m1 /dev/votre_partition
(-m1 limite à 1% la place réservée à root dans le fs).
On clôt sa session et on se logue dans une console avec ctr + alt + F2 pour faire : sudo telinit 1
Lorsqu’on est sous environnement graphique, le /home est utilisé, et de ce fait on ne peut poursuivre la procédure. Cette commande telinit nous fait passer en mode single (ou recovery). Pour revenir en mode normal, il faudra utiliser la commande telinit2 (notez la différence, et sans sudo puisque vous venez du mode recovery vous n’en avez pas besoin).
Voici deux liens pour en savoir plus sur la commande telinit :
- http://www.linux-france.org/article/sys/init-jaco/init-jaco-3.html
- http://www.debianadmin.com/debian-and-ubuntu-linux-run-levels.html
Mais si pour des questions liées a des problèmes du splash avec certains pilotes de carte graphique vous restez bloqué après avoir tapé sudo telinit 1 alors faites toutes vos manipulations depuis le mode recovery en redémarrant l’ordinateur.
Exemple pour déplacer /home sur /dev/hda2
mkdir /mnt/new_home ( pour créer le point de montage )
mount /dev/hda2 /mnt/new_home ( pour monter la partition qui recevra le futur /home )
cp -a /home/. /mnt/new_home/ ( copie /home/ sur la nouvelle partition. Notez le . après / et non le * et l’utilisation de cp -a Voir explications )
mv /home /home_old ( renomme /home et servira de sauvegarde en cas de problème )
mkdir /home ( crée le nouveau répertoire /home qui sera le nouveau point de montage )
umount /mnt/new_home ( démonte /dev/hda2 pour pouvoir le remonter après modification du fstab )
Modifier le fstab :
nano -w -B /etc/fstab ( ou tout autre éditeur ; l‘option -B fera une copie de l’ancien fstab )
et y ajouter :
/dev/hda2 /home ext3 defaults 0 2 ( adapter hda2 )
Par contre, si l’on utilise les UUID il faudra auparavant en récupérer la valeur avec l’utilitaire blkid. Exemple de commande pour connaitre l’uuid de la partition /dev/sda2 :
blkid | grep hda2
et le résultat de la commande s’affichera sous la forme :
/dev/hda2: UUID=”5e3a2a15-15a1-3217-bd57-2ed463eb41a3″ TYPE=”ext3″
Le fichier /etc/fstab sera alors modifié sous la forme :
# /dev/hda2
UUID=5e3a2a15-15a1-3217-bd57-2ed463eb41a3 /home ext3 defaults 0 2
Après avoir enregistré les modifications de /etc/fstab on pourra monter la nouvelle partition :
mount /home ( monte la nouvelle partition )
Puis
telinit 2
ctrl + alt + F7 et on se logue.
On vérifie que tout est ok et on supprimera plus tard /home_old par la commande sudo rm -Rf /home_old/ (* attention aux fautes de frappe *)
Et pour s’assurer que /home est bien devenue indépendante on fait :
mountpoint /home La réponse doit-être :/home is a mountpoint
PS: pour ceux qui sont passés au mode recovery par un redémarrage telinit 2 est inutile. Donc redémarrage de l’ordinateur
2° On veut faire le contraire on veut rattacher le /home d’une partition séparée au / :
(par exemple pour pouvoir opérer un partitionnement différent et temporairement ou définitivement supprimer la partition indépendante /home)
Il est prudent de s’assurer qu’il y a la place nécessaire pour cet opération.
df -hT /home
df -hT /
On part du principe que l’on est en single user avec telinit 1 comme vu plus haut ou le mode recovery si telinit 1 bloque.
mkdir /temphome ( pour créer le point de montage )
cp -a /home/. /temphome/ ( copie /home/ sur la nouvelle partition )
(notez le . après / et non le * et l’utilisation de cp -a)
là surtout on vérifie bien que tout les fichers aient été copiés.
Pour comparer d’ailleurs on peut utiliser
df -hT /home
puis :
df -hT /temphome ( ceci donnera une indication que tout est copié mais sans plus). Continuons :
cd /
umount /home
nano -w -B /etc/fstab
On commente la ligne contenant l’ex /home (en ajoutant un # devant)
# /dev/hda2
UUID=******* /home ext3 defaults 0 2
après :
# /dev/hda2
# UUID=****** /home ext3 defaults 0 2
si vous n’avez pas d’UUID c’est la ligne commençant par /dev/??? /home ext3 defaults 0 2
et on n’a pas besoin d’ajouter d’autres lignes puisque /home n’est plus une partition indépendante. Plus tard on pourra d’ailleurs supprimer la ligne commentée, puisqu’elle sera obsolète.
rmdir /home/
mv/temphome/ /home
On redémarre et si tout va bien mais que l’on a encore des doutes et que l’on veut savoir si la /home n’est plus sur une partition indépendante on fait :
mountpoint /home résultat pour une /home fusionnée avec /home :
(/home is not a mountpoint)
résultat pour une /home sur une partition /indépendante :
(/home is a mountpoint)
Quelques précisions sur la commande cp -a:
cp -a est d’après le man cp l’équivalent de -dpR
-d = identique à –no-dereference –preserve=link
–no-dereference ne pas suivre les liens symboliques
-p = identique à –preserve=
mode, ownership, timestamps, et si possible les attributs additionnels links : links,all
-R = r, –recursive copier récursivement les répertoires
cp -a est utilisé pour faire une copie à l’identique (sauvegarde par exemple) et peut-être assimilé à rsync -a /source/ /destination/ auquel on peut ajouter l’option H. Attention cependant à leur emploi si on utilise les ACL.
cp -a ne doit pas être utilisé sur du vfat ou du ntfs.
tellmewhy
Topics: linux |

25 janvier 2007 at 19:31
J’ai suivi ce tuto par recovery mode (en fait j’ai pas bien compris comment on lance telinit
) mais c’est tout bon pour déplacer son /home dans un autre répertoire!
Pourtant une toute petite erreur dans options de fstab –> defaults et non default
Autre remarque pour un ignare comme moi qui a l’impression que rien n’a changé dans son /home
il suffit de cliquer sur propriété et l’on constate que l’espace libre n’est plus identique à celui de / c’est bébête mais efficace c’est bien la preuve que l’on a changé de partition.
Merci
26 janvier 2007 at 0:01
Merci Bhubuntu.
Tu avais raison, c’était bien une erreur pour fstab : defaults et non default.
Concernant ta partition /home pour vérifier qu’elle est indépendante,
tu peux le faire avec la commande mountpoint : l’avantage c’est que tu peux le faire tout de suite en restant dans le mode recovery.
Concernant telinit.
Pour lancer telinit, c’est très simple en prenant compte des restrictions que j’ai mentionné.
Quand on veut quitter l’environnment graphique, on peut fermer la session sans pour autant redémarrer et on se retrouve alors devant le login. Il suffit alors d’appuyer simultanément sur les touches :
Ctrl + Alt + F2 . Grâce à cela on retourne devant un login, qui lui n’est pas en environnement graphique. On rentre son login, puis son mot de passe. À partir de ce moment là :
sudo telinit 1
Ceci va nous faire passer en mode recovery, ou mode single.
On se retrouve donc en tant que root.
C’est très pratique si l’on doit entrer plusieurs commandes et surtout on peut à ce stade démonter /home par
umount /home
et donc travailler en toute tranquillité.
Puis pour revenir en mode normal :
telinit 2
Ceci est très pratique car ça évite de redémarrer l’ordinateur pour passer en mode root.
Merci beaucoup Bhubuntu pour tes commentaires qui m’ont permis de réparer l’erreur comme tu peux le constater
tellmewhy
8 février 2007 at 10:08
Salut CEP,
suite à ton message sur le site Ubuntu, je viens de suivre ton tuto,
à la commande cp -a /home/. /mnt/new_home/ #, il me répond
cp: missing destination file operand after ‘/home/./mnt/new_home/’
j’ai bien fait les deux commande précedentes, et quand je refait ilme réponds que le point de montage existe et que la patiton est montée. Visiblement pas d’erreur dans les deux premières commande.
Je signale que je souhaite déplacer mon home sur un autre DD et qu’il est en sata (sdb1), je ne sais pas si ça peux poser un porblème.
Merci pour la réponse
8 février 2007 at 10:24
Bonjour,
Je réponds pour tellmewhy, puisque l’article est de lui.
Dans ta commande, il faut bien respecter les espaces. La ligne doit donc être :
cp -a /home/. /mnt/new_home/ (un espace entre /. et /mnt)
Il faut aussi que la cible soit montée sur le point de montage. Pour le vérifier, avant de faire la copie avec cp :
ls /mnt/new_home/
Tu pourrais faire aussi :
LC_ALL=C cp -a /home/. /mnt/new_home/
Une autre solution de copie :
cd /home ; find . -depth -print0 | cpio –null -pvd /mnt/new_home/
Détails de la commande : info cpio chapitre Copy-pass mode
1 mai 2007 at 10:44
Merci * !
Je suis novice.
J’ai suivis tes instructions et j’ai réussi du premier coups !
Un grand merci ENCORE ! (j’ai pu sauvgarder 80 giga)
25 mai 2007 at 0:19
Super !
Kubuntu 7.04 Feisty Fawn : le telinit 1 plante, je suis passé par le recovery mode (à cause de mes drivers propriétaires NVidia ?)
VitraLeuR a sauvé 80Go, moi j’en ai sauvé 160
24 septembre 2007 at 12:27
Merci pour cet excellent tuto, il va me servir!
29 septembre 2007 at 16:19
Bonjour,
j’ai suivi ton tuto ainsi que plusieur autre. quand je passe en init 1 et que je fais la commande :
mv /home /home_ancien
il me signale que le device ou ressource est occupé!!!
comment puis-je le desoccupé!!!!!
Merci
5 octobre 2007 at 8:36
Merci pour ce tuto qui viens de me sauver la mise chez un pote, lui ayant par étourderie installé Ubuntu sur une seul partition de 5 Gigas!!!
Je note seulement un petit prob de lisibilité ici :
“nano -w -B /etc/fstab ( ou tout autre éditeu ; l‘option -B fera une copie de l’ancien fstab )
et y ajouter :
/dev/hda2 /home ext3 defaults 0 2 ( adapter hda2 )
mount /home ( monte la nouvelle partition )”
il faudrait peu être spécifier après la ligne écrite dans fstab “enregistrer et ensuite, taper mount /home”
Je dis ça car bêtement j’aivais recopié mount /home dans le fstab!! ce qui bien sur ma value une belle frayeur en relançant telint 2. heureusement j’ai pu faire marche arrière et virer mont /home du fstab!
Merci encore!
5 octobre 2007 at 12:40
Bonjour Eridan,
Effectivement, tu as raison, on pouvait se méprendre. J’ai donc modifié, et ajouter une ligne
invitant à enregistrer.
Merci beaucoup pour ton conseil.
5 octobre 2007 at 13:22
Bonjour quack-quack,:-)
Là, tu te réfères à la première partie de l’article :
1° On veut désolidariser /home de / et le placer dans une partition séparée.
Dans ton cas, si tu obtiens :
cannot move /home to /home_old : Device or resource busy
cela signifie que ta as probablement déjà une partition /home séparée. Cette partition est montée, et c’est pour cela que tu obtiens ce message.
Que souhaitais-tu faire exactement ?
29 octobre 2007 at 14:29
Merci pour ce tuto mais je voudrais savoir si
quand on fait une reinstallation ensuite (pas une mise à jour) on a la possibilité de conserver cette config …
A +
29 octobre 2007 at 15:31
Bonjour David,
Si tu parles d’une réinstallation complète, lorsque tu en arrives au partitionnement, pour la partition que tu désigneras comme /home, il faut veiller à spécifier qu’elle ne doit pas être formatée.
Aujourd’hui, en général, il y a toujours une demande de confirmation qui suit tes choix.
Ce qui te laisse l’opportunité de refuser le cas échéant, et de revenir en arrière pour parfaire ta configuration.
2 novembre 2007 at 7:44
Bonjour, et merci pour cette explication claire.
reste un point obscur pour moi:
“cp -a /home/. /mnt/new_home/ ( copie /home/ sur la nouvelle partition. Notez le . après / et non le * et l’utilisation de cp -a)”
Peux-tu m’expliquer pourquoi le point plutôt que l’astérisque, ou bien me renseigner un tuto qui explique cela? Je trouve plein d’explications relatives aux commandes, mais pas à ces questions de syntaxes.
Merci d ‘avance
2 novembre 2007 at 8:49
Plutôt qu’une explication, une démonstration de ce qui peut se produire parfois entre * et . :
:~$ sudo cp -av /etc/skel/* ~/tempo/
`/etc/skel/Examples’ -> `/home/cep/tempo/Examples’
:~$ ls -al tempo
total 8
drwxr-xr-x 2 cep cep 4096 2006-10-14 17:50 .
drwxr-xr-x 81 cep cep 4096 2006-10-13 23:28 ..
lrwxrwxrwx 1 root root 26 2006-10-14 17:50 Examples -> /usr/share/example-content
:~$ rm tempo/* ; ls -al tempo
total 8
drwxr-xr-x 2 cep cep 4096 2006-10-14 17:51 .
drwxr-xr-x 81 cep cep 4096 2006-10-13 23:28 ..
:~$ sudo cp -av /etc/skel/. ~/tempo/ ; ls -al tempo/
`/etc/skel/./.bashrc’ -> `/home/cep/tempo/./.bashrc’
`/etc/skel/./.bash_profile’ -> `/home/cep/tempo/./.bash_profile’
`/etc/skel/./.bash_logout’ -> `/home/cep/tempo/./.bash_logout’
`/etc/skel/./Examples’ -> `/home/cep/tempo/./Examples’
total 20
drwxr-xr-x 2 root root 4096 2006-04-23 08:55 .
drwxr-xr-x 81 cep cep 4096 2006-10-13 23:28 ..
-rw-r–r– 1 root root 220 2006-02-08 18:49 .bash_logout
-rw-r–r– 1 root root 414 2005-10-05 14:16 .bash_profile
-rw-r–r– 1 root root 2227 2006-03-08 02:42 .bashrc
lrwxrwxrwx 1 root root 26 2006-10-14 17:52 Examples -> /usr/share/example-content
On voit donc que l’ensemble des fichiers ou liens n’a pas été pris en compte avec la commande cp -a *
2 novembre 2007 at 12:16
merci pour ta réponse, mais je reste un peu sur ma faim: y a-t-il des cas ou * est mieux, ou bien puis-je décider de toujours employer . à la place de *?
25 décembre 2007 at 1:40
Merci pour le tuto et chapeau
avant de me lancer dans cette sensible et périlleuse opération j’ai quelques interrogation.
Voilà mon fstab
__________________________________
# /etc/fstab: static file system information.
#
# — This file has been automaticly generated by ntfs-config —
#
#
proc /proc proc defaults 0 0
# Entry for /dev/sda4 :
UUID=d72c6865-f15d-487e-b108-a17171123b7d / ext3 defaults,errors=remount-ro 0 1
# Entry for /dev/sda1 :
UUID=9ECCDDF0CCDDC327 /media/hda1 ntfs umask=222,utf8 0 1
# Entry for /dev/sda2 :
UUID=4C54A5A254A58EF0 /media/hda2 ntfs umask=222,utf8 0 1
# Entry for /dev/sda6 :
UUID=EE2CAFCB2CAF8D61 /media/hda5 ntfs umask=222,utf8 0 1
# Entry for /dev/ !! UNKNOW DEVICE !! :
UUID=9eb71af2-a9be-43be-aa9e-91867e658603 none swap sw 0 0
/dev/cdrom /media/cdrom0 udf,iso9660 user,noauto 0 0
/dev/sda8 /media/disk40H ntfs umask=222,utf8 0 0
/dev/sda7 /media/disque40G ntfs umask=222,utf8 0 0
______________________________________
Je veux le déplacer sur la dernière /dev/sda7
(Elle est bien en ext3, car formatée après install d’ubuntu)
Donc :
Je dois virer cette dernière ligne ou juste remplacer le ntfs par ext3.
Et enfin ou ajouter ceci :
/dev/sda7 /home ext3 defaults 0 2
en dernière ligne, je suppose?
Merci pour votre aide
26 décembre 2007 at 9:30
Bonjour,
Il faudra être certain que cette partition est bien en ext3.
sudo blkid confirmera cela et, par la même occasion révèlera l’uuid.
Ensuite il faudra modifier /etc/fstab pour avoir :
/dev/sda7 /home ext3 defaults 0 2
Remplacer /dev/sda7 par UUID=???????
12 février 2008 at 23:07
Salut,
Je viens de faire l’essai pour /home, sans problème.
Merci.
L’opération doit être transposable pour /usr /var /temp ou /opt mais comme je suis novice y a-t-il des adaptations particulières pour que ces dossiers se retrouvent chacun dans une partition déjà crée à leur intention ?
Encore merci pour le gain de temps.
13 février 2008 at 17:06
Bonjour romarin,
Tu peux effectivement utiliser la même méthode.
Mais as-tu vraiment besoin d’un tel partitionnement ?
Pour une utilisation classique, un pc personnel, /, /home, et une swap suffisent amplement.
Le principal inconvénient si tu multiplies les partitions, c’est que tu dois dès le départ bien calculer l’espace que tu veux allouer.
Ce n’est pas toujours facile de prévoir cela par avance.
L’autre inconvénient, c’est que tu auras autant de fsck au démarrage que tu as de partitions.
Pour /tmp, je ne vois pas l’utilité de créer une partition séparée, tout ce qui s’y trouve n’existera plus au prochain redémarrage.
Tu peux t’en assurer en y créant un fichier, et en redémarrant :
echo bonjour > /tmp/un.txt
Pour le reste donc tu suis la méthode, en l’adaptant. Un exemple pour /usr :
Tu passes en mode single, soit en redémarrant et en choisissant ce mode au démarrage (single ou recovery), soit en quittant l’environnement graphique et en tapant :
sudo telinit 1
tu crées et formates ta partition cible, puis tu crées un point de montage :
mkdir /mnt/new_usr
Tu montes la partition :
mount -t ext3 /dev/ta_partition /mnt/new_usr
tu y copies le contenu de /usr :
cp -a /usr/. /mnt/new_usr/
tu renommes ton répertoire /usr actuel
mv /usr /old_usr
tu crées le point de montage pour le nouveau /usr:
mkdir /usr
tu démontes /mnt/new_usr
umount /mnt/new_usr
tu modifies /etc/fstab en ajoutant cette ligne
/dev/ta_partition /usr ext3 defaults 0 2
tu montes ta partition /usr
mount /usr
tu vérifies si le contenu te semble correct, et tu redémarres.
Tu vérifies encore une fois que tout ce passe bien, et tu peux alors supprimer /old_usr et le point de montage /mnt/new_usr.
tellmewhy
3 juin 2008 at 11:39
merci pour ce tuto , mais je suis bloqué dès le début :
sudo mkfs.ext3 -v -m1 /dev/partition
mon terminal me repond :
mke2fs 1.40.2 (12-Jul-2007)
Ne peut évaluer par stat() /dev/partition — Aucun fichier ou répertoire de ce type
Le périphérique n’existe apparemment pas ; l’avez-vous spécifié
correctement ?
je suis sous CD live donc je ne peux rien creer .
Ou est ce que j’ai mal compris la fonction ?
3 juin 2008 at 14:38
Pour mettre /home sur une partition séparée, il faut avant tout créer cette partition ainsi qu’un système de fichiers.
Pour cela, le plus simple sera d’utiliser gparted depuis un live cdrom.
Ensuite, pour la bonne compréhension du tuto, il faudra remplacer /dev/partition par l’intétulé exacte, qui sera sous la forme /dev/sdxy (remplacer x et y par les lettres et chiffres correspondants).
Il n’est d’ailleurs pas interdit d’avoir un minimum de réflexion lorsqu’on applique un tuto, tout ne pouvant être prévu par le rédacteur, bien sûr
cep
3 juin 2008 at 15:49
“Il n’est d’ailleurs pas interdit d’avoir un minimum de réflexion lorsqu’on applique un tuto, tout ne pouvant être prévu par le rédacteur, bien sûr”
tout à fait c’est pour cela que j’ai posé la question “Ou est ce que j’ai mal compris la fonction ?” car je sais très bien que certaines chose sont fonction de chacun … lorsque c’est écrit c’est plus simple et quand on est en partie novice en la matiere c’est plus difficile
3 juin 2008 at 17:35
bon .
)
Aprioris je m’en suis pas trop mal sortis (merci par la même occasion
sauf que lors du redemarrage il m’a fait la gueule : il me demandais mon pseudo et mot de passe et ceux la ne convenait pas , m’indiquant de surcroit que mon home n’etait pas le bon ….
Qu’ai je fait de si inadequat ?
j’ai fait le test “mountpoint /home” hélas “is not”
je pense que cela viens de la ligne à ajouter :
“/dev/sda3 /home ext3 defaults 0 2″
j’ai ecris cette ligne et fait “ctrl”+”o” puis je suis parti : était ce la bonne manip ????
3 juin 2008 at 18:13
merci CEP
ca marche (j’avais oublié une ligne de commande ….
)
je vais reinstaller mon ubuntu et on verra bien
merci pour ton tuto très utile (pour moi en tout cas
)
31 juillet 2008 at 10:57
j’ai récupéré deux disques de mon ancienne machine (le premier disque racine / est HS) les deux disques contiennent des rep en mode raid md0, md1 et md2. Et notamment mon ancien home est dans md2/home et il contient également d’autres répertoires de sauvegarde comme md2/sav1 et md2/sav2. mon home n’est donc pas a la racine de md2, est-ce que votre procédure peut s’adapter à mon cas et comment ?
Tout mes anciens répertoires sous mdx sont parfaitement lisible avec des mount adapté, mais je ne parviens pas a remplacer mon /home actuel par mon ancien sous md2/home.
31 juillet 2008 at 14:13
Bonjour,
Si le fs portant les données de l’ancien /home peut se monter individuellement, il n’y a pas de raison de ne pas récupérer les données.
Le plus simple serait même de renommer dans le /home actif le répertoire de l’user actuel, de créer un autre répertoire avec le nom de l’user, et d’y faire une copie des données de l’ancien user, avec cp ou rsync en excluant les sous-répertoires inutiles comme par exemple les anciennes sauvegardes.
Puis un fsck et tout redevrait fonctionner normalement.
1 août 2008 at 8:23
Bonjour CEP,
Merci pour ta réponse, j’ai procédé autrement, je souhaitait utiliser la grande capacité (sécurité du raid et taille de la partition) de mon ancien home. J’ai simplement renommé mon user sous mon home actuel /home/user -> /home/anc_user pour le remplacer par un lien symbolique vers l’ancien /md2/home/user. Question: cette méthode est elle fiable et performante dans son utilisation ?
15 janvier 2009 at 17:02
est ce qu’on peut ne pas utiliser les uuid ? quel est l’interet de les utiliser ?
PC sous xubuntu
Merci
15 janvier 2009 at 17:56
il est toujours possible de ne pas utiliser les uuid, leur avantage est de fournir une adresse fixe non modifiée par l’emplacement du disque ou la dénomination /dev/hdx ou /dev/sdx.
6 août 2009 at 20:34
bonjour,
J’ai suivi à la lettre vos infos. Cela a… presque fonctionné, sauf que Thunderbird ne peux pas enregistrer les nouveaux messages et que Firefox freeze en mode minima (sans ma personnalisation). Pouvez-vous m’aider sur ce sujet déjà ancien ?