최근에 일부 서버에서 1TB보다 큰 하드 드라이브에 LVM을 사용하기 시작했습니다. 유용하고 확장 가능하며 설치가 매우 쉽습니다. 그러나 LVM의 위험과 경고에 대한 데이터를 찾을 수 없습니다.
LVM 사용의 단점은 무엇입니까?
최근에 일부 서버에서 1TB보다 큰 하드 드라이브에 LVM을 사용하기 시작했습니다. 유용하고 확장 가능하며 설치가 매우 쉽습니다. 그러나 LVM의 위험과 경고에 대한 데이터를 찾을 수 없습니다.
LVM 사용의 단점은 무엇입니까?
답변:
요약
LVM 사용의 위험 :
처음 두 개의 LVM 문제는 다음과 같이 결합됩니다. 쓰기 캐싱이 제대로 작동하지 않고 전력 손실 (예 : PSU 또는 UPS 실패)이 발생하면 백업에서 복구해야 할 수 있으므로 상당한 다운 타임이 발생합니다. LVM을 사용하는 주된 이유는 가동 시간이 더 길기 때문에 (디스크 추가, 파일 시스템 크기 조정 등) LVM이 실제로 가동 시간을 줄이지 않도록 쓰기 캐싱 설정을 올바르게하는 것이 중요합니다.
-2018 년 12 월 업데이트 : LVM 스냅 샷의 대안으로 ZFS 및 btrfs의 안정성을 포함하여 업데이트 된 스냅 샷 자료
위험 완화
다음과 같은 경우 LVM은 여전히 잘 작동합니다.
세부
나는 과거에 LVM과 관련된 데이터 손실을 경험 한 적이 상당히 많았습니다. 내가 아는 주요 LVM 위험과 문제는 다음과 같습니다.
VM 하이퍼 바이저, 디스크 캐싱 또는 오래된 Linux 커널로 인해 하드 디스크 쓰기 캐싱에 취약하며 보다 복잡한 온 디스크 구조로 인해 데이터를 복구하기가 어렵습니다. 자세한 내용은 아래를 참조하십시오. 여러 디스크의 완전한 LVM 설정이 복구 가능성없이 손상되는 것을 보았으며 LVM과 하드 디스크 쓰기 캐싱은 위험한 조합입니다.
data=ordered
옵션 (또는 data=journal
추가 안전 barrier=1
을 위해 ) 과 동등한 옵션을 사용해야합니다 . (또는 기본적으로 장벽 을 활성화 하는 ext4를 사용하십시오 .) 가장 간단한 옵션이며 성능 비용으로 우수한 데이터 무결성을 제공합니다. (리눅스 는 기본 ext3 옵션 을 더 위험한 data=writeback
것으로 변경 했으므로 FS의 기본 설정에 의존하지 마십시오.)hdparm -q -W0 /dev/sdX
모든 드라이브를 추가 /etc/rc.local
하거나 SCSI / SAS에 sdparm을 사용하십시오. 그러나 XFS FAQ 의이 항목 에 따르면 (이 주제에 매우 적합 함) 드라이브 오류 복구 후 SATA 드라이브가이 설정을 잊어 버릴 수 있습니다. 따라서 SCSI / SAS를 사용하거나 SATA를 사용해야하는 경우 매분 정도 실행되는 크론 작업의 hdparm 명령.성능을 위해 쓰기 캐싱을 사용 가능하게 유지 (및 거짓말 드라이브에 대처)
보다 복잡하지만 성능이 뛰어난 옵션은 SSD / 하드 드라이브 쓰기 캐싱을 활성화하고 커널 2.6.33+에서 LVM과 함께 작동하는 커널 쓰기 장벽에 의존하는 것입니다 (로그에서 "배리어"메시지를 찾아 두 번 확인).
또한 RAID 설정, VM 하이퍼 바이저 설정 및 파일 시스템 이 쓰기 장벽을 사용 하는지 확인해야합니다 (즉, 드라이브는 주요 메타 데이터 / 저널 쓰기 전후에 보류중인 쓰기를 플러시해야합니다). XFS는 기본적으로 사용 장벽을 수행하지만, ext3로하지 않습니다 사용한다 EXT3으로, 그래서 barrier=1
마운트 옵션에서 여전히 사용 data=ordered
또는 data=journal
위와 같이.
쓰기 캐시 사용이 SSD 수명에 중요하기 때문에 SSD 는 문제가됩니다. 수퍼 커패시터가있는 SSD를 사용하는 것이 가장 좋습니다 (정전시 캐시 플러시를 활성화하여 캐시가 후기 입이 아닌 후기 입 가능).
고급 포맷 드라이브 설정-쓰기 캐싱, 정렬, RAID, GPT
pvcreate
따라 PV를 정렬 하는 옵션을 사용하여 RAID 수퍼 블록을 배치 할 것을 제안 합니다. 이 LVM 전자 메일 목록 스레드 는 2011 년 동안 커널에서 수행 한 작업과 단일 LV에서 512 바이트 및 4KiB 섹터로 디스크를 혼합 할 때 부분 블록 쓰기 문제를 가리 킵니다.보다 복잡한 온 디스크 구조로 인해 데이터를 복구하기가 더 어렵습니다 .
/etc/lvm
LV, VG 및 PV의 기본 구조를 복원 할 수 있지만 파일 시스템 메타 데이터 손실에 도움이되지는 않습니다.파일 시스템의 크기를 정확하게 조정하기 어렵습니다 -쉬운 파일 시스템 크기 조정은 LVM의 이점으로 제공되는 경우가 많지만 LVM 기반 FS의 크기를 조정하려면 6 가지 쉘 명령을 실행해야합니다. 이는 전체 서버에서 여전히 가능하며 경우에 따라 가능합니다. FS를 마운트 한 상태에서 최신 백업을 수행하지 않고 동등한 서버 (예 : 프로덕션 서버의 재해 복구 복제본)에서 사전 테스트 된 명령을 사용하여 후자를 위험에 빠뜨리지 않습니다.
lvextend
지원 -r
( --resizefs
) 옵션-사용 가능한 경우 특히 FS를 축소하는 경우 LV와 파일 시스템의 크기를 조정하는 것이 더 안전하고 빠른 방법이며 대부분이 섹션을 건너 뛸 수 있습니다.resize2fs
ext3) 및 lvextend
또는 또는 로 지정해야합니다 lvreduce
. 주의를 기울이지 않으면 1GB (10 ^ 9)와 1GiB (2 ^ 30)의 차이 또는 다양한 도구가 크기를 올림 또는 내림하는 방식 으로 인해 크기가 약간 다를 수 있습니다 .LV 크기는 FS 크기보다 2 x LVM PE (Physical Extent) 크기만큼 커야합니다. 그러나이 링크의 출처는 신뢰할 수 없으므로 자세한 내용은 위의 링크를 확인하십시오. 종종 8MiB를 허용하는 것으로 충분하지만, 예를 들어 100MiB 또는 1GiB를 더 안전하게하는 것이 더 안전 할 수 있습니다. 4 KiB = 4096 바이트 블록을 사용하여 PE 크기 및 논리 볼륨 + FS 크기를 확인하려면 다음을 수행하십시오.
KiB의 PE 크기 :
vgdisplay --units k myVGname | grep "PE Size"
모든 LV의 크기 :
lvs --units 4096b
(ext3) FS의 크기, 4 개의 KiB FS 블록 크기를 가정합니다.
tune2fs -l /dev/myVGname/myLVname | grep 'Block count'
반대로, 비 LVM 설정은 FS 크기를 매우 안정적으로 쉽게 조정할 수 있도록합니다. Gparted를 실행 하고 필요한 FS 크기를 조정하면 모든 것이 가능합니다. 서버에서는 parted
셸에서 사용할 수 있습니다 .
스냅 샷은 사용하기 어렵고 느리고 버그 가 있습니다. 스냅 샷에 사전 할당 된 공간이 부족하면 자동으로 삭제 됩니다. 지정된 LV의 각 스냅 샷은 해당 LV에 대한 델타 (이전 스냅 샷이 아님)이며 쓰기 작업이 많은 파일 시스템을 스냅 샷 할 때 많은 공간이 필요할 수 있습니다 (모든 스냅 샷이 이전 스냅 샷보다 큼). 스냅 샷에 여유 공간이 부족하지 않기 때문에 원래 LV와 동일한 크기의 스냅 샷 LV를 생성하는 것이 안전합니다.
스냅 샷도 매우 느릴 수 있습니다 ( 이러한 MySQL 테스트에서 LVM이없는 것보다 3 ~ 6 배 느림 ) . 다양한 스냅 샷 문제를 다루는이 답변을 참조하십시오 . 스냅 샷에 많은 동기 쓰기가 필요 하기 때문에 속도가 느려집니다 .
스냅 샷은 예 몇 가지 중요한 버그, 있었다 어떤 경우에는 그들이 부팅이 매우 느리게 만들거나 때문에 (완전 실패 부팅 될 수 있습니다 커널이 제한 시간을 초과 할 수 있습니다 그것은 [데비안에 고정 된 LVM 스냅 샷 때 루트 FS 대기 initramfs-tools
2015 년 3 월 갱신] ).
스냅 샷 대안 -파일 시스템 및 VM 하이퍼 바이저
VM / 클라우드 스냅 샷 :
파일 시스템 스냅 샷 :
ZFS 또는 btrfs를 사용한 파일 시스템 레벨 스냅 샷은 사용하기 쉽고 일반적으로 LVM보다 우수합니다 (ZFS는 훨씬 더 성숙해 보이고 설치하기 더 번거 로움).
온라인 백업 및 fsck에 대한 스냅 샷
할당 된 공간에주의를 기울이는 한 스냅 샷을 사용하여 백업 의 일관된 소스 를 제공 할 수 있습니다 (이상적으로는 스냅 샷이 백업되는 LV와 크기가 동일 함). 우수한 rsnapshot (1.3.1부터)도 LVM 스냅 샷 생성 / 삭제를 관리합니다. LVM을 사용하여 rsnapshot에 대한이 하우투를 참조하십시오 . 그러나 스냅 샷의 일반적인 문제와 스냅 샷 자체는 백업으로 간주되어서는 안됩니다.
좌심실 스냅 샷 여전히 주요 스냅 샷이 아닌 FS 사용하는 동안, 스냅 샷을 fsck로 - : 당신은 또한 온라인으로 fsck를 할 LVM 스냅 샷을 사용할 수 있습니다 여기에 설명을 하지만, 그건 - 전혀 간단하지 가 사용하는 것이 가장 좋습니다 그래서 e2croncheck 으로 테드 TS 설명 'o , ext3의 관리자.
스냅 샷을 만드는 동안 파일 시스템을 일시적으로 "고정" 해야합니다 . LVM이 스냅 샷을 만들 때 ext3 및 XFS와 같은 일부 파일 시스템 이이를 자동으로 수행합니다 .
결론
이 모든 것에도 불구하고 일부 시스템에서는 여전히 LVM을 사용하지만 데스크톱 설정에서는 원시 파티션을 선호합니다. LVM에서 볼 수있는 주요 이점 은 서버 가동 시간이 길어야하는 경우 FS를 이동하고 크기를 조정할 수있는 유연성입니다. 필요하지 않으면 gparted가 더 쉽고 데이터 손실 위험이 적습니다.
LVM은 VM 하이퍼 바이저, 하드 드라이브 / SSD 쓰기 캐싱 등으로 인해 쓰기 캐싱 설정에 세심한주의가 필요하지만 Linux를 DB 서버로 사용하는 경우에도 마찬가지입니다. gparted
임계 크기 계산 등을 포함한 대부분의 도구의 지원이 부족 testdisk
하여 사용하기가 더 어려워집니다.
LVM을 사용하는 경우 스냅 샷에주의를 기울이십시오. 가능하면 VM / 클라우드 스냅 샷을 사용하거나 LFS를 완전히 피하기 위해 ZFS / btrfs를 조사하십시오. 스냅 샷이있는 LVM에 비해 ZFS 또는 btr이 충분히 성숙 된 것을 알 수 있습니다.
결론 : 위에 나열된 문제와 해결 방법을 모르는 경우 LVM을 사용하지 않는 것이 가장 좋습니다.
나는 그 게시물을 +1하고, 적어도 나는 대부분의 문제가 존재한다고 생각한다. 몇 대의 서버와 몇 개의 100TB 데이터를 실행하는 동안 이들을 확인하십시오. 나에게 리눅스의 LVM2는 누군가가 가진 "영리한 아이디어"처럼 느껴진다. 이들 중 일부와 마찬가지로 그들은 때때로 "영리하지 않은"것으로 판명되었습니다. 즉, 커널과 사용자 공간 (lvmtab) 상태를 엄격하게 분리하지 않으면 손상 문제가 발생할 수 있기 때문에 실제로 해결해야 할 수도 있습니다 (코드가 맞지 않으면)
자,이 분리가 PV 손실 처리를 통한 차이점과 PV가 없어진 VG의 온라인 재 활성화 등의 이유로 인해 다시 시작되었다는 것입니다. "원래 LVM"의 바람은 무엇입니까 (AIX 상태 처리가 충분하지 않으므로 LVM2에서 HP-UX)가 불량으로 바뀝니다. 심지어 (. 내가 사용할 수없는 것으로 표시되지 않습니다 디스크를 제거하면 심지어하지 않습니다 나를 쿼럼 손실 감지 (하하) 또는 주 처리에 대해 얘기하지 않는 이 망할 상태 열)
다시 : 안정성 pvmove ... 왜
pvmove 데이터 손실
내 블로그에서 최고 순위 기사 hmmm? 지금은 phyiscal lvm 데이터가 여전히 pvmove 중반의 상태에 걸려있는 디스크를 봅니다. 내가 생각하는 몇 가지 기억이 있었고, 사용자 공간에서 라이브 블록 데이터를 복사하는 것이 좋은 생각은 슬프습니다. lvm 목록에서 인용 한 인용문은 "vgreduce --missing이 pvmove를 처리하지 않는 것 같습니다"라는 의미입니다. 실제로 pvmove 중에 디스크가 분리되면 lvm 관리 도구가 lvm에서 vi로 변경됩니다. 아 그리고 블록 읽기 / 쓰기 오류 후에 pvmove가 계속되고 실제로 더 이상 대상 장치에 데이터를 쓰지 않는 버그가 있습니다. 이런 씨발?
재 : 스냅 샷 새 데이터를 스냅 샷 lv 영역으로 업데이트 한 다음 스냅을 삭제하면 다시 병합하여 CoW가 안전하지 않게 수행됩니다. 즉, 새 데이터를 원래 LV로 최종 병합하는 동안 IO 스파이크가 심하며, 더 중요한 것은 데이터 손상 위험이 훨씬 더 높다는 것을 의미합니다. 벽, 그러나 원본.
이점은 3 대신에 1 번의 쓰기 작업을 수행하는 것입니다. 빠르고 유쾌하지 않은 알고리즘을 선택하는 것은 VMware와 MS 같은 사람들에게 "Unix"에서 기대하는 것입니다. 기본 데이터가 아닌 다른 디스크 드라이브 에 스냅 샷 백업 저장소가 있고 (물론 다른 하나에 백업하는 경우) 많은 성능 문제가 발생하지 않았습니다.
다시 : 장벽 나는 LVM에서 그것을 비난 할 수 있는지 확실하지 않습니다. 내가 아는 한 그것은 devmapper 문제였습니다. 그러나 최소한 2.6 커널부터 2.6.33까지이 문제에 대해 신경 쓰지 않는 것에 대한 비난이있을 수 있습니다. AFAIK Xen은 가상 머신에 O_DIRECT를 사용하는 유일한 하이퍼 바이저입니다. 커널 때문에 "루프"를 사용할 때의 문제 여전히 그것을 사용하여 캐시합니다. Virtualbox는 적어도 이와 같은 기능을 비활성화하는 설정이 있으며 Qemu / KVM은 일반적으로 캐싱을 허용하는 것으로 보입니다. 모든 FUSE FS에도 문제가 있습니다 (O_DIRECT 없음)
Re : 크기 LVM이 표시된 크기의 "반올림"을 수행한다고 생각합니다. 또는 GiB를 사용합니다. 어쨌든 VG Pe 크기를 사용하고 LV의 LE 번호를 곱해야합니다. 그것은 올바른 순 크기를 제공해야하며 그 문제는 항상 사용 문제입니다. fsck / mount (hello, ext3) 동안 그러한 것을 알지 못하거나 온라인 "fsck -n"(hello, ext3)이없는 파일 시스템에 의해 악화됩니다.
물론 그것은 당신이 그런 정보에 대한 좋은 소스를 찾을 수 없다는 것을 말하고 있습니다. "VRA를위한 LE는 몇 개입니까?" "PVRA, VGDA 등의 물리적 오프셋은 무엇입니까?"
LVM2는 원래의 것과 비교하여 "UNIX를 이해하지 못하는 사람들은 그것을 제대로 재발 명하지 못합니다."의 주요 예입니다.
몇 달 후 업데이트 : 지금까지 테스트를위한 "전체 스냅 샷"시나리오를 시작했습니다. 이들이 가득 차면 스냅 샷은 원래 LV가 아니라 차단됩니다. 내가 이것을 처음 게시했을 때 나는 틀렸다. 일부 문서에서 잘못된 정보를 찾았거나 이해했을 수도 있습니다. 내 설정에서 나는 항상 그것들을 채우지 못하게 매우 편집증이되어서 결코 수정되지 않았습니다. 스냅 샷을 확장 / 축소하는 것도 가능합니다.
여전히 해결하지 못한 것은 스냅 샷의 나이를 식별하는 방법입니다. 성능에 관해서는 "thin"페도라 프로젝트 페이지에 스냅 샷 기법이 개정되고있어 각 스냅 샷마다 속도가 느려지지 않는다는 메모가 있습니다. 그들이 어떻게 구현하고 있는지 모르겠습니다.
백업에 스냅 샷을 사용하려는 경우 스냅 샷이있을 때 주요 성능 저하에 대비하십시오. 자세한 내용은 여기를 참조 하십시오 . 그렇지 않으면 모두 좋습니다. 필자는 수십 대의 서버에서 몇 년 동안 lvm을 프로덕션 환경에서 사용해 왔지만 사용하는 주요 이유는 볼륨을 쉽게 확장 할 수없는 원자 적 스냅 샷이기 때문입니다.
btw 1TB 드라이브를 사용하려는 경우 파티션 정렬에 대해 기억하십시오.이 드라이브에는 아마도 4kB 물리 섹터가있을 것입니다.
아담,
또 다른 장점 : 새로운 물리 볼륨 (PV)을 추가하고 모든 데이터를 해당 PV로 옮긴 다음 서비스 중단없이 기존 PV를 제거 할 수 있습니다. 지난 5 년 동안이 기능을 4 번 이상 사용했습니다.
아직 명확하게 지적하지 못한 단점은 LVM2에 대해 다소 가파른 학습 곡선이 있다는 것입니다. 대부분 추상화에서 파일과 기본 미디어 사이에 생성됩니다. 서버 세트에서 집안일을 공유하는 소수의 사람들과 만 작업하는 경우 팀 전체에 엄청난 복잡성이 발생할 수 있습니다. IT 업무에 전념하는 대규모 팀에는 일반적으로 그러한 문제가 없습니다.
예를 들어, 우리는이 작업을 여기에서 광범위하게 사용하고 있으며 전체 팀에게 기본적으로, 언어 및 올바르게 부팅되지 않는 시스템 복구에 대한 기본 사항을 가르치는 데 시간이 걸렸습니다.
특히주의해야 할 한 가지 사항 : LVM2 논리 볼륨에서 부팅하는 경우 서버 충돌시 복구 작업이 어려워졌습니다. Knoppix와 친구들에게 항상 적합한 것은 아닙니다. 따라서 우리는 / boot 디렉토리가 자체 파티션에 있고 항상 작고 고유하다고 결정했습니다.
전반적으로, 나는 LVM2의 팬입니다.
/boot
별도의 항상 좋은 생각입니다
vgchange -ay
는 LVM 볼륨을 찾기 위해 매뉴얼 이 필요합니다 .