2013년 2월 16일 토요일

또 LVM의 디스크 오류 발생

LVM을 이용하여 묶어 놓은 다섯 개의 디스크(씨게이트 바라쿠다 2TB) 중 또 하나가 문제를 일으켰다. 동일 HDD에서 벌써 세번째의 오류던가... 다행히 인텔리전트한 OS께서는 입출력 오류가 나는 즉시 문제의 로지컬 볼륨을 read-only 상태로 만들어 두어서 데이터의 손실은 일어나지 않았다. 이 상태에서 pvdisplay를 해 보면 오류가 난 디스크는 보이지 않는다. 아직까지는 재부팅하여 파일시스템을 체크하면 원상태로 복구가 되지만, 반복적으로 오류가 발생하고 있으므로 해당 디스크를 아예 제거하거나 다른 것으로 교체할 필요가 있다. 다행히 비교적 최근에 전체 백업을 해 두었으므로 데이터를 유실할 염려는 없다.


LVM에 물리 볼륨을 추가하는 것은 쉽지만, 제거하는 것은 매우 까다롭다. 볼륨 그룹에 여유 익스텐트가 하나도 없이 논리 볼륨을 꽉 채워놓은 상태인데다가, 디스크 베이조차 비어 있는 것이 없다. 가장 정석적인 방법은 다음과 같을 것으로 생각된다.

  1. 새 디스크를 장착하고 물리 볼륨으로 설정한 뒤 볼륨 그룹에 추가한다. 물론 나는 이렇게 하기 어렵다. 빈 베이가 없으므로. 또는 파일 시스템을 줄이고(resize2fs) 논리 볼륨을 줄여서(lvreduce) 빼 낼 디스크 하나 이상의 공간을 확보한다. 이 과정에서 파일이 무사히 남아 있을 것으로는 확신하기 어렵다. 
  2. 제거할 디스크에 있는 익스텐트를 여유 공간으로 옮긴다. pvmove 명령을 이용한다.
  3. 디스크를 제거한다.
어차피 전체 데이터를 다 백업해 두었으므로, 아예 논리 볼륨을 싹 지워버리고 새로 LVM을 설치하는 것이 더 빠를지도 모른다. 논리 볼륨을 줄이는 과정에서 파일시스템 체크를 하기 때문에 시간이 너무 많이 걸린다. 다음의 방법을 따르면 될 것이다.

  1. 마운트 해제.
  2. # lvremove -f /dev/dataVG/dataLG
  3. # lvdisplay로 논리 볼륨이 없음을 확인.
  4. # pvremove /dev/sab1 (물리 볼륨의 제거)
  5. # vgremove 볼륨그룹
  6. # rm /dev/vg##/group
  7. # rmdir /dev/vg##
  8. # strings /etc/lvmtab
  9. 물리 볼륨 라벨이 제거된 디스크는 파티션 도구를 사용하여 새로 파티션을 한다.

마지막으로는 가장 과격한 방법이다. 디스크에 영구적인 오류가 발생하여 아예 인식조차 되지 않는 경우에는 백업이 되어 있지 않는 경우 해당 디스크의 자료가 유실될 것을 각오하고 시스템을 복구해야 할 것이다. 그렇다면, 전원을 내리고 문제의 디스크를 아예 빼 버린다음 재부팅을 하면 어떻게 될까? 고장이 나서 특정 디스크가 인식이 되지 않는 것과 매우 흡사한 상황이다.  이는 Red Hat Enterprise Linux 6.4 Beta Logical Volumne Manager Administration 자료의 6.6 Removing Lost Physical Volumes from a Volume Group 항목을 참고하면 된다.

[인용] If you lose a physical volume, you can activate the remaining physical volumes in the volume group with the --partial argument of vgchange command. You can remove all the logical volumes that used that physical volume from the volume group with the --removemissing argument of the vgreduce command. It is recommended that you run the vgreduce command with the --test argument to verify what you will be destroying.

댓글 없음: