web-dev-qa-db-ja.com

gzip-リダイレクトまたはパイピング?

Ddを使用して、大容量(750GB)ディスクを外部USBディスクにバックアップします。
リダイレクトまたはパイピングを使用する必要がありますか?どちらがより効率的ですか?または違いはありますか?

また、最適なブロックサイズは何ですか?ここでUSBがボトルネックになる可能性があります。

dd if=/dev/sda bs=1M | gzip -c > /mnt/sdb1/backups/disk.img.gz

gzip -dc /mnt/sdb1/backups/disk.img.gz | dd of=/dev/sda bs=1M

dd if=/dev/sda bs=1M | gzip -c | dd of=/mnt/sdb1/backups/disk.img.gz

dd if=/mnt/sdb1/backups/disk.img.gz | gzip -dc | dd of=/dev/sda bs=1M

ありがとう。

10
mcu

パイピングには、もう1つのプロセスと1つ以上のユーザーランドコピーが含まれるため、リダイレクトを使用する方がべきです

しかし、今日のハードウェアとソフトウェアのキャッシュシステムでは、実際に違いはないはずです。 Linuxでは パイプの制限 であるため、bs=4kまたはbs=64kを使用すると、より良い結果が得られる可能性があります。さまざまなbsパラメータの詳細については、 この質問 を参照してください。

3
Coren

ddやpipeを使用する必要はまったくありません。

</dev/sda gzip >/mnt/sdb1/backups/disk.img.gz
</mnt/sdb1/backups/disk.img.gz gunzip >/dev/sda

私は一度 ベンチマークを作成 し、ddを使用すると、異なるディスク間のストレートコピーでcatよりも遅いことがわかりました。この場合、パイプがddを含むソリューションをさらに遅くすることが期待されます。

よりシンプル:

gzip -c /dev/sda > disk.img.gz
gzip -dc /mnt/sdb1/backups/disk.img.gz > /dev/sda 
0
Mike Redrobe