런타임에 시스템의 루트 파티션 크기를 늘리려면 어떻게해야합니까?
루트 파티션 뒤에 할당되지 않은 파티션이 있는데 (ext4이기도합니다), 서버를 종료하지 않고 루트 파티션에 할당 된 공간에 할당되지 않은 공간을 어떻게 추가 할 수 있습니까?
런타임에 시스템의 루트 파티션 크기를 늘리려면 어떻게해야합니까?
루트 파티션 뒤에 할당되지 않은 파티션이 있는데 (ext4이기도합니다), 서버를 종료하지 않고 루트 파티션에 할당 된 공간에 할당되지 않은 공간을 어떻게 추가 할 수 있습니까?
답변:
GUI (Ubuntu 14.04 이상) : GParted v0.17 이상에서는 이에 대한 유용한 GUI를 제공합니다. (이전 버전은 마운트 된 파티션의 크기 조정을 거부합니다).
커맨드 라인 (모든 우분투 버전) : 여기에는 세 단계가 있습니다.
단계 1. 먼저 파티션 크기를 조정해야합니다. LVM을 사용하는 경우 쉽고, 진행 방법을 알고있을 것입니다. 클래식 파티션을 사용하는 경우 조금 더 복잡 하므로 재부팅해야 할 수도 있습니다 (다른 시스템이나 라이브 CD를 부팅 할 필요는 없지만).
이 작업을 수행하는 방법은 다음과 같습니다. fdisk
먼저 파티션을 삭제하고 (디스크의 데이터가 보존된다는 아이디어) 동일한 위치에서 더 큰 크기로 조심스럽게 다시 생성하십시오.
예:
$ sudo fdisk /dev/sda
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 9437183 4717568 83 Linux
Command (m for help): d
Selected partition 1
Command (m for help): p
Device Boot Start End Blocks Id System
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sda1 2048 10485759 5241856 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
다시 말하지만 새 파티션은 이전 파티션과 동일한 블록에서 시작해야합니다. Id도 일치해야합니다 (Linux 시스템의 경우 83). 사소한 오타로 모든 데이터를 잃을 준비를하십시오.
안전을 위해을 눌러 부팅 플래그를 복원 할 수도 있습니다 ( 일부 컴퓨터에서는 Wikipedia에 따라 여전히 필요함) a
.
스왑 파티션이 방해가되는 경우 수행 할 작업에 대한 설명 섹션을 참조하십시오.
사람들이 왜 라이브 CD 사용을 권장하는지 분명해졌습니다. ;-)
2 단계
로 fdisk
유용하게 당신이 진행하기 전에 파티션 테이블을 다시로드해야합니다, 당신을 생각 나게한다. 가장 안전한 방법은 단순히 재부팅하는 것입니다. 그러나 partprobe
또는 kpartx
(추가 정보) 를 사용할 수도 있습니다 .
단계 3.
파티션 크기를 조정하고 파티션 테이블을 다시로드 resize2fs
하면 파일 시스템에서 실행하기 만하면 되며 루트 파티션으로 마운트 된 경우에도이를 수행 할 수 있습니다.
예:
$ sudo resize2fs /dev/sda1
fdisk
이, partprobe
또는 kpartx
재부팅 대신 작동 할 수 있습니다. 이 질문 도 참조하십시오 . 다시 부팅하더라도 다운 타임이 발생할 때 라이브 CD를 사용하는 것이 솔루션이 여전히 바람직합니다. 가상 시스템의 경우 간단한 재부팅은 10 초 미만일 수 있습니다. 또한 운영자 시간이 더 빠르기 때문에 대개이 방법을 직접 사용합니다. :)
free -h
스왑 허용 ( ), 스왑 비활성화 ( swapoff /dev/sda2
), 파티션 테이블 변경 (스왑 파티션 삭제 및 재 작성 포함), 1) 재부팅 또는 2) 파티션 테이블을 swapon
다시 로드 한 후 다시로드 하십시오. (스왑을 일시적으로 비활성화하기에 메모리가 너무 빡빡한 경우에도 새 스왑 파티션 ( /dev/sda3
)을 만들고 활성화 한 다음 스왑을 해제 할 수 sda2
있지만 /etc/fstab
새 스왑 장치 이름 으로 업데이트 해야합니다.)
루트 파티션 인 경우에도 ext4 파일 시스템의 온라인 크기 조정을 수행 할 수 있습니다. resize2fs
명령을 사용하십시오 .
sudo resize2fs /dev/sda1
편집 : 온라인 축소는 허용되지 않습니다 :
root@brunojcm-htpc:/home# resize2fs /dev/sda5 2654693
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/sda5 is mounted on /; on-line resizing required
resize2fs: On-line shrinking not supported
man resize2fs
: The resize2fs program does not manipulate the size of partitions. If you wish to enlarge a filesystem, you must make sure you can expand the size of the underlying partition first. This can be done using fdisk(8) by deleting the partition and recreating it with a larger size or using lvextend(8),if you're using the logical volume manager lvm(8).
이 질문은 파일 시스템이 아닌 파티션 크기 조정에 관한 것 입니다. 구별은 미묘하지만 매우 중요합니다.
The resize2fs program will resize ext2, ext3, or ext4 file systems. It can be used to enlarge or shrink an unmounted file system located on device. If the filesystem is mounted, it can be used to expand the size of the mounted filesystem, assuming the kernel supports on-line resizing. (As of this writing, the Linux 2.6 kernel supports on-line resize for filesystems mounted using ext3 and ext4.).
fdisk
언제 growpart
당신을 위해 이것을 아주 쉽게 할 것인지 고민하지 마십시오 .
더 쉬운 해결책-사용 growpart <device> <partition>
:
growpart /dev/xvda 1 # Grows the partition; note the space
resize2fs /dev/xvda1 # Grows the filesystem
항상 그렇듯이 파티션 테이블 ( sfdisk -d /dev/xvda > partition_bak.dmp
)을 백업하십시오 .
sfdisk: /dev/nvme0n1p5: does not contain a recognized partition table
gparted
그것을 사용 하는 것이 좋습니다 .
apt-get install cloud-utils
/dev/nvme0n1
. p5는이 디스크의 파티션 5입니다. 전통적인 BSD 디스크 슬라이스와 비교할 때 비슷한 번호 체계를 사용합니다.
예. 재부팅없이 온라인 루트 파티션 을 축소 / 이동 / 확장 할 수 있습니다 (livecd 또는 usbkey도 아님) : 이 답변을 참조하십시오 . 꽤 길고 약간 위험하지만 매우 잘 작성되어 따르기 쉽습니다. 따라서 ext4 파티션 만 늘리려면 기존 작업 resize2fs
솔루션을 고수 할 수 있습니다 .
내가 찾은 일반적인 솔루션은 예를 들어 모든 유형의 전용 또는 VPS 솔루션에서 작동합니다.
TLDR; 이 솔루션을 의미 pivot_root
하기 tmpfs
때문에 당신이 할 수 umount
안전하게 루트 파티션이 함께 살고 바이올린. 완료되면 pivot_root
새 루트 파티션으로 돌아갑니다.
이것은 루트 파일 시스템에서 거의 모든 조작을 허용합니다 (이동, 파일 시스템 변경, 물리적 장치 변경 ...).
재부팅 과정에서 요구되지 않으며, 이는 제한 우회 할 수 의 resize2fs
축소 할 수없는 ext4
파티션.
나는 이것을 개인적으로 사용했으며 데비안 시스템에서도 잘 작동하므로 우분투에서도 작동합니다. 이 심층 솔루션이 같은 문제를 다루는 stackexchange 웹 사이트의 많은 질문과 조금 더 연결되어 있지 않은 것이 매우 놀랍습니다.
참고 : 물론 파티션을 늘리고 싶다면 resize2fs
여기에 여러 곳과 다른 답변에서 언급 한 것처럼 간단 합니다.
크기를 조정중인 파티션이 부팅 된 파티션이 아닌 한 GParted를 사용할 수도 있습니다. 그렇지 않으면 초보자에게는 라이브 CD 옵션이 다소 쉬울 것입니다.
GParted는 기본적으로 모든 GUI를 기반으로 모든 단계를 수행합니다.
루트가 마운트되는 동안 라이브 시스템에서 ext4 루트 파티션의 크기 조정을 마쳤습니다.
[root@habib i686]# resize2fs /dev/vg_habib/lv_root
resize2fs 1.42 (29-Nov-2011)
Filesystem at /dev/vg_habib/lv_root is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 10
Performing an on-line resize of /dev/vg_habib/lv_root to 38427648 (4k) blocks.
The filesystem on /dev/vg_habib/lv_root is now 38427648 blocks long.
[root@habib i686]#
@ Søren Løvborg의 답변을 확장하고 싶습니다 : 스왑 파티션이있는 파티션 확장.
먼저 디스크를 확장 한 후 디스크의 레이아웃 :
$sudo parted /dev/sda 'unit s print' free
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 14336000s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
63s 2047s 1985s Free Space
1 2048s 10485759s 10483712s primary ext4 boot
10485760s 10487805s 2046s Free Space
2 10487806s 12580863s 2093058s extended
5 10487808s 12580863s 2093056s logical linux-swap(v1)
12580864s 14335999s 1755136s Free Space
따라서 sda1은 디스크 끝의 여유 공간으로 확장해야하지만 스왑 파티션은 그 사이에 있습니다. 이것이 당신이 할 수있는 방법입니다 :
먼저 스왑을 비활성화해야합니다. 사용량과 사용 불가능 여부를 확인하십시오.
$ free -h
total used free shared buff/cache available
Mem: 992M 52M 464M 3.2M 475M 784M
Swap: 1.0G 0B 1.0G
스왑은 여기서 사용되지 않으므로 끌 수 있습니다
$sudo swapoff /dev/sda5
이제 파티션 테이블을 변경하겠습니다 :
$sudo fdisk /dev/sda
(참고 : 2048 대신 63 번 섹터에서 첫 번째 파티션을 시작하려면 옵션을 추가해야합니다 -c=dos
)
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sda: 6.9 GiB, 7340032000 bytes, 14336000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9e11c6df
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 10485759 10483712 5G 83 Linux
/dev/sda2 10487806 12580863 2093058 1022M 5 Extended
/dev/sda5 10487808 12580863 2093056 1022M 82 Linux swap / Solaris
Command (m for help): d
Partition number (1,2,5, default 5): 2
Partition 2 has been deleted.
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-14335999, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-14335999, default 14335999): 12242941
Created a new partition 1 of type 'Linux' and of size 5.9 GiB.
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (12242942-14335999, default 12242944):
Last sector, +sectors or +size{K,M,G,T,P} (12242944-14335999, default 14335999):
Created a new partition 2 of type 'Linux' and of size 1022 MiB.
Command (m for help): a
Partition number (1,2, default 2): 1
The bootable flag on partition 1 is enabled now.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
참고 : sda1의 크기는 총 섹터 수에서 스왑 파티션의 섹터 크기를 뺀 것입니다. 14335999-2093058 = 12242941
fdisk가 언급했듯이 커널은 여전히 기존 파티션 테이블을 사용하고 있으므로 다시로드해야합니다.
$partprobe
이제 sda1에서 resize2fs를 실행해야합니다 (이를 잊지 마십시오!).
$resize2fs /dev/sda1
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 10
The filesystem on /dev/sda1 is now 38833617 (4k) blocks long.
이제는 아직 끝나지 않았습니다. sda2가 Linux (Ext4) 유형으로 분할되어 있음을 알 수 있습니다. 어떤 이유로 fdisk에서 유형을 선택할 수있는 방법이 없습니다. 그래서 우리는 그것을 사용하여 대체해야합니다.cfdisk
$ sudo cfdisk
sda2를 선택하고 유형을 변경 82 Linux swap / Solaris
하고 작성했는지 확인하십시오 (확인하려면 예를 입력하십시오).
이제 스왑을 다시 활성화 할 수 있습니다
$mkswap /dev/sda2
/dev/sda2
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none swap sw 0 0
마지막으로 켜십시오.
$swapon /dev/sda2
부팅시 스왑 파티션을 자동으로 마운트하도록 fstab을 업데이트하는 것이 유일한 방법입니다.
$sudo nano /etc/fstab
그리고 스왑 파티션의 UUID를 위의 출력으로 변경하십시오.
# swap was on /dev/sda5 during installation
UUID=d58bf1cb-d27a-487d-b337-056767fd5ad6 none swap sw 0 0
이제 모든 것이 정상이며 문제없이 재부팅 할 수 있습니다.
mkswap
& swapon
명령은 sda2에서 실행해야합니다. 내 게시물의 시작 부분에서 실수를했다 : swapoff
sda5에서 실행해야합니다. 의견은 언제나 환영합니다. 메모하기는 어려웠습니다.
cryptdisks_stop
한 다음로 대신 / etc / crypttab을 업데이트 하고로 암호화 디스크를 /etc/fstab
다시 시작해야합니다 cryptdisks_start
.
난 그냥없이 성공적으로 이런 짓을 umount
, pivot_root
주 파티션, 또는 일시적으로 제거 우분투 16.04, 4.4.0 커널 3.2을 헤어 사용. 조심스럽게 네트워킹을 비활성화 한 상태에서 가상 콘솔에서 모든 작업을 수행했으며, 만일을 대비하여 미리 스냅 샷을 작성했지만 스냅 샷은 필요하지 않았으므로 SSH를 통해 실행 수준을 변경하지 않고도이 작업을 수행 할 수있었습니다.
파티션 크기를 결정하십시오. parted /dev/sda1 print | egrep "Disk.*GB"
선택적으로 네트워킹없이 다중 사용자 모드로 전환합니다 (SSH가 아닌 콘솔에서 수행해야 함).
runlevel # remember the original runlevel
init 2
선택적으로 VM 스냅 샷을 작성하여주의하십시오.
파티션 크기 조정 :
parted
p
resizepart NUMBER SIZE
# answer "Yes" when asked about resizing a live partition.
q
파일 시스템 크기 조정 : resize2fs /dev/sda1
문제가 발생하면 여기에서 스냅 샷을 복원 할 수 있습니다. 모든 것이 정상이면 정상 런레벨 (위에서 획득)-보통 5 :로 돌아갑니다 init 5
. 이 시점에서 전체 재부팅을 수행하여 모든 것이 올바르게 돌아 오는지 확인하는 것이 좋습니다 (나중에 날짜 / ntp 문제가 발생했습니다).
이 단계를 따르세요.
su
parted
p
사용 가능한 파티션을 보려면 입력 하십시오rm PARTITION NUMBER
여유 공간을 만드는 데 사용하여 인접 파티션을 삭제하십시오 .resizepart ROOT NUMBER
필요한 경우 시스템 을 입력 하고 재부팅 하여 루트 크기를 늘 립니다.parted
입력 exit
하고 터미널 유형으로 종료 하고 partprobe
Enter 키를 누릅니다 (재부팅 후에도 가능)resize2fs /dev/sda PARTITION NUMBER
넓은 루트 파티션을 실행 하고 즐기십시오.