WSL起動時のfstabエラー。Codex用マウントをsystemdに任せる設定にした

Windowsのアップデートで勝手に再起動された後、PowerShellからwslを開くと、毎回こんな表示が出るようになりました。

wsl: Processing /etc/fstab with mount -a failed.

原因は、この環境でCodexの補助ファイル用に追加されていたマウント設定が、Cドライブの準備より先に実行されることでした。Linux側のフォルダを、WSL内のWindows側のパスから参照するための個別設定です。

修正したのは、/etc/fstabのその1行です。オプションのbind,nofailにnoauto,x-systemd.automountを追加し、Cドライブの準備後、対象パスへアクセスした時にsystemdがマウントする設定へ変えました。

設定の変更後、Ubuntuを完全停止して起動し直すと警告が出なくなりました。 通常のwsl起動と、実際に使っているフォルダのマウントまでCodexで確認しました。

変更前はCドライブの準備前にマウントしてfstabエラーが発生。noautoとx-systemd.automountを追加し、Ubuntuを完全停止して起動すると、警告が消え、automountとmountがactiveになった。
変更前後の設定と、Ubuntuを完全停止・起動した後に確認した結果。

変更するのは、fstabのこの1行

私の環境はWSL 2.7.13.0、Ubuntu 24.04です。/etc/wsl.confではsystemd=trueが設定されていました。今回の変更は、Linux側のフォルダを/mnt/c/...へつなぐbindマウントがある構成を対象にしています。

以下のコードとログは、ユーザー名を公開用の例へ置き換えています。linuxuserはWSL側、winuserはWindows側のユーザーフォルダ名です。それぞれ自分のパスに合わせて読み替えます。

変更前はこうでした。

/home/linuxuser/.cache/codex-wsl-arg0 /mnt/c/Users/winuser/.codex/tmp/arg0 none bind,nofail 0 0

変更後はこうです。

/home/linuxuser/.cache/codex-wsl-arg0 /mnt/c/Users/winuser/.codex/tmp/arg0 none bind,noauto,nofail,x-systemd.automount 0 0

noautoでWSL起動時のmount -aからこの行を外し、x-systemd.automountでアクセス時のマウントをsystemdに任せます。この組み合わせでは、systemd側の自動マウントは起動対象になります。systemd.mountの公式資料

1. バックアップを取り、該当行を編集する

WSLのターミナルで、変更前のファイルを保存してから編集します。バックアップ名は既存のファイルと重ならないものを使います。

sudo cp -a /etc/fstab /etc/fstab.before-codex-automount
sudo nano /etc/fstab

対象行のオプションを上の設定へ変更して保存します。systemctl daemon-reloadでsystemdに設定を読み直させ、findmnt --verifyでfstabの記述を確認します。

sudo systemctl daemon-reload
sudo findmnt --verify --verbose

findmntでエラーや警告が出た場合は、その内容を直してから次へ進みます。

2. Windows側からUbuntuを終了し、起動し直す

設定を保存して、もう一度wslを実行するだけでは、この手順は完了しません。Ubuntu自体を完全停止します。

対象のUbuntu上で動くシェルや開発サーバーも終了するため、先に作業を保存します。 PowerShellでディストリビューション名を調べ、対象だけを終了・起動します。私の環境の名前はUbuntu-24.04です。

wsl -l -v
wsl --terminate Ubuntu-24.04
wsl --distribution Ubuntu-24.04

exitでシェルを閉じても、WSL自体が動き続ける場合があります。ここでは、Microsoftが案内する--terminateで対象のUbuntuを停止します。

3. 警告が出ないことと、マウント先を確認する

起動時のfstabエラーが消えたかを見てから、WSL内で対象のパスへアクセスします。

ls -ld /mnt/c/Users/winuser/.codex/tmp/arg0/.
findmnt --mountpoint /mnt/c/Users/winuser/.codex/tmp/arg0

findmntは、指定した場所に何がマウントされているかを調べるコマンドです。マウント元に/home/linuxuser/.cache/codex-wsl-arg0を含むext4の行が出れば、意図したLinux側のフォルダへつながっています。

復元が必要なら、WSL内でバックアップを戻します。その後、作業を保存して手順2の停止・起動を行います。

sudo cp -a /etc/fstab.before-codex-automount /etc/fstab
sudo systemctl daemon-reload

起動後のmountは成功していた

最初は「Windowsのアップデートで再起動されたからかも」と考えていました。WSL内で、fstabの設定をまとめてマウントするsudo mount -avを実行しました。続けてecho $?で直前のコマンドの終了コードを調べると、0でした。

出力自体は問題ないのでexitしてWindows側からもう一度wslを実行すると、同じエラーが出ます。そこで、Codexに原因調査と修正を依頼しました。AIは便利だね。

修正前の実画面。PowerShellからwslを実行すると、Processing /etc/fstab with mount -a failed.と表示され、その下にUbuntuのプロンプトが出ている。
修正前。PowerShellでwslを実行するたび、起動時のエラーが表示された。ユーザー名の部分だけを黒塗りしている。

/etc/fstabに有効な設定は、先ほどのCodex用bindマウント1件だけでした。Linux側のフォルダを、WSL内の/mnt/c/...というパスからも同じ内容として使う設定です。

原因は、Cドライブが見える前のマウントだった

Codexは、Linuxの起動やサービスの動作ログを読むjournalctlで、起動時のエラーを調べました。次のコマンドで、起動時のマウントエラーをログから探しました。

journalctl -b --no-pager --grep='mount point does not exist|ConfigMountFsTab|/bin/mount failed'

WSLでは、Ubuntuを停止・起動しても過去のエラーがこのログに含まれる場合があります。修正後の確認は、手順3の起動時の表示とマウント状態で行います。

ログに出ていたのは、このエラーでした。ユーザー名を置換した抜粋です。

/mnt/c/Users/winuser/.codex/tmp/arg0: mount point does not exist.

起動時には、マウント先が見つかっていませんでした。

手元と同じWSL 2.7.13の実装では、/etc/fstabを処理してからWindowsドライブを自動マウントします。今回の設定は、Cドライブの下にあるパスを、その準備より先に使おうとしていました。起動後には手動のマウントが成功した理由も、この順番で説明できます。

途中で、マウント先フォルダを自動作成する方法も試しましたが、必要だったのはCドライブの準備後にマウントすることでした。そこで、フォルダ作成の追加をやめ、systemdに任せる設定へ変更しました。

再起動後、エラーは解消した

設定を変えた後も、動いているUbuntuに入り直すだけでは、同じ警告が表示されました。そこで対象のUbuntuをwsl --terminate Ubuntu-24.04で完全停止し、起動し直しました。

2026年10月18日、Codexが実際の作業環境で次を確認しました。

  • WindowsのPowerShellから引数なしのwslを実行しても、fstabの警告が出ない。
  • 対象パスへアクセスすると、systemdのautomountとbindマウントがどちらもactiveになる。
  • マウント先が、意図したLinux側の元フォルダと同じフォルダを指している。

起動後にコマンドが通るので、その時点では設定に問題がないように見えました。起動ログを読むと、見るべきだったのはフォルダの有無と処理の順番でした。

コメント

タイトルとURLをコピーしました