Linux LVM 스냅 샷을 커밋하거나 되 돌리시겠습니까?


16

CentOS 5 서버에서 실험적인 업그레이드를 수행하려고합니다. 업그레이드가 실패하면 파일 시스템의 변경 사항을 취소 할 수 있기를 원합니다. 이 시나리오는 LVM2 읽기-쓰기 스냅 샷용 LVM HOWTO의 섹션 3.8에 있는 예와 비슷 하지만 실제 사용 방법이 부족합니다.

  1. 변경 사항을 커밋하여 원래 파티션으로 다시 병합하려면 어떻게해야합니까?

  2. 파일 시스템을 원래 상태로 복원하여 변경 사항을 되돌리려면 어떻게해야합니까? 완전히 재부팅하지 않으면 여러 서비스를 다시 시작해야한다고 가정해야합니까?

  3. 파티션의 특정 디렉토리 만 스냅 샷 할 수 있습니까, 아니면 전체 파티션 작업입니까?

답변:


11

Linux 2.6.33 이상을 실행 중이고 LVM 2.0.58 이상을 사용하는 경우 LVM2 / 장치 맵퍼 ​​스냅 샷 병합 기능을 사용할 수 있습니다.

lvconvert --merge

이 게시물을 참조하십시오 : http://www.jonnor.com/2010/02/lvm-snapshot-merging-avaliable/

그것은 참조 http://kernelnewbies.org/Linux_2_6_33 2.0.58에서와 LVM 변경 로그 (섹션 5, MD / DM에보고) : ftp://sources.redhat.com/pub/lvm2/WHATS_NEW를

그러나 나는 그것을 올바르게 사용하는 방법을 아직 말할 수 없다 ;-)


dmsetup targetssnapshot-lv에 적용된 merge 명령이 스냅 샷이 작성된 상태로 되돌아가는 경우 snapshot-merge를 표시해야합니다 .
Nils

OP는 일종의 병합 단계를 통해 변경 사항을 커밋하는 것에 대해 혼란스러워합니다. 스냅 샷의 크기가 커짐에 따라 변경 사항이 적용됩니다. 변경 사항의 스냅 샷은 lvconvert --merge를 통해이를 백업하는 데 필요한 정보입니다. OP가 변경 사항에 만족하면 lvremove를 통해 스냅 샷을 삭제할 수 있습니다.
빈스

21

우분투로 스냅 샷 기반 업그레이드를 시도했습니다. 그리고 그래, 나는 여러 번 재부팅해야했다. 먼저 원래 root-lv의 이름을 다른 것으로 바꾸십시오. 따라서 업그레이드시 많은 변경 사항이 생성되고 원본보다 변경 사항이 더 빠르기 때문에 스냅 샷에 원래 이름을 지정할 수 있습니다.

 # lvrename lvm root root-old
 # lvcreate -n root -s lvm/root-old -L 10G

크기는 적절하게 선택해야합니다. 그런 다음 재부팅하여 'new'lvm / ubuntu가 루트로 마운트되고 업그레이드를 수행 할 수 있습니다. 이제 새 버전을 테스트하고 이전 시스템으로 변경할 수도 있습니다.

 # lvrename lvm root root-new
 # lvrename lvm root-old root
 # reboot

업그레이드를 삭제하려면 (이전 시스템에서) 실행하십시오.

# lvremove lvm/root-new

변경 사항을 커밋하려면 이전 시스템에서 실행하십시오.

# lvconvert --merge lvm/root-new

또는 새로운 시스템에서

# lvrename lvm root root-new
# lvconvert --merge lvm/root-new
# lvrename lvm root-old root

재부팅이 뒤 따릅니다. 볼륨이 열려 있으므로 시스템은 즉시 병합을 거부합니다. 따라서 부팅 중에 병합이 시작되고 시스템 작업을 이미 수행 할 수있는 동안 계속됩니다.

아, 그런데 : 시스템 간을 바꿀 때 적절한 커널을 사용해야합니다. / boot는 lvm의 일부가 아니므로 이전 커널과 새 커널이 나란히 배치됩니다.


답변 주셔서 감사합니다. 방금 CentOS 7 가상 머신에서 절차를 재생했으며 매력처럼 작동했습니다. 병합 프로세스 중에 가상 시스템을 재설정 한 후 시스템이 업그레이드 된 파일에 계속 액세스하는 동안 LVM 하위 시스템이 가상 시스템을 다시 시작했습니다.
앤더슨 Medeiros 고메스

이 답변의 일부는 lvconvert --merge를 통해 변경 사항을 커밋하는 것이 좋습니다. 스냅 샷의 크기가 커짐에 따라 변경 사항도 커밋됩니다. lvconvert --merge는 스냅 샷 정보를 사용하여 변경 사항을 되돌립니다 (백 아웃합니다).
빈스

10

좋아, 나는 HOWTO 3.8을 다시 읽음으로써 알아 낸 것으로 생각한다.

  • LVM1과 같은 읽기 전용 스냅 샷에는 스냅 샷 생성 후 블록 수준의 차이가 있습니다. 원본은 여전히 ​​변경되지만 스냅 샷은 원본의 표현을 유지합니다. 읽기 에서 스냅 샷 해당 시간 데이터로 선물.
  • 읽기-쓰기 스냅 샷 (LVM2의 기본값)은 다음과 같이 쓸 수 있습니다 . 원래 파티션 의 포크 입니다. 쓰기 스냅 샷은 원본을 변경하지 않습니다.

