LV를 여러 PV로 분할 - 하나의 PV로 이동

LV를 여러 PV로 분할 - 하나의 PV로 이동

내 시스템에는 3개의 드라이브가 있습니다. 이들은 모두 VG 내의 PV입니다.

이 VG에는 일부 LV가 있습니다. 그 중 하나는 두 개의 드라이브/PV에 걸쳐 있는 상당히 큰 규모입니다. 세 번째 드라이브는 LV 전체를 담을 수 있을 만큼 충분히 큽니다. 이것이 제가 원하는 것입니다.

이것이 제가 말하는 것입니다. 여기에 내 PV가 있습니다(예, pvcreate파티션이 아닌 전체 드라이브에서 실행 중입니다).

/dev/sda -> 10TB drive
/dev/sdb -> 4TB drive
/dev/sdc -> 3TB drive

3개의 PV와 여러 개의 LV가 모두 포함된 VG가 있습니다. 나는 오직 한 가지에만 관심이 있습니다:

MyData -> 5TB LV

에 따르면 LV가 켜져 있습니다 lsblk -f.MyData둘 다 /dev/sdb그리고 /dev/sdc. 기본적으로 이 시스템은 하나의 드라이브로 시작해서 더 추가했습니다. 저도 작은 LV로 시작해서 더 크게 사용 lvextend/ lvresize만들었습니다.

내가 하고 싶은 건 움직이는 거야전반적인도착했습니다 MyData./dev/sda 문서를 살펴보면 pvmove다음과 같이 할 수 있다는 것을 알았습니다.

pvmove -n MyData /dev/sdb /dev/sda
pvmove -n MyData /dev/sdc /dev/sda

이게 내가 원하는 대로 되어야 하는 거죠, 그렇죠?

하나의 명령으로 이를 수행할 수 있는 방법이 있습니까? tmux두 명령을 동시에 실행할 수 있나요 ?

이렇게 하면 모든 범위가 (조각화되지 않고) 연속적으로 만들어지나요 /dev/sda?

답변1

가장 간단한 경우에는 그렇습니다. 그렇게 작동합니다.

그러나 LV를 대량으로 생성, 삭제 및 크기 조정하면 범위 조각화가 발생할 수 있습니다. 이런 경우 좀 더 자세히 살펴보는 것이 좋을 것 같습니다.

# check where there is free space
pvs

# check in detail if free space is contiguous
pvdisplay --maps /dev/sda

# show LV segments that require moving, in order
lvs -o seg_le_ranges VG/LV

이 시점에서는 무엇을 어디로 옮겨야 할지에 대한 명확한 아이디어가 있어야 합니다.


단계별 예:

# pvdisplay --maps /dev/sdx1
  --- Physical volume ---
  PV Name               /dev/sdx1
  VG Name               HDD
  [...]
  Physical extent 10650 to 11174:
    FREE

# lvs -o lv_name,vg_name,seg_le_ranges HDD/MyData
  LV     VG  LE Ranges                       
  MyData HDD /dev/sdz1:11128-11143
  MyData HDD /dev/sdz2:7450-7457 
  MyData HDD /dev/sdz3:0-11      

# pvmove -n HDD/MyData /dev/sdz1:11128-11143 /dev/sdx1:10650-11174
  /dev/sdz1: Moved: 100.00%

# lvs -o lv_name,vg_name,seg_le_ranges HDD/MyData
  LV     VG  LE Ranges                       
  MyData HDD /dev/sdx1:10650-10665
  MyData HDD /dev/sdz2:7450-7457 
  MyData HDD /dev/sdz3:0-11      

# pvmove -n HDD/MyData /dev/sdz2:7450-7457 /dev/sdx1:10666-11174
  /dev/sdz2: Moved: 100.00%

# lvs -o lv_name,vg_name,seg_le_ranges HDD/MyData
  LV     VG  LE Ranges                       
  MyData HDD /dev/sdx1:10650-10673
  MyData HDD /dev/sdz3:0-11      

# pvmove -n HDD/MyData /dev/sdz3:0-11 /dev/sdx1:10674-11174
  /dev/sdz3: Moved: 100.00%

# lvs -o lv_name,vg_name,seg_le_ranges HDD/MyData
  LV     VG  LE Ranges                       
  MyData HDD /dev/sdx1:10650-10685

두 인스턴스를 병렬로 실행하려고 하면 pvmove실패합니다.

  Skipping locked LV VG/MyData.
  All data on source PV skipped. It contains locked, hidden or non-top level LVs only.
  No data to move for VG.

그러므로 순서대로 이루어져야 합니다. 그렇지 않으면 제대로 작동할 것입니다.


완전히 다른 접근 방식은 lvcreate새 LV를 생성하고 데이터를 복사한 다음 - 복사본이 양호하고 모든 것이 작동한다고 확신하면 lvremove이전 LV를 복사하는 것입니다.

기본적으로 구식 오프라인 방식입니다. 단점(오류를 복사하거나 데이터가 손실될 수 있음)이 있지만 장점도 있습니다. 소스 파일 시스템은 변경되지 않고 유지되므로 되돌릴 수 있지만 pvmove되돌릴 수는 없습니다(모든 것을 원래 위치로 되돌릴 필요가 없음).

관련 정보