Linuxサーバー

サーバーが起動しない?レスキューモードでディスクをマウントし、fstabとGRUBを修復してデータを退避する方法

10 ステップ 11 分で読めます 26 回閲覧 0
目次

起動しなくなったサーバーでも、ほとんどの場合データはすべて残っています。原因は意外と小さなことが多く、/etc/fstabの誤った1行、ブートローダーを壊したカーネル更新、ディスク容量の枯渇、チェックが必要なファイルシステム、自分を締め出したファイアウォールルールなどが典型です。レスキューシステムはディスクではなくネットワークから起動するため、ディスクをマウントして問題を修正し、通常どおり起動させることも、先にデータを安全な場所へ退避することもできます。本ガイドでは、Linuxサーバーでよくある修復手順を解説します。

IMIDCの専用サーバーでは、クライアントエリアのRescue Mode(レスキューモード)ボタンでレスキューシステムを起動し、VNC Console(VNCコンソール)から操作します。詳しくは専用サーバーコントロールパネルガイドをご覧ください。他社のサーバーでも、レスキューシステム内での手順は同じです。

ステップ1:起動しない原因を確認する

何かを変更する前に、コンソールを開いて画面に表示されている最後のメッセージを確認します。

  • "You are in emergency mode"または"Dependency failed for /data":多くの場合、fstabの誤ったエントリかディスクの欠落が原因です。fstabを修正します(ステップ4)。
  • "grub rescue>"、"no such partition"、"Reboot and select proper boot device":ブートローダーが破損しています。GRUBを再インストールします(ステップ6)。
  • 更新後のKernel panic:GRUBメニューが表示される場合は以前のカーネルで起動し、表示されない場合はレスキューシステムでinitramfsを再生成します(ステップ6)。
  • システムは起動するが接続できない:まずコンソールからネットワークとファイアウォールを確認してください。レスキューモード自体が不要な場合もあります(ステップ7)。

ステップ2:ディスクを特定する

レスキューシステムで、ディスクとパーティションを一覧表示します。

lsblk -f
fdisk -l

ルートパーティション(多くの場合、最も大きいext4またはxfsパーティション)と、UEFIサーバーでは小さなvfatパーティション(EFIシステムパーティション)を探します。linux_raid_memberやLVM2_memberが表示される場合は、先にそれらを組み立てます。

# Software RAID (mdadm)
mdadm --assemble --scan
cat /proc/mdstat

# LVM
vgscan
vgchange -ay
lvs

ステップ3:ファイルシステムをチェックする

ファイルシステムのチェックは、パーティションがマウントされていない状態で実行します。デバイス名はご自身の環境に置き換えてください。

# ext4
fsck -f /dev/sda2

# XFS: try a normal mount first, use xfs_repair only if mounting fails
xfs_repair /dev/mapper/vg0-root
マウント中のファイルシステムに対してfsckやxfs_repairを実行しないでください。xfs_repair -Lは、通常の修復が不可能な場合以外は避けてください。ログを破棄するため、直近の書き込みが失われる可能性があります。重要なデータがある場合は、先にデータを退避してください(ステップ8)。

ステップ4:システムをマウントしてfstabを修正する

mkdir -p /mnt/sys
mount /dev/sda2 /mnt/sys          # your root partition or LV
ls /mnt/sys                       # you should see etc, home, var ...
nano /mnt/sys/etc/fstab

存在しなくなったディスクの行は、先頭に#を付けてコメントアウトします。また、任意のデータディスクにはnofailを追加し、ディスクが見つからなくても起動が止まらないようにします。

UUID=1234-abcd  /data  ext4  defaults,nofail  0  2

/dev/sdb1のようなデバイス名は起動ごとに変わる可能性があるため、blkidで確認したUUIDを使用してください。ディスクの正しいマウント方法はデータディスクのパーティション作成とマウントで解説しています。

ディスク容量不足

ルートファイルシステムが100%埋まると、サービスが停止し、システムによっては起動しなくなります。ディスクをマウントした状態で、古いログやバックアップなどの大きなファイルを探して削除します。

du -xh /mnt/sys --max-depth=2 2>/dev/null | sort -h | tail -20

