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

[debian-users:17950] Re: apt-get failed!



佐野@浜松です。

In article <003201bf04f5$ede527e0$b77cd9ca@tochi>
 "Ippei Tamura" <ippei1@xxxxxxxxxxxx> さん writes:

>  > とりあえずこれでログインして、まず cat /etc/mtab してみましょう。
>  > 最初の行の最後が ro になっていませんか ?
> 
> 
> 御意。1行目の表示は下記の通りです。
> /dev/hda1 / ext2 rw, errors=remount-ro, errors=remount-ro 0 0

これで見ると、/etc/mtab はリセットした瞬間のままになっていますね。
 (考えてみればあたりまえか)

 cat /etc/mtab すると他の /home や /var などもきっと出てくるのでしょう。

 ext2 の次の "rw" が read / write 可能な状態でマウントされていることを
示しています。が、実際には ro (read only) でマウントされている状態な
はずなので、ここでもう実態とファイルの内容が食い違っているわけです。

>  > それから e2fsck -p /dev/hda1; e2fsck -p /dev/hda2; e2fsck -p /dev/hda3 を
>  > 実行してみましょう。いくつかエラーメッセージが出ても、最後にちゃんと
>  >  "Filesystem modified" となって終了して、その後 e2fsck を実行した時に
>  >  "clean" と出るようなら OK です。
> 
> 御意。見事に各パーティションのチェックが始まりました。
> いっさいエラーメッセージが出ずに無事終了。
> その後、改めて e2fsck とやると、ちゃんと clean だと言ってくれます。

おお。良かったですね。これでまずは filesystem が無事だということを
確認できました。

>  > 次に手動で / をマウントします。この場合は mount /dev/hda1 /; ですね。
> 
> おや?すでに / にマウント済みだと言われてしまいました。

 /etc/mtab に "rw" と書かれているので、あれですね、、、

むつみさんが書かれたように

  mount -n -o remount,rw / 

を実行してください。 -n は man mount で調べると /etc/mtab に
書き込みをしないで mount を実行、 -o remount,rw は既にマウント
されているパーティションを状態を変えて (ro -> rw) マウントし直す、
最後の "/" はルートパーティションを対象、という意味です。

たぶん /etc/fstab に /dev/hda1 が / であることが書かれているので、

  mount -n -o remount,rw /dev/hda1 / 

としなくても ( /dev/hda1 を省略しても) 問題無いはずです。

良く見ると /etc/rcS.d/S10checkroot.sh にこのコマンドが書いてありますね。

もしかすると、sulogin でログインした状態、fsck が完了した状態の後で

 . /etc/init.d/checkroot.sh

を実行する、というのが一番楽なのかも。

最初の点は "." (ピリオド) で、次に示すファイル名を現在使っている shell で
読み込んで実行することを意味します。

もしかしたら /bin/bash /etc/init.d/checkroot.sh でもいいかもしれませんが、
気分的に "." で実行したい感じなので。

> > そして cd /bin; で /bin に移動し、ls -l *sh してください。
> 
> 御意。表示は下記の通りです。
> bash
> csh -> /etc/alternatives/csh
> fdflush
> rbash -> bash
> 
> やはり sh はありません。

 /bin/sh が消えてしまったのですね。私が経験したのと同じトラブルです。
最初に apt-get upgrade が途中で止まったのも、これが原因です。
パッケージの管理に使われる postinto, prerm などのスクリプトが /bin/sh を
必要とするので、/bin/sh が消えたことによってこれが実行できなくなって
止まってしまったのです。

この時点で cd /bin; ln -s bash sh; を実行すれば、たぶんすぐに
回復できたはずです。「動いているうち」に原因を突き止めることが
重要です。前回書いたように rm -rf / を実行してもカーネルやデーモンは
正常に動作を続けます。 /bin/sh が無くなったくらいですぐにシステムが
復活できないほどにおかしくなったりすることはありません。

>  > ここでもし sh が存在しなければ、 ln -s bash sh; を実行します。
> 
> ここでつまづきました(涙)。以下のエラーメッセージがでてしまいます。
> cannot create symbolic link 'sh' to 'bash': Read-only file sytem
>
> 念のため cat /etc/mtab とやると、先程と同じメッセージが出ます。
> どうすれば /dev/hda1 のリードオンリー属性を解除できるのでしょう?

 a) . /etc/init.d/checkroot.sh
 b) /bin/bash /etc/init.d/checkroot.sh
 c) mount -n -o remount,rw /

どれでもお好きなのをどうぞ。

これで / が rw でマウントできたら、cd /bin; ln -s bash sh; して
 sync;sync;sync; shutdown -r now; で再起動してみましょう。

> たびたびで申し訳ありませんが、なにとぞご教示ください。
> すこしずつ蘇生しつつあるように見える tochi (ホスト名です) が愛おしくて、
> 再インストールなど考えられません(嗚咽)。

 filesystem が無事だったようですから、たぶん問題無いでしょう。
あと一歩ですね。 :)

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