2009-09-25 13:20:13 +00:00
|
|
|
/*
|
|
|
|
* storage_file.c: file utility functions for FS storage backend
|
|
|
|
*
|
|
|
|
* Copyright (C) 2007-2009 Red Hat, Inc.
|
|
|
|
* 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
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*
|
|
|
|
* 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
|
|
|
|
2010-03-09 18:22:22 +00:00
|
|
|
# include "util.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,
|
2009-09-25 13:20:13 +00:00
|
|
|
VIR_STORAGE_FILE_RAW = 0,
|
|
|
|
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,
|
|
|
|
VIR_STORAGE_FILE_LAST,
|
|
|
|
};
|
|
|
|
|
|
|
|
VIR_ENUM_DECL(virStorageFileFormat);
|
|
|
|
|
2009-09-29 08:23:04 +00:00
|
|
|
typedef struct _virStorageFileMetadata {
|
|
|
|
char *backingStore;
|
2010-06-14 14:53:59 +00:00
|
|
|
int backingStoreFormat;
|
2010-11-03 15:50:11 +00:00
|
|
|
bool backingStoreIsFile;
|
2009-09-29 08:23:04 +00:00
|
|
|
unsigned long long capacity;
|
|
|
|
bool encrypted;
|
|
|
|
} virStorageFileMetadata;
|
|
|
|
|
2010-04-27 19:31:09 +00:00
|
|
|
# ifndef DEV_BSIZE
|
|
|
|
# define DEV_BSIZE 512
|
|
|
|
# endif
|
|
|
|
|
2010-06-15 13:58:10 +00:00
|
|
|
int virStorageFileProbeFormat(const char *path);
|
|
|
|
int virStorageFileProbeFormatFromFD(const char *path,
|
|
|
|
int fd);
|
|
|
|
|
2010-02-04 22:46:55 +00:00
|
|
|
int virStorageFileGetMetadata(const char *path,
|
2010-06-15 15:15:51 +00:00
|
|
|
int format,
|
2009-09-29 08:41:23 +00:00
|
|
|
virStorageFileMetadata *meta);
|
2010-02-04 22:46:55 +00:00
|
|
|
int virStorageFileGetMetadataFromFD(const char *path,
|
2009-09-29 08:34:48 +00:00
|
|
|
int fd,
|
2010-06-15 15:15:51 +00:00
|
|
|
int format,
|
2009-09-29 08:34:48 +00:00
|
|
|
virStorageFileMetadata *meta);
|
|
|
|
|
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);
|
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
|
|
|
|
2009-09-25 13:20:13 +00:00
|
|
|
#endif /* __VIR_STORAGE_FILE_H__ */
|