Linux에서 GPT 파티션의 실시간 크기 조정


12

Linux에서는 라이브 파일 시스템에서도 fdisk를 사용하여 MBR 파티션의 크기를 조정 한 다음 res22fs / pvresize / ... (fs 유형에 따라 다름)를 발행하여 새 공간을 할당했습니다.

최근에 Xen 및 GPT 파티션을 사용하고 있으며 불행히도 parted가 마운트 된 파티션의 크기를 즉시 조정할 수없는 것으로 나타났습니다.

Error: Partition XXX is being used. You must unmount it before you modify it with Parted.

resize명령과 rm+ mkpart조합을 모두 시도했지만 마운트 된 파티션에 대해 불평 할 것입니다.

어떻게해야합니까?


RHEL / CentOS에서 즉시 사용할 수있는 방법은 높이 평가 될 것입니다.
cyberz

답변:


12

이를 수행하는 가장 안전한 방법은 응급 미디어 (라이브 CD 등)를 사용하여 부팅하고 GParted를 사용하여 파티션과 파일 시스템의 크기를 모두 조정하는 것입니다. 그러나 현재 파티션을 사용하지 않는 경우에만 작동합니다.

그러나 가동 중지 시간을 감당할 수 없다면 gdisk대신 대신 사용해보십시오 parted. 크기를 조정하려는 파티션을 삭제하고 동일한 시작점으로 새 파티션을 만들어야합니다 fdisk. gdisk커널은 변경 사항을 등록하지 않을 수도 있지만 사용중인 디스크에서 작동 할 것입니다. 이 경우 새 파티션 테이블을 수락하기 위해 커널 을 사용 partprobe하거나 kpartx커널을 가져 오거나 작동하지 않는 경우 컴퓨터를 재부팅해야 할 수도 있습니다. (이것은 모두를 사용하는 것과 비슷해야합니다 fdisk.)


멋지지만 CentOS에는 기본적으로 포함되어 있지 않습니다. 더 표준적인 방법? 즉, redhat과 같은 시스템은 외부 프로그램에 의존하지 않고 자체 크기를 조정할 수 있어야합니다.
cyberz

2
CentOS와 함께 제공되는 도구는 없습니다. 당신은 해야한다 CentOS는 당신이 원하는 것을 할 저장소의 외출. Fedora를 포함한 거의 모든 배포판에는 gdisk리포지토리 gdisk가 포함되어 있으며 다음 버전의 RHEL (및 CentOS)에 포함될 것이라고 들었습니다 .
Rod Smith

답변과 의견에 감사드립니다. 제가 찾던 정확한 정보입니다
cyberz

1
gdiskEPEL에서 사용할 수 있습니다.
jornane

나는 모두를 시도 partx하고 partprobe있지만 결국 재부팅했다. 어쨌든 그 팁에 감사드립니다
Alexandre Bourlier

10

이것은 일반적으로 최신 Linux 배포판에서만 작동합니다. 필요한 도구 :

  • partprobe (보통 parted의 일부)
  • gdisk / sgdisk

GPT 파티션은 디스크 끝에 백업 헤더를 저장합니다. 기본 장치의 크기를 조정 한 경우 백업 헤더가 중간에 있습니다. 첫 번째 단계는 파티션 헤더를 디스크 끝으로 옮기는 것입니다.

디스크가 / dev / sda이고 파티션이 / dev / sda3이라고 가정합니다 (마지막 파티션이어야 함).

sgdisk -e /dev/sda

그런 다음 마지막 파티션을 삭제하고 다시 만드십시오.

sgdisk -d 3 /dev/sda
sgdisk -N 3 /dev/sda

일반적으로 커널이 파티션 테이블을 다시로드 할 수 없다는 메시지가 표시됩니다. 파티션이 새로운 크기로 등록되도록 partprobe를 실행해야합니다.

partprobe /dev/sda

