LVM을 사용하는 서버에는 단일 드라이브(PV)에 간단한 선형 LV가 있습니다. 이제 서버에 (동일한 크기) 드라이브(PV) 2개를 더 추가했습니다.
가능하다면 온라인에서 3개 드라이브에 걸쳐 기존 선형 LV를 스트라이프 LV(예: RAID0)로 변환하고 싶습니다. 이렇게 하면 스트라이핑으로 인해 성능이 향상될 수 있습니다. 나도 알아요이론적으로가능한.
나는 LV를 기반으로 줄무늬 거울을 만드는 것과 같은 많은 것을 시도했습니다.이 웹사이트 기술, 하지만 제 경우에는 원래 드라이브를 계속 사용하고 싶기 때문에 상황이 더 복잡합니다(웹사이트에서는 단일 드라이브 LV에서 3으로 마이그레이션한다고 나와 있습니다).다른운전사).
및 기타 LVM 도구에 익숙해졌지만 성공하지 pvmove
못했습니다 . lvconvert
도와주세요. :)
필요한 경우 다른 드라이브에 추가 공간이 거의 없습니다(원래 LV 크기의 약 5%).
내 lvdisplay -m
것은 다음과 같습니다 :
--- Logical volume ---
LV Path /dev/vg_space/vol_space
LV Name vol_space
VG Name vg_space
LV Status available
# open 1
LV Size 260.75 GiB
Current LE 66752
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
--- Segments ---
Logical extent 0 to 66751:
Type linear
Physical volume /dev/sda5
Physical extents 0 to 66751
답변1
마침내 트릭 을 찾았습니다 .
설정: 원래 드라이브가 /dev/sda
(PV는 /dev/sda1
)이고 두 개의 새 드라이브는 /dev/sdb
및 이라고 가정합니다 /dev/sdc
. 모든 드라이브의 크기는 100MB입니다.
아이디어: 모든 데이터가 드라이브의 절반에 들어갈 수 있으므로 sdb
드라이브 sdc
의 나머지 3개 절반에 LV의 스트라이프 미러를 생성하는 동안 임시로 데이터를 거기에 넣을 수 있습니다. 그런 다음 (임시) 거울의 원래 면을 제거하고 스트라이프 LV를 전체 크기로 확장합니다.
이 훌륭한 예술 작품은 더 나은 설명이 필요합니다.
original state:
sda sdb sdc
_______ _______ _______
| | | | | |
| | | | | |
|lv_orig| | empty | | empty |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
|_______| |_______| |_______|
partition sdb & sdc, pvmove, then partition sda:
sda sdb sdc
_______ _______ _______
| | | | | |
| sda1 | | sdb1 | | sdc1 |
| empty | | empty | | empty |
|_______| |_______| |_______|
| | | | | |
| sda2 | |lv_orig| |lv_orig| <= linear on 2 drives
| empty | |half 1 | |half 2 |
|_______| |_______| |_______|
add sda{1,2,3} to vg, mirror the LV on this in striped mode:
sda sdb sdc
_______ _______ _______
|lv_orig| |lv_orig| |lv_orig|
|mirror | |mirror | |mirror | <= striped!
|stripe1| |stripe2| |stripe3|
|_______| |_______| |_______|
| | | | | |
| sda2 | |lv_orig| |lv_orig|
| empty | |half 1 | |half 2 |
|_______| |_______| |_______|
get rid of the sd{b,c}2 side of the mirror:
sda sdb sdc
_______ _______ _______
| | | | | |
|lv_orig| |lv_orig| |lv_orig| <= still striped!
|stripe1| |stripe2| |stripe3|
|_______| |_______| |_______|
| | | | | |
| sda2 | | sdb2 | | sdc2 |
| empty | | empty | | empty |
|_______| |_______| |_______|
delete sd{a,b,c}2 partitions to extend sd{a,b,c}1 on the whole disk,
finally, extend the lv:
sda sdb sdc
_______ _______ _______
| | | | | |
| sda1 | | sdb1 | | sdc1 |
| | | | | |
|lv_orig| |lv_orig| |lv_orig| <= definitely striped!
| | | | | |
|bigger&| |bigger&| |bigger&|
|striped| |striped| |striped|
|_______| |_______| |_______|
수행 방법은 다음과 같습니다.
면책조항: 저는 주로 기억을 토대로 글을 쓰고 있습니다. 명령을 다시 확인하세요. (그리고 필요한 경우 게시물을 편집하세요!)
- 각각 42MB와 58MB의 파티션
sdb1
과 을 생성합니다.sdb2
- 에 대해서도 마찬가지입니다
sdc
. pvcreate /dev/sd{b,c}{1,2}
,vgextend vg_orig /dev/sdb2 /dev/sdc2
,pvmove /dev/sda1
sdb2
모든 LV 데이터를 및 로 이동합니다sdc2
.vgreduce vg_orig /dev/sda1
pvremove /dev/sda1
LVM을 완전히 사용하지 않도록 설정합니다sda
.- 42MB 파티션을 생성하고 (
/dev/sda1
필요한 경우 이전 파티션 삭제),pvcreate /dev/sda1
,vgextend vg_orig dev/sd{a,b,c}1
lvconvert --type mirror --mirrors 1 --stripes 3 vg_orig/lv_orig /dev/sd{a,b,c}1
원래 LV 볼륨(우리가 찾고 있는 것!)의 스트립된 미러가 생성되고 다음을 사용하여 세부 정보를 볼 수 있습니다lvdisplay -am
.- LV의 총 확장 수가 3의 배수가 아닌 경우 이전 명령이 실패할 수 있습니다. 이 경우 다음과 같이 LV에 1개 또는 2개의 확장을 간단히 추가할 수 있습니다
lvextend -l +1 vg_orig/lv_orig
. sdb2
이 명령을 사용하면 및 에 있는 데이터의 임시 미러 복사본을 삭제합니다sdc2
.lvconvert --type mirror --mirrors 0 vg_orig/lv_orig /dev/sd{b,c}2
- 더 이상 필요하지 않은 sdX2 파티션 삭제:
vgreduce vg_orig /dev/sd{b,c}2
,pvremove /dev/sd{b,c}2
, - 이제 원본 데이터의 스트라이프 버전이 있으므로 파티션을 더 크게 만들어야 하므로 및 파티션을
sd{a,b,c}1
삭제 하고 , 및 , 파티션을 다시 생성하여 동일한 섹터 번호로 시작하지만 더 높은 섹터 번호로 끝나도록 합니다( 두려워하지 마세요 :)),sdb2
sdc2
sda1
sdb1
sdc1
partprobe /dev/sd{a,b,c}1
커널 파티션 테이블을 플러시합니다.pvresize /dev/sd{a,b,c}1
LVM이 PV가 더 크다는 것을 인식하게 하고,lvextend -l 100%VG vg_orig/lv_orig
이제 LV를 더 크게 만들어 보겠습니다.resize2fs vg_orig/lv_orig
온라인으로 확장하려는 외부 파일 시스템이 있는 경우.
여기요!
이런 종류의 작업을 위해 설계된 것으로 추정되는 LVM과 같은 도구가 하나 또는 두 개의 명령으로 이 작업을 쉽게 수행할 수 없다는 것이 나에게는 매우 혼란스럽습니다.
답변2
내 솔루션은 @Totor의 다이어그램을 기반으로 하지만 새 lvm raid0(sdb 및 sdc)에 새 파일 시스템을 생성하여 두 번째 단계를 변경하겠습니다. 그런 다음 rsync -avP
. 그런 다음 3개의 줄무늬(sda1, sdb1, sdc1)가 있는 새 raid0을 만듭니다. 그런 다음 2개 스트라이프에서 3개 스트라이프로 rsync하고 lvresize/extend를 수행합니다. 2번만 복사하세요.