生の形式のディスクバックアップがあり、最初にゼロで埋められていると仮定すると、バックアップを復元するsda.img
とき/dev/sda
にゼロをスキップできますか?シミュレーションはdd
入力ストリーム内のゼロブロックを検出し、出力デバイスで適切な照会を実行する必要があります。
ノート
cp
オプションを試しましたが、--sparse=always
ターゲットがブロックデバイスの場合は機能しないようです。
[root@vmarch ~]# truncate sda.img -s1G
[root@vmarch ~]# cat sda.img | cp --sparse=always /dev/stdin sdb.img
[root@vmarch ~]# du -h sda.img sdb.img
0 sda.img
0 sdb.img
[root@vmarch ~]# ls -lh sda.img sdb.img
-rw-r--r-- 1 root root 1.0G Jul 31 09:17 sda.img
-rw------- 1 root root 1.0G Jul 31 09:17 sdb.img
[root@vmarch ~]# losetup -f sdb.img
[root@vmarch ~]# losetup
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO
/dev/loop0 0 0 0 0 /root/sdb.img 0
[root@vmarch ~]# cp --sparse=always sda.img /dev/loop0
[root@vmarch ~]# du -h sda.img sdb.img
0 sda.img
1.1G sdb.img
答え1
GNU coreutils (たとえば、非埋め込み Linux) では、次のようにcp --sparse=always
出力ファイルをできるだけ薄くすることができます。
cp --sparse=always sda.img /dev/sda
これは直線より速くてもそうでないかもしれません。
cat sda.img >/dev/sda
cp --sparse=always
入力内容を読み、分析するのにもっと時間を費やす必要があります。このcat
バージョンは書き込みに時間がかかりますが、出力デバイスが遅くない限り、コピー期間に大きな影響はありません。これは、読み取りと書き込みがほとんど並列化される可能性があるためです。