J'ai une machine virtuelle qui a récemment vu son image disque passer de 20 Go à 50 Go et fdisk -l
vérifie que le VM peut voir cette nouvelle taille. Maintenant, je dois redimensionner ma partition LVM racine pour remplir les 30 Go supplémentaires.
J'ai trouvé plusieursarticlesà propos le redimensionnement de LVM, mais les quelques-uns qui couvrent le redimensionnement de la partition racine prétendent tous que vous devez démarrer à partir d'un LiveCD. Existe-t-il un moyen de le faire sans arrêter le serveur? Le serveur est essentiel, je voudrais donc minimiser les temps d'arrêt.
Modifier: sortie de fdisk -l
:
[root@Fedora-Host ~]# Sudo fdisk -l
Disk /dev/sda: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders, total 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00097c90
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 83886079 41430016 8e Linux LVM
Disk /dev/mapper/VolGroup-lv_root: 36.1 GB, 36104568832 bytes
255 heads, 63 sectors/track, 4389 cylinders, total 70516736 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/VolGroup-lv_root doesn't contain a valid partition table
Disk /dev/mapper/VolGroup-lv_swap: 6308 MB, 6308233216 bytes
255 heads, 63 sectors/track, 766 cylinders, total 12320768 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/VolGroup-lv_swap doesn't contain a valid partition table
Edit: Comment redimensionner la partition physique? fdisk peut voir l'espace libre, mais je ne sais pas comment redimensionner la partition LVM principale pour l'utiliser. J'ai essayé de démarrer dans un LiveCD et d'utiliser la commande parted'd resize
, mais tout ce que cela me donne, c'est l'erreur "Impossible de détecter le système de fichiers". J'ai trouvé ce guide , qui dit que je dois supprimer la partition et en créer une nouvelle avec la taille correcte, mais cela semble très dangereux.
Édition finale: la commande resize
de Parted est étrangement incapable de redimensionner les partitions LVM. Allez comprendre. Au lieu de cela, j'ai simplement supprimé l'ancienne partition et créé une nouvelle avec la nouvelle plage, comme indiqué dans le lien ci-dessus, et qui a correctement redimensionné la partition LVM. J'ai ensuite suivi les conseils ci-dessous pour redimensionner les volumes et les systèmes de fichiers à l'intérieur la partition LVM.
Vous pouvez développer un volume logique en ligne. Vous devez le démonter pour le réduire (ce qui nécessite un mode LiveCD/Rescue.)
pvresize /dev/sda2
(en supposant que votre partition LVM est sda2
. Remplacez si nécessaire.)lvextend /dev/mapper/root -l+100%FREE
(ou, quel que soit le nom de votre volume logique racine.)resize2fs /dev/mapper/root
(en supposant ext2/3/4)Votre système est-il vraiment passé de 20 à 50 Go? Cela semble vraiment étrange puisque votre appareil sda2 fait environ 40 Go, lv_root affiche 36 Go et swap affiche 6 Go.
Votre sortie de fdisk -l
montre le total des secteurs de /dev/sda
est 104857600
. Le dernier secteur utilisé par /dev/sda2
est 83886079
. Cela me dit que vous n'avez pas ajusté la taille de la partition pour utiliser tout l'espace disponible sur le lecteur. La commande pvresize ne modifie pas la table de partition. Vous devez d'abord modifier la table de partition.
Installez gparted. Exécutez en tant que root (utilisez ssh -X ou x2go si distant). Sélectionnez la partition. Il devrait montrer de l'espace libre après la fin (à droite). Si ce n'est pas le cas, vous devez redémarrer votre machine virtuelle pour voir la nouvelle taille du périphérique virtuel. Cela devrait être un temps d'arrêt minimal avec systemd.
Cliquez avec le bouton droit et sélectionnez redimensionner. Faites glisser l'extrémité vers la fin du disque. Assurez-vous de ne pas toucher au début. gparted est capable de déplacer une partition pendant le redimensionnement, mais cela détruira bien sûr un système en cours d'exécution. Mais déplacer la fin est bien. Examinez l'opération en attente que gparted effectuera pour vous assurer que vous étendez et pas déplacez la partition. Cliquez sur appliquer. gparted changera la partition sur le disque, puis émettra l'ioctl du noyau pour relire la table de partition, changeant également la taille du périphérique de bloc en direct. Puis, comme il voit qu'il s'agit d'un PV LVM, il exécute pvresize pour vous. Quittez gparted et vgs affiche maintenant votre nouvel espace.
J'ai entendu des rumeurs selon lesquelles se séparer peut faire tout cela sans les frais généraux d'une interface graphique, mais je n'ai jamais pu comprendre le vaudou. Parted doit être l'une des pires interfaces CLI que j'aie jamais essayé d'utiliser.
N'utilisez pas fdisk, vous devez supprimer et réallouer la partition à redimensionner, et par défaut, elle effacera la signature LVM2 lors de l'écriture. Je pense avoir vu une option "avancée" pour désactiver ce comportement destructeur, mais je ne l'ai jamais testé.
Vous pouvez également essayer cfdisk (curses fdisk). Il peut avoir un redimensionnement de partition utilisable. Il est assez facile d'exécuter pvresize manuellement, et une commande indique au noyau de relire la table de partition. Mais je devrais tester pour m'assurer qu'il n'efface pas la signature LVM comme fdisk.
Après avoir combiné 25 howto's, j'ai enfin cette solution. Il ne nécessite aucun cd live, il est complètement à la volée.
Étape 1. formatez la partition avec parted (no gui). Dans cet exemple, la taille maximale du disque est passée de 8 Go à 32 Go dans la boîte virtuelle.
# parted
....
Number Begin End Size Type FileSystem Flags
1 1049kB 1075MB 1074MB primary ext4 boot
2 1075MB 8590MB 7515MB primary lvm
....
(parted) mkpart primary ext2 8590 100%
....
Number Begin End Size Type FileSystem Flags
1 1049kB 1075MB 1074MB primary ext4 boot
2 1075MB 8590MB 7515MB primary lvm
3 8590MB 34,4GB 25,8GB primary ext2 lba
....
(parted) set 3 lvm on
(parted) set 3 lba off
(parted) print
....
3 8590MB 34,4GB 25,8GB primary ext2 lvm
....
(parted) quit
Étape 2. Créez un volume physique basé sur la nouvelle partition
# pvcreate /dev/sda3
Physical volume "/dev/sda3" successfully created.
Étape 3. Ajoutez le volume physique au groupe de volumes. Dans une installation de serveur Fedora 28 ordinaire, le groupe de volumes s'appelle Fedora.
# vgextend Fedora /dev/sda3
Volume group "Fedora" successfully extended
Étape 4. Ajoutez l'espace disponible dans le groupe de volumes au volume logique. Dans une installation de serveur Fedora 28 ordinaire, le volume logique est appelé root.
# lvextend -l+100%FREE /dev/Fedora/root
Size of logical volume Fedora/root changed from <6,20 GiB (1586 extents) to 30,19 GiB (7729 extents).
Logical volume Fedora/root successfully resized.
Étape 5. Indiquez au système de fichiers du volume logique d'utiliser l'espace supplémentaire. Dans Fedora, le système de fichiers est xfs.
La commande 'xfs_growfs/dev/mapper/Fedora-root' vous dira/dev/mapper/Fedora-root n'est pas un système de fichiers XFS monté. Si vous utilisez un système de fichiers différent, reportez-vous à https://www.tldp.org/HOWTO/LVM-HOWTO/extendlv.html
# xfs_growfs /
data blocks changed from 1624064 to 7914496
Étape 6. Profitez
# df
FileSystem 1K-blocks Used Available used% Mounted on
....
/dev/mapper/Fedora-root 31647744 6492840 25154904 21% /
/dev/sda1 999320 125576 804932 14% /boot
....
J'envisagerais de vérifier ssm (system-storage-manager) s'il est disponible sur votre distribution.
Découvrez ceci pour un peu plus d'informations: https://unix.stackexchange.com/a/29317
ssm semble faciliter le redimensionnement des volumes logiques sans avoir à tout faire vous-même.
J'ai pu utiliser pour étendre ma partition domestique avec elle après avoir redémarré mon système d'exploitation et ouvert une session en tant que root. (J'ai dû redémarrer deux fois au total, mais cela a finalement fonctionné et j'ai maintenant un 50G supplémentaire disponible dans ma/home parition.)
Si le volume physique LVM se trouve sur une partition, non, vous ne pouvez pas le redimensionner sans redémarrer.
Vous pouvez modifier la table de partition sur le lecteur, mais Linux refusera de l'utiliser jusqu'à ce que vous redémarriez.
Si vous utilisez XFS, basculez resize2fs
à xfs_growfs
.
Vous pouvez afficher les PV que vous utilisez et les LV dans le groupe de volumes à l'aide de pvs
et lvs
.
pvresize /dev/sda
lvextend /dev/<volume-group>/<lv-name> -L +<size>G
resize2fs /dev/<volume-group>/<lv-name>
Vous devez d'abord redimensionner la partition, utilisez parted
, fdisk
ou un outil similaire pour cela. N'oubliez pas que ces outils modifient niquement la description de l'emplacement des partitions, ils ne déplacent pas les données. En d'autres termes, vous pouvez facilement étendre uniquement la dernière partition du disque. Redémarrez ensuite votre machine et après cela, vous devriez être en mesure d'informer LVM qu'elle dispose d'un espace supplémentaire disponible:
pvresize /dev/sda2
lvextend /dev/<volume-group>/<lv-name> -L +<size>G
resize2fs /dev/<volume-group>/<lv-name>