논리 볼륨 매니저(Linux)

Logical Volume Manager (Linux)
논리 볼륨 매니저
원저작자하인즈 모엘샤겐[1]
안정된 릴리스
2.03.16[2] / 2022년 5월 18일; 2개월 전 (2022년 5월 18일)
저장소sourceware.org/git/?p=lvm2.http://sourceware.org/git/
기입처C
운영 체제Linux, Netbsd
면허증.GPLv2
웹 사이트sourceware.org/lvm2/

Linux에서 LVM(논리 볼륨 관리자)은 Linux 커널의 논리 볼륨 관리를 제공하는 디바이스 매퍼 프레임워크입니다.대부분의 최신 Linux 디스트리뷰션은 논리 볼륨에 루트 파일 시스템을 [3][4][5]둘 수 있을 정도로 LVM을 인식합니다.

Heinz Mauelshagen은 1998년 Sistina Software에서 일할 때 HP-UX [1]볼륨 매니저로부터 LVM의 기본 설계 지침을 받아 LVM 코드를 작성했습니다.

사용하다

LVM은 다음 목적으로 사용됩니다.

  • 복수의 물리 볼륨 또는 전체 하드 디스크(RAID 0과 비슷하지만 JBOD와 더 유사)의 단일 논리 볼륨을 생성하여 볼륨 크기를 동적으로 조정할 수 있습니다.
  • 핫 스와핑과 함께 다운타임이나 서비스 중단 없이 디스크를 추가 및 교체할 수 있으므로 대규모 하드 디스크 팜을 관리할 수 있습니다.
  • 데스크톱과 같은 소규모 시스템에서는 설치 시 파티션 크기를 추정할 필요 없이 LVM을 통해 파일 시스템의 크기를 필요에 따라 쉽게 조정할 수 있습니다.
  • 논리 볼륨의 스냅샷을 생성하여 일관된 백업을 수행합니다.
  • 하나의 패스워드로 여러 개의 물리 파티션을 암호화합니다.

LVM은 하드 디스크와 파티션 위에 있는 씬 소프트웨어 레이어로 간주할 수 있습니다.이것에 의해, 하드 드라이브의 교환, 파티션 변경, 및 백업을 관리하기 위한 연속성과 사용의 용이성이 추상화됩니다.

기능

LVM의 다양한 요소

기본 기능

  • 볼륨 그룹(VG)은 새로운 물리 볼륨(PV)을 흡수하거나 기존 물리 볼륨(PV)을 꺼내 온라인으로 크기를 조정할 수 있습니다.
  • 논리 볼륨(LV)은 익스텐트를 연결하거나 익스텐트를 잘라내는 방법으로 온라인으로 크기를 조정할 수 있습니다.
  • LV는 PV 간에 이동할 수 있습니다.
  • 논리 볼륨(LVM1)의 읽기 전용 스냅샷 생성, Copy on Write([6]CoW) 기능 또는 읽기/쓰기 스냅샷(LVM2) 활용
  • LV가 스플릿에 걸치지 않는 한 VG는 분할 또는 Marge할 수 있습니다.이 기능은 전체 LV를 오프라인 스토리지로 마이그레이션하거나 오프라인 스토리지에서 마이그레이션할 때 유용합니다.
  • 관리상의 편의를 [7]위해 LVM 개체에 태그를 지정할 수 있습니다.
  • VG 및 LV는 를 사용하여 기본 디바이스를 사용할 수 있게 되면 활성화 시킬 수 있습니다.lvmetad데몬[8]

고도의 기능

  • 하이브리드 볼륨은 dm-cache 대상을 사용하여 생성할 수 있습니다. 이를 통해 플래시 기반 SSD와 같은 하나 이상의 고속 스토리지 디바이스가 속도가 느린 하드 디스크 드라이브[9]캐시 역할을 수행할 수 있습니다.
  • 씬 프로비저닝된 LV는 [10]풀에서 할당할 수 있습니다.
  • 새로운 버전의 디바이스 매퍼에서는 LVM이 나머지 디바이스 매퍼와 통합되어 있기 때문에 dm-multipath 디바이스를 지원하는 개별 경로를 무시할 수 있습니다.devices/multipath_component_detection=1로 설정되어 있다.lvm.conf이렇게 하면 LVM이 멀티패스 [11]디바이스가 아닌 개별 경로에서 볼륨을 활성화하지 못하게 됩니다.

