web-dev-qa-db-ja.com

LinuxでのGPTパーティションのライブサイズ変更

Linuxでは、ライブファイルシステムでも、fdiskを使用してMBRパーティションのサイズを変更してから、resize2fs/pvresize/...(fsの種類に応じて)を発行して、新しい領域を割り当てました。

最近、XenとGPTパーティションを使用していますが、残念ながらpartedはマウントされたパーティションのオンザフライでのサイズ変更を許可していないようで、実際には不平を言うでしょう。

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

私はresizeコマンドとrm + mkpartの組み合わせの両方を試してみましたが、どちらもマウントされているパーティションについて不平を言うでしょう。

どうやってやるの?

12
cyberz

これを行う最も安全な方法は、緊急メディア(ライブCDなど)を使用して起動し、GPartedを使用することです。これにより、パーティションとそれに含まれるファイルシステムの両方のサイズが変更されます。ただし、これはパーティションが現在使用されていない場合にのみ機能します。

ただし、ダウンタイムが許されない場合は、gdiskの代わりにpartedを使用してみてください。サイズを変更するパーティションを削除し、fdiskで行ったのと同じように、同じ場所に同じ場所に新しいパーティションを作成する必要があります。カーネルは変更を登録しない可能性がありますが、gdiskは使用中のディスクを処理する用意があります。その場合、partprobeまたはkpartxを使用してカーネルに新しいパーティションテーブルを受け入れさせるか、それが機能しない場合はコンピューターを再起動する必要があります。 (これはすべてfdiskを使用するのとかなり似ているはずです。)

12
Rod Smith

これは通常、より新しい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の実行は破壊的です。適切なバックアップ手順があることを確認してください。

10
Nils Meyer

自動ツールがオンラインでパーティションのサイズを変更するために使用する例を以下に示します。

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は、新しいパーティション「番号1」を作成し、開始セクターは2048です。終了セクター=「0」は、「すべて使用」を意味しますこのパーティションに利用可能なスペース
  • -uはそのパーティションに一意のGUIDを設定します(これはGPTパーティションに固有です)。 GUIDに 'R'を使用してランダムな値に設定できます。gdisk /dev/xvda; p出力から現在のパーティションのIDを取得して同じuidを再利用することもできます
  • -t 1:0700基本的に、最初のパーティションがタイプコード「0700」であることを意味します。

/ dev/xvdaは、パーティションを再作成したディスクです。

そのため、すぐにその場所に新しいパーティションを削除して作成します。

PS。タイプコード「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 

前に説明した、または完全指定のGUID値(EBD0A0A2-B9E5-4433-87C0-68B6B72699C7など)。

ここで「0700」が何を意味するかについての最良の説明が見つかりました- http://www.rodsbooks.com/gdisk/walkthrough.html

「でも待ってください」とあなたは言う、「ディスクにはFATパーティションがあると思った!」確かにそうです。 Windowsは、FATまたはNTFSのすべてのデータパーティションに単一のGUID=コードを使用します。これまで、同じコードがLinuxのデータパーティションに使用されていました。詳細は、この後すぐに説明します。 ...)したがって、この場合、いくつかの異なるMBRコードはすべて1つのGPTに変換されますGUIDコード。GPTfdiskは、やや恣意的に0x0700コード(より正確には、EBD0A0A2-B9E5)を使用します-4433-87C0-68B6B72699C7)これらすべての場合。

私の場合、それはLinux ext4パーティションだったと思いますが、パーティションのタイプコードはファイルシステムのタイプを意味しないため、「0700」はsgdiskのキャッチオールタイプのように見えます。少なくとも私が見た場合には。

PPS。システムを再起動せずに、パーティションの変更をカーネルが認識できるようにするには、partprobeを実行する必要がある場合があります。

5
Tagar

私はここでいくつかの回答とコメントを要約しています:

partedは、マウントされたパーティションの変更を拒否します。 gdiskが代わりに機能しますが、標準のRHELまたはCentOSリポジトリにはありません。 [〜#〜] epel [〜#〜] リポジトリにありますが。

使用中のディスクのパーティションを変更すると、カーネルが変更を登録できなくなる可能性があることに注意してください。その場合は、partprobepartxを使用するか、再起動してください。

2
jornane

論理ボリュームのサイズ変更について質問しますか?ここに私がそれをする方法があります:

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

または(xfs):

xfs_growfs /mount/point -D <bytes>
1
jredd

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
```
0
Daniel Farrell