Comment déplacer / usr vers une nouvelle partition?

26

Mon /usrdossier doit être déplacé vers une nouvelle partition. Comment puis-je faire cela sans effacer le contenu?

Cela peut-il être fait pendant que Ubuntu est en cours d'exécution, ou dois-je utiliser le LiveCD pour cela?

Nathan Osman
la source

Réponses:

27

Il serait plus sûr d'utiliser un Live CD, mais vous pouvez faire:

  • copiez tous les fichiers sur une nouvelle partition, en vous assurant que le contenu de /usrne change pas pendant que vous faites cela.
  • modifier de /etc/fstabsorte que /usrsera monté au prochain redémarrage
  • redémarrer
  • supprimer les anciens fichiers

Voir ci-dessous pour plus de détails sur chaque étape.

Notez que vous ne pouvez pas monter la nouvelle partition /usren cours d'exécution car il y aura beaucoup de fichiers /usrqui seront ouverts.

Copie des fichiers

J'utiliserais cp -a. -aest l'option d'archivage. Depuis la page de manuel :

-a, --archive
          same as -dR --preserve=all
...
-d     same as --no-dereference --preserve=links
...
-P, --no-dereference
          never follow symbolic links in SOURCE
...
--preserve[=ATTR_LIST]
          preserve      the      specified      attributes       (default:
          mode,ownership,timestamps),  if  possible additional attributes:
          context, links, xattr, all
...
-R, -r, --recursive
          copy directories recursively

Modification de / etc / fstab

Vous devez connaître l'UUID de votre nouvelle partition. Vous pouvez voir le mappage en faisant:

$ ls -l /dev/disk/by-uuid/

Et puis ajoutez cette ligne à /etc/fstab:

UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2

Modifiez l'UUID en votre UUID et changez ext4pour être le type de système de fichiers que vous utilisez - vous devez le savoir si vous avez configuré la partition.

Supprimer les anciens fichiers

Après le redémarrage, les anciens fichiers de /usrla partition racine seront masqués par la nouvelle partition montée /usr. Mais nous pouvons utiliser une ruse de montage pour accéder aux anciens fichiers, puis les supprimer.

