앞과 뒤에 다른 파티션이 있는 디스크의 특정 파티션의 크기를 조정하는 방법은 무엇입니까?
파티션 크기를 조정하는 방법(예: 사용)에 대한 수많은 가이드를 인터넷에서 찾았지만 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 "디스크" 파일을 생성합니다.
- 8MB
- 4MB
- 1MB
- 32MB
- 36MB
이제 디스크 크기를 두 배로 늘려 보겠습니다.
head -c 104857600 < /dev/urandom >> my_disk
이제 디스크 크기가 두 배로 늘어났으므로 다음과 같이 디스크 파티션 크기를 조정하고 싶습니다.
- 8MB -> 10MB
- 4MB -> 5MB
- 1MB -> 16MB
- 32MB -> 29MB
- 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년마다 여러 번 수행했습니다. 기존 엔터프라이즈 스토리지 하드웨어에 대한 지원이 종료되거나 새 하드웨어로 전환하는 것보다 빨라지기 때문에 비용이 더 많이 듭니다. .