cp: Input/output errorを無理やりコピーする

UNIX系のOSでファイルコピーをした際cp: Input/output errorが発生することがマレにある。

ストレージの不具合や突然の電源断でファイルシステムに不整合が発生し、データの読み書きに失敗した場合に発生するエラーである。これが発生した時点コピー処理は打ち切られ、残りのデータは一切コピーされなくなってしまう。

たとえファイルの完全復元が難しいと分かってはいても、吸えるデータは可能な限り吸っておきたいのが人情というもの。残りの正常かもしれないデータをみすみす棄ててしまうのは勿体ない。動画や音声なんかだと壊れたブロックの前後が欠落するだけで、全体としてみれば実用上問題ない事が殆どだし。

そんな時はcpioコマンドで、次のようにすると無理やりコピーができる。

find . -depth -print0 | cpio --null -pvd dstdir

本来の用途はファイルストリームを単一のファイルにアーカイブする事らしいんだけど、理屈はどうあれInput/output errorに負けずにディレクトリを丸々コピー出来る。