私はAmazon Linux 1 AMIルートボリュームのサイズを、以下の手順で縮小しようとしています。このドキュメント(失敗した後にいくつかの変更を加えた)、次の手順で継続的にエラーが発生します。
$ sudo grub-install --root-directory=/mnt/new-volume/ --force /dev/xvdf
これはレガシーGRUB(バージョン0.97-94.32.amzn1
)です
最初は次のエラーが発生しました:
Unrecognized option `--force'
その結果、--force
旗を削除して次のようにしました。
$ sudo grub-install --root-directory=/mnt/new-volume/ /dev/xvdf
その結果、次のような結果が生まれました。
/dev/xvdf does not have any corresponding BIOS drive
私はpartedまたはfdiskを使用してBIOSブートパーティションを作成しようとしました。このスレッドしかし、どの方法でも同じ失敗に終わりました。私が使用している特定のインスタンス タイプ (r5.large) では、lsblk 出力に示されているように、ドライブの名前が対応する「nvme*」名に変更されることに注意してください。
nvme0n1 259:3 0 200G 0 disk
├─nvme0n1p1 259:4 0 200G 0 part /
└─nvme0n1p128 259:5 0 1M 0 part
nvme1n1 259:0 0 40G 0 disk
├─nvme1n1p2 259:2 0 40G 0 part /mnt/new-volume
└─nvme1n1p1 259:1 0 1M 0 part
エラーメッセージに関連する記事が1件見つかりましたLinux の質問投稿しかし、これで問題が解決したわけではありません。パーティションに chroot して試してみましたが、同じ問題が発生し、中間の Amazon Linux 1 または Amazon Linux 2 ホストを使用してみましたが、問題は引き続き発生します。
Amazon Linux 1 でルートボリュームのみを使用した場合にも同じ問題が発生することに注意してください。
grub-install /dev/sda OR grub-install /dev/sda1
grub
しかし、新しいディスクはセカンダリドライブとしてリストされていない限り起動できません。レガシーGRUBマニュアルインストールも失敗しました。新しい小さいルート ボリュームを作成する手順が間違っているのでしょうか、それとも上記の手順で何か見落としているのでしょうか。必要に応じて詳細を提供できます。
答え1
同じマニュアルに従い、それがうまくいったと思います:
Ubuntu 20では/boot/grub/grub.cfg
UUIDが間違っていたので、ここで修正する必要がありました。/etc/default/grub.d/40-force-partuuid.cfg
そして、新しいものを再生成します/boot/grub/grub.cfg
。grub-mkconfig -o ...
さらに、新しい EBS ボリュームをパーティション分割しましたが、あなたも同じことをしたようです:
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 411647 409600 200M BIOS boot
/dev/nvme0n1p2 411648 104857566 104445919 49.8G Linux filesystem
ただし、それが必要だったかどうかはわかりません。
答え2
使用しているブロックデバイスを正しく指定する必要がありますネヴミーデバイスの代わりにテキスト
sudo grub-install --root-directory=/mnt/new-volume/ --force /dev/nvme1n1
答え3
とりあえず、次の操作を実行して Amazon Linux 1 の回避策を見つけましたが、さらに調査する必要がある可能性があります。
同じ AMI を使用して新しいインスタンスを起動しますが、ルート ボリュームのサイズを希望のサイズに変更します。
新しいインスタンスを停止し、小さい方の EBS ボリュームをデタッチして、大きい方のルート ボリュームがアタッチされている現在のインスタンス (停止状態) にアタッチします。
現在のインスタンスを起動します (小さい方の EBS ボリュームがセカンダリ ドライブとして接続されます)。
ルート ボリュームの内容をコピーするには、以下を使用します ( にマウントされていると仮定します
/mnt/new-volume
)。$ rsync -axv / /mnt/新しいボリューム
現在のインスタンスを停止し、両方のボリュームをデタッチします。
小さい新しいルート ボリュームをインスタンスに接続します。
インスタンスを起動する
これはそれほどエレガントな回避策ではありませんが、元のルート ボリュームがどのように作成され、そこから起動されるかが明確ではないため、十分でした。