こんにちは、山田ハヤオです。こんなツイートを見つけました。
パッケージのアップデート中に強制的に再起動をしたら起動しなくなったという内容です。
今回はこれについて話して行こうと思います。
まずはごめんなさい
Alter LinuxはローリングリリースであるArch Linuxをベースに開発しています。
そのためAlter Linuxもローリングリリースです。
インストーラであるISOファイルはビルドの段階でのパッケージのスナップショットにすぎないので、基本的に定期的な更新が必要です。
しかし実は2020年12月から今(2021年6月12日)まで更新をしていません()
これにはいろいろな理由があるのですが、言い訳としていくつか挙げると
- 開発者が部活に入った
- 学年が上がって模試やテストが増えた
- Pacmanのバージョンが6に上がってさらなる検証が必要になった
- PamacがPacmanの更新においつかずコンパイルに失敗している
- Alter Linuxの一番最初の頃から変わっていなかった部分を大幅に変更した
- 周辺パッケージのメンテナンスとリファクタリングに時間がかかった
- AlterISO 3.1の開発と移行に時間がかかった
- シン・エヴァンゲリオンが公開された
- 魔法少女まどか☆マギカが10周年を迎えた
- 任天堂が2010年にポケモン ブラック・ホワイトを発売した
- レベルファイブが2014年に妖怪ウォッチ2 元祖・本家を発売した
ことなどです。
更新作業を頑張ってるのでもうしばらくお待ちください。
ここからが本題です
先程の話に戻ります。Arch Linuxはシステムの更新をyay -Syu
というコマンドで行います。
Windows Updateよりは遥かに高速なのですが、それでもやはりスペックによっては遅い場合もあります。
それを終了まで待てないで再起動してしまうとシステムが破損し起動できなくなってしまいます。
まずはアップデート中にフリーズしているのかどうかを調べる方法を説明します。
フリーズかどうか調べる方法と再起動のタイミング
フリーズの判断
まずはディスクアクセスランプを見ましょう。ランプがついている場合はそのまま待ってください。
裏でPacmanが頑張ってパッケージを更新しています。
ディスクアクセスランプがついておらず、マウスも反応しない場合、仕方なく再起動しましょう。
(本当は色々対処できる可能性はありますが1晩放置してみてだめだったらあきらめましょう)
再起動や中断のタイミング
Pacmanの更新は主に3つの段階に分けて行われています。
- 依存関係のインストール
- パッケージファイルのダウンロード
- パッケージの展開システムのファイルの上書き
- パッケージ展開後のフック(コマンド)の実行
途中で再起動するとやばいのは、3と4のときです。そしてフリーズするのは大体3か4です。
1もそれなりにやばいですが、2なら強制的に中断してもそこまで被害はありません。
起動できないときの対処方法
今回は最初のツイートのように起動できない場合の対処方法です。
この方法は上のエラーに限らず、Arch Linuxのシステムの破損はだいたいこれで治ります。
(もっと早く解決する方法もありますが、汎用的で確実なのはこれです。)
今回の状況
カーネルファイルが破損し、Grubから先に進めない状況です。
ここからデータを削除しないで復旧を目指します。
Alter Linuxのライブ環境から起動する
最初のインストールと同じように、ライブ環境から起動します。
こういうときのために緊急時用のディスクがあるととても便利です。
現在開発中の最新のビルドです。(インストーラのアイコンとかが消えてるのはバグ)
復旧するシステムがインストールされている場所を探す
ドックからターミナルを起動後、以下のコマンドを入力してください。
sudo su
fdisk -l
今回はインストール先のディスクは/dev/sda1という名前のようです。
復旧するシステム内に入る
Chrootという仕組みを使ってブートせずにシステムに入ります。
mount /dev/sda1 /mnt
arch-chroot /mnt
Ubuntuなどから起動した場合だとarch-chrootコマンドが使えなくて面倒なんですが、Alterなら使えるので簡単にシステムに入れます。
プロンプトの表示が変わったら成功です。
arch-chrootコマンドに失敗したら
以下の状況が考えられます。
- 修復するディスクの選択を間違えた
- コマンド入力を間違えた
- 入れないほどにシステムが破損している
まずは上の2つを十分に確認し、どうしようもない場合は以下のコマンドを実行します。
以下のコマンドで最低限のシステムは修復されます。
pacstrap /mnt $(printf "%s\n" $(LANG=C pacman -Qi base | grep "Depends On" | cut -d ":" -f 2 ))
その後、もう一度上のコマンドを実行してみてください。
全パッケージを再インストールする
アップデート中に強制再起動をした場合、どのパッケージが破損しているのかはログを見なければわかりません。
なので今回はすべてのパッケージを再インストールします。
Winoowsの再インストールと違ってドキュメントや写真が消えるということはありません。
以下のコマンドでパッケージが再インストールされます。
pacman -Sy
pacman -S $(pacman -Qnq)
多くのパッケージを再インストールするので気長に待ちます。
ブートローダの修復と更新
念の為にブートローダを更新します。
grub-install --target=i386-pc --recheck /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg
再起動する
exit
reboot
これで再起動されます
最後に
これでパッケージの破損ならだいたい修復できます。
ただし、設定ファイルが間違っていたりPacmanのデータベースが破損していると上記の方法は使えまえん。
わからない場合はFascodeのDiscordで聞くのが確実だと思います()
設定ファイルなどが破損してる場合、それらを削除して(もしくは別の場所にうつして)からもう一度上記の作業をやると改善するかもしれません(リセットされますが)
コメント
ブートローダーのところ、BIOSしか書いていないのでEFI民が実行すると大変なことになるのでは?