스냅 샷의 작동 방식은 원본과의 블록 수준 변경 세트입니다. 따라서 원본을 쓸 때 다음과 같은 일이 발생합니다.

  1. 뭔가 원본에 쓰려고합니다.
  2. 원본이 읽히고 원본의 블록이 스냅 샷으로 복사됩니다.
  3. 원본이 변경됩니다.
  4. 스냅 샷에는 "역차"가 포함되어 있습니다. 즉, 스냅 샷을 만들 때처럼 원래 모양으로 변경됩니다.

따라서 원본이 변경되어 스냅 샷에 변경 사항 목록이 포함되어 있으므로 스냅 샷을 버리는 것은 원본에 전혀 영향을 미치지 않습니다.

내 자신의 질문에 대답 :

LVM으로 새 스냅 샷을 만듭니다. 스냅 샷 마운트 지점에 쓰도록 업데이트를 구성 할 수있는 경우 R / W 스냅 샷을 사용하십시오. 그렇지 않으면 RO 또는 R / W가 수행합니다.

그때:

  • 받는 사람 쓰는 경우 R / W 스냅 샷 마운트 포인트, 커밋 원본과에 스냅 샷 작성하여 되돌릴 스냅 샷을 멀리 던져.
  • 원래 마운트 지점에 쓰는 경우 스냅 샷을 버리고 커밋 하고 스냅 샷에서 원본으로 쓰면 되돌 립니다.

여전히이 병합을 수행 할 수있는 도구를 아직 찾지 못했습니다. 시나리오가 의도 한 스냅 샷 사용이 아니라는 점을 고려할 때 해당 도구가 없을 수도 있습니다. rdiff의 직업처럼 들립니다.


아직 사용 가능한 LVM 병합 도구가 없습니다. 그것은 작품에 있었지만 나는 그것이 완전하다고 믿지 않습니다.
Ignacio Vazquez-Abrams

병합 도구가 현재 존재합니다 (적어도 Ubuntu Trusty에 있음). lvconvert --merge <snapshot-name>원본 디스크를 해당 스냅 샷으로 "복원"하고 해당 스냅 샷을 삭제합니다. 물론 즉시 신속하게 복원 할 수 있습니다.
dpb

3

LVM은 블록 레벨에서 작동합니다. 심지어 파일 시스템이 무엇인지 '알지 못했습니다'. 따라서 다른 LVM 볼륨의 파일 시스템이 마운트되어 있지 않으면 특정 디렉토리 만 스냅 샷 할 수 없습니다.

LVM 스냅 샷을 만들 때 실제로 볼륨의 '쓰기시 복사'복제본을 요청합니다. 스냅 샷 된 볼륨에서 변경 될 블록은 먼저 스냅 샷에서 수정되지 않은 상태로 저장됩니다. 따라서 '변경 사항을 커밋'하기 위해 아무것도 할 필요가 없습니다. 스냅 샷 볼륨 만 제거하십시오.

그러한 시나리오에서 LVM을 사용한 적이 없기 때문에 '변경 사항을 되 돌리는'권장 방법이 무엇인지 잘 모르겠지만 LVM 설명서에서 잘 설명 된 것 같습니다. 그것이 무엇이든간에 변경된 것을 다시 시작해야 할 수도 있습니다. 재부팅하는 것이 좋습니다.


2
  1. 일부 를 병합 할 이유가 없습니다 . 스냅 샷을 제거하기 만하면 소스 LV가 변경됩니다.
  2. 변경 사항을 되돌리려면 병합이 필요합니다 lvconvert --merge <snapshot name>
  3. LVM은 블록 장치와 함께 작동합니다. FS 관련 변경은 FS 유형에 따라 특수 유틸리티 (xfs_growfs, e2fsck 등)를 통해 수행해야합니다.

스냅 샷은 원래 LV의 상태를 '고정'합니다. 스냅 샷 제거는 해당 상태를 잊어 버린 것을 의미합니다. 스냅 샷 병합은 해당 상태로 돌아갑니다

그러나 LVM 내부에서는 다시 작성된 데이터를 스냅 샷에 저장합니다. 스냅 샷 크기가 LV 및 스냅 샷의 예상 변경 량을 충족하는지 확인하십시오.


실제로 스냅 샷은 아무 것도 고정하지 않습니다. 변경 사항을 추가 위치에 기록하여 원하는 경우 나중에 되돌릴 수 있습니다.
빈스

0

문서가 혼란 스럽다. lvcreate --merge는 모든 변경 사항을 되돌리고 lvremove는 변경 사항을 커밋한다는 것을 의미합니다. 차이점은 사용 방법에 있습니다.

대부분의 경우 스냅 샷을 라이브 볼륨의 읽기 전용 고정 시점 복사본으로 사용하고 있으며 라이브 볼륨이 계속 변경됩니다. 이 경우 논리적으로 병합하면 논리적으로 라이브 볼륨을 고정 된 사본으로 덮어 쓰게됩니다. 즉, 병합은 롤백 변경을 의미하고 제거는 커밋 변경을 의미합니다.

기본 동작이 아닌 스냅 샷 (LVM2의 새로운 옵션)에 쓰면 응용 프로그램을 원래 볼륨 대신 스냅 샷에 쓰도록 구성을 변경해야 할 수도 있습니다.

스냅 샷을 다룰 때는주의해야합니다. 어떤 사람들은 스냅 샷을 한 가지 방법으로 사용해야한다는 가정하에 반대의 가정 하에서 작업 할 경우 시스템을 파괴 할 수있는 지침을 제공 할 것입니다!


스냅 샷을 마운트하여 간단히 스냅 샷에 씁니다. LVM 기본값과 거의 관련이없는 마운트 대상-스냅 샷인지 여부에 상관없이 각 논리 볼륨으로 정확히 수행하는 작업에 대해서는 크게 신경 쓰지 않으며 열려 있는지 여부 만 추적합니다.
Josip Rodin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.