私のインスタンスは何年も実行されていて、突然6月1日に応答を停止しました。再起動しようとしたが起動しない。システムログにエラーが発生しました: https://Pastebin.com/rSxr1kLs
Linuxバージョン2.6.32-642.11.1.el6.x86_64([email protected])(gccバージョン4.4.7 20120313(Red Hat 4.4.7-17)(GCC))#1 SMP金11月18日19:25:05 2016年UTC
カーネルコマンドライン:root =/dev/xvde ro LANG = en_US.UTF-8 KEYTABLE = us
VFS:ルートデバイス「xvde」またはunknown-block(0,0)を開けません
正しい「root =」ブートオプションを追加してください。利用可能なパーティションは次のとおりです。
カーネルパニック-同期していません:VFS:ルートfsをunknown-block(0,0)にマウントできません
ドキュメントに従って、EBSボリュームをデタッチして_/dev/sda1
_として再アタッチしようとしました: https://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html#FilesystemKernel
ただし、エラー_Error attaching volume: Invalid value '/dev/sda1' for unixDevice. Attachment point /dev/sda1 is already in use
_が発生し、添付できませんでした。 _/dev/sda
_として再接続しましたが、まだ起動せず、システムログにエラーが表示されます。
新しいインスタンスをまったく同じアベイラビリティーゾーンで起動し、EBSボリュームを_/dev/sdf
_としてアタッチできました。インスタンス内では_/dev/xvdj
_として表示されます。 _mount /dev/xvdj /xvdj
_でマウントしました。 _grub.conf
_ファイルを見ることができます:
_[root@ip-172-31-4-249 grub]# cat /xvdj/boot/grub/grub.conf
default=0
timeout=1
title CentOS (2.6.32-642.11.1.el6.x86_64)
root (hd0)
kernel /boot/vmlinuz-2.6.32-642.11.1.el6.x86_64 root=/dev/xvde ro crashkernel=auto LANG=en_US.UTF-8 KEYTABLE=us
title CentOS (2.6.32-504.30.3.el6.x86_64)
root (hd0)
kernel /boot/vmlinuz-2.6.32-504.30.3.el6.x86_64 root=/dev/xvde ro crashkernel=auto LANG=en_US.UTF-8 KEYTABLE=us
initrd /boot/initramfs-2.6.32-504.30.3.el6.x86_64.img
title CentOS (2.6.32-504.3.3.el6.x86_64)
root (hd0)
kernel /boot/vmlinuz-2.6.32-504.3.3.el6.x86_64 root=/dev/xvde ro crashkernel=auto LANG=en_US.UTF-8 KEYTABLE=us
initrd /boot/initramfs-2.6.32-504.3.3.el6.x86_64.img
title CentOS (2.6.32-504.el6.x86_64)
root (hd0)
kernel /boot/vmlinuz-2.6.32-504.el6.x86_64 root=/dev/xvde ro crashkernel=auto LANG=en_US.UTF-8 KEYTABLE=us
initrd /boot/initramfs-2.6.32-504.el6.x86_64.img
title CentOS (2.6.32-431.29.2.el6.x86_64)
root (hd0)
kernel /boot/vmlinuz-2.6.32-431.29.2.el6.x86_64 root=/dev/xvde ro crashkernel=auto LANG=en_US.UTF-8 KEYTABLE=us
initrd /boot/initramfs-2.6.32-431.29.2.el6.x86_64.img
title CentOS (2.6.32-431.23.3.el6.x86_64)
root (hd0)
kernel /boot/vmlinuz-2.6.32-431.23.3.el6.x86_64 root=/dev/xvde ro crashkernel=auto LANG=en_US.UTF-8 KEYTABLE=us
initrd /boot/initramfs-2.6.32-431.23.3.el6.x86_64.img
_
これは、実行中のインスタンスの_grub.conf
_と比較します。
_[root@ip-172-31-4-249 grub]# cat /boot/grub/grub.conf
default=0
timeout=1
title CentOS-6-x86_64-20130527-03 2.6.32-358.6.2.el6.x86_64
root (hd0)
kernel /boot/vmlinuz-2.6.32-358.6.2.el6.x86_64 root=/dev/xvde ro
initrd /boot/initramfs-2.6.32-358.6.2.el6.x86_64.img
_
最初のオプションにinitrd
行がないことは重要ですか?
_/dev/sda
_を使用してEBSボリュームを新しいインスタンスにマウントしようとしましたが、同じエラーKernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
でまだ起動しません。
CentOS 6
[イメージ]> [AMI]> [プライベートイメージ]> [インスタンスが開始されたイメージを選択]> [起動]に移動して、新しいインスタンスを作成しました。私は米国または地域だけでなく、まったく同じアベイラビリティーゾーンで起動しましたが、2a、2b、2cも一致する必要があります。新しいインスタンスを停止しました。 EBSボリュームを古いインスタンスから切断しました。 EBSボリュームを/dev/sdf
の新しいインスタンスに再接続しました。新しいインスタンスを開始しました。 EBSボリュームは/dev/xvdj
としてインスタンス内に表示されるため、mkdir /xvdj; mount /dev/xvdj /xvdj
でマウントしました。 /xvdj/boot/grub/grub.conf
を編集し、default=0
をdefault=1
に変更しました。ファイルを保存し、新しいインスタンスを停止し、EBSボリュームを古いインスタンスに再接続して起動しました。古いインスタンスでyum update
を実行し、/boot/grub/grub.conf
を再確認し、再起動することを再確認しました。
また、CentOSカーネルの更新に関する次の情報も確認しました。 カーネル更新後にgrub.confにinitrdパスがない
yum update
を実行した後、initrd
なしでgrub.conf
に2エントリがあったことに気付きました。 # yum reinstall kernel.x86_64
を実行すると、これを修正できます。
これと同じ問題が何度かあり、EBSスナップショットバックアップからインスタンスを復元することで解決する必要がありました。今日、私は同じ問題を抱えていて、バックアップから復元する必要なくそれを解決することにしました。私は次のことをしました:
mount /dev/xvdh /xvdhmount
)mv /xvdhmount/boot /xvdhmount/boot-backup
これが役に立てば幸いです!
私も!
根本的な原因は、中断されたyum upgrade
と仕事をしている部下のスタッフが再接続し、yum-complete-transactions
を実行してすべてを完了したことです。
ただし、何かが/boot/initrd....newver....
にファイルを書き込まなかったため、grub2.cfg
の最新のカーネルエントリにinitrd=/....
行が完全に欠落している可能性があります。
クイックフィックスは、ブートディスクボリュームを別のインスタンスに再接続してマウントし、/mountpoint/etc/grub2.cfg
を編集して、インスタンスが古いバージョンのカーネルを起動するようにすることでした。次に、再接続を解除して、元のインスタンスの/dev/sda1
に再接続します。
注最近、centosブートボリュームを別のcentosマシンに接続するのは困難です。これは、UUIDがルートボリュームで同じであるためです。回避策は、CentOSディスクフィックスアップ用のDebianなど、別のOSを一時マシンとして使用することです。
再起動したら、yum reinstall kernel*
を実行して不足している手順を繰り返し、完了時に再度再起動して、今回が正しく再起動し、最新のカーネル上にあることを確認します。
同様の問題に遭遇しましたが、インスタンスの起動とAMIの作成ではAWS EC2のデフォルトが異なります。最初のケースではハードウェア仮想化(HVM)がデフォルトの選択ですが、イメージ作成のデフォルトは準仮想化(PV)です。
EBSボリュームのスナップショットを作成して新しいAMIを作成することにより、アベイラビリティーゾーン間でEC2インスタンスを移動しようとしたときに私はこれに遭遇しました。
tl; dr:カスタマイズされたAMIから起動するときにHVMを選択するだけで、インスタンスは正常に起動します。
CentOSインスタンスでも同様の問題がありました。 このAWSサポート記事 は、かなり良い概要を提供します。これが私と私の問題を解決する方法です。
/dev/sda1
_ディスクを切り離します/dev/sdp
_として新しいEC2インスタンスに接続します/dev/sdp
_を_/data
_にマウントします。次に、以前のカーネルに戻りたいと思いました。 CentOS wiki の指示は役に立ちました:
grep "^menuentry" /data/boot/grub2/grub.cfg | cut -d "'" -f2
_ですべてのGrubエントリを一覧表示しますCentOS Linux (3.10.0-957.12.1.el7.x86_64) 7 (Core)
でした。grub2-set-default --boot-directory /data/boot/ 'CentOS Linux (3.10.0-957.12.1.el7.x86_64) 7 (Core)'
でブートのデフォルトを設定します次に、新しいEC2インスタンスをシャットダウンし、ボリュームをデタッチして、元のインスタンスに(_/dev/sda1
_に)接続し、初期インスタンスを起動します。
カーネルがアップグレードされて、ルートファイルシステムを理解できなくなったようです。あなたの最善の策は、新しいノードを作成し、古いものからEBSボリュームをマウントすることです非ルート/非ブートとしてデバイスで、重要なデータを転送します。