[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00764] Re: 質問: Linux の sd* デバイス上での WRITE_DIR
- Subject: [FDclone-users:00764] Re: 質問: Linux の sd* デバイス上での WRITE_DIR
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Wed, 02 Apr 2008 22:17:09 +0900
しらいです。
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」と反転すれば行けるかも知れません。
しらい たかし