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

[debian-users:08654] Re: fsck で毎回エラー



佐野@浜松です。


# [debian-users:08651] のメールはサーバーの設定ミスで
# スプールに溜まっていたものです。既に意味が無いので
# 無視して下さい。すみません。 _O_

私も試してみて、現象を確認しました。
 dselect は以下の dpkg パッケージに含まれるものです。

Package: dpkg
Essential: yes
Status: install ok installed
Priority: required
Section: base
Installed-Size: 874
Maintainer: Klee Dienes and Ian Jackson <dpkg-maint@xxxxxxxxxxxxxxxxxxxxxx>
Version: 1.4.0.23.2
Pre-Depends: libc6, libstdc++2.8 (>= 2.90.26-1), ncurses3.4
Description: Package maintenance system for Debian Linux
 This package contains the programs which handle the installation and
 removal of packages on your system.
 .
 The primary interface for the dpkg suite is the `dselect' program;
 a more low-level and less user-friendly interface is available in
 the form of the `dpkg' command.
 .
 In order to unpack and build Debian source packages you will need to
 install the developers' package `dpkg-dev' as well as this one.

私:
> あと、 fuser には -m オプションもあるみたいですが、これは使われてますよね ?
これは無関係でしたね。すみません。

機種は東芝 Portege660CDT で、 HDD は東芝製の 2GB です。が、近棟さんや
小島さんも書かれていたようにこの問題はハードに依存するものでは無いよう
です。

 hda1, hda2, hda3:DOS FAT16 (06),  hda4:Extended (05),
 hda5: Linux (83), hda6: Linux Swap (82) の状態から
( hda5 は昔の Slackware-3.1 が残っています) 
 hda3 の Partition ID を Linux (83) に変更して、 hamm の
 CD-ROM にある debian/hamm/main/disks-i386/2.0.10_1998-07-21/
の下から resc1440tecra-fast.bin と drv1440tecra.bin を dd で
 fd0 にコピーしました。ちなみに、最初 resc1440tecra-fast.bin を
コピーしたのは hda5 の Slackware からですが、あとの Partiiton ID
変更や driver disk のコピーはこの rescue ディスクから起動した
状態で実行しています。

で、普通に hda6 をスワップとして初期化、 hda3 を "/" として
 badblock check ありで初期化し、ネットワーク設定はスタンドアローン
で /dev/hdc の内蔵 ATAPI CD-ROM からインストールしました。

再起動後、最小構成として "Base" を選択。 dselect に入る前に
 Alt+Fn2 で別のコンソールに移動して touch /forcefsck と
 vi /etc/init.d/checkfs.sh を近棟さんの書かれた手順に従って
実行。

 dselect では /dev/hdc の CD-ROM からのインストールを選択。
そのまま Update, Select, Install, Config, Remove を実行。
(すべてデフォルトの選択で、何か設定したのは Config の smail 
の設定でローカルオンリーとしたくらい)

その後、 shutdown -r now で再起動。

起動時のメッセージを見ると、たしかに fsck を実行しています。
この時はエラーはありません。

続いて、近棟さんの手順書どおり gcc を dselect でインストール。
お勧めとして表示された gcc-doc などもすべて含めてインストール。
この時 libc6-dev が含まれていることを確認しています。

 Install, Config, Remove を実行。その後再起動すると、やはり
エラーが出ます。 "deleted inode has zero dtime ..." がひとつと、
その次に free bitmap 関連のエラーです。

ただし、この後にまた再起動すると、今度はエラーは出ません。

たしかにエラーが出ることは確認したので、原因を探すため、
ここでいったん dpkg --remove libc6-dev で libc6-dev パッケージ
を削除し、再び dselect で libc6-dev パッケージをインストール
しました。メッセージを注視していたのですが、 dselect の表示では
特に異常らしいものはありません。

そこで、 fuser -k /  (ここでログアウトするので再度ログイン) と
 fuser -m -k / (再びログイン) 、さらに mount -n -o remount,ro /
を実行し、 touch chk で "read only filesystem" と表示されること
を確認。 e2fsck を実行すると、 -f オプション無しでは "clean" と
なるが -f オプションを付けるとエラーが出ます。ここではそのまま
修正せずにおきます。

実は、この前後だったか、それともこの後もう一度試した時だったか
に df コマンドを実行してみたのですが、この出力がおかしいことに
気がつきました。そこで cat /etc/mtab を実行してみると、これが
デタラメな内容になっています。どうも /etc/ld.so.cache の古い
内容みたいです。 gzip + uuencode したものを添付します。

