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

14

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

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

Je suis prêt à démonter la machine pendant un jour ou deux pour le faire.

Système d'exploitation: 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)

Nick ODell
la source
1
Pourquoi ne pas simplement augmenter le /volume, n'est-ce pas le but d'utiliser LVM?
jasonwryan
2
@jasonwryan Pourquoi devrais-je avoir besoin d'ajuster manuellement la façon dont l'espace disque est alloué? N'est-ce pas là tout l'intérêt d'un système de fichiers?
Nick ODell
@NickODell No. Si un volume est trop petit pour contenir les données, alors il est tout simplement trop petit. La capacité globale dépend de la taille du volume et non de la taille du système de fichiers. Les volumes logiques facilitent cependant le redimensionnement des volumes montés et la fusion des ressources de stockage disparates en un seul volume. Avec LVM, vous devriez pouvoir faire ce que jasonwryan suggère sans même redémarrer: assurez-vous que les utilisateurs réguliers sont déconnectés (pour libérer / home) umount / home sur le système de fichiers racine et vous avez terminé. Si vous voulez fusionner, vous devez faire une rsync.
Bratchley
@JoelDavis Si je demande à tous les utilisateurs de se déconnecter, est-il pertinent de redémarrer?
Nick ODell
@ NickODell Um ... ouais? La plupart des systèmes Linux sont des serveurs, vous devez comprendre que ce sera l'hypothèse des gens, sauf indication contraire.
Bratchley

Réponses:

10

J'ai terminé et la re-partition a fonctionné. Cependant, comme il manque des zones dans les deux guides, je vais résumer ce que j'ai fait. Veuillez noter que j'ai remplacé mon nom d'utilisateur par zzzzet le nom de mon ordinateur par 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 / home et la place 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 se rallume, 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 Appuyez sur a, puis sur Espace, puis tapez single. Appuyez sur Entrée.

Vous devriez voir une invite comme celle-ci:

 [root@xxxxxxx /] # 

Entrez les commandes suivantes:

df -h

Il devrait vous montrer Size, Usedet Avail. Nous sommes intéressés Used.
Notez combien d'espace est utilisé par le volume de votre maison. Nous en aurons besoin plus tard.

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

Rappelez-vous combien d'espace votre volume domestique a utilisé? Doublez cela et donnez-le à cette commande. Par exemple, j'avais 15 gigaoctets utilisés par mon répertoire personnel, donc je l'ai dimensionné à 30 gigaoctets.

resize2fs /dev/mapper/vg_xxxxxxx-lv_home 30G

Avertissement : cette prochaine étape est celle qui peut perdre des données. Assurez - vous que vous mettez dans une taille plus grande que la commande précédente. Ajoutez 5 gigaoctets pour être sûr.

lvresize -L 35G vg_xxxxxxx/lv_home

Dites à la partition racine d'utiliser tout l'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/

