在mdadm降级的RAID阵列上缩小LVM物理卷,添加备用磁盘并重建它


8

我有一个Debian Wheezy与RAID-1(一对夫妇500个GB HDD的系统mdadm镜),在其顶部坐落LVM逻辑卷用5个分区(bootrootusrvartmp),47.15吉布的总大小。物理卷中的418.38 GiB是免费的。GRUB安装在两个驱动器上。

HDD之一发生故障,现在阵列降级,但数据完整无缺。

我想要的是将所有这2个HDD交换为80 GB SSD,而无需从头开始重新安装系统。此处的微妙之处在于,我需要缩小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  

或者,您可以只在SSD上创建一个新的RAID / VG / LV,然后rsync将文件复制过来。它不是在线的,但是可能比其他任何东西都快。
frostschutz 2014年

首先,我应该缩小PV和阵列。然后,我只恢复阵列。
Neurotransmitter 2014年

Answers:


5

您无需缩小PV或重建阵列。您只需要从新驱动器中创建一个新阵列,并将其添加为新的pv(pvcreate+ vgextend),然后将pvmove所有现有的lvs从旧的pv中删除,然后删除旧的pv(vgreduce)并停止使用该驱动器。


好的替代解决方案,但我更愿意保留旧阵列,只是为了节省时间:我不想在旧系统中重新集成新阵列。
Neurotransmitter 2014年

1
@TranslucentCloud,创建新阵列所需的时间比调整旧阵列的大小,在新驱动器之一上重建它,删除旧驱动器并再次重建所花费的时间更少
psusi 2014年

但是您可能会面临尝试GRUB从Live系统安装的其他步骤。使用一个简单的命令引导进入生产系统并从中安装GRUB更容易。
Neurotransmitter 2014年

@TranslucentCloud,谁说过实时系统?无论哪种方式,您都必须在新驱动器上安装grub。由于您正在运行debian,因此非常简单:dpkg-reconfigure grub-pc并选择新驱动器。
psusi 2014年

1
@TranslucentCloud LVM的重点是在使用系统时调整大小和移动内容的能力。与MD相同,您可以在运行时更换磁盘并调整大小。唯一可能阻止您的事情是文件系统不支持实时调整大小(如果必须缩小大小)。
弗罗斯特斯2014年

3

不是,lvmove而是pvmove

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

那应该将89600-102950范围内的任何范围移动到0-12070范围内。根据您发布的数据,这将导致您的LV重新定位到PV的开头。


是的,这解决了LV部分任务对齐问题。
Neurotransmitter 2014年

3

注意:本指南距最佳指南还很远。检查接受的答案

好的,我已经弄清楚该怎么做。这将是一种教程。

在这段时间里,我还没有意识到,当文件系统被挂载并引导到某些Linux发行版(SystemRescueCD)中时,使用LV进行操作实际上是可行live。这里的人向我解释说,如果您不使用实际的文件系统,而只是对齐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的大小(80GB)。80 GB实际上是8000000000000字节:

    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设置得太大。如果SSD为80GB,则由于分区和元数据的原因,您可能无法将PV设置为80GB(带偏移量)。另外,当然,这是一个在线操作,所有操作都不需要现场安装CD。
frostschutz 2014年

正如您可能已经看到的,@ frostschutz,我没有将PV设置为80 GB,而是将其设置为74.5 Gb(第3步),这足以匹配SSD的大小。另外,LV已由系统安装和使用,因此我必须启动到某些实时系统。
Neurotransmitter 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.