[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:25274] Re: dpkg database broken? plz help...



佐野@浜松です。

 fsawa@xxxxxxxxxxxxxxx (Hirofumi Furusawa) さん wrote:

> Hiroshi KISE <fuyuneko@xxxxxxxxxxxx> wrote:

> >最初の投稿は[debian-users:25215]ですよね。これ、日本語EUCで書いて
> >quoted-printableにして、かつ
> >
> >Content-Type: text/plain; charset=iso-2022-jp
> >
> >と書かれているので、僕の環境では表示できませんでした。ちょっと

なるほど、euc-jp だったのですか。手元の spool の中でヘッダーを
書き換えてみたら読めるようになりました (なんだかわかんなかったから
読んでなかった)。

>   わざわざ読んでくださるとは…どうもありがとうございます。うーん、今まで
> 誰も文句を言ってこないとは、私のような奴が多すぎるのでメーラがヘッダに書
> いていることを素直に信じなくなっているのでしょうか…。

ふと思いついて http://lists.debian.or.jp/debian-users/200011/msg00307.html を
見たら、こっちはちゃんと変換されてますね。

>   2通目は debian-users までに一つクッションがあるのでそこで変換してくれ
> ているようです。

これだけ読んでも状況がわからなかったです。

> >工夫したら読めるんですけどね。で、読んでみました。statusファイルが
> >壊れてるんじゃないか、ということですよね。

というか、

 |  なく kernel-2.4.0test10 をインストールし、 いろいろ apt-get install し        
 |  ていたところ、突如すべてのプログラムが Segmentation Fault を起こしはじ        
 |   めたのであわてて再起動をかけました。ところが halt もコケてしまい目の前        
 |  でカーネルがボロボロ崩れていくので、已むなく電源断して fsck をかけてか        

という時点で既にダメですね。

「カーネルがボロボロ崩れていく」ようなシステムで fsck したらおそらく
もう修復は不可能だと覚悟したほうが良いかと。

もう手遅れですが、そういう場合はハードディスクを外して別のシステムに
接続して、とりあえず read only mount で救えるものだけ救うつもりで
まず backup 取るとか。もしハードディスク自体は壊れていなくて (つまり
ハードウェア的には問題無くて) 別パーティションにちゃんとしたシステムが
あれば、そっちから起動して中身をバックアップする、でもいいですが。

というか、重要なシステムだったら、そもそもテスト版のカーネルをインストール
するのは避けたほうがいいし、仮にテストするにしてもあらかじめバックアップを
取っておいたほうがいいような気がする。

で、バックアップした後、fsck かけるにしても、「壊れたシステム」から
かけちゃダメでしょう。ちゃんと動くシステムでやらないと。必要なら
そのために専用のシステム (partition) を新規インストールするとか。

> >>   /var/lib/dpkg の中にある 
> >>     /var/lib/dpkg/available-old
> >>     /var/lib/dpkg/diversions-old
> >>     /var/lib/dpkg/status-old
> >> というファイルを old でないものに書き換えるとか、status ファイルを
> >> status.yesterday のものに戻すなどは意味あるあがきと言えますでしょうか?
> >
> >意味あると思います。というか、そのためにあるんではないでしょうか。
> >もちろん、現在の状態のstatusファイルはちゃんと保存しておくこと。

このへんのファイル「だけ」が壊れているのなら充分見込みがあるでしょうが、
「カーネルがボロボロ」な場合はおそらく問題はここだけでは無いでしょう。

>   dpkg のデータベースは old を書き戻しただけでは足りないほど徹底的に壊れ
> ていました。だいたい perse error がでるのです、例えば avaiable に
> Version エントリがないっていわれる見てみると Veosion になっているとか、
> Depends: がおかしいといわれて見ると改行が ^k(たぶん ^l の次のコード)にな
> っているとか。不思議なことに壊れている部分はだいたい同じエントリなんです
> よね、まあそんなこと分っても別に意味はないんです :-) 

こういう症状の時は、もう file system がダメですね。

>   そうこうして十数個所を手で編集しなおし、動かしてみると今度は
> /var/lib/dpkg/info/{*.list,*.prerm} あたりのファイルがまったく関係ないフ
> ァイルの断片に変化している…。これらのファイルを元ファイルかろ気合いで作
> 成し今度こそはと動かしたところ、やりました、ちゃんと動いているようです(
> 午前3時)。さっそくカーネルを 2.2 に戻し再起動一安心しました。…ところが

ここで「カーネルを 2.2 に戻し」と書かれているということは、上記の
作業はすべてテスト版のカーネルを使って、壊れたシステムから起動した
状態で実行されていたわけですよね ?

「順調に動作しているシステムが、何らかの原因で急に power down して、
  そのために再起動時に fsck を必要とするようになった状況」

と、上記のような

「テスト版のカーネルを使っていたところ突如すべてのプログラムが
  Segmentation Fault を起こしはじめ、あわてて再起動をかけると
  halt もコケてしまい目の前でカーネルがボロボロ崩れていくので、
 已むなく電源断してしまった状況」

ではその後の対応に必要とされる慎重さが全然違ってきます。

後者のような状況で、そのままその「壊れたシステム」から起動しようと
するのは、ほぼ間違い無く「引導を渡す」ような行為だと考えて良いでしょう。

>   ご機嫌で喜瀬さんにお礼のメールを書いていたところいきなりカーネルがボロ
> ボロに。再起動後パーティションを fsck するだけで SegmentationFault する
> 状態が続き途方にくれました(CD-ROM のカーネルからやっても同様、不可解)。

カーネルだけ別にしても意味無いです。root システムを別なところにして、
ちゃんと動作することを当てにできるシステムから起動しなければ。

おそらくシステムライブラリの関係もすべて壊れているのでしょう。
 dynamic link されたコマンドはライブラリが使えなくなるとすべて
動作しなくなります。使えるのは static link された /bin/sash と
その内蔵コマンドだけ。でもこれには fsck はありませんね。

インストーラを起動して、Alt F2 でコンソールを開いて、そこから
作業する、というのが一般的な「壊れたシステムを復旧するための
手順」だと思います。これには fsck などのコマンドが用意されて
いますから。

 # だから "rescue" という名前が付けられている。

>   最初から再インストールにむかっていれば簡単だったんでしょうが、まあそれ
> は考えないで昼からの授業に出れるように眠ることにします。

お疲れさまでした。

> 以上永年(?)つれそった Debian システムからの最後のメールでした。

次にインストールする際は rescue システムも最初から別パーティションに
用意しておくことをお勧めします。

私の場合、カーネルの Magic SysRQ Key も効かないような状態で
突然システムがダウンした時 (例えば先日の XFree86 4.0.1d と
 chips driver + HiQV chip の組み合わせ、みたいな) には、
電源 OFF の後、必ず別パーティションにある rescue 用のシステム
から起動して fsck してます。

最近いろいろ物騒なので、システムが crack されたかどうかを検査する
ことが必要な機会もあるかもしれません。そういう場合のためにも、
別パーティション (別のディスクが使えるならそのほうがいいかも) に
「普段は決してマウントしない、緊急時専用のシステム」を、ある程度
使えるレベルに整備したツール類と一緒に用意しておくのが安心でしょう。

-- 
     # (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
    <kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)