tmpfs に unlink(2) のバグ発見 ― 2009年01月31日 13時21分42秒
以下のスクリプトで再現できる。
% cat unlink.sh
#!/bin/sh
echo @ cleaning
rm -rf a b
echo @ file is created and linked
echo "123" > a
ln a b
echo @ a and b should exist
ls -lsa
head a b
echo @ b is removed
#unlink b
rm b
echo @ only a should exist
ls -lsa
head a b
これが tmpfs 上で実行した結果。
% cd /mnt/tmpfs
% sh unlink.sh
@ cleaning
@ file is created and linked
@ a and b should exist
total 18
4 drwxrwxrwx 3 root wheel 80 1 31 04:26 .
2 drwxr-xr-x 19 root wheel 512 12 29 10:07 ..
4 -rw-r--r-- 2 uyota wheel 4 1 31 04:26 a
4 -rw-r--r-- 2 uyota wheel 4 1 31 04:26 b
==> a <==
123
==> b <==
123
@ b is removed
@ only a should exist
total 14
4 drwxrwxrwx 3 root wheel 60 1 31 04:26 .
2 drwxr-xr-x 19 root wheel 512 12 29 10:07 ..
4 -rw-r--r-- 1 uyota wheel 4 1 31 04:26 b
==> a <==
123
==> b <==
123
rm b
が行なわれたのに a が消えている。しかも a と b 共にファイルの中身は見ることが出来る。
こちらが ufs で行なった時の結果。
% cd /mnt/ufs
% sh unlink.sh
@ cleaning
@ file is created and linked
@ a and b should exist
total 8
2 drwxr-xr-x 2 uyota wheel 512 1 31 04:27 .
2 drwxrwxrwt 15 root wheel 512 1 31 04:27 ..
2 -rw-r--r-- 2 uyota wheel 4 1 31 04:27 a
2 -rw-r--r-- 2 uyota wheel 4 1 31 04:27 b
==> a <==
123
==> b <==
123
@ b is removed
@ only a should exist
total 6
2 drwxr-xr-x 2 uyota wheel 512 1 31 04:27 .
2 drwxrwxrwt 15 root wheel 512 1 31 04:27 ..
2 -rw-r--r-- 1 uyota wheel 4 1 31 04:27 a
==> a <==
123
こちらでは、正しく b が削除され、a しか表示されていない。つまり、このバグは tmpfs 特有のコードが起因となっている。
調べておく必要がある。
次回。
コメント
トラックバック
このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2009/01/31/4093576/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。