Linux LVM 스냅 샷을 커밋하거나 되 돌리시겠습니까? 실제 사용 방법이 부족합니다. 변경 사항을 커밋하여

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

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

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

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



답변

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를

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


답변

우분투로 스냅 샷 기반 업그레이드를 시도했습니다. 그리고 그래, 나는 여러 번 재부팅해야했다. 먼저 원래 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의 일부가 아니므로 이전 커널과 새 커널이 나란히 배치됩니다.


답변

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

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

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

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

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

내 자신의 질문에 대답 :

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

그때:

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

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


답변

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

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

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


답변

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

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

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


답변

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

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

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

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


답변