informatique:systeme:matos:lvm

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
informatique:systeme:matos:lvm [2010/02/15 16:05] – Reprise ancien Wiki bn8informatique:systeme:matos:lvm [2024/05/22 13:25] (Version actuelle) – [Réduire un LV] bn8
Ligne 1: Ligne 1:
-====== Fonctionnement général ====== +====== LVM ======
-===== Réduire un LV ===== +
-Pour un système de fichiers EXT3 :+
  
-  * On démonte si nécessaire le LV 
  
-  umount /dev/vg/lv+===== Fonctionnement général =====
  
-  * On check le FS (obligatoire)+==== Augmenter un PV ====
  
-  e2fsck -/dev/vg/lv+  * Si votre //PV// est une partition d'un //block-device//, il faut commencer par étendre cette partition. Pour cela, utiliser la commande //fdisk// pour supprimer et recréer la partition avec les mêmes paramètres excepté la taille que vous définirez au maximum. Pour appliquer cette modification, il faudra redémarrer votre machine. 
 +  * Utiliser ensuite la commande suivante pour redimensionner votre //PV// : <code>pvresize [device]</code>
  
-  On resize au minimum le FS+**Avec :**
  
-  resize2fs -/dev/vg/lv+  * **[device] :** Le //block-device// du //PV// (exemple : ///dev/sda//)
  
-  * On mount le FS pour voir si çà c'est bien passé 
  
-  mount /dev/vg/lv+==== Réduire un PV ====
  