실패하면 가상 머신을 재부팅해야합니다. 그런 다음 ext4 등의 적절한 도구를 사용하여 파일 시스템을 확장 할 수 있습니다.

resize2fs /dev/sda3

주의 : sgdisk 실행은 파괴적 일 수 있습니다. 적절한 백업 절차가 있는지 확인하십시오.


대박! 특히 partprobe단계에 감사드립니다 -마운트 된 파티션으로 파티션 테이블을 변경할 때 항상 재부팅해야한다고 생각했습니다.
piit79

파티션을 삭제하고 다시 만들면 파티션에 대한 새로운 PARTUUID가 생성되므로 fstab / GRUB / etc가 멀티 디스크 설정에서 파티션을 안정적으로 식별 할 수있는 유일한 신뢰할 수 있고 파일 시스템 독립적 인 방법입니다.
Teo Klestrup Röijezon

5

다음은 자동화 된 도구가 한 번의 실행으로 온라인에서 파티션 크기를 조정하는 데 사용하는 예입니다.

sgdisk -d 1 -n 1 : 2048 : 0 -c 1 : -u 1 : E485F29F-A1F4-4953-9DD8-799EAEA0119B -t 1 : 0700 / dev / xvda

sgdisk 명령에 대한 옵션 목록은 다음과 같습니다.

  • -d 1 삭제의 첫 번째 파티션
  • -n 1 : 2048 : 0 은 시작 섹터 2048로 새 파티션 "번호 1"을 생성한다고 말합니다. 종료 섹터 = "0"은 "이 파티션에 사용 가능한 모든 공간 사용"을 의미합니다.
  • -u 는 해당 파티션에 고유 한 guid를 설정합니다 (GPT 파티션에만 해당). GUID를 임의의 값으로 설정하려면 'R'을 사용할 수 있습니다. gdisk /dev/xvda; p동일한 uid를 재사용하기 위해 출력을 통해 현재 파티션의 id를 얻을 수도 있습니다.
  • -t 1 : 0700은 기본적으로 첫 번째 파티션이 유형 코드 '0700'임을 의미합니다.

/ dev / xvda는 다시 파티션 한 디스크입니다.

따라서 즉시 해당 파티션에서 새 파티션을 삭제하고 작성합니다.

추신. 형식 코드 '0700'에 대한 몇 가지 참고 사항 남자 SGDISK (8)

   -t, --typecode=partnum:{hexcode|GUID}
          Change a single partition's type  code.  You  enter  the  type  code  using  either  a  two-byte  hexadecimal  number,  as 

앞에서 설명한 EBD0A0A2-B9E5-4433-87C0-68B6B72699C7과 같은 완전히 지정된 GUID 값입니다.

여기 수단 '0700'무엇에 대한 발견을 가장 최선의 방법으로 설명하기 - http://www.rodsbooks.com/gdisk/walkthrough.html

"하지만 디스크에 FAT 파티션이 있다고 생각했습니다!" 실제로 그렇습니다. Windows는 FAT 또는 NTFS 등 모든 데이터 파티션에 단일 GUID 코드를 사용합니다. 과거에는 Linux에서 데이터 파티션에 대해 동일한 코드가 사용되었습니다. (이것에 대한 자세한 내용은 ....) 따라서이 경우 몇 가지 다른 MBR 코드가 모두 단일 GPT GUID 코드로 변환됩니다. GPT fdisk는 이들 모두에 대해 0x0700 코드 (또는보다 정확하게는 EBD0A0A2-B9E5-4433-87C0-68B6B72699C7)를 임의로 임의로 사용합니다.

필자의 경우 Linux ext4 파티션이라고 생각하지만 파티션의 유형 코드는 파일 시스템 유형을 의미하지 않으므로 '0700'은 sgdisk의 포괄 유형처럼 보입니다. 적어도 내가 본 경우.

PPS. partprobe시스템을 재부팅하지 않고 커널이 파티션 변경 사항을 인식하도록 커널 을 실행해야 할 수도 있습니다.


