【解決】 Linux: Read-only file system の解決方法と原因 | Linux トラブルシューティング

Windowsユーザーの皆様、Linuxサーバーや仮想マシンで「Read-only file system」というエラーに直面し、ファイルが保存できない、システム設定が変更できないとお困りではありませんか?ご安心ください。このエラーはLinuxシステムが自己防衛のためにファイルシステムを読み取り専用モードに切り替えた状態であり、多くの場合は適切に対処することで解決できます。

この記事では、WindowsからPowerShellやコマンドプロンプトを使用して、この問題を迅速かつ安全に解決するための手順を、シニアエンジニアのアシスタントとして分かりやすく解説します。結論から申し上げると、ファイルシステムを一時的に書き込み可能に再マウントするか、システム起動時にファイルシステムの整合性チェック(fsck)を強制実行することで解決できます。

1. Linux: Read-only file system とは?(概要と緊急度)

「Read-only file system」エラーは、Linuxがファイルシステムに何らかの異常(破損、ディスク障害の兆候など)を検知した際に、それ以上のデータ破損を防ぐために、該当するファイルシステムを強制的に読み取り専用モードでマウントした状態を指します。この状態では、ファイルの作成、編集、削除などの書き込み操作が一切できなくなります。

このエラーは、データの整合性を守るためのLinuxの安全機構であり、通常はシステムが完全にクラッシュする前に警告を発していると考えることができます。緊急度は高めですが、多くの場合、根本的な原因を特定し、修復することで問題を解決し、通常の操作に戻すことが可能です。データ損失のリスクを最小限に抑えるためにも、迅速な対処が求められます。

2. 【最速】今すぐ試すべき解決策

ここでは、WindowsからLinuxサーバーにSSH接続して実行できる最も迅速な解決策を2つご紹介します。まず、最も簡単な一時的な解決策を試し、それがうまくいかない場合は、ファイルシステム破損の修復に進みましょう。

前提: WindowsのPowerShellまたはコマンドプロンプトから、SSHクライアントを使用してLinuxサーバーに接続できる環境を想定しています。

解決策1:[最も簡単な方法] 一時的な書き込みモードへの再マウント

ファイルシステムが軽微な問題や一時的なロックによって読み取り専用になっている場合、この方法で書き込みモードに再マウントできることがあります。データ損失のリスクが最も低いアプローチです。

  1. PowerShellからSSHでLinuxサーバーに接続します。
    以下のコマンドをPowerShellに入力し、your_usernameをLinuxのユーザー名、your_linux_ip_addressをLinuxサーバーのIPアドレスまたはホスト名に置き換えて実行してください。パスワード入力が求められます。

    ssh your_username@your_linux_ip_address
  2. Linuxサーバー上で、ルートファイルシステムを書き込み可能モードで再マウントします。
    SSH接続後、以下のコマンドを実行します。sudoコマンドを使用するため、ユーザーのパスワードが再度求められることがあります。

    sudo mount -o remount,rw /

    補足: もし特定のパーティション(例: /var/home)が読み取り専用になっている場合は、以下の形式で再マウントします。
    まず df -h または mount コマンドで、読み取り専用になっているパーティションとそのデバイス名(例: /dev/sdb1)を確認します。

    df -h
    sudo mount -o remount,rw /dev/sdXN /mount/point

    /dev/sdXN は該当デバイス名、/mount/point はそのマウントポイントに置き換えてください。

このコマンドがエラーなく成功すれば、ファイルシステムは一時的に書き込み可能になります。しかし、これは一時的な対処であり、根本的な原因が解決されていない場合は、システムを再起動すると再び読み取り専用になる可能性があります。次の「解決策2」を検討してください。

解決策2:ファイルシステム破損の修復(fsckの強制実行)

上記で解決しない場合、ファイルシステム自体が破損している可能性が高いです。Linuxでは、fsck (file system check) コマンドを使ってファイルシステムを修復できます。ルートファイルシステムが読み取り専用の場合、起動時にfsckを強制実行させるのが最も安全で効果的な方法です。

