명령줄에서 ext4 파티션의 크기를 조정하는 방법은 무엇입니까?

명령줄에서 ext4 파티션의 크기를 조정하는 방법은 무엇입니까?

명령줄에서 ext4 파티션(또는 방법에 따라 모든 유형의 파티션)의 크기를 조정하는 가장 쉬운 방법은 무엇입니까(잠재적으로 가장 적은 명령을 사용하지만 이해하기 가장 쉬운 방법임)?

Gparted와 같은 도구를 사용하는 것은 GUI에서 확실히 쉽지만 명령줄에서는 어떻습니까? 기술적으로 여전히 명령줄에 있기 때문에 텍스트 기반 GUI도 답으로 간주될 수 있다고 생각합니다. 단지 쉬울 필요가 있습니다.

파티션이란 개인용 컴퓨터(예: 노트북)의 단일 디스크에 있는 간단한 파티션을 의미합니다. 예를 들어, 크기를 조정하고 싶습니다 /dev/sda4. RAID도 없고 디스크 드라이브도 두 개 이상 없으며 여기에는 복잡한 것이 없습니다. 단일 디스크(/dev/sda의 /dev/sdaX)에 있는 간단한 파티션입니다.

답변1

fdisk실행 중에 파티션 테이블을 변경하는 데 사용할 수 있습니다 . 인용하다Linux에서 ext4 파일 시스템의 실시간 크기 조정 (에코드의 침묵블로그):

부인 성명: 다음 지침은 실수할 경우 데이터를 쉽게 망칠 수 있습니다. 다음 작업을 수행하기 전에 백업한 VM에서 이 작업을 수행하고 있었습니다. 백업을 수행하지 않아서 데이터가 손실된 경우 와서 불평하지 마십시오.

...

첫째: 디스크 크기를 늘립니다.

ESXi에서는 간단합니다. 가상 디스크의 크기를 늘리면 됩니다. 이제 더 큰 하드 드라이브를 갖게 되었지만 여전히 a) 파티션 크기를 늘리고 b) 파일 시스템 크기를 조정해야 합니다.

둘째: 파티션 크기를 늘리십시오.

fdisk실행 중에 파티션 테이블을 변경하는 데 사용할 수 있습니다 . 기본 Ubuntu 설치에는 3개의 파티션이 생성되었습니다. 하나는 기본(sda1)이고, 다른 하나는 확장(sda2)이며 단일 논리 파티션(sda5)이 포함되어 있습니다. 확장파티션은 간단히 스왑용으로 사용하기 때문에 데이터 손실 없이 쉽게 이동할 수 있었습니다.

  1. 기본 파티션 삭제

  2. 확장 파티션 삭제

  3. 원래 파티션과 동일한 섹터에서 시작하여 더 큰 크기의 새 기본 파티션을 만듭니다(스왑용으로 일부 남겨두기).

  4. 스왑 공간을 보유하기 위해 논리 파티션이 포함된 새 확장 파티션을 생성합니다.

    me@ubuntu:~$ sudo fdisk /dev/sda
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 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
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *        2048   192940031    96468992   83  Linux
    /dev/sda2       192942078   209713151     8385537    5  Extended
    /dev/sda5       192942080   209713151     8385536   82  Linux swap / Solaris
    
    Command (m for help): d
    Partition number (1-5): 1
    
    Command (m for help): d
    Partition number (1-5): 2
    
    Command (m for help): n
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): p
    Partition number (1-4, default 1):
    Using default value 1
    First sector (2048-524287999, default 2048):
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-524287999, default 524287999): 507516925
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 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
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended
    Select (default p): e
    Partition number (1-4, default 2): 2
    First sector (507516926-524287999, default 507516926):
    Using default value 507516926
    Last sector, +sectors or +size{K,M,G} (507516926-524287999, default 524287999):
    Using default value 524287999
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 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
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    /dev/sda2       507516926   524287999     8385537    5  Extended
    
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 1 extended, 2 free)
       l   logical (numbered from 5)
    Select (default p): l
    Adding logical partition 5
    First sector (507518974-524287999, default 507518974):
    Using default value 507518974
    Last sector, +sectors or +size{K,M,G} (507518974-524287999, default 524287999):
    Using default value 524287999
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 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
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    /dev/sda2       507516926   524287999     8385537    5  Extended
    /dev/sda5       507518974   524287999     8384513   83  Linux
    
    Command (m for help): t
    Partition number (1-5): 5
    
    Hex code (type L to list codes): 82
    Changed system type of partition 5 to 82 (Linux swap / Solaris)
    
    Command (m for help): p
    
    Disk /dev/sda: 268.4 GB, 268435456000 bytes
    255 heads, 63 sectors/track, 32635 cylinders, total 524288000 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
    Disk identifier: 0x000e49fa
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048   507516925   253757439   83  Linux
    /dev/sda2       507516926   524287999     8385537    5  Extended
    /dev/sda5       507518974   524287999     8384513   82  Linux swap / Solaris
    
    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.
    
    me@ubuntu:~$ sudo reboot 
    

나중에 부팅 가능 플래그를 설정하지 않았지만 분명히너한테는 별로 필요하지 않아.

셋째: 파일 시스템을 확장합니다.

resize2fs마운트된 파티션에서 온라인 으로 이 작업을 수행할 수 있습니다 .

