LVM의 여유 공간(50GB)을 사용하기 위해 파티션을 추가하고 싶습니다. 디스크가 여러 번 확대되어 이 파티션에 혼란이 발생했습니다. 어떻게 하면 정상으로 되돌리고 여유 공간을 사용할 수 있나요?
# cfdisk /dev/sda
Disk: /dev/sda
Size: 200 GiB, 214748364800 bytes, 419430400 sectors
Label: dos, identifier: 0x000cc491
Device Boot Start End Sectors Size Id Type
>> /dev/sda1 * 2048 499711 497664 243M 83 Linux
/dev/sda2 501758 167770111 167268354 79.8G 5 Extended
└─/dev/sda5 501760 167770111 167268352 79.8G 8e Linux LVM
/dev/sda3 167770112 209715199 41945088 20G 83 Linux
/dev/sda4 209715200 314572799 104857600 50G 83 Linux
Free space 314572800 419430399 104857600 50G
나중에 논리 파티션을 추가할 수 있도록 확장 파티션의 크기를 먼저 조정해 보았습니다. 하지만 이것은 작동하지 않습니다.
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 256MB 255MB primary ext2 boot
2 257MB 85.9GB 85.6GB extended
5 257MB 85.9GB 85.6GB logical lvm
3 85.9GB 107GB 21.5GB primary
4 107GB 161GB 53.7GB primary
(parted) resizepart
Partition number? 2
End? [85.9GB]? 135.6
Error: Can't have the end before the start! (start sector=501758 length=-236914)
추가 정보:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 root lvm2 a-- 20.00g 0
/dev/sda4 root lvm2 a-- 50.00g 0
/dev/sda5 root lvm2 a-- 79.76g 0
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root root -wi-ao---- 146.48g
swap_1 root -wi-ao---- 3.28g
# vgs
VG #PV #LV #SN Attr VSize VFree
root 3 2 0 wz--n- 149.75g 0
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/dm-0 145G 129G 8.6G 94% /
udev 10M 0 10M 0% /dev
tmpfs 1.6G 9.2M 1.6G 1% /run
tmpfs 4.0G 0 4.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 4.0G 0 4.0G 0% /sys/fs/cgroup
/dev/sda1 228M 53M 164M 25% /boot
tmpfs 801M 0 801M 0% /run/user/1000
답변1
새 파티션을 추가하는 대신 기존 파티션을 늘리는 것은 어떨까요?
모든 파티션은 이미 단일 LVM 볼륨 그룹의 일부이므로 파티션을 더 추가할 필요 없이 기존 파티션을 확장하기만 하면 됩니다.
parted /dev/sda -- resizepart 4 100%
pvresize /dev/sda4
이것이 이 문제를 해결하는 가장 쉬운 방법일 것입니다.
기존 파티션 순서를 해결하는 것은 약간 복잡합니다. 이 문제를 해결하는 가장 쉽고 안전한 방법은 새 디스크를 연결하고 마이그레이션하는 것입니다.
데이터를 적절하게 섞을 수 있습니다. 이전에 이 작업을 수행한 적이 있습니다.PV1의 LVM을 PV2로 이동. 그러나 분할 문제로 인해 이 솔루션을 직접 적용할 수 없으며 분할되지 않은 공간을 매핑하는 것은 losetup --offset
잘못된 오프셋을 얻을 수 있고 재부팅 후에도 유지되지 않으므로 위험합니다.
또 다른 옵션은 기본 파티션과 논리 파티션이 구분되지 않는 GPT 파티션으로 변환하여 원하는 만큼 파티션을 생성할 수 있는 것입니다. 그러나 그렇게 하면 부트로더를 다시 설치할 때까지 시스템을 부팅할 수 없게 됩니다. Grub의 경우 64초에서 2047초 사이에 배치할 수 있는 bios_grub 파티션도 생성해야 합니다(첫 번째 파티션 전, 정렬 무시).
이 pvdisplay
표시 되면 각 파티션을 1MiB씩 축소하고 기본/논리 파티션 간에 변환할 수도 있습니다. msdos 논리 파티션 정보는 이러한 파티션 사이의 간격에 저장되므로 축소가 필요합니다. 현재 sda5-sda3-sda4 사이에는 이러한 간격이 없으므로 논리 파티션에 직접 매핑할 수 없습니다.not usable x.y MiB
x >= 1
답변2
일반적으로
그건 작동하지 않습니다. 최소한 데이터를 이동하거나 기존 파티션을 변경하지 않고 말이죠.
기본 파티션이 부족한 경우에는 논리 파티션만 추가할 수 있습니다. 그러나 이는 확장 파티션의 경계 내에 있어야 합니다. 따라서 블록 장치 끝에 있는 새 공간을 사용할 수 있으려면 확장 파티션이 블록 장치 끝에 있어야 합니다. 그런 다음 상위 경계를 장치의 새 끝으로 이동하고 새 논리 파티션을 생성할 수 있습니다.
이론적으로는 확장 파티션을 기본 파티션으로 확장하고 가짜 논리 파티션(어떤 목적으로도 사용해서는 안 됨)을 만들어 기본 파티션을 "덮어쓰는" 것이 가능합니다. 파티셔닝 도구는 이에 반응할 것입니다. 이는 곧 재난이 일어날 것처럼 보이므로 권장하지 않습니다.
가능한 해결책
이로 인해 문제가 발생하지 않으면 sda3
및를 sda4
논리 파티션으로 변환할 수 있습니다. 나는 이런 일을 한 적이 없습니다. 이것이 작동하려면 논리 파티션 사이에 32K의 간격이 있어야 하기 때문에(연결된 목록으로 구현되므로) , sda3
및 sda4
의 크기를 약간 줄여야 한다고 생각합니다 .sda5
그래서 당신은해야합니다
- 이 파티션의 파일 시스템을 32K 이상 축소
- 이 32K만큼 파티션의 상위 경계를 이동합니다.
- 확장 및 기본 파티션 항목의 크기를 변경합니다(한 번에 모두 권장).
가장 쉬운 방법은 아마도 덤프 파티션 테이블을 사용하여 sfdisk -d /dev/sda
변경하고( sda3
, sda6
) sda4
이 sda7
구성을 가져오는 것입니다( sfdisk /dev/sda <modified_dump.sfdisk
).
또 다른 방법은 파티션을 삭제하고(그 안의 데이터에는 영향을 주지 않음) 파티션을 동일한 시작 섹터이지만 더 작은 크기의 논리 파티션으로 생성하는 것입니다(선택한 파티션 도구를 사용하여). 두 작업을 수행하려면 다른 매체에서 부팅해야 합니다.
어쨌든 원본 파티션 테이블의 복사본을 다른 드라이브에 저장하세요!