여러 드라이브에 걸쳐 있는 논리 볼륨(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