mdadm 성능이 저하된 RAID 어레이에서 LVM 물리 볼륨을 축소하고 스페어를 추가한 후 재구축합니다.

mdadm 성능이 저하된 RAID 어레이에서 LVM 물리 볼륨을 축소하고 스페어를 추가한 후 재구축합니다.

Debian Wheezy시스템에는 RAID-1(미러)에 여러 개의 500GB HDD가 있고 mdadm그 위에 LVM총 크기가 47.15GiB인 5개 파티션( , , 및 )이 있는 논리 볼륨이 있습니다. 물리적 볼륨에는 418.38GiB를 사용할 수 있습니다. 두 드라이브 모두에 ​​설치됩니다.bootrootusrvartmpGRUB

HDD 중 하나에 오류가 발생하여 이제 어레이 성능이 저하되었지만 데이터는 손상되지 않았습니다.

내가 원하는 것은 시스템을 처음부터 다시 설치하지 않고 HDD 2개를 모두 80GB SSD로 교체하는 것입니다. 여기서 미묘한 점은 SSD의 크기에 맞게 LVM 물리 볼륨을 축소해야 하지만 논리 볼륨이 연속되어 있지 않아(처음에는 여유 공간이 많음) 논리 볼륨을 SSD 내에서 이동해야 한다는 것입니다. 어떻게 든 물리적 볼륨. 그리고 lvmove데비안에는 명령이 없습니다.

어떻게 이를 달성할 수 있나요?

일부 콘솔 출력:

버전:

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이전 PV에서 기존 lv를 모두 제거한 다음 이전 pv( vgreduce)를 삭제하고 드라이브의 서비스를 중단하면 됩니다.

답변2

하지만 .lvmovepvmove

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. 이제 PVSSD 크기(80GB)로 축소할 준비가 되었습니다. 80GB는 실제로 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배열 축소에도 실제로 작동하는 명령 하나만 사용하게 되었습니다. 크기는 kibibytes80000000000 / 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.

관련 정보