'p'는 디스크의 UUID를 보여줍니다. 'i'는 파티션의 UUID를 보여줍니다.
Keith

2

나는 여기에 몇 가지 답변과 의견을 요약하고 있습니다.

parted마운트 된 파티션의 변경을 거부합니다. gdisk작업을 수행하지만 표준 RHEL 또는 CentOS 저장소에는 없습니다. 그러나 EPEL 저장소에 있습니다.

사용중인 디스크에서 파티션을 변경하면 커널이 변경 내용을 등록하지 못할 수 있습니다. 즉, 사용 일 경우 partprobe, partx또는 재부팅.


1

논리 볼륨의 크기 조정에 대해 질문하고 있습니까? 내가하는 방법은 다음과 같습니다.

vgextend vgname /dev/sdb3
lvextend -L +3T /dev/mapper/location
resize2fs /mount/point

OR (xfs) :

xfs_growfs /mount/point -D <bytes>

그는 아마도 ext2 / ext3 / ext4를 사용하지 않을 것입니다. 그렇지 않으면 resize2fs가 즉시 작동해야합니까?

1
@Antony 리 : 당신이 전달하는 경우 -rlvextend, 다음은 호출 resize2fs당신을 위해.
jmtd

0

fdisk 파티션이 마지막 파티션이고 파티션의 시작 부분이 움직이지 않는 경우 일반적으로 여전히 사용할 수 있으며이 작업을 수행 할 수 있습니다.

그러나 이것은주의해서 수행해야하는 위험한 작업입니다. 백업하십시오!

ec2-user@ip-10-0-20-15 ~]$ sudo fdisk /dev/nvme0n1

Welcome to fdisk (util-linux 2.30.2).
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/nvme0n1: 24 GiB, 25769803776 bytes, 50331648 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: gpt
Disk identifier: 70E4A118-98BD-4BF4-8DF9-6926A964902A

Device           Start      End  Sectors Size Type
/dev/nvme0n1p1    4096 16777182 16773087   8G Linux filesystem
/dev/nvme0n1p128  2048     4095     2048   1M BIOS boot

Partition table entries are not in disk order.

Command (m for help): d
Partition number (1,128, default 128): 1

Partition 1 has been deleted.

Command (m for help): n
Partition number (1-127, default 1): 1
First sector (34-50331614, default 4096):
Last sector, +sectors or +size{K,M,G,T,P} (4096-50331614, default 50331614):

Created a new partition 1 of type 'Linux filesystem' and of size 24 GiB.
Partition #1 contains a xfs signature.

Do you want to remove the signature? [Y]es/[N]o: n

Command (m for help): p

Disk /dev/nvme0n1: 24 GiB, 25769803776 bytes, 50331648 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: gpt
Disk identifier: 70E4A118-98BD-4BF4-8DF9-6926A964902A

Device           Start      End  Sectors Size Type
/dev/nvme0n1p1    4096 50331614 50327519  24G Linux filesystem
/dev/nvme0n1p128  2048     4095     2048   1M BIOS boot

Partition table entries are not in disk order.

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).

[ec2-user@ip-10-0-20-15 ~]$ sudo partprobe

[ec2-user@ip-10-0-20-15 ~]$ sudo fdisk -l
Disk /dev/nvme0n1: 24 GiB, 25769803776 bytes, 50331648 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: gpt
Disk identifier: 70E4A118-98BD-4BF4-8DF9-6926A964902A

Device           Start      End  Sectors Size Type
/dev/nvme0n1p1    4096 50331614 50327519  24G Linux filesystem
/dev/nvme0n1p128  2048     4095     2048   1M BIOS boot

Partition table entries are not in disk order.

[ec2-user@ip-10-0-20-15 ~]$ sudo xfs_growfs /
meta-data=/dev/nvme0n1p1         isize=512    agcount=4, agsize=524159 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1 spinodes=0
data     =                       bsize=4096   blocks=2096635, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2096635 to 6290939
```
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.