(Soit dit en passant, c'est -aimportant, car sinon tout sera détenu par root, et vous ne le voulez pas.)
Vérifiez rapidement que les données ont été copiées correctement:

ls -lR /home

Maintenant, nous supprimons la partition home et demandons à root de reprendre le nouvel espace.

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 en lecture-écriture car il ne pouvait pas monter ma partition / home. Donc, avant de redémarrer, nous tapons

nano /etc/fstab

L'une de ces lignes indiquera au système de monter la partition / home. Mettez un #avant. Appuyez sur Ctrl-O, Entrée, Ctrl-X. Vous pouvez maintenant redémarrer.

(En théorie, si vous oubliez de modifier fstab comme je l'ai fait, la commande pour monter votre partition racine est mount -n -o remount -t ext2 /dev/vg_xxxxxxxx/lv_root /)

Nick ODell
la source
j'adore le détail!
nmr
J'ai rencontré un problème similaire, mais je n'ai pas d'accès physique à la machine. Existe-t-il un moyen de le faire qui ne nécessite pas de démarrer en mode mono-utilisateur?
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner Théoriquement, oui. Si vous disposez d'un accès ssh, vous pouvez sauvegarder votre /home. Ensuite, tant que vous pouvez démonter /home, vous pouvez le retirer. Cependant, je ne suis pas vraiment qualifié pour vous parler à travers le processus. C'est quelque chose que vous devriez poser une nouvelle question.
Nick ODell
1
@NickODell: Je l'ai fait poser une nouvelle question: askubuntu.com/questions/1115913/...
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner C'est un bien meilleur conseil que je n'aurais pu vous donner.
Nick ODell
3

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

Vous devez déplacer toutes les données de la partition / home vers une autre partition, une partition locale ou un lecteur externe ou partout où vous disposez de suffisamment d'espace.

Supprimez le / home lv puis développez le / (root) lv

Copiez les données dans le répertoire / home

Modifier 1

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

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

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

Ensuite, supprimez simplement la partition home et développez la partition racine

ghm1014
la source
3

Vous pouvez le faire sans stockage externe, à partir 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 foopour le nom du groupe de volumes et rootet homecomme noms de volumes logiques. Cela rend les chemins de volume logique foo/rootet foo/home, et les chemins de périphérique /dev/mapper/foo-rootet /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émontez /homeet exécutez e2fsck -f /dev/mapper/foo-home. Réduisez ensuite le système de fichiers en premier et le volume logique en conséquence. Exécutez resize2fs /dev/mapper/foo-home NNNNoù NNNN est le nombre de blocs que vous souhaitez conserver à l'intérieur du volume (vous pouvez utiliser kB ou MB ou GB à la place avec le suffixeK , Mou G). Après avoir diminué le système de fichiers, réduire le volume logique avec lvresize -L MMMM foo/homelequel MMMM est un certain nombre de méga - octets (notez que l'unité par défaut est différent resize2fs, mais vous pouvez utiliser les mêmes suffixes K, M, G). Faites très attention à ne pas réduire le volume logique plus loin que le système de fichiers - c'est la seule étape dangereuse de cette procédure.

Il y a maintenant de l'espace inutilisé dans le groupe de volumes. Exécutez lvresize -l +100%FREE foo/rootpour que le volume racine récupère tout l'espace libre du groupe de volumes. Exécutez ensuite 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, bougez autant que vous le pouvez, puis répétez la procédure.

Une fois que vous avez copié tous les fichiers /home, vous êtes prêt à le détruire. Vérifiez qu'il /homeest vide (si vous avez déplacé les fichiers) ou que tous les fichiers /homeont été copiés dans /root(si vous avez copié les fichiers). Pour détruire le volume logique désormais inutile, exécutez lvremove foo/home. Enfin, agrandissez le volume racine avec lvresize -l 0%FREE foo/rootet son système de fichiers avec resize2fs /dev/mapper/foo-home.

Gilles 'SO- arrête d'être méchant'
la source
Remarque: / home a refusé de démonter jusqu'à ce que je redémarre en mode mono-utilisateur.
Nick ODell
Remarque: Il est appelé vg_ (nom de la machine) et lv_home
Nick ODell
Ok, je l'ai fait fonctionner. Cependant, il y avait quelques détails manquants dans ce guide, donc je publierai bientôt mon historique complet des commandes.
Nick ODell
2

OK, je me suis retrouvé exactement dans la même position. Il semble que CentOS crée un petit volume racine par défaut et remplisse le reste de votre espace avec/home . J'ai même testé ma configuration d'abord sur une machine virtuelle, mais avec le plus petit disque, CentOS n'a pas créé le volume d'origine. J'ai ramassé ce problème avant de devenir contraint par l'espace et j'ai également compris comment ne pas avoir à passer en mode mono-utilisateur. Comme suit:

Accédez à la machine, ssh est très bien (en supposant un utilisateur non root).

  1. cd / donc vous n'êtes pas dans le répertoire personnel
  2. sudo -s nous serons à l'origine de tout cela
  3. lsof /home vérifiez que personne n'utilise le volume de la maison, ne doit pas être
  4. mv, tarOu similaire le contenu de la maison à un autre endroit
  5. lvremove centos/home
  6. Modifier /etc/fstabet commenter ou supprimer la ligne pour/home
  7. Déplacez le contenu de la maison que vous avez sauvegardé avant /home- vous êtes maintenant dans une position sûre, un redémarrage ici devrait être OK
  8. lvresize -l +100%FREE centos/root
  9. xfs_growfs /dev/centos/root sur CentOS 7, d'autres pourraient utiliser resize2fs
  10. df -h avez-vous réussi?

J'espère que cela facilitera la tâche de quelqu'un. C'est vraiment incroyable ce que vous pouvez faire en direct sur des systèmes de fichiers de nos jours.

Damon Maria
la source
C'est certainement plus facile si vous n'avez pas besoin de migrer de données. :)
Nick ODell