ZFS では使えないハードディスクもあるようだ2009年03月04日 14時08分13秒

4GB のディスクは容量が少なくて大変なので、圧縮の行なえる ZFS を試してみることにした。

zfs 自体は調べた通りに作業を行なえば問題なくできた。zfs のコマンドに不慣れなので、どのコマンドを使えば良いかを調べるのに手間取ったりもしたが、しっかりと動いているように見えた。

しかし、zfs が時折エラーを吐く。


(da0:umass-sim0:0:0:0): SYNCHRONIZE CACHE. CDB: 35 0 0 0 0 0 0 0 0 0
(da0:umass-sim0:0:0:0): CAM Status: SCSI Status Error
(da0:umass-sim0:0:0:0): SCSI Status: Check Condition
(da0:umass-sim0:0:0:0): ILLEGAL REQUEST asc:24,0
(da0:umass-sim0:0:0:0): Invalid field in CDB
(da0:umass-sim0:0:0:0): Unretryable error
(da0:umass-sim0:0:0:0): SYNCHRONIZE CACHE. CDB: 35 0 0 0 0 0 0 0 0 0
(da0:umass-sim0:0:0:0): CAM Status: SCSI Status Error
(da0:umass-sim0:0:0:0): SCSI Status: Check Condition
(da0:umass-sim0:0:0:0): ILLEGAL REQUEST asc:24,0
(da0:umass-sim0:0:0:0): Invalid field in CDB
(da0:umass-sim0:0:0:0): Unretryable error
ZFSvdev I/O failure, zpool=scratch path=/dev/da0p2 offset=169369600 size=89088 e
rror=5
ZFSvdev I/O failure, zpool=scratch path=/dev/da0p2 offset=183566336 size=65536 e
rror=5
(da0:umass-sim0:0:0:0): SYNCHRONIZE CACHE. CDB: 35 0 0 0 0 0 0 0 0 0
(da0:umass-sim0:0:0:0): CAM Status: SCSI Status Error
(da0:umass-sim0:0:0:0): SCSI Status: Check Condition
(da0:umass-sim0:0:0:0): ILLEGAL REQUEST asc:24,0
(da0:umass-sim0:0:0:0): Invalid field in CDB
(da0:umass-sim0:0:0:0): Unretryable error
(da0:umass-sim0:0:0:0): SYNCHRONIZE CACHE. CDB: 35 0 0 0 0 0 0 0 0 0
(da0:umass-sim0:0:0:0): CAM Status: SCSI Status Error
(da0:umass-sim0:0:0:0): SCSI Status: Check Condition
(da0:umass-sim0:0:0:0): ILLEGAL REQUEST asc:24,0
(da0:umass-sim0:0:0:0): Invalid field in CDB
(da0:umass-sim0:0:0:0): Unretryable error

ディスクイメージからファイルを復旧している最中なので、ファイルを調べてみたが問題はない。しかし、ディスクが忙しいとき程このエーラが沢山出て来る。

エラーを良く見直してみると、見覚えのあるエラーだった。


GEOM_JOURNAL: Journal 2697262758: da0p2 contains journal.
GEOM_JOURNAL: Journal 2697262758: da0p1 contains data.
GEOM_JOURNAL: Journal da0p1 clean.
(da0:umass-sim0:0:0:0): SYNCHRONIZE CACHE. CDB: 35 0 0 0 0 0 0 0 0 0 
(da0:umass-sim0:0:0:0): CAM Status: SCSI Status Error
(da0:umass-sim0:0:0:0): SCSI Status: Check Condition
(da0:umass-sim0:0:0:0): ILLEGAL REQUEST asc:24,0
(da0:umass-sim0:0:0:0): Invalid field in CDB
(da0:umass-sim0:0:0:0): Unretryable error
GEOM_JOURNAL: BIO_FLUSH not supported by da0p2.
(da0:umass-sim0:0:0:0): SYNCHRONIZE CACHE. CDB: 35 0 0 0 0 0 0 0 0 0 
(da0:umass-sim0:0:0:0): CAM Status: SCSI Status Error
(da0:umass-sim0:0:0:0): SCSI Status: Check Condition
(da0:umass-sim0:0:0:0): ILLEGAL REQUEST asc:24,0
(da0:umass-sim0:0:0:0): Invalid field in CDB
(da0:umass-sim0:0:0:0): Unretryable error
GEOM_JOURNAL: BIO_FLUSH not supported by da0p1.

gjournal を使う時とエラーが同じだ。gjournal は IO の FLUSH が実装されていないと報告してくる。zfs も恐らく同じ理由だろう。

使っているとあまりにこのエラーが多くて、実用に耐えられなかった。結局、gjounral に戻した。この 1998 年製の 2.5 inch ディスクが悪いのか、USB アダプタが悪いのかは判らない。しかし、zfs に使うためには、FLUSH コマンドが使えるディスクでなければいけないようだ。

次回

コメント

_ yamasa ― 2009年03月10日 15時47分58秒

このようなUSBデバイスをうまく動かすための仕組みが umass.c には用意されています。
http://svn.freebsd.org/viewvc/base/head/sys/dev/usb/storage/umass.c?view=markup
対象デバイスのIDを調べ、quirkとして NO_SYNCHRONIZE_CACHE を
指定してやると、今回のようなエラーは出なくなるはずです。
(プロトコルの部分は、大抵の場合
UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
でよいはずです。)

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2009/03/04/4151194/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。