[libvirt] [PATCH v4] Ignore backing file errors in FS storage pool
Eric Blake
eblake at redhat.com
Fri Mar 11 16:54:53 UTC 2011
On 03/01/2011 08:48 AM, Philipp Hahn wrote:
> Currently a single storage volume with a broken backing file will disable the
> whole storage pool. This can happen when the backing file is on some
> unavailable network storage or if the backing volume is deleted, while the
> storage volumes using it remain.
> Since the storage pool can not be re-activated, re-creating the missing
> or deleting the now useless volumes using libvirt only is not possible.
>
> Fixing this is a little bit tricky:
> 1. virStorageBackendProbeTarget() only detects the missing backing file,
> if the backing file format is not explicitly specified. If the
> backing file is created using
> kvm-img create -f qcow2 -o backing_fmt=qcow2,backing_file=... ...
> no error is detected at this stage.
> The new return code -3 signals that the backing file could not be
> opened.
> 2. The backingStore.format must be >= 0, since values < 0 would break
> virStorageVolTargetDefFormat() when dumping the XML data such as
> <format type='...'/>
> Because of this the format is faked as VIR_STORAGE_FILE_RAW.
> 3. virStorageBackendUpdateVolTargetInfo() always opens the backing file
> and thus always detects a missing backing file.
> Since it "only" updates the capacity, allocation, owner, group, mode
> and SELinux label, just ignore errors at this stage, print an error
> message and continue.
> 4. Using vol-dump on a broken volume still doesn't work, but at leas
s/leas/least/
> vol-destroy and pool-refresh do work now.
Thanks for the ping, and yes, this version looks like it fixes the
feedback from earlier review. Sorry for the delay review.
>
> To reproduce:
> dir=$(mktemp -d)
> virsh pool-create-as tmp dir '' '' '' '' "$dir"
> virsh vol-create-as --format qcow2 tmp back 1G
> virsh vol-create-as --format qcow2 --backing-vol-format qcow2 --backing-vol back tmp cow 1G
> virsh vol-delete --pool tmp back
> virsh pool-refresh tmp
> After the last step, the pool will be gone (because it was not persistent). As
> long as the now broken image stays in the directory, you will not be able to
> re-create or re-start the pool.
Even more awesome when you do this :)
> @@ -665,8 +680,15 @@ virStorageBackendFileSystemRefresh(virConnectPtr conn ATTRIBUTE_UNUSED,
> if (virStorageBackendUpdateVolTargetInfo(&vol->backingStore,
> NULL,
> NULL) < 0) {
> - VIR_FREE(vol->backingStore.path);
> - goto cleanup;
> + /* The backing file is currently unavailable, the capacity,
> + * allocation, owner, group and mode are unknown. Just log the
> + * error an continue.
> + * Unfortunately virStorageBackendProbeTarget() might already
> + * have logged a similar message for the same problem, but only
> + * if AUTO format detection was used. */
> + virStorageReportError(VIR_ERR_INTERNAL_ERROR,
> + _("cannot probe backing volume info: %s"),
> + vol->backingStore);
Oops:
CC libvirt_driver_storage_la-storage_backend_fs.lo
cc1: warnings being treated as errors
storage/storage_backend_fs.c: In function
'virStorageBackendFileSystemRefresh':
storage/storage_backend_fs.c:688:17: error: format '%s' expects type
'char *', but argument 8 has type 'virStorageVolTarget' [-Wformat]
ACK with that fixed, so I squashed this and pushed:
diff --git i/src/storage/storage_backend_fs.c
w/src/storage/storage_backend_fs.c
index e629219..0a6b074 100644
--- i/src/storage/storage_backend_fs.c
+++ w/src/storage/storage_backend_fs.c
@@ -1,7 +1,7 @@
/*
* storage_backend_fs.c: storage backend for FS and directory handling
*
- * Copyright (C) 2007-2010 Red Hat, Inc.
+ * Copyright (C) 2007-2011 Red Hat, Inc.
* Copyright (C) 2007-2008 Daniel P. Berrange
*
* This library is free software; you can redistribute it and/or
@@ -687,7 +687,7 @@ virStorageBackendFileSystemRefresh(virConnectPtr
conn ATTRIBUTE_UNUSED,
* if AUTO format detection was used. */
virStorageReportError(VIR_ERR_INTERNAL_ERROR,
_("cannot probe backing volume
info: %s"),
- vol->backingStore);
+ vol->backingStore.path);
}
}
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20110311/465c6f36/attachment-0001.sig>
More information about the libvir-list
mailing list