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

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

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

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

파티션이란 랩톱과 같은 개인용 컴퓨터의 단일 디스크에 있는 간단한 파티션을 의미합니다. 예를 들어 크기를 조정하고 싶습니다 /dev/sda4. RAID가 없고 디스크 드라이브가 하나만 있으며 여기에는 복잡한 것이 없습니다. 단일 디스크(/dev/sda의 /dev/sdaX)에 있는 간단한 파티션입니다.

답변1

fdisk런타임 시 파티션 테이블을 변경할 수 있습니다 . 인용하다Linux에서 실시간 크기 조정 ext4 파일 시스템 (존재하다코드 침묵블로그):

부인 성명: 다음 지침을 따르면 실수할 경우 데이터가 쉽게 파괴될 수 있습니다. 다음을 수행하기 전에 백업한 가상 머신에서 이 작업을 수행하고 있습니다. 백업을 하지 않아서 데이터가 손실되었다면 여기로 와서 불평하지 마세요.

...

첫째, 디스크 크기를 늘리십시오.

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

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

fdisk런타임 시 파티션 테이블을 변경할 수 있습니다 . 기본 Ubuntu 설치에서는 기본 파티션(sda1), 확장 파티션(sda2) 및 하나의 논리 파티션(sda5) 등 3개의 파티션이 생성됩니다. 확장 파티션은 스왑 전용이므로 데이터 손실 없이 쉽게 이동할 수 있습니다.

  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

사소한 문제: 재부팅 후 스왑 공간이 비활성화됩니다. 결과적으로 를 실행하고 새 UUID로 mkswap조정 하고 스왑을 열어야 합니다./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

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

에코 "-+" |<부품 번호>/dev/sd엑스

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

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

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

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

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

을 사용하여 크기를 조정합니다 resize2fs. 새로운 교환이 승인되었는지 확인해야 할 수도 있습니다. swapoff및 설명서를 mkswap참조 하십시오 . 이는 이 질문의 범위를 벗어납니다.swaponfstab

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

@noalo 감사합니다

관련 정보