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

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

我的Debian Wheezy系统有几个采用 RAID-1(镜像)的 500 GB HDD ,mdadm其顶部是具有 5 个分区( 、、和)LVM的逻辑卷,总大小为 47.15 GiB。物理卷中有 418.38 GiB 可用。安装在两个驱动器上。bootrootusrvartmpGRUB

其中一个 HDD 发生故障,现在阵列已降级,但数据完好无损。

我想要的是将这 2 个 HDD 全部更换为 80 GB SSD,而不需要从头开始重新安装系统。这里的微妙之处是我需要缩小 LVM 物理卷以匹配 SSD 的大小,但逻辑卷不是连续的(一开始有很多可用空间),所以我必须以某种方式在物理卷中移动逻辑卷。而且lvmoveDebian中没有命令。

我该如何实现这一目标?

一些控制台输出:

版本:

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  

答案1

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

答案2

不是lvmove但是pvmove

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

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

答案3

注意:本指南远非最佳。检查已接受的答案

好吧,我已经弄清楚如何做我尝试过的事情了。这将是某种教程。

在此期间我还没有意识到,对 LV 的操作实际上是可能的当文件系统被安装并引导到某些liveLinux 发行版 (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 的大小 (80GB)。 80 GB 实际上是 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.

相关内容