|
Packit |
2ba279 |
#include <glib.h>
|
|
Packit |
2ba279 |
#include <glib-object.h>
|
|
Packit |
2ba279 |
#include <blockdev/utils.h>
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
#define BD_BTRFS_MAIN_VOLUME_ID 5
|
|
Packit |
2ba279 |
#define BD_BTRFS_MIN_MEMBER_SIZE (128 MiB)
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
GQuark bd_btrfs_error_quark (void) {
|
|
Packit |
2ba279 |
return g_quark_from_static_string ("g-bd-btrfs-error-quark");
|
|
Packit |
2ba279 |
}
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
#define BD_BTRFS_ERROR bd_btrfs_error_quark ()
|
|
Packit |
2ba279 |
typedef enum {
|
|
Packit |
2ba279 |
BD_BTRFS_ERROR_DEVICE,
|
|
Packit |
2ba279 |
BD_BTRFS_ERROR_PARSE,
|
|
Packit |
2ba279 |
BD_BTRFS_ERROR_TECH_UNAVAIL,
|
|
Packit |
2ba279 |
} BDBtrfsError;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
#define BD_BTRFS_TYPE_DEVICE_INFO (bd_btrfs_device_info_get_type ())
|
|
Packit |
2ba279 |
GType bd_btrfs_device_info_get_type();
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* BDBtrfsDeviceInfo:
|
|
Packit |
2ba279 |
* @id: ID of the device
|
|
Packit |
2ba279 |
* @path: path of the device
|
|
Packit |
2ba279 |
* @size: size of the device
|
|
Packit |
2ba279 |
* @used: size of the used space
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
typedef struct BDBtrfsDeviceInfo {
|
|
Packit |
2ba279 |
guint64 id;
|
|
Packit |
2ba279 |
gchar *path;
|
|
Packit |
2ba279 |
guint64 size;
|
|
Packit |
2ba279 |
guint64 used;
|
|
Packit |
2ba279 |
} BDBtrfsDeviceInfo;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_device_info_copy: (skip)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Creates a new copy of @info.
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
BDBtrfsDeviceInfo* bd_btrfs_device_info_copy (BDBtrfsDeviceInfo *info) {
|
|
Packit |
2ba279 |
if (info == NULL)
|
|
Packit |
2ba279 |
return NULL;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
BDBtrfsDeviceInfo *new_info = g_new0 (BDBtrfsDeviceInfo, 1);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
new_info->id = info->id;
|
|
Packit |
2ba279 |
new_info->path = g_strdup (info->path);
|
|
Packit |
2ba279 |
new_info->size = info->size;
|
|
Packit |
2ba279 |
new_info->used = info->used;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
return new_info;
|
|
Packit |
2ba279 |
}
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_device_info_free: (skip)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Frees @info.
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
void bd_btrfs_device_info_free (BDBtrfsDeviceInfo *info) {
|
|
Packit |
2ba279 |
if (info == NULL)
|
|
Packit |
2ba279 |
return;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
g_free (info->path);
|
|
Packit |
2ba279 |
g_free (info);
|
|
Packit |
2ba279 |
}
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
GType bd_btrfs_device_info_get_type () {
|
|
Packit |
2ba279 |
static GType type = 0;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
if (G_UNLIKELY(type == 0)) {
|
|
Packit |
2ba279 |
type = g_boxed_type_register_static("BDBtrfsDeviceInfo",
|
|
Packit |
2ba279 |
(GBoxedCopyFunc) bd_btrfs_device_info_copy,
|
|
Packit |
2ba279 |
(GBoxedFreeFunc) bd_btrfs_device_info_free);
|
|
Packit |
2ba279 |
}
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
return type;
|
|
Packit |
2ba279 |
}
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
#define BD_BTRFS_TYPE_SUBVOLUME_INFO (bd_btrfs_subvolume_info_get_type ())
|
|
Packit |
2ba279 |
GType bd_btrfs_subvolume_info_get_type();
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* BDBtrfsSubvolumeInfo:
|
|
Packit |
2ba279 |
* @id: ID of the subvolume
|
|
Packit |
2ba279 |
* @parent_id: ID of the parent (sub)volume
|
|
Packit |
2ba279 |
* @path: path of the subvolume
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
typedef struct BDBtrfsSubvolumeInfo {
|
|
Packit |
2ba279 |
guint64 id;
|
|
Packit |
2ba279 |
guint64 parent_id;
|
|
Packit |
2ba279 |
gchar *path;
|
|
Packit |
2ba279 |
} BDBtrfsSubvolumeInfo;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_subvolume_info_copy: (skip)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Creates a new copy of @info.
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
BDBtrfsSubvolumeInfo* bd_btrfs_subvolume_info_copy (BDBtrfsSubvolumeInfo *info) {
|
|
Packit |
2ba279 |
if (info == NULL)
|
|
Packit |
2ba279 |
return NULL;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
BDBtrfsSubvolumeInfo *new_info = g_new0 (BDBtrfsSubvolumeInfo, 1);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
new_info->id = info->id;
|
|
Packit |
2ba279 |
new_info->parent_id = info->parent_id;
|
|
Packit |
2ba279 |
new_info->path = g_strdup (info->path);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
return new_info;
|
|
Packit |
2ba279 |
}
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_subvolume_info_free: (skip)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Frees @info.
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
void bd_btrfs_subvolume_info_free (BDBtrfsSubvolumeInfo *info) {
|
|
Packit |
2ba279 |
if (info == NULL)
|
|
Packit |
2ba279 |
return;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
g_free (info->path);
|
|
Packit |
2ba279 |
g_free (info);
|
|
Packit |
2ba279 |
}
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
GType bd_btrfs_subvolume_info_get_type () {
|
|
Packit |
2ba279 |
static GType type = 0;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
if (G_UNLIKELY(type == 0)) {
|
|
Packit |
2ba279 |
type = g_boxed_type_register_static("BDBtrfsSubvolumeInfo",
|
|
Packit |
2ba279 |
(GBoxedCopyFunc) bd_btrfs_subvolume_info_copy,
|
|
Packit |
2ba279 |
(GBoxedFreeFunc) bd_btrfs_subvolume_info_free);
|
|
Packit |
2ba279 |
}
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
return type;
|
|
Packit |
2ba279 |
}
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
#define BD_BTRFS_TYPE_FILESYSTEM_INFO (bd_btrfs_filesystem_info_get_type ())
|
|
Packit |
2ba279 |
GType bd_btrfs_filesystem_info_get_type();
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* BDBtrfsFilesystemInfo:
|
|
Packit |
2ba279 |
* @label: label of the filesystem
|
|
Packit |
2ba279 |
* @uuid: uuid of the filesystem
|
|
Packit |
2ba279 |
* @num_devices: number of device in the filesystem
|
|
Packit |
2ba279 |
* @used: size of the used space
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
typedef struct BDBtrfsFilesystemInfo {
|
|
Packit |
2ba279 |
gchar *label;
|
|
Packit |
2ba279 |
gchar *uuid;
|
|
Packit |
2ba279 |
guint64 num_devices;
|
|
Packit |
2ba279 |
guint64 used;
|
|
Packit |
2ba279 |
} BDBtrfsFilesystemInfo;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_filesystem_info_copy: (skip)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Creates a new copy of @info.
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
BDBtrfsFilesystemInfo* bd_btrfs_filesystem_info_copy (BDBtrfsFilesystemInfo *info) {
|
|
Packit |
2ba279 |
if (info == NULL)
|
|
Packit |
2ba279 |
return NULL;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
BDBtrfsFilesystemInfo *new_info = g_new0 (BDBtrfsFilesystemInfo, 1);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
new_info->label = g_strdup (info->label);
|
|
Packit |
2ba279 |
new_info->uuid = g_strdup (info->uuid);
|
|
Packit |
2ba279 |
new_info->num_devices = info->num_devices;
|
|
Packit |
2ba279 |
new_info->used = info->used;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
return new_info;
|
|
Packit |
2ba279 |
}
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_filesystem_info_free: (skip)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Frees @info.
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
void bd_btrfs_filesystem_info_free (BDBtrfsFilesystemInfo *info) {
|
|
Packit |
2ba279 |
if (info == NULL)
|
|
Packit |
2ba279 |
return;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
g_free (info->label);
|
|
Packit |
2ba279 |
g_free (info->uuid);
|
|
Packit |
2ba279 |
g_free (info);
|
|
Packit |
2ba279 |
}
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
GType bd_btrfs_filesystem_info_get_type () {
|
|
Packit |
2ba279 |
static GType type = 0;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
if (G_UNLIKELY(type == 0)) {
|
|
Packit |
2ba279 |
type = g_boxed_type_register_static("BDBtrfsFilesystemInfo",
|
|
Packit |
2ba279 |
(GBoxedCopyFunc) bd_btrfs_filesystem_info_copy,
|
|
Packit |
2ba279 |
(GBoxedFreeFunc) bd_btrfs_filesystem_info_free);
|
|
Packit |
2ba279 |
}
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
return type;
|
|
Packit |
2ba279 |
}
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
typedef enum {
|
|
Packit |
2ba279 |
BD_BTRFS_TECH_FS = 0,
|
|
Packit |
2ba279 |
BD_BTRFS_TECH_MULTI_DEV,
|
|
Packit |
2ba279 |
BD_BTRFS_TECH_SUBVOL,
|
|
Packit |
2ba279 |
BD_BTRFS_TECH_SNAPSHOT,
|
|
Packit |
2ba279 |
} BDBtrfsTech;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
typedef enum {
|
|
Packit |
2ba279 |
BD_BTRFS_TECH_MODE_CREATE = 1 << 0,
|
|
Packit |
2ba279 |
BD_BTRFS_TECH_MODE_DELETE = 1 << 1,
|
|
Packit |
2ba279 |
BD_BTRFS_TECH_MODE_MODIFY = 1 << 2,
|
|
Packit |
2ba279 |
BD_BTRFS_TECH_MODE_QUERY = 1 << 3,
|
|
Packit |
2ba279 |
} BDBtrfsTechMode;
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_is_tech_avail:
|
|
Packit |
2ba279 |
* @tech: the queried tech
|
|
Packit |
2ba279 |
* @mode: a bit mask of queried modes of operation (#BDBtrfsTechMode) for @tech
|
|
Packit |
2ba279 |
* @error: (out): place to store error (details about why the @tech-@mode combination is not available)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: whether the @tech-@mode combination is avaible -- supported by the
|
|
Packit |
2ba279 |
* plugin implementation and having all the runtime dependencies available
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
gboolean bd_btrfs_is_tech_avail (BDBtrfsTech tech, guint64 mode, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_create_volume:
|
|
Packit |
2ba279 |
* @devices: (array zero-terminated=1): list of devices to create btrfs volume from
|
|
Packit |
2ba279 |
* @label: (allow-none): label for the volume
|
|
Packit |
2ba279 |
* @data_level: (allow-none): RAID level for the data or %NULL to use the default
|
|
Packit |
2ba279 |
* @md_level: (allow-none): RAID level for the metadata or %NULL to use the default
|
|
Packit |
2ba279 |
* @extra: (allow-none) (array zero-terminated=1): extra options for the volume creation (right now
|
|
Packit |
2ba279 |
* passed to the 'mkfs.btrfs' utility)
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: whether the new btrfs volume was created from @devices or not
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* See mkfs.btrfs(8) for details about @data_level, @md_level and btrfs in general.
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_MULTI_DEV-%BD_BTRFS_TECH_MODE_CREATE
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
gboolean bd_btrfs_create_volume (const gchar **devices, const gchar *label, const gchar *data_level, const gchar *md_level, const BDExtraArg **extra, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_add_device:
|
|
Packit |
2ba279 |
* @mountpoint: mountpoint of the btrfs volume to add new device to
|
|
Packit |
2ba279 |
* @device: a device to add to the btrfs volume
|
|
Packit |
2ba279 |
* @extra: (allow-none) (array zero-terminated=1): extra options for the addition (right now
|
|
Packit |
2ba279 |
* passed to the 'btrfs' utility)
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: whether the @device was successfully added to the @mountpoint btrfs volume or not
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_MULTI_DEV-%BD_BTRFS_TECH_MODE_MODIFY
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
gboolean bd_btrfs_add_device (const gchar *mountpoint, const gchar *device, const BDExtraArg **extra, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_remove_device:
|
|
Packit |
2ba279 |
* @mountpoint: mountpoint of the btrfs volume to remove device from
|
|
Packit |
2ba279 |
* @device: a device to remove from the btrfs volume
|
|
Packit |
2ba279 |
* @extra: (allow-none) (array zero-terminated=1): extra options for the removal (right now
|
|
Packit |
2ba279 |
* passed to the 'btrfs' utility)
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: whether the @device was successfully removed from the @mountpoint btrfs volume or not
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_MULTI_DEV-%BD_BTRFS_TECH_MODE_MODIFY
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
gboolean bd_btrfs_remove_device (const gchar *mountpoint, const gchar *device, const BDExtraArg **extra, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_create_subvolume:
|
|
Packit |
2ba279 |
* @mountpoint: mountpoint of the btrfs volume to create subvolume under
|
|
Packit |
2ba279 |
* @name: name of the subvolume
|
|
Packit |
2ba279 |
* @extra: (allow-none) (array zero-terminated=1): extra options for the subvolume creation (right now
|
|
Packit |
2ba279 |
* passed to the 'btrfs' utility)
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: whether the @mountpoint/@name subvolume was successfully created or not
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_SUBVOL-%BD_BTRFS_TECH_MODE_CREATE
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
gboolean bd_btrfs_create_subvolume (const gchar *mountpoint, const gchar *name, const BDExtraArg **extra, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_delete_subvolume:
|
|
Packit |
2ba279 |
* @mountpoint: mountpoint of the btrfs volume to delete subvolume from
|
|
Packit |
2ba279 |
* @name: name of the subvolume
|
|
Packit |
2ba279 |
* @extra: (allow-none) (array zero-terminated=1): extra options for the subvolume deletion (right now
|
|
Packit |
2ba279 |
* passed to the 'btrfs' utility)
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: whether the @mountpoint/@name subvolume was successfully deleted or not
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_SUBVOL-%BD_BTRFS_TECH_MODE_DELETE
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
gboolean bd_btrfs_delete_subvolume (const gchar *mountpoint, const gchar *name, const BDExtraArg **extra, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_get_default_subvolume_id:
|
|
Packit |
2ba279 |
* @mountpoint: mountpoint of the volume to get the default subvolume ID of
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: ID of the @mountpoint volume's default subvolume. If 0,
|
|
Packit |
2ba279 |
* @error) may be set to indicate error
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_SUBVOL-%BD_BTRFS_TECH_MODE_QUERY
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
guint64 bd_btrfs_get_default_subvolume_id (const gchar *mountpoint, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_set_default_subvolume:
|
|
Packit |
2ba279 |
* @mountpoint: mountpoint of the volume to set the default subvolume ID of
|
|
Packit |
2ba279 |
* @subvol_id: ID of the subvolume to be set as the default subvolume
|
|
Packit |
2ba279 |
* @extra: (allow-none) (array zero-terminated=1): extra options for the setting (right now
|
|
Packit |
2ba279 |
* passed to the 'btrfs' utility)
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: whether the @mountpoint volume's default subvolume was correctly set
|
|
Packit |
2ba279 |
* to @subvol_id or not
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_SUBVOL-%BD_BTRFS_TECH_MODE_MODIFY
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
gboolean bd_btrfs_set_default_subvolume (const gchar *mountpoint, guint64 subvol_id, const BDExtraArg **extra, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_create_snapshot:
|
|
Packit |
2ba279 |
* @source: path to source subvolume
|
|
Packit |
2ba279 |
* @dest: path to new snapshot volume
|
|
Packit |
2ba279 |
* @ro: whether the snapshot should be read-only
|
|
Packit |
2ba279 |
* @extra: (allow-none) (array zero-terminated=1): extra options for the snapshot creation (right now
|
|
Packit |
2ba279 |
* passed to the 'btrfs' utility)
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: whether the @dest snapshot of @source was successfully created or not
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_SNAPSHOT-%BD_BTRFS_TECH_MODE_CREATE
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
gboolean bd_btrfs_create_snapshot (const gchar *source, const gchar *dest, gboolean ro, const BDExtraArg **extra, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_list_devices:
|
|
Packit |
2ba279 |
* @device: a device that is part of the queried btrfs volume
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: (array zero-terminated=1): information about the devices that are part of the btrfs volume
|
|
Packit |
2ba279 |
* containing @device or %NULL in case of error
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_MULTI_DEV-%BD_BTRFS_TECH_MODE_QUERY
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
BDBtrfsDeviceInfo** bd_btrfs_list_devices (const gchar *device, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_list_subvolumes:
|
|
Packit |
2ba279 |
* @mountpoint: a mountpoint of the queried btrfs volume
|
|
Packit |
2ba279 |
* @snapshots_only: whether to list only snapshot subvolumes or not
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: (array zero-terminated=1): information about the subvolumes that are part of the btrfs volume
|
|
Packit |
2ba279 |
* mounted at @mountpoint or %NULL in case of error
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* The subvolumes are sorted in a way that no child subvolume appears in the
|
|
Packit |
2ba279 |
* list before its parent (sub)volume.
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_SUBVOL-%BD_BTRFS_TECH_MODE_QUERY
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
BDBtrfsSubvolumeInfo** bd_btrfs_list_subvolumes (const gchar *mountpoint, gboolean snapshots_only, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_filesystem_info:
|
|
Packit |
2ba279 |
* @device: a device that is part of the queried btrfs volume
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: information about the @device's volume's filesystem or %NULL in case of error
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_FS-%BD_BTRFS_TECH_MODE_QUERY
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
BDBtrfsFilesystemInfo* bd_btrfs_filesystem_info (const gchar *device, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_mkfs:
|
|
Packit |
2ba279 |
* @devices: (array zero-terminated=1): list of devices to create btrfs volume from
|
|
Packit |
2ba279 |
* @label: (allow-none): label for the volume
|
|
Packit |
2ba279 |
* @data_level: (allow-none): RAID level for the data or %NULL to use the default
|
|
Packit |
2ba279 |
* @md_level: (allow-none): RAID level for the metadata or %NULL to use the default
|
|
Packit |
2ba279 |
* @extra: (allow-none) (array zero-terminated=1): extra options for the volume creation (right now
|
|
Packit |
2ba279 |
* passed to the 'btrfs' utility)
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: whether the new btrfs volume was created from @devices or not
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* See mkfs.btrfs(8) for details about @data_level, @md_level and btrfs in general.
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_FS-%BD_BTRFS_TECH_MODE_CREATE
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
gboolean bd_btrfs_mkfs (const gchar **devices, const gchar *label, const gchar *data_level, const gchar *md_level, const BDExtraArg **extra, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_resize:
|
|
Packit |
2ba279 |
* @mountpoint: a mountpoint of the to be resized btrfs filesystem
|
|
Packit |
2ba279 |
* @size: requested new size
|
|
Packit |
2ba279 |
* @extra: (allow-none) (array zero-terminated=1): extra options for the volume resize (right now
|
|
Packit |
2ba279 |
* passed to the 'btrfs' utility)
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: whether the @mountpoint filesystem was successfully resized to @size
|
|
Packit |
2ba279 |
* or not
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_FS-%BD_BTRFS_TECH_MODE_MODIFY
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
gboolean bd_btrfs_resize (const gchar *mountpoint, guint64 size, const BDExtraArg **extra, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_check:
|
|
Packit |
2ba279 |
* @device: a device that is part of the checked btrfs volume
|
|
Packit |
2ba279 |
* @extra: (allow-none) (array zero-terminated=1): extra options for the check (right now
|
|
Packit |
2ba279 |
* passed to the 'btrfs' utility)
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: whether the filesystem was successfully checked or not
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_FS-%BD_BTRFS_TECH_MODE_QUERY
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
gboolean bd_btrfs_check (const gchar *device, const BDExtraArg **extra, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_repair:
|
|
Packit |
2ba279 |
* @device: a device that is part of the to be repaired btrfs volume
|
|
Packit |
2ba279 |
* @extra: (allow-none) (array zero-terminated=1): extra options for the repair (right now
|
|
Packit |
2ba279 |
* passed to the 'btrfs' utility)
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: whether the filesystem was successfully checked and repaired or not
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_FS-%BD_BTRFS_TECH_MODE_MODIFY
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
gboolean bd_btrfs_repair (const gchar *device, const BDExtraArg **extra, GError **error);
|
|
Packit |
2ba279 |
|
|
Packit |
2ba279 |
/**
|
|
Packit |
2ba279 |
* bd_btrfs_change_label:
|
|
Packit |
2ba279 |
* @mountpoint: a mountpoint of the btrfs filesystem to change label of
|
|
Packit |
2ba279 |
* @label: new label for the filesystem
|
|
Packit |
2ba279 |
* @extra: (allow-none) (array zero-terminated=1): extra options for the volume creation (right now
|
|
Packit |
2ba279 |
* passed to the 'btrfs' utility)
|
|
Packit |
2ba279 |
* @error: (out): place to store error (if any)
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Returns: whether the label of the @mountpoint filesystem was successfully set
|
|
Packit |
2ba279 |
* to @label or not
|
|
Packit |
2ba279 |
*
|
|
Packit |
2ba279 |
* Tech category: %BD_BTRFS_TECH_FS-%BD_BTRFS_TECH_MODE_MODIFY
|
|
Packit |
2ba279 |
*/
|
|
Packit |
2ba279 |
gboolean bd_btrfs_change_label (const gchar *mountpoint, const gchar *label, const BDExtraArg **extra, GError **error);
|