2009-09-25 13:20:13 +00:00
|
|
|
/*
|
2012-12-13 15:25:48 +00:00
|
|
|
* virstoragefile.h: file utility functions for FS storage backend
|
2009-09-25 13:20:13 +00:00
|
|
|
*
|
2013-02-04 19:18:22 +00:00
|
|
|
* Copyright (C) 2007-2009, 2012-2013 Red Hat, Inc.
|
2009-09-25 13:20:13 +00:00
|
|
|
* Copyright (C) 2007-2008 Daniel P. Berrange
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
2012-09-20 22:30:55 +00:00
|
|
|
* License along with this library. If not, see
|
2012-07-21 10:06:23 +00:00
|
|
|
* <http://www.gnu.org/licenses/>.
|
2009-09-25 13:20:13 +00:00
|
|
|
*
|
|
|
|
* Author: Daniel P. Berrange <berrange@redhat.com>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __VIR_STORAGE_FILE_H__
|
2010-03-09 18:22:22 +00:00
|
|
|
# define __VIR_STORAGE_FILE_H__
|
2009-09-25 13:20:13 +00:00
|
|
|
|
2013-05-07 15:27:43 +00:00
|
|
|
# include "virbitmap.h"
|
2012-12-13 17:44:57 +00:00
|
|
|
# include "virutil.h"
|
2009-09-25 13:20:13 +00:00
|
|
|
|
|
|
|
enum virStorageFileFormat {
|
2010-11-22 20:08:17 +00:00
|
|
|
VIR_STORAGE_FILE_AUTO_SAFE = -2,
|
2010-06-14 14:53:59 +00:00
|
|
|
VIR_STORAGE_FILE_AUTO = -1,
|
storage: list more file types
When an image has no backing file, using VIR_STORAGE_FILE_AUTO
for its type is a bit confusing. Additionally, a future patch
would like to reserve a default value for the case of no file
type specified in the XML, but different from the current use
of -1 to imply probing, since probing is not always safe.
Also, a couple of file types were missing compared to supported
code: libxl supports 'vhd', and qemu supports 'fat' for directories
passed through as a file system.
* src/util/storage_file.h (virStorageFileFormat): Add
VIR_STORAGE_FILE_NONE, VIR_STORAGE_FILE_FAT, VIR_STORAGE_FILE_VHD.
* src/util/storage_file.c (virStorageFileMatchesVersion): Match
documentation when version probing not supported.
(cowGetBackingStore, qcowXGetBackingStore, qcow1GetBackingStore)
(qcow2GetBackingStoreFormat, qedGetBackingStore)
(virStorageFileGetMetadataFromBuf)
(virStorageFileGetMetadataFromFD): Take NONE into account.
* src/conf/domain_conf.c (virDomainDiskDefForeachPath): Likewise.
* src/qemu/qemu_driver.c (qemuDomainGetBlockInfo): Likewise.
* src/conf/storage_conf.c (virStorageVolumeFormatFromString): New
function.
(poolTypeInfo): Use it.
2012-09-28 17:11:07 +00:00
|
|
|
VIR_STORAGE_FILE_NONE = 0,
|
|
|
|
VIR_STORAGE_FILE_RAW,
|
2009-09-25 13:20:13 +00:00
|
|
|
VIR_STORAGE_FILE_DIR,
|
|
|
|
VIR_STORAGE_FILE_BOCHS,
|
|
|
|
VIR_STORAGE_FILE_CLOOP,
|
|
|
|
VIR_STORAGE_FILE_COW,
|
|
|
|
VIR_STORAGE_FILE_DMG,
|
|
|
|
VIR_STORAGE_FILE_ISO,
|
|
|
|
VIR_STORAGE_FILE_QCOW,
|
|
|
|
VIR_STORAGE_FILE_QCOW2,
|
2010-11-19 16:18:16 +00:00
|
|
|
VIR_STORAGE_FILE_QED,
|
2009-09-25 13:20:13 +00:00
|
|
|
VIR_STORAGE_FILE_VMDK,
|
|
|
|
VIR_STORAGE_FILE_VPC,
|
storage: list more file types
When an image has no backing file, using VIR_STORAGE_FILE_AUTO
for its type is a bit confusing. Additionally, a future patch
would like to reserve a default value for the case of no file
type specified in the XML, but different from the current use
of -1 to imply probing, since probing is not always safe.
Also, a couple of file types were missing compared to supported
code: libxl supports 'vhd', and qemu supports 'fat' for directories
passed through as a file system.
* src/util/storage_file.h (virStorageFileFormat): Add
VIR_STORAGE_FILE_NONE, VIR_STORAGE_FILE_FAT, VIR_STORAGE_FILE_VHD.
* src/util/storage_file.c (virStorageFileMatchesVersion): Match
documentation when version probing not supported.
(cowGetBackingStore, qcowXGetBackingStore, qcow1GetBackingStore)
(qcow2GetBackingStoreFormat, qedGetBackingStore)
(virStorageFileGetMetadataFromBuf)
(virStorageFileGetMetadataFromFD): Take NONE into account.
* src/conf/domain_conf.c (virDomainDiskDefForeachPath): Likewise.
* src/qemu/qemu_driver.c (qemuDomainGetBlockInfo): Likewise.
* src/conf/storage_conf.c (virStorageVolumeFormatFromString): New
function.
(poolTypeInfo): Use it.
2012-09-28 17:11:07 +00:00
|
|
|
VIR_STORAGE_FILE_FAT,
|
|
|
|
VIR_STORAGE_FILE_VHD,
|
2013-02-04 19:18:22 +00:00
|
|
|
VIR_STORAGE_FILE_VDI,
|
storage: list more file types
When an image has no backing file, using VIR_STORAGE_FILE_AUTO
for its type is a bit confusing. Additionally, a future patch
would like to reserve a default value for the case of no file
type specified in the XML, but different from the current use
of -1 to imply probing, since probing is not always safe.
Also, a couple of file types were missing compared to supported
code: libxl supports 'vhd', and qemu supports 'fat' for directories
passed through as a file system.
* src/util/storage_file.h (virStorageFileFormat): Add
VIR_STORAGE_FILE_NONE, VIR_STORAGE_FILE_FAT, VIR_STORAGE_FILE_VHD.
* src/util/storage_file.c (virStorageFileMatchesVersion): Match
documentation when version probing not supported.
(cowGetBackingStore, qcowXGetBackingStore, qcow1GetBackingStore)
(qcow2GetBackingStoreFormat, qedGetBackingStore)
(virStorageFileGetMetadataFromBuf)
(virStorageFileGetMetadataFromFD): Take NONE into account.
* src/conf/domain_conf.c (virDomainDiskDefForeachPath): Likewise.
* src/qemu/qemu_driver.c (qemuDomainGetBlockInfo): Likewise.
* src/conf/storage_conf.c (virStorageVolumeFormatFromString): New
function.
(poolTypeInfo): Use it.
2012-09-28 17:11:07 +00:00
|
|
|
|
2009-09-25 13:20:13 +00:00
|
|
|
VIR_STORAGE_FILE_LAST,
|
|
|
|
};
|
|
|
|
|
|
|
|
VIR_ENUM_DECL(virStorageFileFormat);
|
|
|
|
|
2013-05-07 15:27:43 +00:00
|
|
|
enum virStorageFileFeature {
|
2013-06-24 06:35:59 +00:00
|
|
|
VIR_STORAGE_FILE_FEATURE_LAZY_REFCOUNTS = 0,
|
2013-05-07 15:27:43 +00:00
|
|
|
|
|
|
|
VIR_STORAGE_FILE_FEATURE_LAST
|
|
|
|
};
|
|
|
|
|
|
|
|
VIR_ENUM_DECL(virStorageFileFeature);
|
|
|
|
|
2012-10-13 16:47:15 +00:00
|
|
|
typedef struct _virStorageFileMetadata virStorageFileMetadata;
|
|
|
|
typedef virStorageFileMetadata *virStorageFileMetadataPtr;
|
|
|
|
struct _virStorageFileMetadata {
|
2012-10-09 23:47:42 +00:00
|
|
|
char *backingStore; /* Canonical name (absolute file, or protocol) */
|
|
|
|
char *backingStoreRaw; /* If file, original name, possibly relative */
|
2013-04-25 20:24:42 +00:00
|
|
|
char *directory; /* The directory containing basename of backingStoreRaw */
|
2012-10-13 16:47:15 +00:00
|
|
|
int backingStoreFormat; /* enum virStorageFileFormat */
|
2010-11-03 15:50:11 +00:00
|
|
|
bool backingStoreIsFile;
|
2012-10-13 16:47:15 +00:00
|
|
|
virStorageFileMetadataPtr backingMeta;
|
2009-09-29 08:23:04 +00:00
|
|
|
unsigned long long capacity;
|
|
|
|
bool encrypted;
|
2013-05-07 15:27:43 +00:00
|
|
|
virBitmapPtr features; /* bits described by enum virStorageFileFeature */
|
|
|
|
char *compat;
|
2012-10-13 16:47:15 +00:00
|
|
|
};
|
2009-09-29 08:23:04 +00:00
|
|
|
|
2010-04-27 19:31:09 +00:00
|
|
|
# ifndef DEV_BSIZE
|
|
|
|
# define DEV_BSIZE 512
|
|
|
|
# endif
|
|
|
|
|
2012-10-20 19:56:35 +00:00
|
|
|
int virStorageFileProbeFormat(const char *path, uid_t uid, gid_t gid);
|
2010-06-15 13:58:10 +00:00
|
|
|
int virStorageFileProbeFormatFromFD(const char *path,
|
|
|
|
int fd);
|
|
|
|
|
2012-10-13 16:47:15 +00:00
|
|
|
virStorageFileMetadataPtr virStorageFileGetMetadata(const char *path,
|
|
|
|
int format,
|
|
|
|
uid_t uid, gid_t gid,
|
|
|
|
bool allow_probe);
|
2012-10-13 17:01:27 +00:00
|
|
|
virStorageFileMetadataPtr virStorageFileGetMetadataFromFD(const char *path,
|
|
|
|
int fd,
|
|
|
|
int format);
|
2009-09-29 08:34:48 +00:00
|
|
|
|
2012-10-12 22:29:14 +00:00
|
|
|
const char *virStorageFileChainLookup(virStorageFileMetadataPtr chain,
|
|
|
|
const char *start,
|
|
|
|
const char *name,
|
|
|
|
virStorageFileMetadataPtr *meta,
|
|
|
|
const char **parent)
|
|
|
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
|
|
|
|
|
2012-10-13 16:47:15 +00:00
|
|
|
void virStorageFileFreeMetadata(virStorageFileMetadataPtr meta);
|
2011-07-14 10:53:45 +00:00
|
|
|
|
2013-05-31 05:16:14 +00:00
|
|
|
int virStorageFileResize(const char *path,
|
|
|
|
unsigned long long capacity,
|
|
|
|
unsigned long long orig_capacity,
|
|
|
|
bool pre_allocate);
|
2012-01-30 07:40:00 +00:00
|
|
|
|
2010-10-29 11:20:40 +00:00
|
|
|
enum {
|
|
|
|
VIR_STORAGE_FILE_SHFS_NFS = (1 << 0),
|
|
|
|
VIR_STORAGE_FILE_SHFS_GFS2 = (1 << 1),
|
|
|
|
VIR_STORAGE_FILE_SHFS_OCFS = (1 << 2),
|
|
|
|
VIR_STORAGE_FILE_SHFS_AFS = (1 << 3),
|
|
|
|
};
|
|
|
|
|
Don't reset user/group/security label on shared filesystems during migrate
When QEMU runs with its disk on NFS, and as a non-root user, the
disk is chownd to that non-root user. When migration completes
the last step is shutting down the QEMU on the source host. THis
normally resets user/group/security label. This is bad when the
VM was just migrated because the file is still in use on the dest
host. It is thus neccessary to skip the reset step for any files
found to be on a shared filesystem
* src/libvirt_private.syms: Export virStorageFileIsSharedFS
* src/util/storage_file.c, src/util/storage_file.h: Add a new
method virStorageFileIsSharedFS() to determine if a file is
on a shared filesystem (NFS, GFS, OCFS2, etc)
* src/qemu/qemu_driver.c: Tell security driver not to reset
disk labels on migration completion
* src/qemu/qemu_security_dac.c, src/qemu/qemu_security_stacked.c,
src/security/security_selinux.c, src/security/security_driver.h,
src/security/security_apparmor.c: Add ability to skip disk
restore step for files on shared filesystems.
2010-05-13 15:49:22 +00:00
|
|
|
int virStorageFileIsSharedFS(const char *path);
|
2012-02-21 21:58:50 +00:00
|
|
|
int virStorageFileIsClusterFS(const char *path);
|
2010-10-29 11:20:40 +00:00
|
|
|
int virStorageFileIsSharedFSType(const char *path,
|
|
|
|
int fstypes);
|
Don't reset user/group/security label on shared filesystems during migrate
When QEMU runs with its disk on NFS, and as a non-root user, the
disk is chownd to that non-root user. When migration completes
the last step is shutting down the QEMU on the source host. THis
normally resets user/group/security label. This is bad when the
VM was just migrated because the file is still in use on the dest
host. It is thus neccessary to skip the reset step for any files
found to be on a shared filesystem
* src/libvirt_private.syms: Export virStorageFileIsSharedFS
* src/util/storage_file.c, src/util/storage_file.h: Add a new
method virStorageFileIsSharedFS() to determine if a file is
on a shared filesystem (NFS, GFS, OCFS2, etc)
* src/qemu/qemu_driver.c: Tell security driver not to reset
disk labels on migration completion
* src/qemu/qemu_security_dac.c, src/qemu/qemu_security_stacked.c,
src/security/security_selinux.c, src/security/security_driver.h,
src/security/security_apparmor.c: Add ability to skip disk
restore step for files on shared filesystems.
2010-05-13 15:49:22 +00:00
|
|
|
|
2012-12-11 19:10:51 +00:00
|
|
|
int virStorageFileGetLVMKey(const char *path,
|
|
|
|
char **key);
|
|
|
|
int virStorageFileGetSCSIKey(const char *path,
|
|
|
|
char **key);
|
2011-07-20 09:40:53 +00:00
|
|
|
|
2009-09-25 13:20:13 +00:00
|
|
|
#endif /* __VIR_STORAGE_FILE_H__ */
|