その他の整理方法はLinuxでディスク容量を空ける方法をご覧ください。

ステップ5:chrootでインストール済みシステムに入る

システム自身のツール(GRUB、パッケージマネージャー、passwd)が必要な修復では、chrootでシステムに入ります。

mount /dev/sda1 /mnt/sys/boot            # only if /boot is a separate partition
mount /dev/sda15 /mnt/sys/boot/efi       # UEFI only: the vfat EFI partition
for d in dev proc sys run; do mount --bind /$d /mnt/sys/$d; done
chroot /mnt/sys /bin/bash

これでインストール済みのシステム内で作業している状態になります。rootパスワードを忘れた場合は、ここでpasswd rootを実行するだけでリセットできます。その他の方法はLinuxのrootパスワードをリセットする方法をご覧ください。

ステップ6:GRUBを再インストールしてinitramfsを再生成する

chroot内で次を実行します。

# Debian / Ubuntu, legacy BIOS boot
grub-install /dev/sda
update-grub
update-initramfs -u -k all

# Debian / Ubuntu, UEFI boot
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian
update-grub

# Rocky / AlmaLinux / CentOS
grub2-mkconfig -o /boot/grub2/grub.cfg
dracut -f --regenerate-all

ソフトウェアRAIDの場合は、どちらのディスクからでも起動できるよう、すべてのメンバーディスク(例:/dev/sdaと/dev/sdb)に対してgrub-installを実行してください。

ステップ7:ファイアウォールやSSHによる締め出しを解除する

ファイアウォールやSSHの設定を変更した後、サーバーは起動するものの接続できない場合は、chroot内から(システムが起動する場合はVNCコンソールから直接)修正します。

# Check the SSH configuration for errors
sshd -t

# Temporarily disable the firewall at next boot
systemctl disable ufw 2>/dev/null; systemctl disable firewalld 2>/dev/null

ログインできるようになったら、firewalldとufwでポートを開放する方法に従い、必要なポートを開放したうえでファイアウォールを再度有効にしてください。

ステップ8:データを退避する

修復に失敗した場合や再インストールを予定している場合は、先に重要なデータを別のサーバーへコピーしてください。レスキューシステムから次のように実行します。

# Copy a directory to a backup server over SSH
rsync -aHAX --info=progress2 /mnt/sys/var/www/ user@backup-server:/backup/www/

# Stream a compressed archive without needing local space
tar -C /mnt/sys -czf - home etc var/lib/mysql | ssh user@backup-server "cat > /backup/server.tar.gz"

データベースについては、停止したサーバーの生ファイルをコピーする方法は、同じバージョンのデータベースに復元する場合に有効です。それ以外の場合は、修復後にシステムを起動してmysqldumpを使用してください。

ステップ9:レスキューモードを終了する

exit                                     # leave the chroot
for d in run sys proc dev; do umount /mnt/sys/$d; done
umount -R /mnt/sys
sync

その後、レスキューモードを終了し(IMIDCではCurrent Task → Exit Rescue)、サーバーが自身のディスクから起動する様子をVNCコンソールで確認します。

Windowsサーバーの場合

レスキューの種類でWindowsを選択すると、Windows環境が起動します。そこからシステムドライブのファイルをコピーしたり、chkdsk C: /fやbcdboot C:\Windowsを実行してブートファイルを修復したりできます。

よくある質問

lsblkでディスクが表示されない

RAIDコントローラーにレスキューシステムにはないドライバーが必要な場合や、ディスクが故障している可能性があります。チケットを作成していただければ、エンジニアがハードウェアを確認します。

再インストールしてしまった方が早いですか?

データを確保してからにしてください。再インストールはディスクを消去しますが、レスキューシステムを使えば先にコピーを取ることができます。

上記の手順で解決しない場合は、サポートチケットを作成してください。IMIDCの24時間365日対応の技術チームがサポートします。サーバーIP、コンソールに表示された起動エラーのスクリーンショット、lsblk -fの出力を添えていただくと、より迅速に原因を特定できます。

この回答はお役に立ちましたか?

関連チュートリアル