阿部です。

可能なら助言をいただきたいのですが、
長い文章なので興味のない方は無視して下さい。


FreeBSD 9.0-RELEASE 上で ports/sysutils/fusefs-kmod と fusefs-sshfs を
利用して、remote ホストとのファイルのやり取りを行っています。

それぞれの ports は FreeBSD 9.0-RELEASE にアップグレードした際に、
portsnap update で最新版にしてアップデートしました。
fusefs-kmod-0.3.9.p1.20080208_8 と fusefs-sshfs-2.3 です。

/etc/rc.conf には fusefs_enable="YES" のみ記述してあり、
FreeBSD 起動時に fuse.ko が自動的に読み込まれます。


sshfs は次のように実行しています。

        local% sshfs remote: ~/fuse

remote はレンタルサーバのホスト名に該当します。
local はローカルの FreeBSD マシンです。
remote と local は共に FreeBSD 9.0-RELEASE で UID/GID も同一構成です。

この状態で、

        local% cp -p file.txt ~/fuse/

と実行すると、ローカルの FreeBSD が Panic して再起動します。
-p オプションがない cp では、問題ありません。


FreeBSD 8.2-RELEASE の頃は、sshfs でマウントしたファイルシステムに
cp -p でファイルをコピーしても問題なかったのですが、
FreeBSD 9.0-RELEASE だと必ず FreeBSD が Panic して再起動します。

このとき、以下のログが記録されていました。

kernel: 
kernel: Fatal trap 12: page fault while in kernel mode
kernel: cpuid = 0; apic id = 00
kernel: fault virtual address   = 0x0
kernel: fault code              = supervisor read, page not present
kernel: instruction pointer     = 0x20:0x0
kernel: stack pointer           = 0x28:0xdf1e1c48
kernel: frame pointer           = 0x28:0xdf1e1c70
kernel: code segment            = base 0x0, limit 0xfffff, type 0x1b
kernel: = DPL 0, pres 1, def32 1, gran 1
kernel: processor eflags        = interrupt enabled, resume, IOPL = 0
kernel: current process         = 3349 (cp)
kernel: trap number             = 12
kernel: panic: page fault
kernel: cpuid = 0
kernel: KDB: stack backtrace:
kernel: #0 0xc0a4b157 at kdb_backtrace+0x47
kernel: #1 0xc0a186b7 at panic+0x117
kernel: #2 0xc0d48cf3 at trap_fatal+0x323
kernel: #3 0xc0d48dad at trap_pfault+0xad
kernel: #4 0xc0d49b35 at trap+0x465
kernel: #5 0xc0d32a8c at calltrap+0x6
kernel: #6 0xc0d49315 at syscall+0x355
kernel: #7 0xc0d32af1 at Xint0x80_syscall+0x21
kernel: Uptime: 8h14m57s


さて、このような問題が起こるのですが、
この場合はどこから調査すると良いでしょうか?

手始めに、FreeBSD のサイトの CVS リポジトリで /usr/src/bin/cp 以下の
ソースコードを調べたのですが、cp.c は 20ヶ月前、 utils.c は 22ヶ月前から
変更がないようです。

この問題を解決する手がかりとなる助言や情報などを教えていただけると助かります。

最終手段としては、多少強引ですが cp コマンドのソースコードで、
コピー先のファイルシステムが fusefs.sshfs の場合は -p オプションを
無視するように改変しようかと考えています。

ただ、この方法はスマートじゃない気がするので、うまい解決策を知りたいです。
-- 
阿部康一/Kouichi ABE (WALL)
koui...@mysticwall.com
http://www.MysticWALL.COM/ (Personal)
http://www.MagickWorX.COM/ (Business)

メールによる返信