Сжатие физического тома LVM поверх RAID-массива с деградацией mdadm, добавление запасного и восстановление его


8

У меня есть Debian Wheezyсистема с парой 500 Гб жестких дисков в RAID-1 ( mdadmзеркало), на вершине которой сидит LVMлогические тома с 5 разделов ( boot, root, usr, varи tmp), общий размер 47,15 ГиБ. 418,38 ГиБ в физическом объеме свободны. GRUBустановлен на обоих дисках.

Один из жестких дисков вышел из строя, и теперь массив поврежден, но данные не повреждены.

Я хочу заменить все эти 2 жестких диска на твердотельные накопители емкостью 80 ГБ без необходимости переустанавливать систему с нуля. Тонкий момент здесь заключается в том, что мне нужно сжать физический том LVM, чтобы он соответствовал размеру SSD, но логические тома не являются смежными (в начале много свободного места), поэтому мне нужно каким-то образом перемещать логические тома в физический. , И lvmoveв Debian нет команды.

Как мне этого добиться?

Некоторый консольный вывод:

Версии:

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

Детали массива:

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:

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

Сегментация 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  

Или вы можете просто создать новый RAID / VG / LV на SSD и rsyncваши файлы перезаписать. Это не онлайн, но, вероятно, будет быстрее, чем что-либо еще.
frostschutz

Сначала я должен уменьшить PV и массив. Тогда я просто восстановлю массив.
Нейротрансмиттер

Ответы:


5

Вам не нужно сжимать PV или перестраивать массив. Вам просто нужно создать новый массив из новых дисков и добавить его как новый pv ( pvcreate+ vgextend), затем pvmoveвсе существующие lvs со старого pv, затем удалить старый pv ( vgreduce) и вывести этот диск из строя.


Хорошее альтернативное решение, но я предпочитаю придерживаться старого массива просто для экономии времени: я не хочу реинтегрировать новый массив в старую систему.
Нейротрансмиттер

1
@TranslucentCloud, создание нового массива занимает меньше времени, чем изменение размера старого, восстановление его на одном из новых дисков, удаление старого диска и повторная сборка .
psusi

Но вы можете столкнуться с дополнительными шагами, пытаясь установить GRUBиз системы Live. Проще загрузиться в производственную систему и установить GRUB из нее с помощью одной простой команды.
Нейротрансмиттер

@TranslucentCloud, кто сказал что-нибудь о живой системе? В любом случае вы должны установить grub на новые диски. Поскольку вы используете Debian, это довольно просто: dpkg-reconfigure grub-pcи выберите новые диски.
psusi

1
@TranslucentCloud Суть LVM заключается в возможности изменять размеры и перемещать объекты во время использования системы. То же самое для MD, вы можете заменить диски и изменить размер во время его работы. Единственное, что может вам помешать, - это если ваша файловая система не поддерживает динамическое изменение размера (если вам пришлось его уменьшать).
frostschutz

3

Это не lvmoveно pvmove.

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

Это должно переместить любые экстенты в диапазоне 89600-102950 в диапазон 0-12070. Согласно опубликованным вами данным, ваши LV должны быть перемещены в начало вашего PV.


Да, это решает LVвыравнивание части задачи.
Нейротрансмиттер

3

ВНИМАНИЕ: ЭТО РУКОВОДСТВО ДАЛЕКО ОТ ОПТИМАЛЬНОГО. ПРОВЕРЬТЕ ПРИНЯТЫЙ ОТВЕТ

Хорошо, я понял, как сделать то, что я пытался. Это будет своего рода учебник.

В течение этого времени я еще не осознал, что манипуляции с LV действительно возможны, когда файловые системы смонтированы и загружены в какой-то liveдистрибутив Linux (SystemRescueCD). Люди здесь объяснили мне, что в этом нет необходимости, если вы не манипулируете действительными файловыми системами, а просто выравниваете LV и уменьшаете PV.

Таким образом, с этим руководством вы определенно достигнете того, чего хотите, но не эффективно, потому что оно противоречит самой природе LVM - возможности делать вещи живыми .

  1. Из-за несмежного характера логических томов на моем физическом томе, я должен как-то перемещать их в начале физического тома. Команда pvmove, предложенная @frostschutz, может двигаться LVsвнутри 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. Теперь PVон готов к сжатию до размера SSD (80 ГБ). 80 гигабайт на самом деле 80000000000 байт:

    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. После этого я могу изменить размер самого массива. На этом уровне нет файловых систем, так что в итоге я получаю только одну mdadm --growкоманду, которая также может использоваться для сжатия массивов. Размер должен быть введен kibibytes, так что это 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. Теперь пришло время добавить существующий SSD в массив и позволить ему перестроить:

    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>
    

После восстановления у меня есть здоровый массив. Его члены можно менять местами, а установку GRUB можно выполнять регулярно (после загрузки в производственную систему) с помощью grub-install /dev/sdc.


Я надеюсь, что вы не сделали свой PV слишком большим; если твердотельный накопитель имеет размер 80 ГБ, возможно, вам не удастся установить для PV значение 80 ГБ с учетом смещений из-за разделения и метаданных. Кроме того, конечно, это онлайн-операция, все это, не требуется live cd.
frostschutz

@frostschutz, как вы, наверное, уже видели, я установил свой PV не на 80 гигабайт, а на 74,5 гигабайта (шаг 3), и этого места достаточно для размера SSD. Кроме того, LV монтируются и используются системой, поэтому мне пришлось загружаться в какую-то живую систему.
Нейротрансмиттер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.