UNIX系のOSでファイルコピーをした際cp: Input/output error
が発生することがマレにある。
ストレージの不具合や突然の電源断でファイルシステムに不整合が発生し、データの読み書きに失敗した場合に発生するエラーである。これが発生した時点コピー処理は打ち切られ、残りのデータは一切コピーされなくなってしまう。
たとえファイルの完全復元が難しいと分かってはいても、吸えるデータは可能な限り吸っておきたいのが人情というもの。残りの正常かもしれないデータをみすみす棄ててしまうのは勿体ない。動画や音声なんかだと壊れたブロックの前後が欠落するだけで、全体としてみれば実用上問題ない事が殆どだし。
そんな時はcpio
コマンドで、次のようにすると無理やりコピーができる。
find . -depth -print0 | cpio --null -pvd dstdir
本来の用途はファイルストリームを単一のファイルにアーカイブする事らしいんだけど、理屈はどうあれInput/output error
に負けずにディレクトリを丸々コピー出来る。