web-dev-qa-db-fra.com

Comment combiner deux volumes logiques qui résident sur un seul volume physique dans LVM?

J'ai deux volumes logiques, l'un est monté comme /, l'autre est monté comme/home.

Je veux les combiner, parce que le / Le volume manque constamment d'espace. (Oui, je sais ce qui utilise tout ce que cet espace; non, je ne peux pas l'enlever.)

Je suis prêt à prendre la machine pendant une journée ou deux pour le faire.

OS: Linux xxxxx 2.6.32-279.22.1.el6.x86_64 #1 SMP Wed Feb 6 03:10:46 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux (Centos)

14
Nick ODell

J'ai fini et la repartition a fonctionné. Cependant, comme il y a des zones manquantes dans les deux guides, je vais résumer ce que j'ai fait. Veuillez noter que j'ai remplacé mon nom d'utilisateur avec zzzz et le nom de mon ordinateur avec xxxxxxx. En outre, toutes les commandes doivent être exécutées en tant que root, sauf indication contraire.

Tout d'abord, j'ai sauvegardé:

tar -zcvf /media/e14be279-8c11-450a-b52c-1493cff3c632/xxxxxxx-home.tar.gz --exclude=/home/zzzz/Downloads /home

Cela crée une sauvegarde compressée du répertoire/maison et la met sur mon lecteur externe. (Notez que votre lecteur externe aura un chemin différent.)

Maintenant, vous devez redémarrer en mode mono-utilisateur.

reboot

Lorsque votre ordinateur s'allume à nouveau, vous devez rechercher un écran comme celui-ci:

Booting Centos 2.6.32-279.22.1.el6.x86_64 in 3 seconds...

Appuyez sur n'importe quelle touche pour interrompre cela. Vous devriez voir un écran comme celui-ci:

grub boot centos presse a, puis espace, puis tapez single. Hit Entrée.

Vous devriez voir une invite comme ceci:

 [root@xxxxxxx /] # 

Entrez les commandes suivantes:

df -h

Il devrait vous montrer Size, Used et Avail. Nous sommes intéressés par Used.
[.____] Notez combien d'espace est utilisé par votre volume de la maison. Nous aurons besoin de cela plus tard.

umount /home
e2fsck -f /dev/mapper/vg_xxxxxxx-lv_home

Rappelez-vous combien d'espace votre volume de maison utilisée? Doublez cela et donnez-le à cette commande. Par exemple, j'ai eu 15 gigaoctets utilisés par mon annuaire de domicile, alors je l'ai la dimensionné à 30 gigaoctets.

resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G

AVERTISSEMENT: Cette étape suivante est celle qui peut perdre des données. Faire Sûr que vous mettez une taille plus grande que la commande précédente. Ajouter 5 gigaoctets pour être sûr.

lvresize -L 35G vg_xxxxxxx/lv_home

Dites à la partition racine d'utiliser tout ce espace que nous venons de libérer.

lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

Copiez vos données sur la partition racine

mount -t ext4 /dev/mapper/vg_xxxxxxx-lv_home /mnt/home
ls /mnt/home
cp -a /mnt/home/. /home/

(Au fait, ça -a est important, car sinon tout sera appartenant à la racine, et vous ne le voulez pas.)
[.____] Faites un contrôle rapide que les données copiées correctement:

ls -lR /home

Maintenant, nous retirons la partition de la maison et dit à la racine de reprendre la nouvelle place.

umount /mnt/home
lvremove /dev/mapper/vg_xxxxxxx-lv_home
lvresize -l +100%FREE vg_xxxxxxx/lv_root
resize2fs /dev/mapper/vg_xxxxxxx-lv_root

À ce stade, j'ai fait une grosse erreur, dont vous pouvez apprendre. J'ai redémarré et lorsque le système est revenu, il a refusé de monter ma partition racine comme une lecture en lecture car elle ne pouvait pas monter la partition de ma/à la maison. Donc, avant de redémarrer, nous tapons

nano /etc/fstab

Une de ces lignes indiquera au système de monter la partition/home. Mettre un # avant cela. Appuyez sur Ctrl-O, entrez, Ctrl-X. maintenant Vous pouvez redémarrer.

(Hypothétiquement, si vous deviez oublier d'éditer FSTAB comme je l'ai fait, la commande de monter votre partition racine est mount -n -o remount -t ext2 /dev/vg_xxxxxxxx/lv_root /)

10
Nick ODell

Vous pouvez le faire sans stockage externe, en cours d'exécution de /, mais vous devrez démonter /home.

Ce n'est pas une procédure particulièrement risquée si vous faites attention, mais néanmoins, le conseil standard s'applique: faites d'abord des sauvegardes et testez-les.