$ sudo mount --bind / /mnt
$ sudo rm -rf /mnt/usr/*
$ sudo umount /mnt

Mais une légère erreur de frappe (par exemple, appuyer sur Entrée lorsque vous n'aviez tapé que sudo rm -rf /mnt) pourrait provoquer un désastre, donc je n'utiliserais cette méthode que si vous étiez très confiant dans ce que vous faisiez, ne pouviez vraiment pas faire face à un temps d'arrêt ou n'aviez pas accès physique à la machine et n'ont donc pas pu démarrer à partir d'un CD live ou d'une clé USB live.

Hamish Downer
la source
4
rsyncest tellement mieux adapté à cela quecp
Marco Ceppi
1
@MarcoCeppi Pourriez-vous développer cela? Peut-être donner une variante de réponse qui utilise à la rsyncplace?
Kazark
6
Remplacez la commande cp par rsync -avz. Rsync vous permet de redémarrer les copies et doit généralement être utilisé lors du déplacement entre des partitions, des périphériques de bloc ou des machines.
Marco Ceppi
2
N'utilisez PAS cp. Il ne préserve pas les LIENS DURS. Cela interrompra les mises à niveau du package à l'avenir. Par exemple, /usr/bin/s2pil /usr/bin/pseds'agit du même fichier. Le déplacement avec cpcréera 2 versions indépendantes de ce fichier. Faites à la rsync -aHplace.
2015
1
Tout d'abord, ignorez le drapeau -z - il active la compression, ce qui étant donné que vous n'envoyez pas les fichiers sur un réseau est une surcharge inutile (sauf que rsync est généralement assez intelligent pour l'ignorer, mais peut tout aussi bien le supprimer) . @ AleksandarStefanović vous voulez certainement le contenu là-bas, pas le dossier, et la raison pour laquelle cela est arrivé est dû à quelques bizarreries rsync: il traite rsync -avH a/ bdifféremment de rsync -avH a b, copier le contenu du dossier a(c'est-à-dire a/*) dans le premier cas et le dossier lui-même dans la seconde. Assurez-vous d'utiliser la barre oblique ici.
Darael
7

Étant donné que la plupart des bibliothèques utilisées se trouvent dans / usr, je ne recommanderais pas de déplacer ce répertoire lors de l'exécution d'Ubuntu. En fait, vous obtenez probablement des messages d'erreur lorsque vous essayez de le faire. Par conséquent, le mieux est d'utiliser le LiveCD.

Vous pouvez utiliser plusieurs possibilités pour déplacer / copier les fichiers cp, rsync etc. vous voulez vous assurer que tous les liens symboliques sont créés et pas seulement copiés. cp et rsync ont tous deux des options pour cela.

Après avoir déplacé les fichiers vers l'autre partition, vous devez ajouter un autre montage dans / etc / fstab pour monter la nouvelle partition dans / usr.

txwikinger
la source
2

Attention: je n'ai aucune idée de ce que je fais, je ne fais que copier des commandes et faire comme suggéré par les autres. Ce n'est peut-être pas la bonne façon de le faire, mais cela fonctionne pour moi (pour l'instant, au moins).

Voici comment je l'ai fait (suite à la réponse de Hamish et aux commentaires):

  1. Copiez tous les fichiers de la partition nouvellement créée (remplacez-la par l'emplacement de votre partition, elle devrait ressembler à la mienne):

    rsync -avz /usr /media/aleksandar/750b84e2-e65f-4309-ade5-5af0033a937c 
    
  2. À ce stade, je me suis rendu compte qu'il a tout copié dans le /usrdossier de la partition, ce qui ne fonctionnera pas , j'ai donc tout copié (avec le gestionnaire de fichiers) de ce dossier à la racine de la partition, et supprimé ce vide dossier par la suite.

  3. Modifier /etc/fstab(comme dans la réponse de Hamish, bien sûr, remplacer par votre UUID)

    UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2
    
  4. Une étape qui s'est avérée peu judicieuse: j'ai changé le nom de la /usrpartition actuellement montée en /usrBACKUP, juste pour que je sache que, lorsque je redémarre le système, il redémarre en fait dans la partition nouvellement créée, et non dans l'ancienne. . Après cela, tout a glissé sur l'écran, et j'ai dû l'éteindre en appuyant longuement sur la touche marche / arrêt (le génie que je suis) . Ignorez cette étape si vous ne voulez pas faire défaut à votre système.

  5. Redémarrez le système

  6. Après le redémarrage, ouvrez le Moniteur système ou une application similaire pour voir si votre nouvelle /usrpartition est montée et pour vérifier si tout s'est déroulé comme prévu.

  7. Après avoir vérifié que tout va bien, vous pouvez supprimer votre ancienne /usrpartition. Je garderai le mien au cas où quelque chose se passerait mal.

Aleksandar Stefanović
la source
Pourquoi répondre à une question de 5 ans si elle a déjà une réponse acceptée et que vous ne savez pas de quoi vous parlez?
cmks
2
@cmks parce que je sentais que les autres réponses étaient incomplètes - je n'ai pas obtenu de solution complète à partir d'une réponse, et aucune des réponses ne contenait suffisamment de détails. J'avais l'impression que les utilisateurs qui viendraient à cette question auraient besoin d'aide. Peu importe qu'il ait cinq ans si quelqu'un a encore besoin des informations de cette question.
Aleksandar Stefanović le
1
Pourquoi tout le monde redémarre son système? Ne devrait-il pas lui sudo mount -apermettre de continuer à fonctionner?
Hagen von Eitzen
@Hagen Je suppose que c'est juste pour faire bonne mesure
Aleksandar Stefanović