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

[FDclone-users:00764] Re: 質問: Linux の sd* デバイス上での WRITE_DIR



 しらいです。

In Message-Id <20080402115940.GA32008@trix.islocal>
        Takeshi Hamasaki <hma@syd.odn.ne.jp>さんwrites:
> 濱崎です。

> 最近の(2.6.23,2.6.24) Linux カーネルで、sd* デバイス (SCSI のディスクドライバ)
> を使用してアクセスするパーティション上のファイルシステムに対して WRITE_DIR を
> 正常に使えている方、いらっしゃいますか?

 file の並べ替え機能は多分に場当たり的な対応なので、新しい
枠組が出て来る度に色々と不整合が起きています。開発当初は色々
な filesystem 上でテストしたものです。
 当時の test program が残っているので、これを試してみます?
	ftp://ftp.unixusers.net/src/fdclone/old/misc/checkfs.c

 これを実行した場合、例えば ext3 の hd device だとこういう
出力が得られます。

---- Cut Here ----
#### File System Check on <CheckDir> with seed [1207405265] ####
DirBlocksize: 4096, Maxfile: 341, Entsize: 12.011
LastEntChar: 20, LastEntSize: 28
FirstEntChar: 4
LastEntChar: 20->16, Boundary: 4
Ent = ((strlen(filename) + 3) / 4 + 1) * 4 + 4 + 0
Header = 0(bytes)
Dirsize: 4096 (OK)
#### Make Files ####
#### Shuffle Files ####
#### Write Dir ####
#### Check Dir ####
---- Cut Here ----

 この中の「Header」の値が file.c の arrangedir() 内変数の
headbyte です。また、「Ent」の値の後半が arrangedir() 内変
数では以下のように対応しています。
 + namofs) / boundary + 1) * boundary + dirsize + ptrsize

 最後の ptrsize だけは arrangedir() にはありませんね。色々
調べた結果 0 以外の環境が見つからなかったので 0 で決め打ち
にしてあるからです。

 ここで調べた parameter を arrangedir() で使うと、多分正し
く並べ替えられると思います。
 但し、最後の「Check Dir」以降にだらだらと表示がされた場合
は、正しく並べ替えが出来なかったということなので、その場合
は各 parameter 値は無効です。


> いろいろ試した結果、hd* デバイスと sd* デバイスとで WRITE_DIR の結果
> (というより挙動)が異なるのではないかと思ったので、 ML で尋ねてみることにした
> 次第です。

 もし、同じ ext3 でも hd* と sd* とで状況が異なるようなら、
並べ替え時の parameter は filesystem name のみから決まりま
すので、どちらの device にも対応させることは無理です。
 多分 parameter 値が微妙に異なるだけなんじゃないかと思うん
ですが、テスト結果を見てみないことにはこれ以上は何とも判断し
兼ねます。


> vfat: 2パターンある
> 	1) WRITE_DIR すると、ソート結果を反映しようとしたことがわかります。
> 	   ただし、先頭に来るべきファイルが最後にあります。 (x86_64, 2.6.23)
>     2) ランダムな文字列: Invalid argument というメッセージが出て、
> 	   WRITE_DIR できない                               (x86,    2.6.23)

 FAT は特殊な directory 構造をしているので、多分上記の test
program では失敗すると思います。「#if MSDOS」となっている箇
所を幾つか「#if !MSDOS」と反転すれば行けるかも知れません。

                                               しらい たかし