[sugj-tech:6908] SambaのDISK FULLバグ
Samba-JP oota
ribbon @ samba.gr.jp
2007年 1月 29日 (月) 12:54:14 JST
太田@さんばです。
以下、Sambaのバグの連絡があり、その情報について公開してもよいということなので
ここに報告します。
1. 条件
Samba 3.0.xで2TB以上のファイルシステムを使う場合。
2. 現象
Windows2003からエクスプローラでファイルをコピーすると、ディスク容量があるのに
"エラー:空きディスク領域が足りません"
というエラーメッセージが表示される。
Windows2003で常時発生する。
3. 原因
#以下は情報提供元からのメッセージをそのまま引用します。
samba でファイルシステムの空き容量を計算する部分で、計算結果を
格納する変数に int を使用している部分があり、ファイルシステム
サイズが大きい場合に、桁あふれを起こし、空き容量が足りないと
判断して、DISK FULL を返しています。
-------- 参考
具体的には、dfree_retval の変数が int となっており、最後の空き容量を
計算する部分で、桁あふれを起こして、空き容量が0として返されてしまって
います。 dfree_retval を SMB_BIG_UINT (unsigned long long) に変更
することで、この問題が起こらなくなることが確認できました。
------ quote of smbd/dfree.c
static SMB_BIG_UINT disk_free(const char *path, BOOL small_query,
SMB_BIG_UINT *bsize,SMB_BIG_UINT *dfree,SMB_BIG_UINT *dsize) {
int dfree_retval;
... snip ...
if ((*bsize) < 1024) {
dfree_retval = (*dfree)/(1024/(*bsize));
} else {
dfree_retval = ((*bsize)/1024)*(*dfree);
}
return(dfree_retval);
}
------ unquote
4. その他
ちょっとbugzilla を見てみましたが、該当するような障害はないようです。
sugj-tech メーリングリストの案内