LVM-RAID 볼륨에 대한 중복성을 복원하는 방법

LVM-RAID 볼륨에 대한 중복성을 복원하는 방법

여러 드라이브에 걸쳐 있는 논리 볼륨(home64)이 있고 lvconvert를 사용하여 이를 RAID1로 변환하고 있습니다.

드라이브에 장애가 발생해도 계속 작동하므로 좋습니다. 이제 드라이브를 교체하려고 하는데 일종의 상태가 된 것 같습니다.

새 드라이브에 PV를 생성하고 vgextend를 사용하여 VG에 추가했습니다.

LV가 추가 공간을 사용하고 "다운그레이드"하도록 할 수 없었습니다.

고치려고 노력했지만 작동하려면 결함이 있는 드라이브가 필요한 것 같습니다. (안타깝게도 이 명령의 출력이 없습니다)

# /dev/sda is the new disk.
sudo lvconvert --repair /dev/mapper/prole-home64 /dev/sda

(편집하다) 명령을 다시 실행합니다. 실패한 드라이브는 8TB였습니다. 다른 8TB 드라이브로 교체했으며 다른 볼륨에 "8TB"의 반올림 오류를 처리할 추가 공간이 남아 있습니다.

이 명령은 대체 계획 구현을 시작할 때(하단) 더 적은 공간을 표시합니다.

sudo lvconvert --repair /dev/mapper/prole-home64
  WARNING: Disabling lvmetad cache for repair command.
  WARNING: Not using lvmetad because of repair.
Attempt to replace failed RAID images (requires full device resync)? [y/n]: y
  Insufficient free space: 5240758 extents needed, but only 1560 available
  Failed to replace faulty devices in prole/home64.

(/편집하다)

고장난 드라이브를 교체하려고 시도했지만 존재하지 않는 드라이브를 참조하는 방법을 잘 모르겠습니다.

# Mc2wIK-... is the PV id as mentioned in /etc/lvm/backup/prole
sudo lvconvert --replace Mc2wIK-qrme-cjBN-LArd-S4je-x2p0-p7qke1 /dev/mapper/prole-home64 /dev/sda

# pv1 is the label of the group in /etc/lvm/backup/prole
sudo lvconvert --replace pv1 /dev/mapper/prole-home64 /dev/sda

이들 중 어느 것도 효과가 없는 것 같습니다.

lvconvert실제로 시도해 보고 싶다고 제안했습니다.vgreduce --removemissing

그래서 나는 그랬다. 활성 볼륨으로 인해 실패했습니다. 드라이브에 오류가 발생했기 때문에 강제로 삭제합니다.

sudo vgreduce --removemissing prole
sudo vgreduce --removemissing prole --force

그러다가 배웠습니다 lvchange --syncaction. 드라이브 오류의 영향을 받은 더 작은 볼륨에서 실행한 후 문제를 찾아 해결했습니다.

lvchange --syncaction check /dev/mapper/prole-root

# Monitor progress by repeatedly running this:
lvs -a -o name,raid_sync_action,sync_percent

# Get the result with this:
lvs -o name,raid_mismatch_count

# Actually repair the volume
lvchange --syncaction repair /dev/prole/root

이것예전에는성공적인.

그러나 대용량 볼륨에서 이 작업을 수행하려고 하면 오류가 기록되지 않고 즉시 "완료"됩니다.

볼륨의 상태를 얻으려는 경우:

sudo lvs -o name,lv_health_status
  LV     Health
  home
  home64 refresh needed
  root
  var

볼륨을 새로 고치려고 하면:

sudo lvchange --refresh /dev/prole/home64
  Failed to remove temporary SubLVs from prole/home64

이는 몇 가지 문제를 보여줍니다.

sudo lvs -a -o name,segtype,devices
  LV                Type   Devices
  home              linear /dev/sda(0)
  home              linear /dev/sde(0)
  home              linear /dev/sdb(1793)
  home64            raid1  home64_rimage_0(0),home64_rimage_1(0)
  [home64_rimage_0] error
  [home64_rimage_1] linear /dev/sdg(1)
  [home64_rimage_1] linear /dev/sdh(0)
  [home64_rimage_1] linear /dev/sdf(3330)
  [home64_rimage_1] linear /dev/sdf(1428550)
  [home64_rimage_1] linear /dev/sdd(1335820)
  [home64_rmeta_0]  error
  [home64_rmeta_1]  linear /dev/sdg(0)
  root              raid1  root_rimage_0(0),root_rimage_1(0)
  [root_rimage_0]   linear /dev/sdd(1810605)
  [root_rimage_1]   linear /dev/sdf(1)
  [root_rmeta_0]    linear /dev/sdd(856646)
  [root_rmeta_1]    linear /dev/sdf(0)
  var               raid1  var_rimage_0(0),var_rimage_1(0)
  [var_rimage_0]    linear /dev/sdb(1)
  [var_rimage_1]    linear /dev/sdf(2050)
  [var_rimage_1]    linear /dev/sdf(949475)
  [var_rmeta_0]     linear /dev/sdb(0)
  [var_rmeta_1]     linear /dev/sdf(2049)

볼륨의 중복성을 어떻게 복원합니까?

(나의 대체 계획은 다른 볼륨을 생성하고 home64 볼륨의 내용을 여기에 복사하고 home64 볼륨을 삭제한 다음 새 볼륨을 RAID1로 변환하는 것이지만 더 좋은 방법이 있을 것입니다!)

답변1

pvmove이동을 위해 PV를 호출하고 2를 호출하면 home64 볼륨에 분산된 PV를 줄여 더 많은 여유 공간을 만들 수 있음을 깨달았습니다. 여기에 사용 가능한 다른 6TB 공간과 교체 디스크의 8TB 공간이 추가되어 LV를 복구할 수 있는 충분한 공간이 생겼습니다 lvchange --syncaction repair /dev/prole/home.

이제 다음과 같이 보입니다.

sudo lvs -a -o name,segtype,devices
  WARNING: Not using lvmetad because a repair command was run.
  LV                Type   Devices
  home64            raid1  home64_rimage_0(0),home64_rimage_1(0)
  [home64_rimage_0] linear /dev/sdf(1)
  [home64_rimage_0] linear /dev/sda(0)
  [home64_rimage_0] linear /dev/sdc2(0)
  [home64_rimage_1] linear /dev/sdg(1)
  [home64_rimage_1] linear /dev/sdi(0)
  [home64_rimage_1] linear /dev/sdb(3842)
  [home64_rimage_1] linear /dev/sdd(1335820)
  [home64_rmeta_0]  linear /dev/sdf(0)
  [home64_rmeta_1]  linear /dev/sdg(0)
  root              raid1  root_rimage_0(0),root_rimage_1(0)
  [root_rimage_0]   linear /dev/sdd(1810605)
  [root_rimage_1]   linear /dev/sdb(1)
  [root_rmeta_0]    linear /dev/sdd(856646)
  [root_rmeta_1]    linear /dev/sdb(0)
  var               raid1  var_rimage_0(0),var_rimage_1(0)
  [var_rimage_0]    linear /dev/sdd(0)
  [var_rimage_1]    linear /dev/sdb(2050)
  [var_rmeta_0]     linear /dev/sdd(1812653)
  [var_rmeta_1]     linear /dev/sdb(2049)

건강 상태:

sudo lvs -o name,lv_health_status
  WARNING: Not using lvmetad because a repair command was run.
  LV     Health
  home64
  root
  var

관련 정보