
Ubuntu日本語フォーラム

ログインしていません。
ddコマンドでバックアップを取ろうとしているのですが、コピー速度が時間と共に低下してしまいます。
初めは5MB/sだったのが後に2MB/sのように徐々に落ちていきます。
対象のパーティションが100GBもあるのでこれでは時間がかかりすぎてしまいます。
コマンドは以下のように打っています
# dd if=/dev/sda1 of=/media/sdb1/20091221XP.img conv=noerror,sync bs=512 count=196000000
コピー元、コピー先はともにWinXPでフォーマットしたNTFSです。
コピー速度が徐々に低下する現象について原因が分かる方が居ましたら回答よろしくお願いします。
オフライン
ぱっと思いつくのは2つぐらいです。
1.だんだん外周に行くので、外周になるに従いアクセス速度が速くなる・・・あれ?逆?
2.入力側は、物理レコード番号で直接参照しているが、出力先がファイルシステム上に生成している一般ファイルだとすると、そのファイルシステム依存している。大抵の場合、巨大なファイルシステムをどんどん追加書きするのは時間が掛かる・・・・と思う。
3.キャッシュの容量を超えるとき(特に書き込みキャッシュ)にがくっと遅くなると言うのがありますが、徐々に遅くなるのであれば、違う原因と考えられます。
# もしかして、今までを平均した転送速度でしょうか?だとすると、実際には、ある時点を区切りに「がくっ」と遅くなったものが、見た目としてはだんだん遅くなっているように見えてしまうかもしれません。
もし、2の原因だとすると、コピー先をファイルではなくデバイスにする(それようのデバイスを1つ用意する)ことで、改善する可能性があります(逆に、それ以外の回避策は難しいということになります。もしくは、ファイルシステムを変更すると改善するかもしれません。Linuxからnftsは苦手そうな気がしますし。)
オフライン
# dd if=/dev/sda1 of=/dev/sdc2 conv=noerror,sync bs=512 count=196000000
このようにパーティション(/sda1)をイメージファイルにするのではなく別パーティション(/sdc2)にそのままコピーするようにしてみました。
(weykさんの言いたかったことはこれで良かったでしょうか?)
これで1分ごとのコピーの速度を
# while true; do killall -USR1 dd; sleep 60; done
で確認してみました。
開始して10分間の結果は以下の通りです。(長くて申し訳ない)
414826496 バイト (415 MB) コピー終了, 5.89332 s, 70.4 MB/s
6810067+0 記録始め
6810067+0 記録終わり
3486754304 バイト (3.5 GB) コピー終了, 66.0075 s, 52.8 MB/s
12225585+0 記録始め
12225584+0 記録終わり
6259499008 バイト (6.3 GB) コピー終了, 125.919 s, 49.7 MB/s
17411137+0 記録始め
17411136+0 記録終わり
8914501632 バイト (8.9 GB) コピー終了, 185.93 s, 47.9 MB/s
22567182+0 記録始め
22567182+0 記録終わり
11554397184 バイト (12 GB) コピー終了, 246.099 s, 47.0 MB/s
27565713+0 記録始め
27565712+0 記録終わり
14113644544 バイト (14 GB) コピー終了, 305.949 s, 46.1 MB/s
32287081+0 記録始め
32287080+0 記録終わり
16530984960 バイト (17 GB) コピー終了, 365.976 s, 45.2 MB/s
37147804+0 記録始め
37147804+0 記録終わり
19019675648 バイト (19 GB) コピー終了, 426.136 s, 44.6 MB/s
41747881+0 記録始め
41747880+0 記録終わり
21374914560 バイト (21 GB) コピー終了, 486.092 s, 44.0 MB/s
46486874+0 記録始め
46486874+0 記録終わり
23801279488 バイト (24 GB) コピー終了, 546.187 s, 43.6 MB/s
やはりこの様に徐々に速度が落ちてしまってるようです。
この後も速度は落ちつづけています。
イメージファイルにしない分の速度は上がったと思いますが、原因は別にあるのかもしれません。
weykさんの回答の1番が有力でしょうか?
オフライン
Linux7 による投稿:
やはりこの様に徐々に速度が落ちてしまってるようです。
この後も速度は落ちつづけています。
読み込み元の、sda1があるディスクの不都合も考えられそうです。
一度
sudo dd if=/dev/sda1 of=/dev/null
として、特にオプションを指定せず、sda1から読み込んで /dev/null に捨てながら様子を見てみてください。
これでも遅くなってしまうのであれば読み込み側のsda1に問題がありそうです。
オフライン
# sudo dd if=/dev/sda1 of=/dev/null
試してみました。
10分間の結果は以下の通りです。
4533705+0 記録始め
4533704+0 記録終わり
2321256448 バイト (2.3 GB) コピー終了, 18.796 s, 123 MB/s
16802729+0 記録始め
16802728+0 記録終わり
8602996736 バイト (8.6 GB) コピー終了, 78.8095 s, 109 MB/s
29903225+0 記録始め
29903224+0 記録終わり
15310450688 バイト (15 GB) コピー終了, 138.821 s, 110 MB/s
44097753+0 記録始め
44097752+0 記録終わり
22578049024 バイト (23 GB) コピー終了, 198.851 s, 114 MB/s
58154945+0 記録始め
58154944+0 記録終わり
29775331328 バイト (30 GB) コピー終了, 258.859 s, 115 MB/s
71362153+0 記録始め
71362152+0 記録終わり
36537421824 バイト (37 GB) コピー終了, 318.866 s, 115 MB/s
85553153+0 記録始め
85553152+0 記録終わり
43803213824 バイト (44 GB) コピー終了, 378.884 s, 116 MB/s
99669065+0 記録始め
99669064+0 記録終わり
51030560768 バイト (51 GB) コピー終了, 438.881 s, 116 MB/s
113389089+0 記録始め
113389088+0 記録終わり
58055213056 バイト (58 GB) コピー終了, 498.903 s, 116 MB/s
126290025+0 記録始め
126290024+0 記録終わり
64660492288 バイト (65 GB) コピー終了, 558.914 s, 116 MB/s
コピーの速度は安定しています。
ということは問題はsda1には無いのですね。
オフライン
Linux7 による投稿:
コピーの速度は安定しています。
ということは問題はsda1には無いのですね。
読み込みはうまくいっているように思います。
書き込み側について、
dmesg や /var/log/messages も確認しつつ、
# http://ascii.jp/elem/000/000/471/471851/index-2.html 参照
sudo dd if=/dev/zero of=/media/sdb1/20091221XP.img
や
sudo dd if=/dev/zero of=/dev/sdc2
など、ゼロ書き込みで試してみるのはいかがでしょうか。
もしうまくいったら、conv=noerror,sync bs=512 count=196000000 などのオプションをつけずに
sda1から読み込んで書き出してみてください。
オフライン
問題が解決しました。
まずackさんの提案を試してみました。
# dd if=/dev/zero of=/media/sdb1/20091221XP.img
を試したところコピー速度が低下する症状が現れ、どうやら書き込みに問題があることがわかりました。
また、同じ要領でsdc2も試してみました。
# dd if=/dev/zero of=/dev/sdc2
sdc2への書き込みを試しましたが、なぜかこちらでもコピー速度が徐々に低下する同じ症状が現れました。
しかしdmesgでは問題は見当たりませんでした。
---------------以下、解決までの経緯---------------
上記のテストの後sdc2をとりあえず再度フォーマットして以下のコマンドを試してみました。
# dd if=/dev/zero of=/dev/sdc2
するとなぜか今度は症状が現れませんでした。
続けてオプションをつけてバックアップを取りたかったsda1から以下のようにオプション付きでコピーしてみました。
# dd if=/dev/sda1 of=/media/sdc2/20091222XP.img conv=noerror,sync bs=512 count=196000000
こちらの方でもコピーの速度は安定しました。
コピーしている間の最高速度が11.1MB/sで最低速度が10.5MB/sだったので、ほぼ安定していると言っても良いと思います。
ということは恐らく原因はフォーマットにあったのでしょう。
コピー元、コピー先どちらともWinXPからフォーマットしたNTFSだったのですが、コピー先をUbuntuでフォーマットすることが解決方法かと思われます。
以前「WinXPでフォーマットしたNTFS」から「UbuntuでフォーマットしたNTFS」へファイル転送しようとしたときに今回と似た「コピー速度が徐々に低下する症状」が現れたので、フォーマットするOSは統一すべきだと思っていたのですが、今回の場合は違ったようです。
オフライン
ひとまず解決して何よりです。
気がかりなのは
dd if=/dev/sda1 of=/dev/sdc2 conv=noerror,sync bs=512 count=196000000
の時に速度低下が発生している事で、この時はコピー先パーティション上のフォーマットは関係なく動いていると思いますので
コピー先HDDの接続やHDD自身に何か問題や不都合があるような気もします。
# 例えば再フォーマット時に不良セクタが回避されたので、そのパーティションにファイルとして書き込む時はうまくいくようになった・・・とか?
# そもそもフォーマット時に不良セクタを回避したりするのかどうかも私はよくわからないのですが・・・
/dev/sdc2 のあるHDDは注意しながら使ってみてください。
オフライン