[過去ログ] /**ファイルシステム総合スレ その7**/ (955レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
81(12): 2007/03/20(火)02:26 ID:9XkrolDx(1/9) AAS
普段、/ をroでマウントしており、特定の変更をするときにスクリプト内で
# mount -o remount,rw /
# <何か変更をする>
# mount -o remount, ro /
しかし時々気がつくと/がrwのままになっており, roにしようとすると
mount: / is busy
と帰ってきます。
しかし
# lsof +D / | grep [0-9][ru]
としても何も出力されないので/ファイルシステム上で書き込み、更新のためにオープンされているファイルが
省1
82(1): 2007/03/20(火)02:49 ID:WFL4qjLS(2/2) AAS
>>81
実行している
じっこうしている
ジッコウシテイル
171: 81 2007/04/06(金)04:19 ID:kERYUymx(1/9) AAS
mount -o mount,ro / がbusy で帰ってきて困ってた81(80と間違えてた)です。
2週間ほどたってやっと再現されました。 しかもラッキーに2台。追加したprintk
から以下のような出力。
fs_may_remount_ro found pending delete: 0xe6feac80
do_remount_sb: failed fs_may_remount_ro: -138124224
do_mount: failed do_remount: -16
大切なのは最初の1行で以下のprintkから出力されました。
fs/file_table.c:
int fs_may_remount_ro(struct super_block *sb)
{
省10
172: 81 2007/04/06(金)04:29 ID:kERYUymx(2/9) AAS
さて、まずどのファイルか? gdbを/proc/kcoreに繋いで除きました。
(gdb) p ((struct file*)0xe6feac80)->f_dentry->d_iname
$12 = "libz.so.1.2.1.2", '¥0' <repeats 20 times>
gdb) p ((struct file*)0xe6feac80)->f_dentry->d_parent->d_iname
$14 = "lib¥000t", '¥0' <repeats 30 times>
(gdb) p ((struct file*)0xe6feac80)->f_dentry->d_parent->d_parent->d_iname
$16 = "usr¥000]", '¥0' <repeats 30 times>
(gdb) p ((struct file*)0xe6feac80)->f_dentry->d_parent->d_parent->d_parent->d_iname
$18 = "/¥000dline", '¥0' <repeats 28 times>
というわけで問題のファイルは"/usr/lib/libz.so.1.2.1.2"
省2
173: 81 2007/04/06(金)04:41 ID:kERYUymx(3/9) AAS
もうちょっと掘り下げる。
(gdb) p ((struct file*)0xe6feac80)->f_dentry->d_inode.i_ino
$24 = 230991
iノード番号は230991。
# ls -li /usr/lib/libz.so.1.2.1.2
231021 -rwxr-xr-x 1 root root 63624 Jul 21 2005 /usr/lib/libz.so.1.2.1.2
??? 食い違うぞ ???
省11
174: 81 2007/04/06(金)04:50 ID:kERYUymx(4/9) AAS
それでもってntpがどういうファイルを開いているか見ると、なんか怪しげな状態。
# lsof | grep ntp
ntpd 21393 ntp cwd DIR 3,3 4096 2 /
ntpd 21393 ntp rtd DIR 3,3 4096 2 /
ntpd 21393 ntp txt REG 3,3 431016 227728 /usr/sbin/ntpd
ntpd 21393 ntp mem REG 3,3 230494 /usr/lib/libkrb5.so.3.2 (path inode=231028)
ntpd 21393 ntp mem REG 3,3 194104 /lib/libdl-2.3.4.so (path inode=195480)
ntpd 21393 ntp mem REG 3,3 47468 194100 /lib/libnss_files-2.3.4.so
ntpd 21393 ntp mem REG 3,3 210587 /lib/tls/libc-2.3.4.so (path inode=210651)
ntpd 21393 ntp mem REG 3,3 194115 /lib/libcom_err.so.2.1 (path inode=195486)
省10
175: 81 2007/04/06(金)04:52 ID:kERYUymx(5/9) AAS
ちなみに正常(?)な状態のntpはこんな感じ。
proto5# lsof | grep ntp
ntpd 2101 ntp cwd DIR 3,2 4096 2 /
ntpd 2101 ntp rtd DIR 3,2 4096 2 /
ntpd 2101 ntp txt REG 3,2 431016 241991 /usr/sbin/ntpd
ntpd 2101 ntp mem REG 3,2 941024 260982 /lib/libcrypto.so.0.9.7a
ntpd 2101 ntp mem REG 3,2 11776 260970 /lib/libcap.so.1.10
ntpd 2101 ntp mem REG 3,2 1525004 177572 /lib/tls/libc-2.3.4.so
ntpd 2101 ntp mem REG 3,2 16800 294968 /lib/libdl-2.3.4.so
ntpd 2101 ntp mem REG 3,2 415188 247066 /usr/lib/libkrb5.so.3.2
省9
176: 81 2007/04/06(金)04:56 ID:kERYUymx(6/9) AAS
ちなみにこの症状は問題のおこった2つのシステムでまったく同じ。
おなじlibz.soでひっかかり、やはりntpが同じような状態になってます。
さて、この"path inode"というのがキモのようですが、なんの事か
全然分からないからどこかで調べてきます。
ここまでの情報で何か助言があればよろしくおねがいします。
177: 81 2007/04/06(金)05:25 ID:kERYUymx(7/9) AAS
なお、問題のあるシステムでは問題のあるのはntpだけでありません。
# lsof | grep "path inode" | cut -d" " -f1 | sort | uniq
agetty
crond
ifplugd
klogd
mingetty
ntpd
portmap
syslogd
省4
179: 81 2007/04/06(金)06:12 ID:kERYUymx(8/9) AAS
>>178
そっ、それだ〜〜〜〜〜〜〜〜〜〜〜〜。
こんなもの見つけました。
/etc/cron.daily/prelink
一発で再現出来ました。
正常状態:
省14
181: 81 2007/04/06(金)07:16 ID:kERYUymx(9/9) AAS
>>180
ありがとうございます。
> lsof の出力に path inode が出ているのは、オープン中に置き換えられたファイル
普通のファイルのように素直に"deleted"とか書いてくれればもっと早く解決したかもしれないんですけどね。
ちょっとその場合とは意味が違うのでしょう。 後で勉強したいと思います。
# cat > hoge.txt &
[1] 9317
# lsof | grep hoge.txt
cat 9317 root 1w REG 253,0 0 15 /hoge.txt
# rm hoge.txt
省2
194(2): 81 2007/04/08(日)04:25 ID:HBM8UdKZ(1/2) AAS
>>187
いや、自分の場合はrootをr/oにするというハックをしている状況なのでハマっただけです。
組み込み系のアプライアンスのための要求なので普通のホストシステムならたぶん問題はないでしょう。
しかし今回の経験で学んだのは、Linuxホストのrootをr/oにするっていうノウハウがあまり
確立されてないという事。漠然とセキュリティーのためにそうする事もあるという事を
見聞きしてましたが、今回のことも含め、ハマる穴は沢山ありそうです。
198: 81 2007/04/08(日)12:57 ID:HBM8UdKZ(2/2) AAS
>>196
失礼しました。 単にCentOSをアプライアンスとしてカスタムインストールしているだけです。
「組み込み」とはいっても中身はPCマザボの普通のサーバーですので。 面白いのは色々とごちょごちょ
いじっている時に/etc/rc.d/rc.sysinitにこんなコードを見つけた事:
if [ -f /etc/sysconfig/readonly-root ]; then
. /etc/sysconfig/readonly-root
if [ "$READONLY" = "yes" ]; then
# Call rc.readonly to set up magic stuff needed for readonly root
. /etc/rc.readonly
fi
省3
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.039s