Réduction du volume physique LVM au-dessus de la matrice RAID dégradée par mdadm, ajout d'une réserve et reconstruction

8

J'ai un Debian Wheezysystème avec un couple de lecteurs de disque dur 500 GB RAID-1 ( mdadmmiroir), au sommet de laquelle se trouve les LVMvolumes logiques de 5 cloisons ( boot, root, usr, varet tmp), la taille totale de 47,15 GiB. 418,38 Gio dans le volume physique sont libres. GRUBinstallé sur les deux disques.

L'un des disques durs est tombé en panne et la baie est désormais dégradée, mais les données sont intactes.

Ce que je veux, c'est échanger tous ces 2 disques durs contre des SSD de 80 Go sans avoir à réinstaller le système à partir de zéro. Le point subtil ici est que je dois réduire le volume physique LVM pour correspondre à la taille du SSD, mais les volumes logiques ne sont pas contigus (il y a beaucoup d'espace libre au début), donc je dois en quelque sorte déplacer les volumes logiques dans un volume physique . Et il n'y a pas de lvmovecommande dans Debian.

Comment puis-je y parvenir?

Quelques sorties console:

Versions:

root@wheezy:~# uname -a && mdadm --version && lvm version
Linux wheezy 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u1 x86_64 GNU/Linux
mdadm - v3.2.5 - 18th May 2012
  LVM version:     2.02.95(2) (2012-03-06)
  Library version: 1.02.74 (2012-03-06)
  Driver version:  4.22.0

Détails du tableau:

root@wheezy:~# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Thu Dec  4 12:20:22 2014
     Raid Level : raid1
     Array Size : 488148544 (465.53 GiB 499.86 GB)
  Used Dev Size : 488148544 (465.53 GiB 499.86 GB)
   Raid Devices : 2
  Total Devices : 1
    Persistence : Superblock is persistent

    Update Time : Thu Dec  4 13:08:59 2014
          State : clean, degraded 
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           Name : wheezy:0  (local to host wheezy)
           UUID : 44ea4079:b3b837d3:b9bb2ca1:1b95272a
         Events : 26

Number   Major   Minor   RaidDevice State
   0       8       16        0      active sync   /dev/sdb
   1       0        0        1      removed

Détails brèves LVM:

root@wheezy:~# pvs && vgs && lvs                                                                                               
  PV         VG     Fmt  Attr PSize   PFree                                                                                          
  /dev/md0   system lvm2 a--  465.53g 418.38g                                                                                        
  VG     #PV #LV #SN Attr   VSize   VFree                                                                                            
  system   1   5   0 wz--n- 465.53g 418.38g                                                                                          
  LV   VG     Attr     LSize   Pool Origin Data%  Move Log Copy%  Convert                                                            
  boot system -wi----- 152.00m                                                                                                       
  root system -wi-----   2.00g                                                                                                       
  tmp  system -wi-----  10.00g                                                                                                       
  usr  system -wi-----  20.00g                                                                                                       
  var  system -wi-----  15.00g

Segmentation du PV:

root@wheezy:~# pvs -v --segments /dev/md0
    Using physical volume(s) on command line
    PV         VG     Fmt  Attr PSize   PFree   Start  SSize LV   Start Type   PE Ranges             
    /dev/md0   system lvm2 a--  465.53g 418.38g      0 89600          0 free                         
    /dev/md0   system lvm2 a--  465.53g 418.38g  89600    38 boot     0 linear /dev/md0:89600-89637  
    /dev/md0   system lvm2 a--  465.53g 418.38g  89638   512 root     0 linear /dev/md0:89638-90149  
    /dev/md0   system lvm2 a--  465.53g 418.38g  90150  5120 usr      0 linear /dev/md0:90150-95269  
    /dev/md0   system lvm2 a--  465.53g 418.38g  95270  3840 var      0 linear /dev/md0:95270-99109  
    /dev/md0   system lvm2 a--  465.53g 418.38g  99110  1280          0 free                         
    /dev/md0   system lvm2 a--  465.53g 418.38g 100390  2560 tmp      0 linear /dev/md0:100390-102949
    /dev/md0   system lvm2 a--  465.53g 418.38g 102950 16226          0 free  
