다른 파티션 간의 파티션 크기를 조정하는 방법(CLI)은 무엇입니까?

다른 파티션 간의 파티션 크기를 조정하는 방법(CLI)은 무엇입니까?

앞과 뒤에 다른 파티션이 있는 디스크의 특정 파티션의 크기를 조정하는 방법은 무엇입니까?

파티션 크기를 조정하는 방법(예: 사용)에 대한 수많은 가이드를 인터넷에서 찾았지만 parted모두 단일 파티션이 있는 디스크만 표시합니다. 여러 파티션으로 이 작업을 수행하려면 어떻게 해야 합니까?

나의 구체적인 사용 사례는 WUI를 통해 마술처럼 크기를 조정할 수 있는 클라우드 기반 네트워크 디스크입니다. 이 질문의 목적을 위해 이러한 복잡성을 버리고 클라우드 공급자에게 불가지론적인 답변을 제공하겠습니다. 다음 명령을 사용하여 간단한 예제를 설정해 보세요.

# create 100 MB "disk" file
head -c 104857600 < /dev/urandom > my_disk
cryptsetup luksFormat my_disk
cryptsetup luksOpen my_disk my_disk

# parition disk with 8M, 4M, 1M, 32M, & 36M partitions
echo "label: dos
label-id: 0x34a96950
device: /dev/mapper/my_disk
unit: sectors
sector-size: 512

/dev/mapper/my_disk-part1 : start=        2048, size=       16384, type=83
/dev/mapper/my_disk-part2 : start=       18432, size=        8192, type=83
/dev/mapper/my_disk-part3 : start=       26624, size=        2048, type=83
/dev/mapper/my_disk-part4 : start=       28672, size=      143360, type=5
/dev/mapper/my_disk-part5 : start=       30720, size=       65536, type=83
/dev/mapper/my_disk-part6 : start=       98304, size=       73728, type=83
" | sfdisk /dev/mapper/my_disk
partprobe /dev/mapper/my_disk

# create ext4 filesystems 
mkfs.ext4 /dev/mapper/my_disk1
mkfs.ext4 /dev/mapper/my_disk2
mkfs.ext4 /dev/mapper/my_disk3
mkfs.ext4 /dev/mapper/my_disk5
mkfs.ext4 /dev/mapper/my_disk6

위 명령은 LUKS로 암호화되고 ext4 크기의 5개 파일 시스템으로 분할된 100MB "디스크" 파일을 생성합니다.

  1. 8MB
  2. 4MB
  3. 1MB
  4. 32MB
  5. 36MB

이제 디스크 크기를 두 배로 늘려 보겠습니다.

head -c 104857600 < /dev/urandom >> my_disk

이제 디스크 크기가 두 배로 늘어났으므로 다음과 같이 디스크 파티션 크기를 조정하고 싶습니다.

  1. 8MB -> 10MB
  2. 4MB -> 5MB
  3. 1MB -> 16MB
  4. 32MB -> 29MB
  5. 36MB -> (남은 공간 사용 가능)

두 번째 파티션에 10MB의 여유 공간이 있다고 가정할 때 데이터 손실 없이 이러한 파일 시스템(&& LUKS 컨테이너 && 파티션)의 크기를 어떻게 조정할 수 있습니까? 파티션 테이블을 삭제하고 시작/끝 값을 수동으로 입력하지 않고도 이 작업을 쉽게 수행할 수 있는 CLI 도구가 있습니까? 이상적으로는 +2M입력만으로 파티션 크기를 2MB까지 늘릴 수 있기를 바랍니다 .

답변1

(개인적으로는 EFI 시스템 파티션을 제외하고는 요즘 1GB보다 작은 여러 개의 파티션을 만드는 것이 "불필요한 미세 관리"라고 생각합니다 /boot. 하지만 이유가 있다고 확신합니다.)

당신이 이래로더블기존 디스크 크기를 사용하면 LVM으로 전환할 수 있는 좋은 기회가 됩니다.

먼저 LVM 도구를 사용할 수 있는지 확인하십시오. 이것이 루트 파일 시스템인 경우 도구를 포함하도록 initramfs를 다시 빌드해야 할 수도 있습니다.

암호화된 볼륨을 확장한 후:

head -c 104857600 < /dev/urandom >> my_disk
cryptsetup resize my_disk

추가된 모든 공간을 차지하기 위해 원하는 파티션 도구를 사용하여 새 파티션을 만들 수 있습니다. 로 읽어야 합니다 /dev/mapper/my_disk-part7. 유형을 8e(Linux LVM)로 설정하십시오.

LVM에서 사용할 수 있도록 초기화합니다.

pvcreate /dev/mapper/my_disk-part7

새 LVM 볼륨 그룹(줄여서 VG)을 생성합니다:

vgcreate my_vg /dev/mapper/my_disk-part7

이제 기존 파티션과 일치하는 LVM 논리 볼륨(LV)을 생성하십시오.

lvcreate -L 8M -n my_lv1 my_vg 
lvcreate -L 4M -n my_lv2 my_vg 
lvcreate -L 1M -n my_lv3 my_vg 
lvcreate -L 32M -n my_lv5 my_vg 
lvcreate -l 100%FREE -n my_lv6 my_vg 

