From 0637c9320eae7d75aaae970030fd585a02e36f58 Mon Sep 17 00:00:00 2001 From: Daniel Berteaud Date: Tue, 14 Apr 2020 18:12:36 +0200 Subject: [PATCH] Try to preserve sparse files when dumping with no compression Implemented by Thomas Wagner --- virt-backup | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/virt-backup b/virt-backup index 6610bba..11e92c7 100644 --- a/virt-backup +++ b/virt-backup @@ -584,8 +584,16 @@ sub run_dump{ $cmd .= " | $dumpcmd 2>/dev/null"; } else { - print "\nStarting dump of $source to $dest\n\n" if ($opts{debug}); - $cmd = "$opts{ionice} dd if=$source bs=$opts{blocksize} | $opts{nice} $opts{compcmd} > $dest 2>/dev/null"; + if ( -f $source && $opts{compcmd} eq 'cat' ){ + # Source disk is a regular file and no compression was selected + # thus use cp instead of dd to preserve possible sparsity + print "\nStarting dump of $source to $dest using cp -a\n\n" if ($opts{debug}); + $cmd = "$opts{ionice} cp -a $source $dest"; + } + else { + print "\nStarting dump of $source to $dest using dd\n\n" if ($opts{debug}); + $cmd = "$opts{ionice} dd if=$source bs=$opts{blocksize} | $opts{nice} $opts{compcmd} > $dest 2>/dev/null"; + } } } unless( system("$cmd") == 0 ){