begin 644 chk.1.mtab.gz
M'XL("$AB$C8``V-H:RXQ+FUT86(`=92]:Q1!&,;WC`HB-E9BX4<G.;.7W1,O
M4530+@2L!"OC?MUFN;W=S7YHDLXF3>P4;+52$00K!2L1+"PB-A86*?0/$&P"
M5CXS^][NO'M[@9GG]SSOF]G;N9D+73V+%PQ]H"]J\YJFS6GEWPGBLQ@7B:]C
MW"8.,+:)GV*\)/Z,L4>\C_&7^'A'TTYW2M:A-XCO0#WB;>@N\0OH.^*OT)_$
M?Z"=0R6?@EX@O@9=);X/S8AWH<^(7T$_$'^'_B;^!STV5_)Y3%WB*YA6B!U,
M"?$.IB?$KS&])][#M$]\@.GHX9+/0.>)KT)7B.]!1\2/H(^)GT/?8.!C:1^A
M7RC_`?U%?"#J1TH^"3U'W(?>(KX+M8DWH#L8';$^]"WQ)^@WC#"PBR(0AT$W
MM!Y<CR7"Y$'8*%<)3):[3K<KK#DPM5Z1I9,V7N&!OC2K%95&,-!GKBMK(LJD
MK3[AQ`L,K<@7;E%?7M;[2W5/LX`L];(X?,#74C-I+3<,(J_9I*8(DGQ=9'+]
MJHN%PJ>Q(S<2;W*Y[F*I"*S(DQO>UR^QG6`%^"C+UJ(@X]\6"\D/@]!K:5-B
M2MRHI:T*)]YNZ;%9BQ./$RN?;E-S&87-GOJD1=[#O/R^3(-M`RL([Q1I5KZ(
MW+%)&X^1C+VH:-M7-1=6</W]D`6M!UD>IUMT%)0%6`'>=\O_XEUUJABCM46^
ME]]^SWQVR?Q9U\9OW)EAG([;7E[-83TSX4>]"@1OYN:P<??4#-9-1C[=`N4A
M=5J;M@99#OD#)KY"HU&2F^7:YO2.5Z'DQK)V57+2K:1Q6)5(N'B\YJ4I7X"%
MPO-CXU3'YF8:C[QH-7:LT.-/F:Z$[@)^5XI-]5$L4ITQW6!H_P'Z\.)YZ@<`
!````
`
end

そこで再起動をかけた後、今度は extIPL で hda4 を選択して hda5 の
 Slackware を起動し、 e2fsck -y /dev/hda3 >&chk.e2fsck.hda3 で
メッセージを記録しました。以下がその出力です。

e2fsck 1.04, 16-May-96 for EXT2 FS 0.5b, 95/08/09
/dev/hda3 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Unattached inode 32643
Connect to /lost+found? yes

Inode 32643 has ref count 0, expecting 1.
Set i_nlinks to count? yes

Pass 5: Checking group summary information
Fix summary information? yes

Block bitmap differences: -131755.  FIXED
Free blocks count wrong for group 16 (7562, counted=7563).  FIXED
Free blocks count wrong (434989, counted=434990).  FIXED

/dev/hda3: ***** FILE SYSTEM WAS MODIFIED *****
/dev/hda3: 9771/128016 files (0.5% non-contiguous), 77074/512064 blocks

ここで /dev/hda3 を /mnt にマウントし、 file /mnt/lost+found/* と
cat /mnt/lost+found/* を実行した結果を下に付けます。

file : 
/mnt/lost+found/#32643: ascii text
cat : 
/dev/hda3 / ext2 rw 0 0
/dev/hdc /var/lib/dpkg/methods/mnt iso9660 ro 0 0

内容から見て、 dselect で CD-ROM をマウントしていた
時の /etc/mtab だと思われます。

この後、また /dev/hda3 の hamm から再起動してメッセージを見ると
 fsck を実行していること、エラーは出ないことを確認できました。

さらにもう一度、 dpkg --remove libc6-dev と dselect による
 CD-ROM からの libc6-dev のインストールを繰り返してみて、
各ステップで  ls -i /etc/mtab, /etc/ld.so.cache, /etc/ld.so.conf 
と cat /etc/mtab を別のコンソールから実行してどこで変化が起きる
のか調べてみることにしました。

 dselect 実行前の cat /etc/mtab は
/dev/hda3 / ext2 rw,errors=remount-ro 0 0
proc /proc proc rw 0 0

 dselect の Install での /etc/mtab は
/dev/hda3 / ext2 rw,errors=remount-ro 0 0
proc /proc proc rw 0 0
/dev/hdc /var/lib/dpkg/methods/mnt iso9660 ro,nosuid,nodev 0 0

 dselect の Config での /etc/mtab は
/dev/hda3 / ext2 rw,errors=remount-ro 0 0
proc /proc proc rw 0 0

 dselect の Remove での /etc/mtab は
/dev/hda3 / ext2 rw,errors=remount-ro 0 0
proc /proc proc rw 0 0

となり、この時は mtab の内容にはおかしな点はありませんでした。
しかし ls -i の出力は dselect 実行前から Config 終了まで

  32637 /etc/ld.so.cache  32573 /etc/ld.so.conf  32645 /etc/mtab

に対し、 Remove 終了後は

  32637 /etc/ld.so.cache  32573 /etc/ld.so.conf  32646 /etc/mtab

となり、 /etc/mtab だけ inode が変更されています。この時は上に
書いたように cat /etc/mtab でも異常は無く、かつそのまま
 shutdown -r now を実行しても再起動時の fsck でエラーはでません。
 (fsck が実行されていることは確認しています。)

ちなみに、再起動後に再び ls -i を調べると、

  32637 /etc/ld.so.cache  32573 /etc/ld.so.conf  32645 /etc/mtab

と dselect 実行前の inode に戻っていました。 (?)

 dselect で Remove を実行した時のメッセージは

dpkg --pending --remove ...

だけなんですけど、これ (dpkg の実行) 以外にも何か dselect が
独自にやっていることがあるのでしょうか。 hamm の dselect の
コードはまだ読んでいないので確認できていないです。

# bo のコードはちょっと眺めたけど、 .cc なんですね。 C++ は
# 経験無いんでちょっと読解に苦労するかも。コメント読むだけなら
# できるでしょうけれど。

 bo の時はこのような問題は起きなかったような気がするのですが、
記憶違いなのか、それとも hamm の問題なのか、どちらでしょう ?

まだ本家の BTS も JP の BTS もチェックしていないので、
ひょっとしたら既にバグとして報告されているのかもしれないですが、
一応現象を確認したという報告をこちらにしておきます。

以上。

-- 
 <sano@xxxxxxxxxxxxxxxxxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)