
最近、ホストのコントロール パネルを使用して、VPS を 50 GB SSD から 300 GB SSD にサイズ変更しました。新しいスペースをすべて使用できるように、現在、fdisk を使用してメイン パーティションのサイズを変更しようとしています。ただし、fdisk の起動時に警告が表示されます。
GPT PMBR size mismatch (104857599 != 629145599) will be corrected by w(rite).
GPT PMBR size mismatch (104857599 != 629145599) will be corrected by w(rite).
50GB から 300GB になったので、以前のサイズの 6 倍になっているのは明らかです。そこで、ヒントに従って表を書くことにしました...
Command (m for help): w
GPT PMBR size mismatch (104857599 != 629145599) will be corrected by w(rite).
fdisk: failed to write disklabel: Invalid argument
.. 動作しません。多くの検索クエリにもかかわらず、このエラーの原因はどこにも見つかりません。私は LVM を使用していませんが、パーティション テーブルは次のようになります。
Disk /dev/vda: 300 GiB, 322122547200 bytes, 629145600 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: 30D92031-0C13-42FF-AC16-D34F36DD3907
Device Start End Sectors Size Type
/dev/vda1 2048 32767 30720 15M BIOS boot
/dev/vda2 32768 16809983 16777216 8G Linux swap
/dev/vda3 16809984 104857566 88047583 42G Linux filesystem
ディスクが 300GiB として表示され、サイズの変更が認識されていることに注意してください。
答え1
私はこれをかなり簡単に解決することができました。parted をインストールし、それを実行すると、パーティション テーブルがディスク全体をカバーしていない (当然) というメッセージが表示され、 とFix/Cancel
応答するように求められました。 で応答しましたFix
。 でパーティションをフル サイズに変更できたので、どうやらこれでうまくいったようですが、その後、変更を適用するには をsudo fdisk /dev/vda
実行する必要がありました。sudo resize2fs /dev/vda3
答え2
これは、GPT パーティションを拡張しようとしたときにうまくいった方法です。いつものように、パーティション テーブルを変更するときは、計画どおりに進まなかった場合に備えてバックアップが不可欠です。
まず、すべての fdisk が同じように作られているわけではありません。Ubuntu 18.04 で私が使用している fdisk のバージョンは次のとおりです。
$ fdisk -v
fdisk from util-linux 2.31.1
fdisk を起動します。 'p' でパーティション テーブルを印刷し、既存のパーティション テーブルが GPT であることを確認します。
Disklabel type: gpt
パーティション情報をコピーして別のウィンドウに貼り付けると、開始セクターが正確に同じパーティションを再作成できます。
「g」キーを押して、古い GPT パーティション テーブルを新しい GPT パーティション テーブルに置き換えます。
もう一度「p」キーを押して新しいテーブル情報を印刷し、サイズが大きくなっていることを確認します。
パーティションを再作成するには、「n」を押します。最後のパーティションを除き、すべてのパーティションは開始セクターと最終セクターが正確に同じで再作成する必要があります。最後のパーティションは開始セクターが同じである必要がありますが、終了セクターは大きくすることができます。
パーティションにファイルシステムがある場合は、次のように表示されます。
Partition #1 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: N
ファイルシステムの署名を保持する場合は、「N」で応答します。
fdisk プロンプトに戻り、もう一度「p」と入力してテーブルを確認し、すべてが正常に動作していることを確認します。
変更を書き込む(コミットする)には、「w」と入力します。
そこから、fdisk を終了し、標準の手順に従ってファイルシステムのサイズを変更します (例: ext4 のe2fsck -f
場合resize2fs
)。raw ディスク イメージ ファイル (QEMU 用など) で作業している場合は、 を使用してパーティションのループ デバイスを取得し、それらのループ デバイスで とをkpartx -av disk.img
実行できます。e2fsck
resize2fs
答え3
問題は、保護 MBR (PMBR) が小さすぎることです。次の方法で保護 MBR を変更できます。
x
追加機能M
保護/ハイブリッドMBRに入る- (
p
保護されたMBRを表示できます) r
メインメニューに戻ります(まだ保護 MBR モードです)。d
間違ったサイズの保護MBRパーティションを削除するn
新しいパーティションを作成するには 1 回、enterデフォルト設定 (プライマリ、パーティション番号 1、フルサイズ) を受け入れるには4 回t
タイプをee
GPTに変更するx
追加機能M
保護/ハイブリッドMBRモードを終了するr
メインメニューに戻る(再びGPTモードになります)w
書く
これにより、GPT PMBR サイズの不一致を修正できました。
ディスクラベルの問題を修正するには、 を使用してパーティション テーブルをダンプしO
、エクスポートされたスクリプトの last-lba を、 で報告されたディスク サイズからfdisk
34 (セカンダリ GPT 用) を引いた値に変更する必要がありました。次に、 を使用してスクリプトを再インポートしましたI
。
答え4
gdisk で問題を修正しました。実行したことは次のとおりです。
sudo fdisk --list
GPT PMBR size mismatch (41943039 != 62914559) will be corrected by w(rite).
Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 62D6A220-B955-44BE-9730-CC89FE5CA928
# Naive fix attempt:
sudo fdisk /dev/sda
w
# ^^ fails with:
# GPT PMBR size mismatch (62914559 != 83886079) will be corrected by w(rite).
# fdisk: failed to write disklabel: Invalid argument
# try (because it is a GPT disk?)
viradmin@instance-2:~$ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): ?
b back up GPT data to a file
c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu
Command (? for help): w
Warning! Secondary header is placed too early on the disk! Do you want to
correct this problem? (Y/N): y
Have moved second header and partition table to correct location.
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.
# then
sudo reboot
その後、私は次のことも行いました。これはGoogle CloudのUbuntuマシン上で実行されていたためです(ガイドに従ってhttps://slacker.ro/2019/07/17/how-to-increase-google-cloud-virtual-machine-disk-size/):
sudo apt install -y cloud-guest-utils
sudo growpart /dev/sda 1
sudo resize2fs /dev/sda1
stage@instance-2:/$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 30308240 16684136 13607720 56% /
# fixed:
sudo fdisk --list
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 62D6A220-B955-44BE-9730-CC89FE5CA928
Device Start End Sectors Size Type
/dev/sda1 227328 83886046 83658719 39.9G Linux filesystem
/dev/sda14 2048 10239 8192 4M BIOS boot
/dev/sda15 10240 227327 217088 106M EFI System
この後、ディスクとパーティションは新しいサイズに適切に拡張されました。
これが役に立つことを願っています。