最近、ホストのコントロールパネルを使用して、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と表示しているため、サイズの変化を認識しています。
私はこれをかなり簡単に解決することができました。 partedをインストールしましたが、実行すると、パーティションテーブルがディスク全体をカバーしていないことが通知されたため、Fix/Cancel
にFix
と応答しました。どうやら、Sudo fdisk /dev/vda
を使用してパーティションをフルサイズに変更できるため、これでうまくいきましたが、その後、変更を適用するためにSudo resize2fs /dev/vda3
を実行する必要がありました。
問題は、保護MBR(PMBR)が小さすぎることです。以下を使用して、保護MBRを変更できます。
x
追加機能M
保護/ハイブリッドMBRに入るにはp
では、保護MBRを表示できます)r
メインメニューに戻ります(まだ保護MBRモードです!)d
は、誤ったサイズの保護MBRパーティションを削除しますn
新しいパーティションを作成し、4xenter デフォルト設定(プライマリ、パーティション番号1、フルサイズ)を受け入れるt
およびee
x
追加機能M
保護/ハイブリッドMBRモードを終了するにはr
はメインメニューに戻ります(現在は再びGPTモードです)w
書き込むこれで、GPT PMBRサイズの不一致を修正できました。
Disklabelの問題を修正するには、O
を使用してパーティションテーブルをダンプし、エクスポートされたスクリプトのlast-lbaをfdisk
で報告されているディスクサイズからマイナス34(セカンダリGPTの場合)に変更する必要がありました。次に、I
を使用してスクリプトを再インポートしました。
これは、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を終了し、標準の手順に従ってファイルシステムのサイズを変更します(例:e2fsck -f
、次にresize2fs
(ext4の場合)。生のディスクイメージファイルで作業している場合(つまり、QEMUの場合)、kpartx -av disk.img
を実行して、パーティションのループデバイスを取得し、e2fsck
およびresize2fs
これらのループデバイス。
データを失うことがないように、「w」を押してパーティションテーブルに変更を書き込まずにパーティションvda3を削除してから、新しいセクターサイズでパーティションを再作成する必要がある場合があります。以下を実行する前に、パーティションをアンマウントしてe2fsckを実行する必要がある場合があります。
例:fdisk/dev/vda
Enter p
Delete the partition 'd' (Partition number is 3)'
Create new partition 'n'
Select the Start sector:
Select the end sector:(New Size)
Write the changes to the disk:
Update the partition table: (partprobe /dev/vda)
#resize2fs /dev/vda3
#mount the partition