Durch das Verkleinern des physischen LVM-Volumes auf mdadm wurde das RAID-Array beeinträchtigt, ein Ersatz hinzugefügt und neu erstellt

8

Ich habe ein Debian WheezySystem mit einem Paar von 500 GB HDDs in RAID-1 ( mdadmSpiegel), an deren Spitze sitzt LVMlogische Volumen mit 5 Trennwänden ( boot, root, usr, varund tmp), Gesamtgröße von 47.15 GiB. 418,38 GiB im physischen Volumen sind frei. GRUBauf beiden Laufwerken installiert.

Eine der Festplatten ist ausgefallen und das Array ist jetzt beeinträchtigt, aber die Daten sind intakt.

Ich möchte alle diese 2 Festplatten gegen 80-GB-SSDs austauschen, ohne das System von Grund auf neu installieren zu müssen. Der subtile Punkt hier ist, dass ich das physische LVM-Volume verkleinern muss, um es an die Größe der SSD anzupassen, aber die logischen Volumes sind nicht zusammenhängend (am Anfang ist viel freier Speicherplatz vorhanden), sodass ich logische Volumes innerhalb eines physischen Volumes irgendwie verschieben muss . Und es gibt keinen lvmoveBefehl in Debian.

Wie erreiche ich das?

Einige Konsolenausgaben:

Versionen:

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

Array-Details:

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

LVM kurze Details:

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

Segmentierung der 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  
Neurotransmitter
quelle
Oder Sie können einfach ein neues RAID / VG / LV auf der SSD erstellen und rsyncIhre Dateien über. Es ist nicht online, aber wahrscheinlich schneller als alles andere.
Frostschutz
Zuerst sollte ich sowohl PV als auch Array verkleinern. Dann stelle ich einfach das Array wieder her.
Neurotransmitter

Antworten:

5

Sie müssen den PV nicht verkleinern oder das Array neu erstellen. Sie müssen nur ein neues Array aus den neuen Laufwerken erstellen und dieses als neues pv ( pvcreate+ vgextend) hinzufügen , dann pvmovealle vorhandenen Levels vom alten pv entfernen, dann das alte pv ( vgreduce) entfernen und das Laufwerk außer Betrieb nehmen.

psusi
quelle
Gute alternative Lösung, aber ich halte mich lieber an das alte Array, um Zeit zu sparen: Ich möchte kein neues Array in das alte System integrieren.
Neurotransmitter
1
@TranslucentCloud, es dauert weniger Zeit, ein neues Array zu erstellen, als die Größe des alten zu ändern, es auf einem der neuen Laufwerke neu zu erstellen, das alte Laufwerk zu entfernen und es erneut zu erstellen.
Psusi
Bei der Installation GRUBüber das Live-System können jedoch zusätzliche Schritte erforderlich sein. Es ist einfacher, das Produktionssystem zu starten und GRUB mit einem einfachen Befehl von dort aus zu installieren.
Neurotransmitter
@TranslucentCloud, wer hat etwas über ein Live-System gesagt? In beiden Fällen müssen Sie grub auf den neuen Laufwerken installieren. Da Sie Debian ausführen, ist das ziemlich einfach: dpkg-reconfigure grub-pcund wählen Sie die neuen Laufwerke aus.
Psusi
1
@TranslucentCloud Der springende Punkt bei LVM ist die Möglichkeit, die Größe zu ändern und Dinge zu verschieben, während das System verwendet wird. Wie bei MD können Sie die Festplatten austauschen und die Größe ändern, während sie ausgeführt werden. Das Einzige, was Sie daran hindern könnte, ist, wenn Ihr Dateisystem keine Live-Größenänderung unterstützt (wenn Sie es verkleinern müssten).
Frostschutz
3

Es ist nicht lvmoveaber pvmove.

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

Dadurch sollten alle Bereiche im Bereich von 89600-102950 auf 0-12070 verschoben werden. Gemäß den von Ihnen veröffentlichten Daten sollte dies dazu führen, dass Ihre LVs an den Anfang Ihrer PV verschoben werden.

Frostschutz
quelle
Ja, dies löst das LVAusrichten eines Teils der Aufgabe.
Neurotransmitter
3

ACHTUNG: DIESER LEITFADEN IST NICHT OPTIMAL. Überprüfen Sie die akzeptierte Antwort

Okay, ich habe herausgefunden, wie ich das machen soll, was ich versucht habe. Dies wird eine Art Tutorial sein.

Während dieser Zeit war mir noch nicht klar, dass Manipulationen mit LVs tatsächlich möglich sind, wenn die Dateisysteme in einer liveLinux-Distribution (SystemRescueCD) gemountet und gebootet werden . Die Leute hier haben mir erklärt, dass dies nicht notwendig ist, wenn Sie nicht mit tatsächlichen Dateisystemen manipulieren und nur LVs ausrichten und PV verkleinern.

Mit diesem Leitfaden erreichen Sie definitiv das, was Sie wollen, aber nicht auf effiziente Weise, da es der Natur des LVM gegenübersteht - der Möglichkeit, Dinge live zu tun .

  1. Aufgrund der nicht zusammenhängenden Natur logischer Volumes auf meinem physischen Volume sollte ich sie irgendwie am Anfang des physischen Volumes verschieben. Der pvmovevon @frostschutz vorgeschlagene Befehl kann sich LVsinnerhalb eines 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. Jetzt kann PVes auf die Größe der SSD (80 GB) verkleinert werden. 80 Gigabyte sind eigentlich 80000000000 Bytes:

    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. Danach kann ich die Größe des Arrays selbst ändern. Auf dieser Ebene gibt es keine Dateisysteme, daher habe ich nur einen einzigen mdadm --growBefehl, mit dem auch Arrays verkleinert werden können. Die Größe sollte eingegeben werden kibibytes, also 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. Jetzt ist es Zeit, eine vorhandene SSD zum Array hinzuzufügen und neu erstellen zu lassen:

    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>
    

Nach dem Wiederaufbau habe ich ein gesundes Array. Die Mitglieder können ausgetauscht werden und die Installation von GRUB kann routinemäßig (nach dem Booten in das Produktionssystem) mit durchgeführt werden grub-install /dev/sdc.

Neurotransmitter
quelle
Ich hoffe, Sie haben Ihre PV nicht zu groß gemacht. Wenn die SSD 80 GB groß ist, können Sie Ihre PV möglicherweise nicht auf 80 GB einstellen, was bei Offsets aufgrund von Partitionierung und Metadaten der Fall ist. Natürlich ist dies auch eine Online-Operation, alles ohne Live-CD.
Frostschutz
@frostschutz, wie Sie wahrscheinlich gesehen haben, habe ich meine PV nicht auf 80 Gigabyte eingestellt, sondern auf 74,5 Gibibyte (Schritt 3), und dies ist ein ausreichender Speicherplatz, um der Größe der SSD zu entsprechen. Außerdem werden die LVs vom System gemountet und verwendet, sodass ich ein Live-System starten musste.
Neurotransmitter