Je vais utiliser foo pour le nom du groupe de volumes et root et home comme nom de volume logique. Cela rend les chemins de volume logique foo/root et foo/home, et les chemins de périphérique /dev/mapper/foo-root et /dev/mapper/foo-home. Je suppose qu'ils sont dans le même groupe de volumes, sinon cela devient plus compliqué et dépend de la disposition du volume physique des deux groupes de volumes.

Tout d'abord, démonter /home et courir e2fsck -f /dev/mapper/foo-home. Ensuite, réduisez d'abord le système de fichiers et le volume logique en conséquence. Courir resize2fs /dev/mapper/foo-home NNNN Où NNNN est le nombre de blocs que vous souhaitez conserver à l'intérieur du volume (vous pouvez utiliser KB ou MB ou GB au lieu du suffixe K, M ou G) . Après avoir réduit le système de fichiers, réduisez le volume logique avec lvresize -L MMMM foo/home Où MMMM est un certain nombre de mégaoctets (notez que l'unité par défaut est différente de resize2fs, mais vous pouvez utiliser les mêmes suffixes K, M, G). Soyez très prudent de ne pas réduire le volume logique plus loin que le système de fichiers - il s'agit de la seule étape dangereuse de cette procédure.

Il y a maintenant une salle inutilisée dans le groupe de volumes. Courir lvresize -l +100%FREE foo/root Pour que le volume racine attrape tout l'espace libre dans le groupe de volumes. Puis courez resize2fs /dev/mapper/foo-root (sans paramètre de taille) pour agrandir le système de fichiers pour couvrir tout le volume logique; L'agrandissement peut être fait pendant que le volume est monté.

Vous avez maintenant de la place pour copier certains fichiers. Si vous n'avez pas assez de place pour tout, déplacez autant que vous le pouvez, puis répétez la procédure.

Une fois que vous avez copié tous les fichiers de /home, vous êtes prêt à le détruire. Vérifier que /home est vide (si vous avez déplacé les fichiers) ou que tous les fichiers de /home ont été copiés à /root (Si vous avez copié les fichiers). Pour détruire le volume logique maintenant inutile, courez lvremove foo/home. Enfin, agrandissez le volume racine avec lvresize -l 0%FREE foo/root et son système de fichiers avec resize2fs /dev/mapper/foo-home.

AVERTISSEMENT: Sauvegardez toutes les données critiques avant de faire quoi que ce soit!

Vous auriez besoin de déplacer toutes les données de la partition/home à une autre partition, partition locale ou lecteur externe ou partout où autre endroit où vous avez suffisamment d'espace.

Retirez le/la maison LV, puis développez le/(root) LV

Copier le répertoire des données vers/home

éditer 1

La réponse ci-dessus suppose que vous n'avez pas assez d'espace dans la partition racine pour placer les données de la partition de la maison.

Si ce n'est pas le cas, montez simplement la partition de la maison ailleurs et copiez les données, par exemple:

umount /home
mount /dev/mapper/lv-home /mnt/home
cp -a /mnt/home/. /home/

Ensuite, enlevez simplement la partition de la maison et développez la partition racine

3
ghm1014

Ok, je me suis retrouvé exactement la même position. Il semble que Centos crée un petit volume racine par défaut et remplit le reste de votre espace avec /home. J'ai même testé ma configuration d'abord dans un VM mais avec les plus petits Centos de disques n'a pas créé le volume domestique. J'ai pris en charge ce problème avant de devenir de l'espace contraint de la limitation de l'espace doivent entrer en mode utilisateur unique. Comme suit:

Accédez à la machine, SSH est bien (en supposant que l'utilisateur non root).

  1. cd / Vous n'êtes donc pas dans le répertoire de la maison
  2. Sudo -s nous serons root pour tout cela
  3. lsof /home Vérifiez que personne n'utilise le volume de la maison, ne devrait pas être
  4. mv, tar, ou similaire le contenu de la maison à ailleurs
  5. lvremove centos/home
  6. Éditer /etc/fstab et commenter ou supprimer la ligne pour /home
  7. Déplacez le contenu de la maison que vous avez sauvegardée avant de revenir dans /home - Vous êtes maintenant à une position sûre, un redémarrage ici devrait être correct
  8. lvresize -l +100%FREE centos/root
  9. xfs_growfs /dev/centos/root sur Centos 7, d'autres peuvent utiliser resize2fs
  10. df -h Avez-vous réussi?

J'espère que cela facilite la tâche de quelqu'un. C'est vraiment étonnant ce que vous pouvez faire en direct sur des systèmes de fichiers ces jours-ci.

2
Damon Maria