RAID

  • LV는 RAID 1, 5, [12]6 의 RAID 기능을 포함하도록 작성할 수 있습니다.
  • RAID 0과 마찬가지로 LV 전체 또는 그 부품을 여러 PV에 걸쳐 스트라이핑할 수 있습니다.
  • RAID 1 백엔드 디바이스(PV)는 "write-most"로 구성할 수 있기 때문에 [13]필요한 경우를 제외하고 이러한 디바이스에 대한 읽기를 회피할 수 있습니다.
  • 복구율은 다음 방법으로 제한할 수 있습니다.lvchange --raidmaxrecoveryrate그리고.lvchange --raidminrecoveryrateRAID 기능을 포함한 LV를 재구축하면서 I/O 성능을 유지할 수 있습니다.

하이 어베이러빌리티

LVM은 PV를 보유한 디스크가 여러 호스트 컴퓨터 간에 공유되는 공유 스토리지 클러스터에서도 작동하지만 잠금 형식을 통해 메타데이터 액세스를 중재하려면 추가 데몬이 필요할 수 있습니다.

CLVM
Distributed Lock Manager는 동시 LVM 메타데이터 액세스를 브로커하는 데 사용됩니다.클러스터 노드는 LVM 메타데이터를 변경해야 할 때마다 로컬로부터 권한을 보호해야 합니다.clvmd, 이것은 다른 것과 계속 접촉하고 있습니다.clvmd특정 개체 집합을 잠그려는 의도를 전달할 수 있습니다.
HA-LVM
클러스터 인식은 고가용성 기능을 제공하는 애플리케이션에 맡겨집니다.LVM 측에서는 HA-LVM이 CLVM을 잠금 메커니즘으로 사용하거나 기본 파일 잠금을 계속 사용하여 적절한 태그를 가진 LVM 개체에만 액세스를 제한함으로써 "충돌"을 줄일 수 있습니다.이 단순한 솔루션은 경합을 완화하는 것이 아니라 경합을 회피하기 때문에 동시 액세스가 허용되지 않으므로 HA-LVM은 액티브-패시브 구성에서만 유용한 것으로 간주됩니다.
lvmlockd
2017년 현재 안정적인 LVM 컴포넌트로서clvmdLVM 오브젝트의 [14]잠금을 분산 잠금 매니저에 의존하지 않고 LVM의 나머지 부분에 투명하게 함으로써 실현됩니다.그것은 2016년 [15]동안 엄청난 발전을 보였다.

위에서 설명한 메커니즘은 LVM의 스토리지 액세스 문제만 해결합니다.이러한 LV의 상위에 있도록 선택한 파일 시스템은 자체 클러스터링을 지원하거나(: GFS2 또는 VxFS), 또는 항상 단일 클러스터 노드(예: 액티브-패시브 구성)에 의해서만 마운트되어야 합니다.

볼륨 그룹 할당 정책

LVM VG에는 LVM VG에서 생성된 새 볼륨에 대한 기본 할당 정책이 포함되어 있어야 합니다.이 값은 나중에 를 사용하여 각 LV에 대해 변경할 수 있습니다.lvconvert -A명령어 또는 VG 자체에 대해vgchange --alloc. 플래그멘테이션을 최소화하기 위해 LVM은 가장 엄격한 정책(연속)을 먼저 시행한 후 할당이 성공할 때까지 LVM 개체에 대해 정의된 가장 자유로운 정책으로 진행합니다.

RAID 구성에서는 거의 모든 정책이 각 레그에 개별적으로 적용됩니다.예를 들어 LV에 long 정책이 있는 경우에도 파일 시스템을 확장해도 RAID 설정의 다른 레그 중 하나가 이미 PV를 사용하고 있는 경우에는 LVM이 PV를 사용하지 않습니다.RAID 기능을 갖춘 LV는, 각 레그를 다른 PV에 접속해, 다른 레그에서는 다른 PV를 사용할 수 없게 됩니다.이 옵션만 사용 가능한 경우 LV 확장이 실패합니다.이러한 의미에서 string 뒤에 있는 논리는 배열의 각 다리를 확장하는 데만 적용됩니다.

