[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 (佐野 武俊)