Neurotransmetteur
la source
Ou vous pouvez simplement créer un nouveau RAID / VG / LV sur le SSD et rsyncvos fichiers. Ce n'est pas en ligne, mais il sera probablement plus rapide qu'autre chose.
frostschutz
Au début, je devrais réduire le PV et le générateur. Ensuite, je récupère simplement le tableau.
Neurotransmetteur

Réponses:

5

Vous n'avez pas besoin de réduire le pv ou de reconstruire le tableau. Il vous suffit de créer un nouveau tableau à partir des nouveaux disques et de l'ajouter en tant que nouveau pv ( pvcreate+ vgextend), puis de pvmovetous les lv existants de l'ancien pv, puis de supprimer l'ancien pv ( vgreduce) et de mettre ce lecteur hors service.

psusi
la source
Bonne solution alternative mais je préfère m'en tenir à l'ancien tableau juste pour gagner du temps: je ne veux pas réintégrer un nouveau tableau dans l'ancien système.
Neurotransmetteur
1
@TranslucentCloud, il faut moins de temps pour créer un nouveau tableau que pour redimensionner l'ancien, le reconstruire sur l'un des nouveaux lecteurs, supprimer l'ancien lecteur et le reconstruire à nouveau.
psusi
Mais vous pouvez faire face à des étapes supplémentaires en essayant d'installer à GRUBpartir du système Live. Il est plus facile de démarrer dans le système de production et d'installer GRUB à partir de celui-ci avec une seule commande simple.
Neurotransmetteur
@TranslucentCloud, qui a dit quelque chose sur un système en direct? Dans tous les cas, vous devez installer grub sur les nouveaux disques. Puisque vous utilisez debian, c'est assez simple: dpkg-reconfigure grub-pcet sélectionnez les nouveaux disques.
psusi
1
@TranslucentCloud tout l'intérêt de LVM est la possibilité de redimensionner et de déplacer des choses pendant que le système est en cours d'utilisation. Idem pour MD, vous pouvez remplacer les disques et redimensionner pendant qu'il est en cours d'exécution. La seule chose qui pourrait vous empêcher est que votre système de fichiers ne supporte pas le redimensionnement en direct (si vous deviez le réduire).
frostschutz
3

Ce n'est pas lvmovemais pvmove.

pvmove --alloc=anywhere /dev/md0:89600-102950 /dev/md0:0-12070

Cela devrait déplacer toutes les étendues dans la plage 89600-102950 à la plage 0-12070. Selon les données que vous avez publiées, cela devrait entraîner le déplacement de vos LV au début de votre PV.

frostschutz
la source
Oui, cela résout l' LValignement d'une partie de la tâche.
Neurotransmetteur
3

ATTENTION: CE GUIDE EST LOIN D'OPTIMAL. VÉRIFIEZ LA RÉPONSE ACCEPTÉE

D'accord, j'ai compris comment faire ce que j'ai essayé de faire. Ce sera une sorte de tutoriel.

Pendant ce temps, je ne m'étais pas encore rendu compte que les manipulations avec les LV étaient réellement possibles lorsque les systèmes de fichiers étaient montés et démarrés dans une livedistribution Linux (SystemRescueCD). Les gens ici m'ont expliqué qu'il n'y a aucune nécessité si vous ne manipulez pas avec des systèmes de fichiers réels et que vous alignez simplement les LV et rétrécissez le PV.

