Assuming you have a disk backup in raw format sda.img and /dev/sda is initially filled with zeroes, how to skip zeroes while restoring the backup? An analog of dd should detect zero block in input stream and perform an appropriate seek on output device.
Note
I tried cp option --sparse=always, but it looks ineffective, if destination is a block device:
[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