LVM Raid5를 확장하려면 디스크를 추가하세요.

LVM Raid5를 확장하려면 디스크를 추가하세요.

3개의 PV가 있는 raid5 볼륨인 단일 LV가 있는 LVM VG가 있습니다. 볼륨 그룹에 추가 PV를 추가하고 raid5 LV를 확장하여 사용하고 싶습니다.

여기서는 연습용 테스트 디스크로 100MB 파일 4개를 사용합니다.

$ sudo vgs
  WARNING: Not using lvmetad because a repair command was run.
  VG     #PV #LV #SN Attr   VSize   VFree 
  testvg   4   1   0 wz--n- 384.00m 96.00m
$ sudo pvs
  WARNING: Not using lvmetad because a repair command was run.
  PV           VG     Fmt  Attr PSize  PFree 
  /dev/loop0p1 testvg lvm2 a--  96.00m     0 
  /dev/loop1p1 testvg lvm2 a--  96.00m     0 
  /dev/loop2p1 testvg lvm2 a--  96.00m     0 
  /dev/loop3p1 testvg lvm2 a--  96.00m 96.00m
$ sudo lvs
  WARNING: Not using lvmetad because a repair command was run.
  LV       VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testraid testvg rwi-a-r--- 184.00m                                    100.00    

추가 디스크를 가져오기 위해 스트라이프 수를 변경하려고 하면 명령이 오류를 반환하지만 이제 새 PV에는 하위 LV가 표시되고 LV에는 증가된 여유 공간이 표시됩니다. 그러나 하위 LV는 동기화되지 않은 특성을 표시하고 LV에서 복구 실행이 실패합니다.

$ sudo lvconvert --stripes 3 /dev/testvg/testraid
  Using default stripesize 64.00 KiB.
  WARNING: Adding stripes to active logical volume testvg/testraid will grow it from 46 to 69 extents!
  Run "lvresize -l46 testvg/testraid" to shrink it or use the additional capacity.
Are you sure you want to add 1 images to raid5 LV testvg/testraid? [y/n]: y
  Insufficient free space: 4 extents needed, but only 0 available
  Failed to allocate out-of-place reshape space for testvg/testraid.
  Insufficient free space: 4 extents needed, but only 0 available
  Failed to allocate out-of-place reshape space for testvg/testraid.
  Reshape request failed on LV testvg/testraid.
$ sudo pvs -a -o +pv_pe_count,pv_pe_alloc_count
  PV                    VG     Fmt  Attr PSize  PFree PE  Alloc
  /dev/loop0p1          testvg lvm2 a--  96.00m    0   24    24
  /dev/loop1p1          testvg lvm2 a--  96.00m    0   24    24
  /dev/loop2p1          testvg lvm2 a--  96.00m    0   24    24
  /dev/loop3p1          testvg lvm2 a--  96.00m    0   24    24
$ sudo lvs -a
  LV                  VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testraid            testvg rwi-a-r--- 276.00m                                    100.00          
  [testraid_rimage_0] testvg iwi-aor---  92.00m                                                    
  [testraid_rimage_1] testvg iwi-aor---  92.00m                                                    
  [testraid_rimage_2] testvg iwi-aor---  92.00m                                                    
  [testraid_rimage_3] testvg Iwi-aor---  92.00m                                                    
  [testraid_rmeta_0]  testvg ewi-aor---   4.00m                                                    
  [testraid_rmeta_1]  testvg ewi-aor---   4.00m                                                    
  [testraid_rmeta_2]  testvg ewi-aor---   4.00m                                                    
  [testraid_rmeta_3]  testvg ewi-aor---   4.00m 
$ sudo lvconvert --repair /dev/testvg/testraid 
  WARNING: Not using lvmetad because of repair.
  Active raid has a wrong number of raid images!
  Metadata says 4, kernel says 3.
Attempt to replace failed RAID images (requires full device resync)? [y/n]: y
  WARNING: Disabling lvmetad cache for repair command.
  Unable to repair testvg/testraid.  Source devices failed before the RAID could synchronize.
  You should choose one of the following:
    1) deactivate testvg/testraid, revive failed device, re-activate LV, and proceed.
    2) remove the LV (all data is lost).
    3) Seek expert advice to attempt to salvage any data from remaining devices.
  Failed to replace faulty devices in testvg/testraid.

동일한 디스크를 추가하여 LV를 확장하려면 어떤 단계를 수행해야 합니까?

답변1

이 문제를 작업하면서 제가 메모한 내용은 다음과 같습니다.https://wiki.archlinux.org/index.php/User:Ctag/Notes#Growing_LVM_Raid5

결국 새 디스크를 추가하고 Raid6으로 마이그레이션했습니다.

내 기억이 맞다면 문제는 새 디스크가 다른 디스크보다 몇 섹터 더 작고 새 디스크를 추가하면 필요한 LVM/raid 메타데이터의 오버헤드가 약간 증가한다는 것입니다. 따라서 동일한 디스크도 작동하지 않습니다. ). 두 문제에 대한 해결책은 몇 개의 섹터로 모든 디스크를 완전히 활용하여 메타데이터 및 향후 디스크 차이를 위한 공간을 남겨 두는 것입니다.

# pvs -a -o +pv_pe_count,pv_pe_alloc_count
  PV                     VG      Fmt  Attr PSize  PFree    PE     Alloc 
  /dev/mapper/cryptslow1 cryptvg lvm2 a--  <1.82t   20.00m 476931 476931
  /dev/mapper/cryptslow2 cryptvg lvm2 a--  <1.82t   20.00m 476931 476931
  /dev/mapper/cryptslow3 cryptvg lvm2 a--  <2.73t <931.52g 715395 476931
  /dev/mapper/cryptslow4 cryptvg lvm2 a--  <1.82t   <1.82t 476927      0

위에서 새 디스크에 "476931" 대신 "476927" 범위만 있는 방법을 확인하세요. 그것이 문제이다. 이 새 디스크를 사용할 수 있으려면 LVM이 RAID5 할당에 대해 더 적은 수(또는 더 적은 수)의 확장 영역만 할당하도록 해야 합니다.

# lvresize -r -l -10 /dev/cryptvg/raid
fsck from util-linux 2.34
/dev/mapper/cryptvg-raid: clean, 913995/240320512 files, 686703011/961280000 blocks
resize2fs 1.45.3 (14-Jul-2019)
Resizing the filesystem on /dev/mapper/cryptvg-raid to 976742400 (4k) blocks.
The filesystem on /dev/mapper/cryptvg-raid is now 976742400 (4k) blocks long.

  Size of logical volume cryptvg/raid changed from <3.64 TiB (953860 extents) to <3.64 TiB (953850 extents).
  Logical volume cryptvg/raid successfully resized.

# pvs -a -o +pv_pe_count,pv_pe_alloc_count
  PV                     VG      Fmt  Attr PSize  PFree    PE     Alloc 
  /dev/mapper/cryptslow1 cryptvg lvm2 a--  <1.82t   20.00m 476931 476926
  /dev/mapper/cryptslow2 cryptvg lvm2 a--  <1.82t   20.00m 476931 476926
  /dev/mapper/cryptslow3 cryptvg lvm2 a--  <2.73t <931.52g 715395 476926
  /dev/mapper/cryptslow4 cryptvg lvm2 a--  <1.82t   <1.82t 476927      0

이제 새 디스크를 추가하면 이번에는 제대로 작동합니다.

관련 정보