mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
storage: Add param to check whether we can write a disk label
Modify virStorageBackendDiskValidLabel to add a 'writelabel' parameter. While initially for the purpose of determining whether the label should be written during DiskBuild, a future use during DiskStart could determine whether the pool should be started using the label found. Augment the error messages also to give a hint as to what someone may need to do or why the command failed.
This commit is contained in:
parent
2f177c5a41
commit
05c46f5c22
@ -435,24 +435,40 @@ virStorageBackendDiskFindLabel(const char* device)
|
||||
* Determine whether the label on the disk is valid or in a known format
|
||||
* for the purpose of rewriting the label during build
|
||||
*
|
||||
* When 'writelabel' is true, if we find a valid disk label on the device,
|
||||
* then we shouldn't be attempting to write as the volume may contain
|
||||
* data. Force the usage of the overwrite flag to the build command in
|
||||
* order to be certain. When the disk label is unrecognized, then it
|
||||
* should be safe to write.
|
||||
*
|
||||
* Return: True if it's OK
|
||||
* False if something's wrong
|
||||
*/
|
||||
static bool
|
||||
virStorageBackendDiskValidLabel(const char *device)
|
||||
virStorageBackendDiskValidLabel(const char *device,
|
||||
bool writelabel)
|
||||
{
|
||||
bool valid = false;
|
||||
int check;
|
||||
|
||||
check = virStorageBackendDiskFindLabel(device);
|
||||
if (check > 0) {
|
||||
valid = true;
|
||||
if (writelabel)
|
||||
valid = true;
|
||||
else
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("Unrecognized disk label found, requires build"));
|
||||
} else if (check < 0) {
|
||||
virReportError(VIR_ERR_OPERATION_FAILED, "%s",
|
||||
_("Error checking for disk label"));
|
||||
_("Error checking for disk label, failed to get "
|
||||
"disk partition information"));
|
||||
} else {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("Disk label already present"));
|
||||
if (writelabel)
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("Valid disk label already present, "
|
||||
"requires --overwrite"));
|
||||
else
|
||||
valid = true;
|
||||
}
|
||||
return valid;
|
||||
}
|
||||
@ -481,7 +497,8 @@ virStorageBackendDiskBuildPool(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
ok_to_mklabel = true;
|
||||
else
|
||||
ok_to_mklabel = virStorageBackendDiskValidLabel(
|
||||
pool->def->source.devices[0].path);
|
||||
pool->def->source.devices[0].path,
|
||||
true);
|
||||
|
||||
if (ok_to_mklabel) {
|
||||
/* eg parted /dev/sda mklabel --script msdos */
|
||||
|
Loading…
x
Reference in New Issue
Block a user