런타임에 확장 루트 파티션의 크기를 어떻게 조정할 수 있습니까?


236

런타임에 시스템의 루트 파티션 크기를 늘리려면 어떻게해야합니까?

루트 파티션 뒤에 할당되지 않은 파티션이 있는데 (ext4이기도합니다), 서버를 종료하지 않고 루트 파티션에 할당 된 공간에 할당되지 않은 공간을 어떻게 추가 할 수 있습니까?


3
나는 진흙 속의 막대기처럼 들리는 것을 싫어하지만 이것은 약간의 위험을 수반합니까? 왜 이런 일이 필요합니까? 가동 시간이 주요 제약입니까?
Cloud

실제로는 이동하므로 파티션 크기를 왼쪽으로 조정할 수 없습니다.
Zaz

5
온라인으로 ext4 paritition의 크기를 늘리는 것은 쉽습니다. 어려운 부분은 줄어들 것입니다 (헤드 라인은 "크기 조정"에 관한 것입니다). 루트 파티션에 어떤 조작에 의해 관심 명 (이동, 축소, 변경, 파일 시스템, 장치)의 경우 런타임에 내 대답을 참조해야합니다 : askubuntu.com/a/728141/21888
vaab

사용 growpart
guettli

답변:


214

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

16
이것은 나를 위해 완벽하게 작동했습니다. 그러나 추가로 유지 된 부팅 플래그가 원래 상태인지 확인했습니다.
Augustus Kling

4
@ jbo5112 : 말했듯 fdisk이, partprobe또는 kpartx재부팅 대신 작동 할 수 있습니다. 이 질문 도 참조하십시오 . 다시 부팅하더라도 다운 타임이 발생할 때 라이브 CD를 사용하는 것이 솔루션이 여전히 바람직합니다. 가상 시스템의 경우 간단한 재부팅은 10 초 미만일 수 있습니다. 또한 운영자 시간이 더 빠르기 때문에 대개이 방법을 직접 사용합니다. :)
Søren Løvborg 2014

1
@Raymond : 메모리 부족으로 free -h스왑 허용 ( ), 스왑 비활성화 ( swapoff /dev/sda2), 파티션 테이블 변경 (스왑 파티션 삭제 및 재 작성 포함), 1) 재부팅 또는 2) 파티션 테이블을 swapon다시 로드 한 후 다시로드 하십시오. (스왑을 일시적으로 비활성화하기에 메모리가 너무 빡빡한 경우에도 스왑 파티션 ( /dev/sda3)을 만들고 활성화 한 다음 스왑을 해제 할 수 sda2있지만 /etc/fstab새 스왑 장치 이름 으로 업데이트 해야합니다.)
Søren Løvborg

1
vmware를 사용하고 디스크 크기를 확장 한 경우 sudo lshw -C 디스크를 실행하여 파일 시스템을 다시 스캔하여 vm이 더 큰 드라이브를 인식하도록해야합니다. 그런 다음 위의 지침을 따르십시오.
Guy

2
축소는 어떻습니까?
Aaron Franke

114

루트 파티션 인 경우에도 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

55
From 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).이 질문은 파일 시스템이 아닌 파티션 크기 조정에 관한 것 입니다. 구별은 미묘하지만 매우 중요합니다.
Eliah Kagan 2012 년

8
fdisk를 사용하여 루트 부분을 삭제 한 다음 동일한 시작 블록에서 다시 만들 수 있습니다. fdisk는 변경 사항을 기록하지만 재부팅 후까지는 적용되지 않습니다. 재부팅 후 resize2fs 프로그램을 사용하여 디스크를 보내 파티션을 채울 수 있습니다.
James Becwar

3
방금 ext4 루트 파티션의 크기를 온라인으로 조정했습니다. 따라서 가능하다는 것을 확인할 수 있습니다. 그러나 / dev / sda *를 매개 변수로 resize2fs에 전달하는 대신 논리 볼륨 이름을 전달해야합니다.
CDR

10
나는 resize2fs 맨 페이지 의 첫 번째 단락이 초기 질문에 가장 흥미로웠다는 것을 발견했다 :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.).
mo '