사용 가능한 할당 정책은 다음과 같습니다.

  • Continuous(연속) – 지정된 LV의 모든 LE가 인접하여 정렬되도록 합니다.이로 인해 플래그멘테이션은 제거되지만 LV의 확장성은 크게 저하됩니다.
  • 고정 – LV가 이미 사용하고 있는 PV에만 새로운 LE를 할당합니다.이를 통해 다른 LV에도 해당 PV에 익스텐트가 있을 가능성을 줄임으로써 플래그멘테이션을 완화할 수 있을 뿐만 아니라 디바이스가 다운되었을 때 특정 LV의 취약성을 줄일 수 있습니다.
  • 통상 – 거의 무분별한 PE 선택을 의미하지만 RAID 셋업 등의 병행 레그가 물리 디바이스를 공유하지 않도록 합니다.
  • 어디서나 – 어떠한 제한도 가하지 않습니다.RAID 셋업에서는 격리 요건을 무시하기 때문에 매우 위험합니다.그 때문에, RAID 의 메리트의 대부분을 삭감할 수 있습니다.선형 볼륨의 경우 조각화가 증가할 수 있습니다.

실행

LVM 헤드의 기본 예시
LVM 버전1의 내부 동작이 그림에서 PE는 Physical Extent를 나타냅니다.

일반적으로 각 물리 볼륨의 첫 번째 메가바이트는 대부분 "LVM 헤더" 또는 "LVM 헤드"라고 하는 ASCII 인코딩 구조를 포함합니다.원래 LVM 헤드는 용장성을 위해 각 PV의 첫 번째와 마지막 메가바이트로 기록되었지만(하드웨어의 일부 장애가 발생했을 경우) 나중에 첫 번째 메가바이트로만 변경되었습니다.각 PV의 헤더는 다른 모든 PV 및 LV의 UUID 및 LE에 대한 PE 할당 맵을 포함한 볼륨 그룹 전체의 레이아웃의 완전한 복사본입니다.이를 통해 PV가 손실된 경우 데이터 복구가 간소화됩니다.

Linux 커널의 2.6 시리즈에서는 LVM은 디바이스 매퍼라는 관점에서 구현됩니다.디바이스 매퍼는 가상 블록 디바이스를 만들고 그 콘텐츠를 다른 블록 디바이스에 매핑하기 위한 단순한 블록 레벨 스킴입니다.이를 통해 LVM 구현에 필요한 비교적 디버깅하기 어려운 커널 코드의 양을 최소화할 수 있습니다.또한 I/O 리다이렉션 서비스를 다른 볼륨 관리자(EVMS 등)와 공유할 수도 있습니다.LVM 고유의 코드는 사용자 공간 툴로 푸시됩니다.이 툴은 이러한 매핑을 조작하여 부팅 시마다 온디스크 메타데이터에서 상태를 재구성합니다.

볼륨 그룹을 온라인으로 만들려면 "vgchange" 도구를 사용합니다.

  1. 사용 가능한 모든 블록디바이스에서 PV를 검색합니다.
  2. 검출된 각 PV의 메타데이터 헤더를 해석합니다.
  3. 표시되는 모든 볼륨 그룹의 레이아웃을 계산합니다.
  4. 온라인이 되는 볼륨 그룹내의 각 논리 볼륨에 루프 합니다.
    1. 온라인으로 이행하는 논리볼륨에 모든 PV가 표시되어 있는지 여부를 확인합니다.
    2. 새로운 빈 디바이스 매핑을 만듭니다.
    3. 논리 볼륨이 속한 PV의 데이터 영역에 ('선형' 타겟을 사용하여) 매핑합니다.

같은 볼륨 그룹의 PV 간에 온라인 논리 볼륨을 이동하려면 "pvmove" 도구를 사용합니다.

  1. 수신처의 새로운 빈 디바이스 매핑을 만듭니다.
  2. 원래 맵과 대상 맵에 "미러" 타깃을 적용합니다.커널은 미러를 "저하" 모드로 시작하고 데이터를 원본에서 대상으로 복사하여 동기화하기 시작합니다.
  3. 미러가 동기화되면 원래 매핑을 대상으로 대체한 다음 원래 매핑을 삭제합니다.

