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)
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:
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 /
)
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
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).
cd /
Vous n'êtes donc pas dans le répertoire de la maisonSudo -s
nous serons root pour tout celalsof /home
Vérifiez que personne n'utilise le volume de la maison, ne devrait pas êtremv
, tar
, ou similaire le contenu de la maison à ailleurslvremove centos/home
/etc/fstab
et commenter ou supprimer la ligne pour /home
/home
- Vous êtes maintenant à une position sûre, un redémarrage ici devrait être correctlvresize -l +100%FREE centos/root
xfs_growfs /dev/centos/root
sur Centos 7, d'autres peuvent utiliser resize2fs
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.