5
fdisk언제 growpart당신을 위해 이것을 아주 쉽게 할 것인지 고민하지 마십시오 .
STRML

54

더 쉬운 해결책-사용 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)을 백업하십시오 .


축소는 어떻습니까?
Aaron Franke

이 방법을 사용하고 sfdisk: /dev/nvme0n1p5: does not contain a recognized partition table
싶었지만 (

온라인으로 축소 할 수 없습니다. 나는 gparted그것을 사용 하는 것이 좋습니다 .
STRML

4
growpart는 클라우드 유틸리티의 일부입니다. 설치하지 않은 경우apt-get install cloud-utils
klor

1
@monkut 파티에 늦었지만 디스크 가 가능성이 높습니다 /dev/nvme0n1. p5는이 디스크의 파티션 5입니다. 전통적인 BSD 디스크 슬라이스와 비교할 때 비슷한 번호 체계를 사용합니다.
Per Lundberg

12

예. 재부팅없이 온라인 루트 파티션축소 / 이동 / 확장 할 수 있습니다 (livecd 또는 usbkey도 아님) : 이 답변을 참조하십시오 . 꽤 길고 약간 위험하지만 매우 잘 작성되어 따르기 쉽습니다. 따라서 ext4 파티션 만 늘리려면 기존 작업 resize2fs솔루션을 고수 할 수 있습니다 .

내가 찾은 일반적인 솔루션은 예를 들어 모든 유형의 전용 또는 VPS 솔루션에서 작동합니다.

TLDR; 이 솔루션을 의미 pivot_root하기 tmpfs때문에 당신이 할 수 umount안전하게 루트 파티션이 함께 살고 바이올린. 완료되면 pivot_root새 루트 파티션으로 돌아갑니다.

이것은 루트 파일 시스템에서 거의 모든 조작을 허용합니다 (이동, 파일 시스템 변경, 물리적 장치 변경 ...).

재부팅 과정에서 요구되지 않으며, 이는 제한 우회 할 수resize2fs 축소 할 수없는 ext4 파티션.

나는 이것을 개인적으로 사용했으며 데비안 시스템에서도 잘 작동하므로 우분투에서도 작동합니다. 이 심층 솔루션이 같은 문제를 다루는 stackexchange 웹 사이트의 많은 질문과 조금 더 연결되어 있지 않은 것이 매우 놀랍습니다.

참고 : 물론 파티션을 늘리고 싶다면 resize2fs여기에 여러 곳과 다른 답변에서 언급 한 것처럼 간단 합니다.


4
루트 파티션에 액세스하는 모든 프로그램과 서비스를 중지하면 대부분의 사람들에게 시스템을 재부팅했을 것입니다. 축소 / 이동의 경우 라이브 CD를 사용하는 것보다 훨씬 빠를 수 있지만, 가장 일반적인 작업과 OP가 요구 한 사항을 늘리기 위해 대부분의 시스템을 일시적으로 종료하지 않는 방법이 있습니다. .
Søren Løvborg

2
@ SørenLøvborg : 전체 절차를 수행하면서 지속적인 생산이 필요한 핵심 서비스를 다시 시작할 수 있습니다. LiveCD (VPS 인스턴스, 전용 서버 ...)를 넣을 수없는 구성이나 특정 이유로 재부팅하지 않으려는 환경이 많이 있습니다. 원래 질문의 제목에는 "크기 조정"이 언급되어 있는데, 온라인으로 축소 파티션을 찾는 사람들을 끌어 들이고 있습니다. ** 다른 솔루션으로는 ext4를 온라인으로 축소 할 수 없습니다. **이 솔루션은 위험하고 복잡하지만 가장 강력하며 다른 솔루션의 단점을 보완합니다.
vaab

1
외부 링크에 따라 답변을 게시하지 마십시오. 관련 부분을 답변에 넣거나 링크를 질문에 대한 의견으로 게시하십시오. 자세한 내용 은 답변 방법을 참조 하십시오.
Melebius

10

크기를 조정중인 파티션이 부팅 된 파티션이 아닌 한 GParted를 사용할 수도 있습니다. 그렇지 않으면 초보자에게는 라이브 CD 옵션이 다소 쉬울 것입니다.

GParted는 기본적으로 모든 GUI를 기반으로 모든 단계를 수행합니다.


Ubuntu 12.04 Live CD로 시스템을 부팅하고 GParted를 사용하여 ext4 파티션의 크기를 조정했습니다. 나를 위해 일했다. 어쨌든이 작업 전에 중요한 데이터를 모두 백업했습니다.
StandDuPp

gparted는 파티션을 마운트 해제해야한다고 생각합니다. 그러나 나는 틀릴 수 있습니다.
Nick

문제는 그들이 부팅 한 파티션에 관한 것이므로 라이브 CD를 부팅하려면 컴퓨터를 다시 시작해야합니다. -1
wjandrea

5

루트가 마운트되는 동안 라이브 시스템에서 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]# 

