5
0
mirror of git://git.proxmox.com/git/qemu-server.git synced 2025-02-12 21:57:58 +03:00

only use sparse file scan for files

This commit is contained in:
Dietmar Maurer 2012-02-07 11:55:57 +01:00
parent 6e5c4da7ef
commit a9a94d59f3
2 changed files with 25 additions and 6 deletions

View File

@ -382,8 +382,15 @@ sub archive {
my $fh;
my $sparse = '';
# no sparse file scan for block devices
# no sparse file scan when we use compression
# but we enable it for files
my @filea = ($conffile, 'qemu-server.conf'); # always first file in tar
foreach my $di (@{$task->{disks}}) {
$sparse = '-s' if !$comp && $di->{type} eq 'file';
if ($di->{type} eq 'block' || $di->{type} eq 'file') {
push @filea, $di->{snappath}, $di->{filename};
} else {
@ -393,7 +400,7 @@ sub archive {
my $files = join (' ', map { "'$_'" } @filea);
my $cmd = "/usr/lib/qemu-server/vmtar $files";
my $cmd = "/usr/lib/qemu-server/vmtar $sparse $files";
my $bwl = $opts->{bwlimit}*1024; # bandwidth limit for cstream
$cmd .= "|cstream -t $bwl" if $opts->{bwlimit};
$cmd .= "|$comp" if $comp;

22
vmtar.c
View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2007-2009 Proxmox Server Solutions GmbH
Copyright (C) 2007-2012 Proxmox Server Solutions GmbH
Copyright: vzdump is under GNU GPL, the GNU General Public License.
@ -429,19 +429,24 @@ int
main (int argc, char **argv)
{
struct sigaction sa;
int sparse = 0;
while (1) {
int option_index = 0;
static struct option long_options[] = {
{"sparse", 0, 0, 's'},
{"output", 1, 0, 'o'},
{0, 0, 0, 0}
};
char c = getopt_long (argc, argv, "o:", long_options, &option_index);
char c = getopt_long (argc, argv, "so:", long_options, &option_index);
if (c == -1)
break;
switch (c) {
case 's':
sparse = 1;
break;
case 'o':
outname = optarg;
break;
@ -525,9 +530,16 @@ main (int argc, char **argv)
time_t ctime = fs.st_mtime;
struct sp_array *ma = sparray_new();
if (!scan_sparse_file (fd, ma)) {
fprintf (stderr, "scanning '%s' failed\n", source);
exit (-1);
if (sparse) {
if (!scan_sparse_file (fd, ma)) {
fprintf (stderr, "scanning '%s' failed\n", source);
exit (-1);
}
} else {
off_t file_size = fs.st_size;
sparray_add (ma, 0, file_size);
ma->real_size = file_size;
ma->effective_size = file_size;
}
dump_header (wbuf, archivename, ctime, ma);