[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[port139:01441] Re: ddコマンドオプション
- To: port139@xxxxxxxxxx
- Subject: [port139:01441] Re: ddコマンドオプション
- From: Kensuke Nezu <nez@xxxxxxxxxxx>
- Date: Mon, 05 Aug 2002 17:58:32 +0900
根津です。
Tanaka Souji wrote:
> FreeBSD の man では noerror を指定した場合の解説して、
> sync が指定されている場合には NULL を、sync が指定され
> ていなければ入力ブロックは削除されるとあります。
>
> Linux と FreeBSD では dd の実装に違いがあるのやもしれ
> ませぬが...インシデントレスポンス(ISBN-4798102954)で
> は以下のように記述されております。
>
> 5章 137ページより引用
> noerrorを指定した場合に回復不能なエラーが発生すると、
> dd は強制的にすべて0(もしくはNull)で埋められたセクタ
> ーを出力ストリームに書き出します。
>
> これは、sync が指定された場合の動作と考えてよいので
> しょうか?
syncが何を"同期"しようとしているか考えていただくとよいかと・・・。
元々、UNIXの世界ではファイルシステムを無視したデバイスレベルでの
I/Oにddが利用されていますので、「ブロック番号」を「同期」(=ずれが
生じさせない)ようにしないとファイルシステムそのものが破壊されてしまう
からではないかと思うのですが・・・。
i-nodeから基本ブロック−エクステント・・・とブロック番号でファイルの
実体が指定されるので、これが崩れるとfsは崩壊します。
> 読み取りエラーが発生した際に、noerror が指定されてい
> る場合、ブロックが削除されるのか 0 でパディングされる
> のかが知りたいのですが...
素直にUNIX的に考えると、0で埋めておいてからbsサイズ分のread()システムコール
を発行して、その結果をそのまま出力しそうな気がします。
つまり、I/Oエラーが発生した場合でも、そのチェックだけnoerror扱いにして、
そのまま出力するのが素直な実装に見えます。
#化けたまま読み込んでいたらそのまま出力する・・・ということです。
わざわざ0で埋め直してから出力したのでは、ddの意味がありません。
(ddはデータの中身を基本的に加工しちゃいけないと思う)
#もちろん、データとして読み込めるものが一切なくて、装置から1バイトも
#データが送られてこなかったり、ドライバが「ゴミ」と判断して捨てる実装
#だったりした場合は、当然、オール0になるでしょうが・・・。(^^ゞ
--
------
根津 研介 日本Sambaユーザ会 / セキュリティ・スタジアム実行委員会 / (株)ファム
日本Sambaユーザ会 : http://www.samba.gr.jp
セキュリティスタジアム : http://www.security-stadium.org <2002年もやります!>
ファムオープンソースセミナー : http://www.famm.jp
※日経ネットワークセキュリティ VOL.2 好評発売中
http://nikkeibyte.com/Books/#NikkeiNetworkSecurity2