Donc, avec ce guide, vous obtiendrez certainement ce que vous voulez, mais pas de manière efficace, car il confronte la nature même de LVM - la possibilité de faire les choses en direct .

  1. En raison de la nature non contiguë des volumes logiques sur mon volume physique, je devrais en quelque sorte les déplacer au début du volume physique. La pvmovecommande, comme suggéré par @frostschutz, peut se déplacer LVsdans un PV:

    root@wheezy:/home/a# pvmove --alloc=anywhere /dev/md0:89600-102950 /dev/md0:0-12070
    /dev/md0: Moved: 100.0%
    
    root@wheezy:/home/a# pvs -v --segments /dev/md0
        Using physical volume(s) on command line
      PV         VG     Fmt  Attr PSize   PFree   Start SSize  LV   Start Type   PE Ranges          
      /dev/md0   system lvm2 a--  465.53g 418.38g     0     38 boot     0 linear /dev/md0:0-37      
      /dev/md0   system lvm2 a--  465.53g 418.38g    38    512 root     0 linear /dev/md0:38-549    
      /dev/md0   system lvm2 a--  465.53g 418.38g   550   5120 usr      0 linear /dev/md0:550-5669  
      /dev/md0   system lvm2 a--  465.53g 418.38g  5670   2560 tmp      0 linear /dev/md0:5670-8229 
      /dev/md0   system lvm2 a--  465.53g 418.38g  8230   3840 var      0 linear /dev/md0:8230-12069
      /dev/md0   system lvm2 a--  465.53g 418.38g 12070 107106          0 free  
    
  2. Il PVest maintenant prêt à être réduit à la taille du SSD (80 Go). 80 gigaoctets sont en fait un 80000000000 octets:

    root@wheezy:/home/a# pvresize --setphysicalvolumesize 80000000000B /dev/md0
      Physical volume "/dev/md0" changed
      1 physical volume(s) resized / 0 physical volume(s) not resized
    
    root@wheezy:/home/a# pvs
      PV         VG     Fmt  Attr PSize  PFree 
      /dev/md0   system lvm2 a--  74.50g 27.36g
    
  3. Après cela, je peux redimensionner le tableau lui-même. Il n'y a pas de système de fichiers à ce niveau, donc je me retrouve avec une seule mdadm --growcommande, qui peut également être utilisée pour réduire les tableaux. La taille doit être entrée kibibytes, elle est donc 80000000000/1024 = 78125000:

    root@wheezy:/home/a# mdadm --grow --size=78125000 /dev/md0
    mdadm: component size of /dev/md0 has been set to 78125000K
    
    root@wheezy:/home/a# mdadm -D /dev/md0
    /dev/md0:
            Version : 1.2
      Creation Time : Thu Dec  4 12:20:22 2014
         Raid Level : raid1
         Array Size : 78125000 (74.51 GiB 80.00 GB)
      Used Dev Size : 78125000 (74.51 GiB 80.00 GB)
       Raid Devices : 2
      Total Devices : 1
        Persistence : Superblock is persistent
    
        Update Time : Thu Dec  4 17:56:53 2014
              State : clean, degraded 
     Active Devices : 1
    Working Devices : 1
     Failed Devices : 0
      Spare Devices : 0
    
               Name : wheezy:0  (local to host wheezy)
               UUID : 44ea4079:b3b837d3:b9bb2ca1:1b95272a
             Events : 60
    
        Number   Major   Minor   RaidDevice State
           0       8       16        0      active sync   /dev/sdb
           1       0        0        1      removed
    
  4. Il est maintenant temps d'ajouter un SSD existant à la baie et de le laisser reconstruire:

    root@wheezy:/home/a# mdadm --add /dev/md0 /dev/sdc
    mdadm: added /dev/sdc
    
    root@wheezy:/home/a# cat /proc/mdstat 
    Personalities : [raid1] 
    md0 : active raid1 sdc[2] sdb[0]
          78125000 blocks super 1.2 [2/1] [U_]
          [>....................]  recovery =  1.3% (1081920/78125000)         finish=11.8min speed=108192K/sec
    
    unused devices: <none>
    

Après la reconstruction, j'ai un tableau sain. Ses membres peuvent être échangés et l'installation de GRUB peut être effectuée régulièrement (après le démarrage dans le système de production) avec grub-install /dev/sdc.

Neurotransmetteur
la source
J'espère que vous n'avez pas rendu votre PV trop volumineux; si le SSD fait 80 Go, vous ne pourrez peut-être pas régler votre PV à 80 Go avec des décalages en raison du partitionnement et des métadonnées. Bien sûr, il s'agit également d'une opération en ligne, sans aucun cd live.
frostschutz
@frostschutz, comme vous l'avez probablement vu, je n'ai pas réglé mon PV à 80 gigaoctets, mais à 74,5 gibibytes (étape 3) et c'est un espace suffisant pour correspondre à la taille du SSD. De plus, les LV sont montés et utilisés par le système, j'ai donc dû démarrer dans un système en direct.
Neurotransmetteur