5

@ 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

이제 모든 것이 정상이며 문제없이 재부팅 할 수 있습니다.


스왑 파티션 유형을 바꾸려면 fdisk 구매에서 t, 5 (파티션 5), 82 (리눅스 스왑 / Solaris 유형)를 선택하면됩니다.
Oz Edri

파티션 2를 확장해서는 안됩니까? (그리고 fdisk에서 p 대신 e를 선택해야합니다.) 또한 mkswap 및 swapon 명령을 sda2 대신 / dev / sda5에서 실행해서는 안됩니까?
오즈 에드 리

1
스왑 파티션 유형의 경우 : 다른 지침에서 실제로 fdisk에서 유형을 선택할 수 있지만 어떤 이유로 든 내 버전에서는 작동하지 않는다는 것을 알았습니다. 어쨌든, 그것은 항상 cfdisk와 함께 작동합니다
wouter205

1
스왑 파티션의 경우 : 확장 파티션을 사용할 수 있지만 확장 파티션과 논리 파티션 (내 초기 파티션 레이아웃 참조)의 두 파티션을 추가해야합니다. 이 예에서는 sda1-ext4-루트 파티션 및 sda2-스왑 파티션이라는 두 개의 기본 파티션으로 끝납니다. 따라서 mkswap& swapon명령은 sda2에서 실행해야합니다. 내 게시물의 시작 부분에서 실수를했다 : swapoffsda5에서 실행해야합니다. 의견은 언제나 환영합니다. 메모하기는 어려웠습니다.
wouter205

1
스왑 파티션이 암호화되면 먼저로 암호화 디스크를 중지 cryptdisks_stop한 다음로 대신 / etc / crypttab을 업데이트 하고로 암호화 디스크를 /etc/fstab다시 시작해야합니다 cryptdisks_start.
Dmitri Chubarov

1

난 그냥없이 성공적으로 이런 짓을 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 문제가 발생했습니다).


1

이 단계를 따르세요.

  1. 수퍼 유저로서 터미널 열기 su
  2. 운영 parted
  3. p사용 가능한 파티션을 보려면 입력 하십시오
  4. 루트 파티션 번호 (예 : 'sda 3'은 3을 의미)를 식별하고 rm PARTITION NUMBER여유 공간을 만드는 데 사용하여 인접 파티션을 삭제하십시오 .
  5. resizepart ROOT NUMBER필요한 경우 시스템 을 입력 하고 재부팅 하여 루트 크기를 늘 립니다.
  6. parted입력 exit하고 터미널 유형으로 종료 하고 partprobeEnter 키를 누릅니다 (재부팅 후에도 가능)
  7. 마지막으로 resize2fs /dev/sda PARTITION NUMBER넓은 루트 파티션을 실행 하고 즐기십시오.

0

앞에서 언급 한 바와 같이 :

  • 루트 시스템에서 실시간 확장이 가능합니다. (부팅 섹션이 이동하지 않으므로 어려움이 없습니다)

  • 결함이있는 것처럼 시스템이 정지하고 재부팅해야하며 결국에는 부팅이되지 않는 것처럼 외부 부팅 장치 (라이브 시스템 cd / usb-stick으로 부팅)에서 라이브 루트 파티션 축소를 수행해야합니다. 올바르게 부팅 할 수 있습니다.

"하지만 내가 해냈고 효과가있다"는 것은 행운이다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.