本日職場に行って、LinuxMint のインストールされた PC を起動させたところ、ディスプレイが一切表示されなくなるという事態に直面して対応した話。
具体的な症状としては、電源ボタンを押す→メーカーのロゴが表示される→ブートローダの選択画面が表示される→LinuxMint のロゴが表示される。→ディスプレイが No Signal になるといったものだ。
金曜日から、PC は操作していないので、金曜日に操作したアップデートが原因だろうと目星をつけるものの、起動できなきゃどうしようもないので、まずは復旧させてみた。
LinuxMint には Timeshift というシステムバックアップがある。これはユーザディレクトリ以外のシステム領域を定期的にバッグアップするアプリケーションで、私は週 1 回バックアップを 3 週分保持するように設定していた。とはいえ、現状ではそのままは起動できないため、LiveUSB (LiveCD でも可; インストールメディア) から起動する。起動したらターミナルを起動して、以下の手順で進める。
- OS がインストールされているデバイスをマウントする。
$ mkdir $HOME/mnt $ sudo mount /dev/sdXn $HOME/mnt/dev/sdXn はそれぞれの環境に応じて変更する。 - Timeshift を動かすのに必要なディレクトリをマウントする。
$ sudo mount --bind /dev $HOME/mnt/dev $ sudo mount --bind /dev/pts $HOME/mnt/dev/pts $ sudo mount --bind /proc $HOME/mnt/proc $ sudo mount --bind /sys $HOME/mnt/sys $ sudo mount --bind /run $HOME/mnt/run - chroot で、ルートを LiveUSB のルートから、復旧させたいシステムのルートに変更する。
$ sudo chroot $HOME/mnt - Timeshift を復旧モードで実行する。
$ sudo timeshift --restore - "いつのスナップショットで復旧するか" を選択する。
- "ブートローダを更新するか" という問いには "y" で答える。
- ブートローダを更新するデバイスの選択に答える (特殊なインストールをしていなければ、/dev/sdXn になる)。
- 復旧作業が完了すると、通常の Timeshift は再起動を自動でしてくれるが、今回は chroot 環境なので、再起動できなかったエラーが出るが問題ないので、再起動する。
こんな感じで復旧させることに成功した。ちなみに、先週水曜日のスナップショットに戻したのだが、水曜日から本日までにアップデートが 12 件あった。これを一つずつ適用し (症状が出たら上記の復旧作業でやり直し)、最終的に libpciaccess が原因であることが分かった。PCI アクセスに関わるパッケージのようで、これがグラフィックカードの PCI 接続に悪影響を及ぼしていたようだ。