Ubuntuのリカバリ方法

ここ最近KVMの長年放置したマシンのアップデートをしたらapt-getでぶっ壊れる事象が発生したので自己流に解決した手段をメモっておく。
まあ、Windows(※XPまでしか触ったことはない)のリカバリーコンソールよりはだいぶましでは有る。なにせ普段使っているコマンドはそのまま使えるから。youがどこにUbuntu入れていても、シリアル番号とかないので安心して使える。いい時代に成ったものだ。
ただし、Canonicalリポジトリ公開が前提なので、サポートが切れてリポジトリが閉鎖されているバージョンのUbuntuは神に祈りながらsudo do-releaseupdateをおこなってバージョンアップしよう。多分無理なのでサポート期限にはくれぐれも注意するか、自前のリポジトリに移行すること。LTSなら4年は大丈夫だが・・・

ゴール

  1. apt-getしてパッケージ管理システムがエラーなしで作動するようにすること。
  2. パッケージシステム以外の状況は関知しない。

状況

うろ覚えなので日本語で

カーネルがアップデートできない

/bootを別パーティーションにしているとカーネルイメージが溜まりすぎてハマる。
アップデート前にsudo apt-get autoremoveをやっておいたほうが良い。

  1. この場合/boot配下のカーネルバージョンが付いたファイルを最新の一個を残して消す。
  2. 再度以下のコマンドを流す。

sudo apt-get install -f

  1. それでも容量たりない(/bootは別パーティションじゃなかった)はまずapt-get cleanをやりましょう。
②sudo dpkg --configure -aしろって言われてやってもできないんですけど

多分依存関係。ssh経由のコンソール上で作業中に寝落ちしても同様のことになる。

  1. 依存関係でエラーを吐くパッケージがリストアップされるのでそいつらを次のコマンドで追い出す。

sudo apt-get purge パッケージなにがし

  1. その後再インストールする。

sudo apt-get install パッケージなにがし

  1. linux-serverとかカーネルイメージも消して再インストールはセフセフ。メモリ上にロードされてるからその間は大丈夫。
  2. もちろんこの間にマシン再起動してしまったら・・・・④に進む
③apt-get purgeで最後にリストが出てきてシステムぶっ壊れてもいい?やる場合はsay yes yah!とかなんとか言われて怖い場合

システムの根幹のパッケージまで消してしまう場合はそんなことが言われます。

  1. しょうが無いのでリストアップされた連中の依存関係を無視して削除する。

sudo dpkg -r --force-depends パッケージなにがし

  1. 全部消し終わったら

sudo apt-get install -f

  1. もういちど消した連中の存在確認もかねてインストールしておく。

sudo apt-get install パッケージなにがし

  1. もちろん設定ファイルがなくなったり、パーミッションが初期化されたりするので頑張ってください。
④うわーん起動すらしなくなっちゃったよ〇〇えも〜ん

起動に必要なパッケージが消えた状態で再起動してしまったよおっかさん状態ですね。

  1. インストールしているUbuntuと同じか非常に近いインストールisoイメージを用意する。
    1. 実機の場合はUSBメモリに起動ディスクとして用意する。
    2. カーネルバージョンさえ合えば別ディストリでも出来なくはないだろうが怖くてやってない。
  2. でライブCDとしてUbuntuを起動する。(Ubuntuを試すのほうね。)
  3. 起動したら必要なパッケージを入れる。
    1. 個人的には以後SSH経由でターミナル開いて使い慣れたキーボードとコピペ生活をしたいのでSSHを入れる。
    2. あとLVM使ってたらlvm2も入れてvgconfig -aだっけか?でボリュームを見えるようにしておく。
  4. どっか適当なところにマウントしてchrootを行う。

sudo mount /dev/vda5 /mnt
sudo mount /dev/vda1 /mnt/boot
sudo mount -o bind /proc /mnt/proc
sudo mount -o bind /dev /mnt/dev
sudo mount -o bind /dev/ptc /mnt/dev/ptc
sudo mount -o bind /sys /mnt/sys
sudo cp /etc/resolv.cof /mnt/etc/resolv.cof
sudo chroot /mnt /bin/bash

  1. このあとは普通にapt-get updateしてapt-get install -fから始めれば良い。

まあそんな感じで復旧できます。