注意: この操作はシステムを再起動し、ファイルシステムの構造に直接変更を加える可能性があります。可能であれば、事前に重要なデータのバックアップを取ることを強くお勧めします。

  1. PowerShellからSSHでLinuxサーバーに接続します。
    前述と同じく、PowerShellでSSH接続を行います。

    ssh your_username@your_linux_ip_address
  2. Linuxサーバー上で、次回の起動時にfsckを強制実行するように設定し、システムを再起動します。
    SSH接続後、以下のコマンドを順に実行します。

    sudo touch /forcefsck
    sudo reboot

    解説: sudo touch /forcefsck コマンドは、ルートディレクトリに forcefsck という名前の空のファイルを作成します。多くのLinuxディストリビューションでは、このファイルが存在すると、次回の起動時に自動的にすべてのファイルシステムに対して fsck を実行するよう設定されています。sudo reboot コマンドでシステムを再起動し、fsckによる修復プロセスが開始されるのを待ちます。

  3. fsckの完了を待ち、システムが正常に起動するか確認します。
    再起動中はSSH接続が切断されます。しばらく待ってから再度SSH接続を試みてください。システムが正常に起動し、ファイルシステムが書き込み可能になっているか確認します(例: touch /tmp/testfile でファイル作成を試す)。注意: ルートファイルシステムが深刻な破損を起こしている場合、fsck実行後も正常に起動できないことがあります。その場合は、仮想マシンのコンソールアクセスや、物理サーバーの場合はレスキューモードでの起動など、より高度な対応が必要になる場合があります。

3. Linux: Read-only file system が発生する主要な原因(複数)

このエラーが発生する背景には、いくつかの主要な原因が考えられます。

  • ファイルシステムの破損: 最も一般的な原因です。不適切なシャットダウン、停電、ハードウェアの故障などにより、ファイルシステムのメタデータが破損することがあります。
  • ディスク(ストレージ)の故障または不良セクタ: HDDやSSDに物理的な問題が発生し、データの読み書きが不安定になると、Linuxはデータ損失を防ぐためにファイルシステムを読み取り専用にします。
  • 不適切なシステムシャットダウン: システムが正常にシャットダウンされなかった場合(例: 電源ボタンの長押し、突然の停電など)に、ファイルシステムの整合性が失われ、次回の起動時に読み取り専用になることがあります。
  • カーネルのバグまたは設定ミス: まれに、Linuxカーネルのバグや、ファイルシステムに関する設定(/etc/fstab など)の誤りによって、意図せず読み取り専用モードになることがあります。
  • 過剰なI/O負荷: 極端なディスクI/O負荷が長時間続くと、ファイルシステムが不安定になり、一時的に読み取り専用になるケースも報告されています。

4. Linuxで恒久的に再発を防ぐには

「Read-only file system」エラーの再発を防ぐためには、日頃からの予防策が重要です。

  • 定期的なバックアップの実施: 何よりも重要です。万が一のシステム障害やデータ破損に備え、定期的に重要なデータをバックアップしてください。
  • S.M.A.R.T.監視によるディスク健全性のチェック: ディスクの状態を監視するS.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology) 機能を活用し、ディスクの故障予兆を早期に検知できるように設定しましょう。smartctl コマンドなどで確認できます。
  • UPS(無停電電源装置)の導入: 物理サーバーを使用している場合、停電時の不適切なシャットダウンを防ぐためにUPSを導入し、OSと連携させて安全にシャットダウンできるように設定しましょう。
  • クリーンなシャットダウンの習慣化: システムを停止する際は、必ず sudo shutdown -h nowsudo reboot のようなコマンドを使用して、正常なプロセスでシャットダウン・再起動を行うようにしましょう。
  • OSおよびカーネルの定期的なアップデート: システムのバグ修正やセキュリティパッチが適用されるため、OSとカーネルを最新の状態に保つことも重要です。
  • /etc/fstab の設定確認: ファイルシステムが自動的にマウントされる設定ファイル /etc/fstab に、errors=remount-ro オプションが設定されていることを確認してください。これは、エラーが発生した場合に安全のために読み取り専用で再マウントする、という標準的な設定です。

これらの対策を講じることで、Linuxシステムをより安定稼働させ、将来的な「Read-only file system」エラーのリスクを大幅に低減することができます。もし今回の解決策で問題が解決しない場合や、より深刻な状況が疑われる場合は、お気軽にご相談ください。シニアエンジニアがさらなるサポートを提供いたします。