-  * df non indique sa nouvelle taille+  * Commencer par déterminer la taille minimale du //PV// possible. Redéfinissez ensuite la taille du //PV// : <code>pvresize --setphysicalvolumesize [size] [device]</code> 
 +  * **Avec :** 
 +    * **[size] :** la nouvelle taille du //PV// (exemple : //30G//) 
 +    * **[device]] :** le //block-device// correspondant au //PV// 
 +  * Si votre //PV// est une partition et que vous souhaitez le //block-device// sous cette partition, il faudra également réduire cette partition. Il est conseillé de réduire cette partition également plus que nécessaire et de l'étendre au maximum une fois la réduction effectuez. Prévoyez cependant un peu plus que la taille à laquelle vous avez réduit votre //PV//. Une fois cette taille déterminée, il vous faut supprimer la partition et la récréer à l'identique exceptée sa taille. Pour cela vous pouvez utiliser la commande //fdisk//. Une fois la taille de la nouvelle partition définie, il faudra rebooter la machine pour que cette modification soit prise en compte. 
 +  * Si vous devez réduire physiquement la taille du disque (cas du disque d'une machine virtuelle par exemple), c'est ici qu'il faut le faire, machiné éteinte. 
 +  * Si votre //PV// est une partition et que vous l'avez réduit précédemment plus que nécessaire, il faut maintenant l'agrandir au maximum offert par le //block-device//. Pour cela supprimer et recréer à nouveau la partition avec //fdisk// et rebooter la machine pour prendre en compte la modification 
 +  * Redimensionner ensuite le //PV// à la taille du //block-device// : <code>pvresize [device]</code>
  
-  /dev/mapper/vg-lv   578M  578M     0 100% /mount/path+<note tip>Il est possible d'avoir une erreur lors du `pvresize` initial du type ''/dev/vdc: cannot resize to 230399 extents as later ones are allocated''. Cela vient du fait que les LV ont été taillés en plusieurs fois et donc des segments des LV sont un peu partout sur le disque, or, il faudrait qu'il soit tous au début de la partition pour pouvoir réduire le PV. Pour cela :
  
-  * On démonte le LV+Commencer par lister les segments des LV : <code bash># pvs -v --segments /dev/vdc 
 +  PV         VG     Fmt  Attr PSize PFree    Start  SSize  LV               Start  Type   PE Ranges              
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g      0 153600 var                   0 linear /dev/vdc:0-153599      
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 153600 153600                       0 free                          
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 307200   2560 log                   0 linear /dev/vdc:307200-309759 
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 309760  25600 var              153600 linear /dev/vdc:309760-335359 
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 335360  25600                       0 free                          
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 360960  25600 var              179200 linear /dev/vdc:360960-386559 
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 386560  25599                       0 free</code>
  
-  umount /dev/vg/lv+On voit ici que le LV `var` est divisé en trois segments et que l'on a plusieurs espaces libres dans le PV. Il faut alors déplacer les segments au début du disque dans un espace libre, tant qu'à faire de manière contiguë avec un autre segment du même LV (et dans le bon ordre, cf. champ //Start// du LV = la seconde colonne portant ce nom). Ici, on va donc commencer par déplacer le second segment dans l'espace libre juste après le premier segment. La commande pour cela est : 
 +<code bash>pvmove --alloc anywhere [PE Ranges du segment à déplacer] [PV]:[Start de emplacement libre]+[SSize du segment à déplacer]</code>
  
-  * On resize le LV à la taille voulue+et donc ici : 
 +<code bash># pvmove --alloc anywhere /dev/vdc:309760-335359 /dev/vdc:153600+25600 
 +  /dev/vdc: Moved: 0,01% 
 +  /dev/vdc: Moved: 3,98% 
 +  [...] 
 +  /dev/vdc: Moved: 97,44% 
 +  /dev/vdc: Moved: 100,00% 
 +</code>
  
-  lvreduce -L 5G /dev/vg/lv+On affiche à nouveau les segments : 
 +<code bash> 
 +# pvs -v --segments /dev/vdc 
 +  PV         VG     Fmt  Attr PSize PFree    Start  SSize  LV               Start  Type   PE Ranges              
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g      0 179200 var                   0 linear /dev/vdc:0-179199      
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 179200 128000                       0 free                          
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 307200   2560 log                   0 linear /dev/vdc:307200-309759 
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 309760  51200                       0 free                          
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 360960  25600 var              179200 linear /dev/vdc:360960-386559 
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 386560  25599                       0 free 
 +</code>
  
-  * On check le FS (obligatoire)+On va pouvoir maintenant déplacer le dernier segment à la suite des deux autres déjà réunis : 
 +<code bash> 
 +# pvmove --alloc anywhere /dev/vdc:360960-386559 /dev/vdc:179200+25600 
 +  /dev/vdc: Moved: 0,02% 
 +  /dev/vdc: Moved: 3,17% 
 +  [...] 
 +  /dev/vdc: Moved: 100,00% 
 +</code> 
 +On affiche à nouveau les segments : 
 +<code bash> 
 +# pvs -v --segments /dev/vdc 
 +  PV         VG     Fmt  Attr PSize PFree    Start  SSize  LV               Start Type   PE Ranges              
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g      0 204800 var                  0 linear /dev/vdc:0-204799      
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 204800 102400                      0 free                          
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 307200   2560 log                  0 linear /dev/vdc:307200-309759 
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 309760 102399                      0 free 
 +</code>
  
-  e2fsck -/dev/vg/lv+Pour finir, on déplace maintenant le LV `log` juste après le LV `var` : 
 +<code bash> 
 +# pvmove --alloc anywhere /dev/vdc:307200-309759 /dev/vdc:204800+2560 
 +  /dev/vdc: Moved: 1,17% 
 +  /dev/vdc: Moved: 36,02% 
 +  /dev/vdc: Moved: 66,48% 
 +  /dev/vdc: Moved: 100,00% 
 +</code>
  
-  * On resize le FS à la taille du LV+On affiche à nouveau les segments : 
 +<code bash> 
 +# pvs -v --segments /dev/vdc 
 +  PV         VG     Fmt  Attr PSize PFree    Start  SSize  LV               Start Type   PE Ranges              
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g      0 204800 var                  0 linear /dev/vdc:0-204799      
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 204800   2560 log                  0 linear /dev/vdc:204800-207359 
 +  /dev/vdc   vg_ssd lvm2 a--  1,57t <800,00g 207360 204799                      0 free 
 +</code>
  
-  resize2fs /dev/vg/lv+Les LVs sont maintenant au début du PV et on va maintenant être en mesure de faire notre `pvresize`. 
 +</note> 
 +==== Réduire un LV ==== 
 +Pour un système de fichiers EXT3/EXT4 :
  
-  * On remonte le LV +  * On commence par définir quelques variables: <code bash> 
- +LV=/dev/vg/lv 
-  mount /dev/vg/lv +SIZE=xxxG 
- +</code> 
-====== Snapshot ======+  * On réduit ensuite le file-system du LV à son minimum :<code bash> 
 +# On démonte si nécessaire le LV 
 +umount $LV 
 +# On check le FS (obligatoire) 
 +e2fsck -f $LV 
 +# On resize au minimum le FS 
 +resize2fs -M $LV 
 +# On mount le FS pour voir si ça c'est bien passé 
 +mount $LV 
 +# On vérifie la taille minimum nécessaire pour le FS 
 +df $LV 
 +</code> 
 +  * Le résultat du ''df'' nous indiquera la nouvelle taille minimum pour le FS. On s'assure donc que la taille envisager convient avant de continuer. 
 +  * On peut ensuite alors réduire le LV et réajuster/monter le FS pour finir : <code bash> 
 +# On démonte le LV 
 +umount $LV 
 +# On resize le LV à la taille voulue 
 +lvreduce -L $SIZE $LV 
 +# On check le FS (obligatoire) 
 +e2fsck -f $LV 
 +# On resize le FS à la taille du LV 
 +resize2fs $LV 
 +# On remonte le LV 
 +mount $LV 
 +</code> 
 +===== Snapshot =====
  
 Très pratique ! Cela permet de faire un //copie instantanée// d'un LV sans pour autant ré-alloué la totalité de l'espace disque. Un //snapshot// est juste un composant de LVM stockant uniquement les modifications fait sur un LV qui on lieu entre le moment ou le //snapshot// est fait et le moment présent. Vous avez donc un copie du système du LV accessible en lecture seule uniquement. Tout l'intérêt est de faire en une fraction de seconde un //copie// du LV sans ré-alloué. Cette copie est en outre volatile et disparaitra au prochain reboot. La taille allouée doit être dimensionnée en fonction de volume de modifications qui auront lieu pendant votre utilisation de la copie. Très pratique ! Cela permet de faire un //copie instantanée// d'un LV sans pour autant ré-alloué la totalité de l'espace disque. Un //snapshot// est juste un composant de LVM stockant uniquement les modifications fait sur un LV qui on lieu entre le moment ou le //snapshot// est fait et le moment présent. Vous avez donc un copie du système du LV accessible en lecture seule uniquement. Tout l'intérêt est de faire en une fraction de seconde un //copie// du LV sans ré-alloué. Cette copie est en outre volatile et disparaitra au prochain reboot. La taille allouée doit être dimensionnée en fonction de volume de modifications qui auront lieu pendant votre utilisation de la copie.
      
      
-**Utilité :**+==== Utilité ==== 
 + 
 Très pratique pour les sauvegardes d'un système dont les services doivent être arrêtés pour sauvegarder leurs données. La création d'un //snapshot// prend une fraction de seconde alors que la sauvegarde complète du système prend beaucoup plus. Il ainsi possible d'arrêter les services le temps de faire un //snapshot// puis de les redémarrer et de faire ensuite une sauvegarde à partir du //snapshot//. Très pratique pour les sauvegardes d'un système dont les services doivent être arrêtés pour sauvegarder leurs données. La création d'un //snapshot// prend une fraction de seconde alors que la sauvegarde complète du système prend beaucoup plus. Il ainsi possible d'arrêter les services le temps de faire un //snapshot// puis de les redémarrer et de faire ensuite une sauvegarde à partir du //snapshot//.
  
  
-**Procédures :**+=== Procédures === 
   * Création d'un //snapshot// du LV //tmp// du VG //vg_1//   * Création d'un //snapshot// du LV //tmp// du VG //vg_1//
  
Ligne 62: Ligne 152:
   unmout /dev/vg_1/snapdetmp   unmout /dev/vg_1/snapdetmp
   lvremove /dev/vg_1/snapdetmp   lvremove /dev/vg_1/snapdetmp
- 
  • informatique/systeme/matos/lvm.1266249918.txt.gz
  • Dernière modification : 2011/06/21 12:48
  • (modification externe)