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


12

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組み合わせの両方を試しましたが、どちらもマウントされているパーティションについて不平を言うでしょう。

どうやってやるの?


RHEL / CentOSですぐに利用できる方法が高く評価されます
cyberz

回答:


12

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

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


見栄えは良いですが、CentOSにはデフォルトでは含まれていません。これ以上標準的な方法はありますか?
つまり、Redhatの

2
CentOSに付属しているツールで、この仕事を行うことはできません。必要なことを行うには、CentOSリポジトリから移動する必要あります。他のほとんどすべてのディストリビューション(Fedoraを含む)gdiskがリポジトリに含まれていることに注意してくださいgdisk。RHEL(およびCentOS)の次のバージョンに含まれると聞いています。
Rod Smith

答えとコメントをありがとう、それはまさに私が探していた情報です
cyberz

1
gdiskEPELで利用できます。
jornane 2014

私は両方を試してみました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 2018

パーティションを破棄して再作成すると、パーティションの新しいPARTUUIDが生成されることに注意してください。これは、マルチディスクセットアップでfstab / GRUB / etcがパーティションを確実に識別するための、信頼性が高く、ファイルシステムに依存しない唯一の方法です。
Teo KlestrupRöijezon18年

5

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

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 

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

ここでの意味「0700」何のために発見された最良の説明- http://www.rodsbooks.com/gdisk/walkthrough.html

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

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

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


「p」は、ディスクのUUIDを表示します。'i'はパーティションのUUIDを表示します。
キース

2

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

partedマウントされたパーティションの変更を拒否します。 gdiskあなたのために仕事をしますが、それは標準のRHELやCentOSリポジトリにはありません。ただし、EPELリポジトリにあります。

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


1

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

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

または(xfs):

xfs_growfs /mount/point -D <bytes>

彼はおそらくext2 / ext3 / ext4を使用していません。そうでない場合、resize2fsはその場で機能しますか?

1
@Antony Lee:に渡し-rlvextend場合は、呼び出さresize2fsれます。
jmtd 2015年

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.