Google Cloud Platform上の コンピュートエンジンのインスタンス、LinuxサーバーをWebmin から、約60のソフトウェアのアップデートをしようとしたら、新カーネルのインストールに失敗。
理由は、/boot のディスク容量不足。
そこでSSHでログインし、 /boot にあったファイルを一覧する。
dr-xr-xr-x. 6 root root 4096 5月 8 11:20 . dr-xr-xr-x. 20 root root 4096 4月 22 21:39 .. -rw-r--r-- 1 root root 171 8月 15 2018 .vmlinuz-3.10.0-862.11.6.el7.x86_64.hmac -rw-r--r-- 1 root root 171 9月 26 2018 .vmlinuz-3.10.0-862.14.4.el7.x86_64.hmac -rw-r--r-- 1 root root 170 6月 26 2018 .vmlinuz-3.10.0-862.6.3.el7.x86_64.hmac -rw-r--r-- 1 root root 170 7月 16 2018 .vmlinuz-3.10.0-862.9.1.el7.x86_64.hmac -rw-r--r-- 1 root root 170 2月 1 21:58 .vmlinuz-3.10.0-957.5.1.el7.x86_64.hmac -rw------- 1 root root 20029603 4月 16 21:38 CloudEndure-Migration-initramfs-0-rescue-347d59c6807f4fdbb0a47726d8396d96.img -rw------- 1 root root 20030387 4月 16 21:41 CloudEndure-Migration-initramfs-0-rescue-6eed10dce8a4469390fb949a6f350aa6.img -rw------- 1 root root 21051488 4月 16 21:40 CloudEndure-Migration-initramfs-3.10.0-862.11.6.el7.x86_64.img -rw------- 1 root root 21050593 4月 16 21:38 CloudEndure-Migration-initramfs-3.10.0-862.14.4.el7.x86_64.img -rw------- 1 root root 21055275 4月 16 21:39 CloudEndure-Migration-initramfs-3.10.0-862.6.3.el7.x86_64.img -rw------- 1 root root 21051537 4月 16 21:40 CloudEndure-Migration-initramfs-3.10.0-862.9.1.el7.x86_64.img -rw------- 1 root root 21053329 4月 16 22:01 CloudEndure-Migration-initramfs-3.10.0-957.5.1.el7.x86_64.img -rw------- 1 root root 3414344 8月 15 2018 System.map-3.10.0-862.11.6.el7.x86_64 -rw------- 1 root root 3414754 9月 26 2018 System.map-3.10.0-862.14.4.el7.x86_64 -rw------- 1 root root 3412056 6月 26 2018 System.map-3.10.0-862.6.3.el7.x86_64 -rw------- 1 root root 3412056 7月 16 2018 System.map-3.10.0-862.9.1.el7.x86_64 -rw------- 1 root root 3544044 2月 1 21:58 System.map-3.10.0-957.5.1.el7.x86_64 drwxr-xr-x 2 root root 148 10月 19 2018 ce_conversion -rw-r--r-- 1 root root 147859 8月 15 2018 config-3.10.0-862.11.6.el7.x86_64 -rw-r--r-- 1 root root 147859 9月 26 2018 config-3.10.0-862.14.4.el7.x86_64 -rw-r--r-- 1 root root 147837 6月 26 2018 config-3.10.0-862.6.3.el7.x86_64 -rw-r--r-- 1 root root 147837 7月 16 2018 config-3.10.0-862.9.1.el7.x86_64 -rw-r--r-- 1 root root 151922 2月 1 21:58 config-3.10.0-957.5.1.el7.x86_64 drwxr-xr-x 3 root root 16 11月 30 2017 efi drwxr-xr-x. 2 root root 26 10月 10 2015 grub drwx------. 5 root root 4096 4月 16 21:21 grub2 -rw------- 1 root root 20029497 4月 16 18:51 initramfs-0-rescue-347d59c6807f4fdbb0a47726d8396d96.img -rw------- 1 root root 20029721 4月 16 18:57 initramfs-0-rescue-6eed10dce8a4469390fb949a6f350aa6.img -rw------- 1 root root 20421090 1月 10 2018 initramfs-3.10.0-514.26.1.el7.x86_64.img -rw------- 1 root root 20420723 1月 10 2018 initramfs-3.10.0-514.26.2.el7.x86_64.img -rw------- 1 root root 20190848 1月 10 2018 initramfs-3.10.0-693.11.1.el7.x86_64.img -rw------- 1 root root 20189513 1月 10 2018 initramfs-3.10.0-693.5.2.el7.x86_64.img -rw------- 1 root root 21051104 4月 16 18:55 initramfs-3.10.0-862.11.6.el7.x86_64.img -rw------- 1 root root 21050403 4月 16 18:51 initramfs-3.10.0-862.14.4.el7.x86_64.img -rw------- 1 root root 13095125 2月 9 17:30 initramfs-3.10.0-862.14.4.el7.x86_64kdump.img -rw------- 1 root root 21053641 4月 16 18:53 initramfs-3.10.0-862.6.3.el7.x86_64.img -rw------- 1 root root 21052426 4月 16 18:57 initramfs-3.10.0-862.9.1.el7.x86_64.img -rw------- 1 root root 12990853 7月 29 2018 initramfs-3.10.0-862.9.1.el7.x86_64kdump.img -rw------- 1 root root 21053446 4月 16 21:05 initramfs-3.10.0-957.5.1.el7.x86_64.img -rw------- 1 root root 13099782 4月 16 21:27 initramfs-3.10.0-957.5.1.el7.x86_64kdump.img -rw-r--r--. 1 root root 611544 11月 30 2017 initrd-plymouth.img -rwxr-xr-x 1 root root 6398144 10月 19 2018 vmlinuz-0-rescue-6eed10dce8a4469390fb949a6f350aa6 -rwxr-xr-x 1 root root 6398144 9月 26 2018 vmlinuz-3.10.0-862.14.4.el7.x86_64 -rwxr-xr-x 1 root root 6234048 7月 16 2018 vmlinuz-3.10.0-862.9.1.el7.x86_64 -rwxr-xr-x 1 root root 6643904 2月 1 21:58 vmlinuz-3.10.0-957.5.1.el7.x86_64
溜まっていた古いバージョンのファイルを削除しようとしたら、誤って全部削除してしまった。
CloudEndure* 関連を全部削除するつもりで、
rm -rf CloudEndure*
とコマンドするつもりが、 CloudEndure と *の間に空白が空いてしまい、
rm -rf CloudEndure *
とやってしまった。
痛恨の一撃であった。
一瞬で全てのファイルが消えてしまった。
とりあえずそこに存在していたファイル名一覧のコピーメモをしておいた。
どうせ今から新しいカーネルをインストールするのだから、それでいいのかも、とアップデートを進めてみた。
無事に全てのアップデートが終わって、カーネルも最新バージョンがインストールされていた。
/boot はこんな状態になった。
dr-xr-xr-x. 2 root root 4096 May 8 04:32 . drwxr-xr-x 23 root root 4096 May 8 08:33 .. -rw-r--r-- 1 root root 151923 Apr 29 15:03 config-3.10.0-957.12.1.el7.x86_64 -rw------- 1 root root 59103128 May 8 04:32 initramfs-0-rescue-6eed10dce8a4469390fb949a6f350aa6.img -rw------- 1 root root 20791748 May 8 04:30 initramfs-3.10.0-957.12.1.el7.x86_64.img -rw-r--r-- 1 root root 314089 Apr 29 15:03 symvers-3.10.0-957.12.1.el7.x86_64.gz -rw------- 1 root root 3544552 Apr 29 15:03 System.map-3.10.0-957.12.1.el7.x86_64 -rwxr-xr-x 1 root root 6643904 May 8 04:32 vmlinuz-0-rescue-6eed10dce8a4469390fb949a6f350aa6 -rw-r--r-- 1 root root 171 Aug 14 2018 .vmlinuz-3.10.0-862.11.6.el7.x86_64.hmac -rw-r--r-- 1 root root 171 Sep 26 2018 .vmlinuz-3.10.0-862.14.4.el7.x86_64.hmac -rw-r--r-- 1 root root 170 Jul 16 2018 .vmlinuz-3.10.0-862.9.1.el7.x86_64.hmac -rwxr-xr-x 1 root root 6643904 Apr 29 15:03 vmlinuz-3.10.0-957.12.1.el7.x86_64 -rw-r--r-- 1 root root 171 Apr 29 15:03 .vmlinuz-3.10.0-957.12.1.el7.x86_64.hmac -rw-r--r-- 1 root root 170 Feb 1 14:58 .vmlinuz-3.10.0-957.5.1.el7.x86_64.hmac
しかし、しばらくして、ウェブサイトにアクセスできない、SSHでもアクセスできない、GCPのWEBコンソールからもアクセスできないという状態に陥ってしまった。
再起動しても同じ。
コンソール上では起動している状態になっているが、SSHでもアクセスできない。
Ping も届かない、反応しない。
やはり /boot 内の必要ファイルが紛失してしまっていて、正常に起動していないものと推測された。
よくみると、もともとあった、
drwxr-xr-x 3 root root 16 11月 30 2017 efi drwxr-xr-x. 2 root root 26 10月 10 2015 grub drwx------. 5 root root 4096 4月 16 21:21 grub2
のフォルダーが足りない。
そこで、移転して20日ばかりの旧サーバーを起動して、同じようにアップデートして最新状態にして比較する。
更新日付順に一覧すると、grub2 フォルダーが最新カーネルファイルと同じく日付更新されていたから、これだけが必要だとわかる。
これを如何にしてコピーし、SSHでは接続できないインスタンスの起動ディスクの/boot にコピーすればよいのか?
他のLinux インスタンスを起動させて、トラブル中のインスタンスのディスクをマウントして読み込み、書き込めればよいのだ。
そのためにはまず、トラブル中のインスタンスからディスクを接続解除する。
そして、Google に用意されている debug-instance を起動する。
そしてdebug-instance にトラブル中のディスクを接続マウントすれば良い。
または、「ディスクを新しいインスタンスで使用する」でもよいだろう。
GCP のWEBコンソール上で debug-instance にSSH接続するのだが、
ファイルの転送、アップロードができなかった。できたように見えるがどこを探しても見つからなかった。
そこで、旧サーバーにSSH接続ログインできるようにした後、SCPで目的の圧縮ファイル grub2.tar.gz をコピー移植することに成功した。
後はまた、この修復したディスクから新しいインスタンスを作成し、起動すると復活できた。
あらためてファイヤーウォール等を再設定し直す必要だある。
登録していた固定IPは、そのまま残っていたので、IPアドレスの変更はなかった。
ダウン時間は5時間ぐらいだった。