me@ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        91G   86G   12M 100% /
udev            3.9G  4.0K  3.9G   1% /dev
tmpfs           1.6G  696K  1.6G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.9G  144K  3.9G   1% /run/shm
none            100M   16K  100M   1% /run/user

me@ubuntu:~$ sudo resize2fs /dev/sda1
resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 6, new_desc_blocks = 16
The filesystem on /dev/sda1 is now 63439359 blocks long.

me@ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       239G   86G  142G  38% /
udev            3.9G   12K  3.9G   1% /dev
tmpfs           1.6G  696K  1.6G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.9G  152K  3.9G   1% /run/shm
none            100M   36K  100M   1% /run/user

약간의 문제: 재부팅 후 스왑 공간이 활성화되지 않았습니다. 를 실행 mkswap하고 새 UUID로 조정 /etc/fstab하고 스왑을 켜야 한다는 사실이 밝혀졌습니다.

me@ubuntu:~$ sudo mkswap /dev/sda5 
Setting up swapspace version 1, size = 8384508 KiB
no label, UUID=141d401a-b49d-4a96-9b85-c130cb0de40a

me@ubuntu:~$ sudo swapon --all --verbose
swapon on /dev/sda5
swapon: /dev/sda5: found swap signature: version 1, page-size 4, same byte order
swapon: /dev/sda5: pagesize=4096, swapsize=8585740288, devsize=8585741312

/etc/fstab기존 스왑 파티션의 UUID mkswap를 .

답변2

혹시 저와 비슷한 상황이실까봐 답변드립니다. Ubuntu 18.0.4 LTS를 게스트로 실행하는 동적 디스크에서 파일 시스템(Ext4)의 크기를 조정해야 했습니다. 호스트에서 디스크 크기를 조정한 다음 파일 시스템의 크기를 조정했습니다.

일반적인 명령을 실행할 수 없었습니다. 예를 들어:

$ resize2fs /dev/sda2
resize2fs 1.44.1 (24-Mar-2018)
The filesystem is already 13180160 (4k) blocks long.  Nothing to do!

상당히 복잡 했고 fdisk, 마운트 해제된 디스크에서 작업하려면 LiveCD를 실행해야 했을 수도 있습니다.

이 두 명령은 내 문제를 쉽고 빠르게 해결했습니다.

$ growpart /dev/sda 2
CHANGED: partition=2 start=4096 old: size=105441280 end=105445376 new: size=409595871,end=409599967

$ resize2fs /dev/sda2
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/sda2 is mounted on /; on-line resizing required
old_desc_blocks = 7, new_desc_blocks = 25
The filesystem on /dev/sda2 is now 51199483 (4k) blocks long.

참고: 2첫 번째 명령에서는 장치의 파티션 번호를 나타냅니다 /dev/sda.

답변3

파티션과 파일 시스템의 크기를 모두 늘리려면 먼저 실행하여 fdisk파티션 크기를 늘린 다음 실행하여 resize2fs파일 시스템의 크기를 늘리세요.

둘 다의 크기를 줄이려면 resize2fs먼저 실행한 다음 실행하십시오 fdisk.

답변4

노알로의 솔루션분명히 최고입니다. 다른 것보다 훨씬 간단합니다.

에코 "- +" | SF디스크 -N<파트넘>/dev/sd엑스

작동 방식에 대한 간단한 설명: 단일 파티션에서 작동한다는 -N의미 입니다. sfdisk그렇게 시작하면 sfdisk대화형으로 시작 위치, 크기 및 선택적으로 파티션 유형을 기다립니다. " -"는 시작 위치가 변경되지 않음을 의미하고, " +"는 끝 위치가 최대한 많은 공간을 사용함을 의미합니다. 그 후에는 print및 명령을 사용해야 합니다 write. 선두는 echo "- +" |한 줄로 그 일을 합니다.

한계는 여유 공간이 있어야 한다는 것입니다.직후. 파티션 크기를 조정한 후 스왑 파티션이 있는 경우(내부에 실제 데이터가 없음을 의미) 로 쉽게 해결할 수 있습니다 sfdisk. 위 구문을 사용하여 변경할 파티션이 on sda1이고 swap on이라고 가정하고 sda2128G 디스크가 있고 6G의 스왑이 필요하다고 가정합니다. 첫 번째 단계는 스왑 파티션을 끝으로 이동하는 것입니다.

echo "122G +" | sfdisk -N2 /dev/sda

이제 첫 번째 파티션을 확장합니다.

echo "- +"    | sfdisk -N1 /dev/sda

로 크기를 조정하세요 resize2fs. 새로운 스왑이 인식되는지 확인해야 할 수도 있습니다. swapoff, 및 파일을 참조 mkswap하십시오 . 이는 이 질문의 범위에 속하지 않습니다.swaponfstab

명령 정보 sda2: 이런 식으로 데이터가 있는 파티션을 이동하지 마십시오!!!  모든 데이터가 손실됩니다. 이 명령은 데이터를 이동하지 않습니다. 단지 파티션 경계일 뿐입니다. sda1( - +)에 사용되는 명령에는 파티션의 시작 위치가 변경되지 않으므로 위험이 없습니다 . 이는 -단일 파티션에 사용될 때 " "의 의미입니다 .

@noalo 감사합니다

관련 정보