1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

growpart エラー "NOCHANGE: partition 1 is size 4294965248. it cannot be grown" について

Posted at

はじめに

今回、EBS のボリューム拡張を行おうとしたところエラーが発生してしまったので、その内容についてメモしておこうと思います。

エラー内容

NOCHANGE: partition 1 is size 4294965248. it cannot be grown

実際に実行した際の状況は以下になります。

$ sudo growpart /dev/nvme0n1 1
NOCHANGE: partition 1 is size 4294965248. it cannot be grown

このエラーは、growpart を実行した際にコマンド側で既にパーティションが最大サイズに達していると判断し、拡張が行われなかったことを意味します。

調査

エラーだけでは原因がわからず、状況を確認するために以下の調査を実施しました。

1. 認識している EBS ボリューム容量確認

まずは EBS ボリュームの確認です。
lsblk コマンドで確認できますが、容量に余裕があります。

$ lsblk
NAME        MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1     259:0    0   3T  0 disk 
└─nvme0n1p1 259:1    0   2T  0 part

2. パーティションテーブルの種類確認

まず、GPT または MBR かを確認します。

$ sudo parted /dev/nvme0n1 print
モデル: NVMe Device (nvme)
ディスク /dev/nvme0n1: 3221GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ: 

番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
 1    1049kB  2199GB  2199GB  primary  xfs               boot

パーティションテーブルは msdos となっているので、パーティションテーブル形式は MBR であることがわかりました。
また、MBR の最大パーティションサイズは 2TiB ≒ 2.199TB です。
そのため、今回は最大パーティションサイズに到達しているのが原因とわかりました。

3. 実際のディスクサイズとパーティションの境界確認

念の為 fdisk でも確認してみます。

$ sudo fdisk -l /dev/nvme0n1

Disk /dev/nvme0n1: 3221.2 GB, 3221225472000 bytes, 6291456000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000b956b

  デバイス ブート      始点        終点     ブロック   Id  システム
/dev/nvme0n1p1   *        2048  4294967295  2147482624   83  Linux

以下はブロック数とセクター数での上限をまとめたものです。

表示値 単位 バイト換算 備考
2147482624 ブロック数(1KiB単位) 2147482624 × 1024 = 2199023254528 bytes ≒ 2TiB(1024³)
4294967295 セクター数(512B単位) 4294967295 × 512 = 2199023255040 bytes ≒ 2TiB(MBRの上限)

別の視点からも、完全に限界まで使っていることが確認できました。

対処法

今回発生したエラーから、このままではボリュームの拡張が難しいとわかりました。
その際の対処として2つ考えられます。

方法1: GPTに変換して再パーティション

この方法はディスクの再フォーマットが必要になるため、全データ削除されてしまうことに注意です。
まだ利用していないボリュームであれば良いですが、運用中のシステムでは推奨されません。

とりあえず、対応の流れは以下になります。

  1. データのバックアップ
  2. gdisk 等を用いて MBR → GPT に変換
  3. パーティションを1つで再作成し、xfs で再フォーマット
  4. / に戻す場合は、ルートパーティションの再インストールが必要

方法2: 空き領域を別パーティションにして /data などに割り当てる

非破壊的で安全に拡張できそうです。
以下、手順になります。

1. 空き領域に新しいパーティションを作成

$ sudo fdisk /dev/nvme0n1
  • n(新しいパーティション作成)
  • パーティション番号:2
  • 開始セクタ:既存の終了セクタ + 1(例:4294967296)
  • 終了セクタ:デフォルト(Enter)
  • w(書き込みして終了)

2. フォーマット

$ sudo mkfs.xfs /dev/nvme0n1p2

3. マウントディレクトリ作成

$ sudo mkdir /data

4. マウント

$ sudo mount /dev/nvme0n1p2 /data

5. 永続化(/etc/fstab への登録)

$ echo '/dev/nvme0n1p2 /data xfs defaults 0 0' | sudo tee -a /etc/fstab

以上で完了です。

わかったこと

今回のエラーを調査してわかったポイントです。

  • 現在の環境(MBR + / マウント済)では / を拡張できない
  • 別パーティション /dev/nvme0n1p2 を作り /data などで運用するのが現実的かつ安全な方法

おわりに

MBR2TB までしか拡張できないということを今回初めて知りました。
あまり機会は少ないですが、今後 EBS に大容量のデータを保存する際は注意しようと思います。


参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?