-L참고: 메가/기가/테라바이트 크기를 지정할 때는 대문자를 사용하고, -l사용 가능한 용량이나 총 용량의 백분율을 지정할 때는 소문자를 사용하십시오.

파일 시스템 생성:

for i in 1 2 3 5 6; do mkfs.ext4 /dev/mapper/my_vg-my_lv$i; done

이 명령을 사용하면 vgs논리 볼륨에 할당된 전체 VG 공간의 크기를 보고 lvs개별 논리 볼륨의 크기를 표시할 수 있습니다.

일부 애플리케이션 가동 중지 시간을 예약하고 기존 디스크의 모든 항목을 새 디스크에 복사합니다.

mkdir /old /new
mount /dev/mapper/my_disk-part1 /old
mount /dev/mapper/my_vg-my_lv1 /new
cp -a /old/* /new/
umount /new
umount /old

...5개 파티션 모두에 대해 이 작업을 반복합니다.

이제 /etc/fstab이전 파티션 대신 LVM 논리 볼륨을 참조하도록 항목을 변경할 수 있습니다. 여기에 루트 파일 시스템이 포함되어 있으면 편집하는 것을 잊지 마세요.새로운이전 파일 시스템이 아닌 루트 파일 시스템입니다. 또한 이전 루트 파일 시스템이나 새 루트 파일 시스템으로 부팅하도록 명시적으로 선택할 수 있도록 추가 부팅 옵션을 생성하여 모든 것이 필요한 위치에 설치되었는지 확인할 수도 있습니다. 신중하게 테스트하고,특히루트 파일 시스템이 포함된 경우.

LVM을 성공적으로 사용했다면 이제 이전 설정을 해제할 차례입니다. 이전 파티션 #1, #2, #3을 삭제하고 해당 위치에 하나의 파티션만 생성합니다(오버헤드 최소화를 위해). 또한 유형을 8e(Linux LVM)로 설정합니다. 이것은 새로운 것입니다 /dev/mapper/my_disk-part1. 파티션 #5와 #6의 유형을 8e(Linux LVM)로 변경합니다.

파티셔닝이 완료되면 시스템의 정상적인 사용을 재개할 수 있습니다.

이제 LVM에서 사용할 수 있도록 해제된 파티션을 초기화합니다.

pvcreate /dev/mapper/my_disk-part1
pvcreate /dev/mapper/my_disk-part5
pvcreate /dev/mapper/my_disk-part6

기존 볼륨 그룹에 추가합니다.

vgextend my_vg /dev/mapper/my_disk-part1
vgextend my_vg /dev/mapper/my_disk-part5
vgextend my_vg /dev/mapper/my_disk-part6

vgs이 시점에서 실행해 보면 my_vg이제 크기가 200M 정도 되었고, 100M 정도 남았음을 알 수 있습니다. 실제로 현재 사용 가능한 공간은물리적기존 LV의 "왼쪽" 측면그것은 중요하지 않습니다: 확장하여 사용할 수 있습니다.어느당신이 적합하다고 생각하는 LV. 할 수 있어요모든 것이 설치되고 사용되면.

이제 원래 하고 싶었던 작업을 수행할 수 있습니다.

lvextend -r -L 10M /dev/mapper/my_vg-my_lv1
lvextend -r -L +1MB /dev/mapper/my_vg-my_lv2
lvextend -r -L +15M /dev/mapper/my_vg-my_lv3

ext4안타깝게도 마운트된 파일 시스템을 축소하는 것은 지원되지 않습니다.

umount /dev/mapper/my_vg-my_lv5
lvreduce -r -L 29M /dev/mapper/my_vg-my_lv5
mount /dev/mapper/my_vg-my_lv5

마지막으로 할당되지 않은 나머지 용량은 모두 마지막 LV에 할당됩니다.

lvextend -r -l +100%FREE /dev/mapper/my_vg-my_lv6

미래를 위해:

디스크 파일 크기를 다시 늘려야 하는 경우 모든 것이 설치되어 실행되는 동안 부팅하지 않고도 수행할 수 있습니다.

head -c 104857600 < /dev/urandom >> my_disk   # extend disk image
cryptsetup resize my_disk                     # tell the encryption layer to use it
growpart /dev/mapper/my_disk 7                # extend partition
pvresize /dev/mapper/my_disk-part7            # tell the LVM PV to use it

...그러면 LV에 할당할 수 있는 100MB의 공간이 생기 lvextend거나 lvcreate.

새로운 디스크로 마이그레이션해야 하는 경우 모든 것을 설치한 상태에서 수행할 수 있다는 점을 알려드리면 놀라실 것입니다.

vgextend my_vg /dev/mapper/my_new_disk       # add new disk to the VG
pvmove /dev/mapper/my_disk                   # migrate everything away from the old PV
vgreduce my_vg /dev/mapper/my_disk

그런 다음 기존 디스크를 제거합니다.

직장에서는 기본적으로 전체 데이터 센터를 새 스토리지로 마이그레이션했습니다. 5년마다 여러 번 수행했습니다. 기존 엔터프라이즈 스토리지 하드웨어에 대한 지원이 종료되거나 새 하드웨어로 전환하는 것보다 빨라지기 때문에 비용이 더 많이 듭니다. .

관련 정보