이러한 장치 매퍼 작업은 애플리케이션이나 파일 시스템이 기본 스토리지가 이동 중임을 인식하지 않고 투명하게 수행됩니다.

주의사항

  • Linux 커널 2.6.[16]31 이전에는 쓰기 장벽이 지원되지 않았습니다(2.6.33에서 완전히 지원됨).즉, ext3XFS와 같은 저널링된 파일 시스템에서 제공되는 파일 시스템 손상에 대한 보증이 일부 [17]상황에서 무효화되었음을 의미합니다.
  • 2015년 현재 LVM에 대한 온라인/오프라인 조각 모음 프로그램은 없습니다.이는 볼륨이 확장되었을 경우에만 발생하는 플래그멘테이션과 상기의 할당 정책을 적용함으로써 다소 완화됩니다.단, 플래그멘테이션은 여전히 발생하며, 이를 줄이려면 인접하지 않은 익스텐트를 식별하여 를 사용하여 수동으로 재배열해야 합니다.pvmove명령어를 [18]입력합니다.
  • 대부분의 LVM 설정에서는 각 PV에 LVM 헤드의 복사본이 하나만 저장되므로 볼륨이 디스크 섹터에 더 취약해질 수 있습니다.이 동작은 다음 방법으로 덮어쓸 수 있습니다.vgconvert --pvmetadatacopiesLVM이 첫 번째 복사본을 사용하여 올바른 헤더를 읽을 수 없는 경우 볼륨 끝에 백업 헤더가 있는지 확인합니다.대부분의 Linux 디스트리뷰션에서는 실행 중인 백업이/etc/lvm/backup를 사용하여 파손된 LVM 헤드를 수동으로 다시 쓸 수 있습니다.vgcfgrestore명령어를 입력합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b "LVM README". 2003-11-17. Retrieved 2014-06-25.
  2. ^ "v2_03_16 annotated tag has been created".
  3. ^ "7.1.2 LVM Configuration with YaST". SUSE. 12 July 2011. Archived from the original on 25 July 2015. Retrieved 2015-05-22.
  4. ^ "HowTo: Set up Ubuntu Desktop with LVM Partitions". Ubuntu. 1 June 2014. Archived from the original on 4 March 2016. Retrieved 2015-05-22.
  5. ^ "9.15.4 Create LVM Logical Volume". Red Hat. 8 October 2014. Retrieved 2015-05-22.
  6. ^ "BTRFS performance compared to LVM+EXT4 with regards to database workloads". 29 May 2018.
  7. ^ "Tagging LVM2 Storage Objects". Micro Focus International. Retrieved 21 May 2015.
  8. ^ "The Metadata Daemon". Red Hat Inc. Retrieved 22 May 2015.
  9. ^ "Using LVM's new cache feature". 22 May 2014. Retrieved 2014-07-11.
  10. ^ "2.3.5. Thinly-Provisioned Logical Volumes (Thin Volumes)". Access.redhat.com. Retrieved 2014-06-20.
  11. ^ "4.101.3. RHBA-2012:0161 — lvm2 bug fix and enhancement update". Retrieved 2014-06-08.
  12. ^ "5.4.16. RAID Logical Volumes". Access.redhat.com. Retrieved 2017-02-07.
  13. ^ "Controlling I/O Operations on a RAID1 Logical Volume". redhat.com. Retrieved 16 June 2014.
  14. ^ "Re: LVM snapshot with Clustered VG [SOLVED]". 15 Mar 2013. Retrieved 2015-06-08.
  15. ^ https://sourceware.org/git/?p=lvm2.git;a=history;f=lib/locking/lvmlockd.c;h=master;hb=HEAD
  16. ^ "Bug 9554 – write barriers over device mapper are not supported". 2009-07-01. Retrieved 2010-01-24.
  17. ^ "Barriers and journaling filesystems". LWN. 2008-05-22. Retrieved 2008-05-28.
  18. ^ "will pvmove'ing (an LV at a time) defragment?". 2010-04-29. Retrieved 2015-05-22.
  19. ^ Gotchas, btrfs Wiki, retrieved 2017-04-24

추가 정보