ddコマンドを信頼してよいのか

  • 投稿日:
  • by
  • カテゴリ:



ちょっと不安になってきました。



以前とても古いノートPCのHDDの換装をおこなう際、ddコマンドの挙動に悩まされました。


ddコマンドに



conv=noerror,sync



と指定しておけば、badセクターがあっても、とりあえずディスクのクローンは成功するものと思っていました。


# badセクタはnullデータに化け手も仕方がないものとして。


例えば、以下のようなハウツーでも「noerror,sync」がデフォルト指定になっています。


Learn The DD Command Revised


http://www.linuxquestions.org/questions/linux-newbie-8/learn-the-dd-command-362506/


ですが、クローンにかかる時間を節約しようと、bs=512ではなくて、bs=1mとかbs=100mとかすると、古いノートPCでは途中から、セクタがずれる現象に見舞われました。レコード指定と組み合わせて、リードエラー発生前後でずれることはなんとなく分かったのですが。


どうしようもないので、ddによるクローンはあきらめて、リカバリディスクによるリカバリとデータのコピーでごまかしました。


時間ができたら調べようと思って、今日ググったら同じ事を言っている人が見つかりました。


(FreeBSD) ddコマンドでパーティションまるごと高速コピー・・・しようとして、ちょっとハマった


http://nhh.mo-blog.jp/ttt/2007/09/freebsd_dd_f935.html



今回、これが、なぜか、うまくいきませんでした。どういうわけか、途中から、セクタがずれていってしまうのです。



私はKNOPPIXで作業したのでFreeBSDではないのですが。


さらに探すと、FreeBSD上について妙なことをいっている人を見つけました。


/bin/dd fails with big disks containing bad sectors


http://unix.derkeiler.com/Mailing-Lists/FreeBSD/hackers/2007-01/msg00063.html



If you have a defective disk larger than 2 gb with many bad sectors and attempt to use


dd under FreeBSD to duplicate the disk, the operation will fail with sectors being out of alignment.


2GB以上でbadセクターが多数ある壊れたディスクを持っていて、FreeBSD上でddを遣ってディスクを複製しようとすると、セクタの配置がおかしくなって失敗する。


dd bs=512 if=src of=dst conv=noerror,sync


Under Linux, this operation performs as expected.


Linux上では、期待したとおりに機能する



この人はFreeBSDのカーネルを疑っているようでしたが、↓↓↓こちらでも放置されているようなので、どうにも。


kern/107443: dd(1) fails to copy from disk to disk when bad sectors are involved


http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/107443


ddrescueとかreceverdiskなどのツール名が出てくるので、badセクタがあるディスクをddコマンドで複製するのは避けるのが不文律になっている雰囲気すら漂ってきます。


ちなみにddの実装は今はcoreutilsに入っているようです。ソースを見てみようという猛者は以下からどうぞ。OS/カーネル/ドライバの問題の場合はddの実装は無実なわけですが。


Coreutils - GNU core utilities


http://www.gnu.org/software/coreutils/


src/dd.cがそれのようです。



リンク


http://d.hatena.ne.jp/syasuda/20090208/1234076670


http://d.hatena.ne.jp/syasuda/20090201/1233487586