## LVM LVM — plugin for operations with LVM |

## Functions

void | bd_lvm_close ()
gboolean | bd_lvm_init ()
GQuark | bd_lvm_error_quark ()
void | bd_lvm_pvdata_free ()
BDLVMPVdata * | bd_lvm_pvdata_copy ()
void | bd_lvm_vgdata_free ()
BDLVMVGdata * | bd_lvm_vgdata_copy ()
void | bd_lvm_segdata_free ()
BDLVMSEGdata * | bd_lvm_segdata_copy ()
void | bd_lvm_lvdata_free ()
BDLVMLVdata * | bd_lvm_lvdata_copy ()
BDLVMCacheStats * | bd_lvm_cache_stats_copy ()
void | bd_lvm_cache_stats_free ()
void | bd_lvm_vdo_stats_free ()
BDLVMVDOStats * | bd_lvm_vdo_stats_copy ()
gboolean | bd_lvm_is_supported_pe_size ()
guint64 * | bd_lvm_get_supported_pe_sizes ()
guint64 | bd_lvm_get_max_lv_size ()
guint64 | bd_lvm_round_size_to_pe ()
guint64 | bd_lvm_get_lv_physical_size ()
guint64 | bd_lvm_get_thpool_padding ()
guint64 | bd_lvm_get_thpool_meta_size ()
gboolean | bd_lvm_is_valid_thpool_md_size ()
gboolean | bd_lvm_is_valid_thpool_chunk_size ()
gboolean | bd_lvm_pvcreate ()
gboolean | bd_lvm_pvresize ()
gboolean | bd_lvm_pvremove ()
gboolean | bd_lvm_pvmove ()
gboolean | bd_lvm_pvscan ()
gboolean | bd_lvm_add_pv_tags ()
gboolean | bd_lvm_delete_pv_tags ()
BDLVMPVdata * | bd_lvm_pvinfo ()
BDLVMPVdata ** | bd_lvm_pvs ()
gboolean | bd_lvm_vgcreate ()
gboolean | bd_lvm_vgremove ()
gboolean | bd_lvm_vgrename ()
gboolean | bd_lvm_vgactivate ()
gboolean | bd_lvm_vgdeactivate ()
gboolean | bd_lvm_vgextend ()
gboolean | bd_lvm_vgreduce ()
gboolean | bd_lvm_vglock_start ()
gboolean | bd_lvm_vglock_stop ()
gboolean | bd_lvm_add_vg_tags ()
gboolean | bd_lvm_delete_vg_tags ()
BDLVMVGdata * | bd_lvm_vginfo ()
BDLVMVGdata ** | bd_lvm_vgs ()
gchar * | bd_lvm_lvorigin ()
gboolean | bd_lvm_lvcreate ()
gboolean | bd_lvm_lvremove ()
gboolean | bd_lvm_lvrename ()
gboolean | bd_lvm_lvresize ()
gboolean | bd_lvm_lvrepair ()
gboolean | bd_lvm_lvactivate ()
gboolean | bd_lvm_lvdeactivate ()
gboolean | bd_lvm_lvsnapshotcreate ()
gboolean | bd_lvm_lvsnapshotmerge ()
gboolean | bd_lvm_add_lv_tags ()
gboolean | bd_lvm_delete_lv_tags ()
BDLVMLVdata * | bd_lvm_lvinfo ()
BDLVMLVdata * | bd_lvm_lvinfo_tree ()
BDLVMLVdata ** | bd_lvm_lvs ()
BDLVMLVdata ** | bd_lvm_lvs_tree ()
gboolean | bd_lvm_thpoolcreate ()
gboolean | bd_lvm_thpool_convert ()
gboolean | bd_lvm_thlvcreate ()
gchar * | bd_lvm_thlvpoolname ()
gboolean | bd_lvm_thsnapshotcreate ()
gboolean | bd_lvm_set_global_config ()
gchar * | bd_lvm_get_global_config ()
gboolean | bd_lvm_cache_attach ()
gboolean | bd_lvm_cache_create_cached_lv ()
gboolean | bd_lvm_cache_create_pool ()
gboolean | bd_lvm_cache_pool_convert ()
gboolean | bd_lvm_cache_detach ()
guint64 | bd_lvm_cache_get_default_md_size ()
BDLVMCacheMode | bd_lvm_cache_get_mode_from_str ()
const gchar * | bd_lvm_cache_get_mode_str ()
gchar * | bd_lvm_cache_pool_name ()
BDLVMCacheStats * | bd_lvm_cache_stats ()
gchar * | bd_lvm_vdolvpoolname ()
const gchar * | bd_lvm_get_vdo_operating_mode_str ()
const gchar * | bd_lvm_get_vdo_compression_state_str ()
const gchar * | bd_lvm_get_vdo_index_state_str ()
BDLVMVDOWritePolicy | bd_lvm_get_vdo_write_policy_from_str ()
BDLVMVDOStats * | bd_lvm_vdo_get_stats ()
GHashTable * | bd_lvm_vdo_get_stats_full ()
gboolean | bd_lvm_vdo_disable_compression ()
gboolean | bd_lvm_vdo_disable_deduplication ()
gboolean | bd_lvm_vdo_enable_compression ()
gboolean | bd_lvm_vdo_enable_deduplication ()
BDLVMVDOPooldata * | bd_lvm_vdo_info ()
gboolean | bd_lvm_vdo_pool_convert ()
gboolean | bd_lvm_vdo_pool_create ()
gboolean | bd_lvm_vdo_pool_resize ()
gboolean | bd_lvm_vdo_resize ()
BDLVMVDOPooldata * | bd_lvm_vdopooldata_copy ()
void | bd_lvm_vdopooldata_free ()
gboolean | bd_lvm_devices_add ()
gboolean | bd_lvm_devices_delete ()
gchar ** | bd_lvm_get_devices_filter ()
const gchar * | bd_lvm_get_vdo_write_policy_str ()
gboolean | bd_lvm_set_devices_filter ()
gboolean | bd_lvm_writecache_attach ()
gboolean | bd_lvm_writecache_create_cached_lv ()
gboolean | bd_lvm_writecache_detach ()
gboolean | bd_lvm_is_tech_avail ()

## Types and Values

#define | BD_LVM_ERROR
enum | BDLVMError
| BDLVMPVdata
| BDLVMVGdata
| BDLVMSEGdata
| BDLVMLVdata
enum | BDLVMCacheMode
enum | BDLVMCachePoolFlags
| BDLVMCacheStats
| BDLVMVDOStats
enum | BDLVMVDOCompressionState
enum | BDLVMVDOIndexState
enum | BDLVMVDOOperatingMode
| BDLVMVDOPooldata
enum | BDLVMVDOWritePolicy
enum | BDLVMTech
enum | BDLVMTechMode

## Includes

    #include <lvm.h>

## Description

A plugin for operations with LVM. All sizes passed in/out to/from the functions are in bytes.

## Functions

### bd_lvm_close ()

    void
    bd_lvm_close (void);

Cleans up after the plugin. **This function is called automatically by the library's functions that unload it.**

### bd_lvm_init ()

    gboolean
    bd_lvm_init (void);

Initializes the plugin. **This function is called automatically by the library's initialization functions.**

### bd_lvm_error_quark ()

    GQuark
    bd_lvm_error_quark (void);

[skip]

### bd_lvm_pvdata_free ()

    void
    bd_lvm_pvdata_free (BDLVMPVdata *data);

Frees `data` .

[skip]

#### Parameters

data | `BDLVMPVdata` to free. | [nullable]

### bd_lvm_pvdata_copy ()

    BDLVMPVdata *
    bd_lvm_pvdata_copy (BDLVMPVdata *data);

Creates a new copy of `data` .

[skip]

#### Parameters

data | `BDLVMPVdata` to copy. | [nullable]

### bd_lvm_vgdata_free ()

    void
    bd_lvm_vgdata_free (BDLVMVGdata *data);

Frees `data` .

[skip]

#### Parameters

data | `BDLVMVGdata` to free. | [nullable]

### bd_lvm_vgdata_copy ()

    BDLVMVGdata *
    bd_lvm_vgdata_copy (BDLVMVGdata *data);

Creates a new copy of `data` .

[skip]

#### Parameters

data | `BDLVMVGdata` to copy. | [nullable]

### bd_lvm_segdata_free ()

    void
    bd_lvm_segdata_free (BDLVMSEGdata *data);

Frees `data` .

[skip]

#### Parameters

data | `BDLVMSEGdata` to free. | [nullable]

### bd_lvm_segdata_copy ()

    BDLVMSEGdata *
    bd_lvm_segdata_copy (BDLVMSEGdata *data);

Creates a new copy of `data` .

[skip]

#### Parameters

data | `BDLVMSEGdata` to copy. | [nullable]

### bd_lvm_lvdata_free ()

    void
    bd_lvm_lvdata_free (BDLVMLVdata *data);

Frees `data` .

[skip]

#### Parameters

data | `BDLVMLVdata` to free. | [nullable]

### bd_lvm_lvdata_copy ()

    BDLVMLVdata *
    bd_lvm_lvdata_copy (BDLVMLVdata *data);

Creates a new copy of `data` .

[skip]

#### Parameters

data | `BDLVMLVdata` to copy. | [nullable]

### bd_lvm_cache_stats_copy ()

    BDLVMCacheStats *
    bd_lvm_cache_stats_copy (BDLVMCacheStats *data);

Creates a new copy of `data` .

[skip]

#### Parameters

data | `BDLVMCacheStats` to copy. | [nullable]

### bd_lvm_cache_stats_free ()

    void
    bd_lvm_cache_stats_free (BDLVMCacheStats *data);

Frees `data` .

[skip]

#### Parameters

data | `BDLVMCacheStats` to free. | [nullable]

### bd_lvm_vdo_stats_free ()

    void
    bd_lvm_vdo_stats_free (BDLVMVDOStats *stats);

Frees `stats` .

[skip]

#### Parameters

stats | `BDLVMVDOStats` to free. | [nullable]

### bd_lvm_vdo_stats_copy ()

    BDLVMVDOStats *
    bd_lvm_vdo_stats_copy (BDLVMVDOStats *stats);

Creates a new copy of `stats` .

[skip]

#### Parameters

stats | `BDLVMVDOStats` to copy. | [nullable]

### bd_lvm_is_supported_pe_size ()

    gboolean
    bd_lvm_is_supported_pe_size (guint64 size,
                                 GError **error);

#### Parameters

size | size (in bytes) to test |
error | place to store error (if any). | [out][optional]

#### Returns

whether the given size is supported physical extent size or not

Tech category: `BD_LVM_TECH_CALCS` no mode (it is ignored)

### bd_lvm_get_supported_pe_sizes ()

    guint64 *
    bd_lvm_get_supported_pe_sizes (GError **error);

#### Parameters

error | place to store error (if any). | [out][optional]

#### Returns

list of supported PE sizes

Tech category: `BD_LVM_TECH_CALCS` no mode (it is ignored).

[transfer full][array fixed-size=25]

### bd_lvm_get_max_lv_size ()

    guint64
    bd_lvm_get_max_lv_size (GError **error);

#### Parameters

error | place to store error (if any). | [out][optional]

#### Returns

maximum LV size in bytes

Tech category: `BD_LVM_TECH_CALCS` no mode (it is ignored)

### bd_lvm_round_size_to_pe ()

    guint64
    bd_lvm_round_size_to_pe (guint64 size,
                             guint64 pe_size,
                             gboolean roundup,
                             GError **error);

#### Parameters

size | size to be rounded |
pe_size | physical extent (PE) size or 0 to use the default |
roundup | whether to round up or down (ceil or floor) |
error | place to store error (if any). | [out][optional]

#### Returns

`size` rounded to `pe_size` according to the `roundup`

Rounds given `size` up/down to a multiple of `pe_size` according to the value of the `roundup` parameter. If the rounded value is too big to fit in the return type, the result is rounded down (floored) regardless of the `roundup` parameter.

Tech category: `BD_LVM_TECH_CALCS` no mode (it is ignored)

### bd_lvm_get_lv_physical_size ()

    guint64
    bd_lvm_get_lv_physical_size (guint64 lv_size,
                                 guint64 pe_size,
                                 GError **error);

#### Parameters

lv_size | LV size |
pe_size | PE size |
error | place to store error (if any). | [out][optional]

#### Returns

space taken on disk(s) by the LV with given `size`

Gives number of bytes needed for an LV with the size `lv_size` on an LVM stack using given `pe_size` .

Tech category: `BD_LVM_TECH_CALCS` no mode (it is ignored)

### bd_lvm_get_thpool_padding ()

    guint64
    bd_lvm_get_thpool_padding (guint64 size,
                               guint64 pe_size,
                               gboolean included,
                               GError **error);

#### Parameters

size | size of the thin pool |
pe_size | PE size or 0 if the default value should be used |
included | if padding is already included in the size |
error | place to store error (if any). | [out][optional]

#### Returns

size of the padding needed for a thin pool with the given `size` according to the `pe_size` and `included`

Tech category: `BD_LVM_TECH_THIN_CALCS` no mode (it is ignored)

### bd_lvm_get_thpool_meta_size ()

    guint64
    bd_lvm_get_thpool_meta_size (guint64 size,
                                 guint64 chunk_size,
                                 guint64 n_snapshots,
                                 GError **error);

Note: This function will be changed in 3.0: the `n_snapshots` parameter is currently not used and will be removed.

#### Parameters

size | size of the thin pool |
chunk_size | chunk size of the thin pool or 0 to use the default |
n_snapshots | ignored |
error | place to store error (if any). | [out][optional]

#### Returns

recommended size of the metadata space for the specified pool

Tech category: `BD_LVM_TECH_THIN_CALCS` no mode (it is ignored)

### bd_lvm_is_valid_thpool_md_size ()

    gboolean
    bd_lvm_is_valid_thpool_md_size (guint64 size,
                                    GError **error);

#### Parameters

size | the size to be tested |
error | place to store error (if any). | [out][optional]

#### Returns

whether the given size is a valid thin pool metadata size or not

Tech category: `BD_LVM_TECH_THIN_CALCS` no mode (it is ignored)

### bd_lvm_is_valid_thpool_chunk_size ()

    gboolean
    bd_lvm_is_valid_thpool_chunk_size (guint64 size,
                                       gboolean discard,
                                       GError **error);

#### Parameters

size | the size to be tested |
discard | whether discard/TRIM is required to be supported or not |
error | place to store error (if any). | [out][optional]

#### Returns

whether the given size is a valid thin pool chunk size or not

Tech category: `BD_LVM_TECH_THIN_CALCS` no mode (it is ignored)

### bd_lvm_pvcreate ()

    gboolean
    bd_lvm_pvcreate (const gchar *device,
                     guint64 data_alignment,
                     guint64 metadata_size,
                     const BDExtraArg **extra,
                     GError **error);

#### Parameters

device | the device to make PV from |
data_alignment | data (first PE) alignment or 0 to use the default |
metadata_size | size of the area reserved for metadata or 0 to use the default |
extra | extra options for the PV creation (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the PV was successfully created or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_CREATE`

### bd_lvm_pvresize ()

    gboolean
    bd_lvm_pvresize (const gchar *device,
                     guint64 size,
                     const BDExtraArg **extra,
                     GError **error);

#### Parameters

device | the device to resize |
size | the new requested size of the PV or 0 if it should be adjusted to device's size |
extra | extra options for the PV resize (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the PV's size was successfully changed or not

If given `size` different from 0, sets the PV's size to the given value (see pvresize(8)). If given `size` 0, adjusts the PV's size to the underlying block device's size.

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_pvremove ()

    gboolean
    bd_lvm_pvremove (const gchar *device,
                     const BDExtraArg **extra,
                     GError **error);

#### Parameters

device | the PV device to be removed/destroyed |
extra | extra options for the PV removal (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the PV was successfully removed/destroyed or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_REMOVE`

### bd_lvm_pvmove ()

    gboolean
    bd_lvm_pvmove (const gchar *src,
                   const gchar *dest,
                   const BDExtraArg **extra,
                   GError **error);

#### Parameters

src | the PV device to move extents off of |
dest | the PV device to move extents onto or `NULL`. | [nullable]
extra | extra options for the PV move (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the extents from the `src` PV where successfully moved or not

If `dest` is `NULL`, VG allocation rules are used for the extents from the `src` PV (see pvmove(8)).

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_pvscan ()

    gboolean
    bd_lvm_pvscan (const gchar *device,
                   gboolean update_cache,
                   const BDExtraArg **extra,
                   GError **error);

#### Parameters

device | the device to scan for PVs or `NULL`. | [nullable]
update_cache | whether to update the lvmetad cache or not |
extra | extra options for the PV scan (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the system or `device` was successfully scanned for PVs or not

The `device` argument is used only if `update_cache` is `TRUE`. Otherwise the whole system is scanned for PVs.

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`

### bd_lvm_add_pv_tags ()

    gboolean
    bd_lvm_add_pv_tags (const gchar *device,
                        const gchar **tags,
                        GError **error);

#### Parameters

device | the device to set PV tags for |
tags | list of tags to add. | [array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the tags were successfully added to `device` or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`

### bd_lvm_delete_pv_tags ()

    gboolean
    bd_lvm_delete_pv_tags (const gchar *device,
                           const gchar **tags,
                           GError **error);

#### Parameters

device | the device to set PV tags for |
tags | list of tags to remove. | [array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the tags were successfully removed from `device` or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`

### bd_lvm_pvinfo ()

    BDLVMPVdata *
    bd_lvm_pvinfo (const gchar *device,
                   GError **error);

#### Parameters

device | a PV to get information about or `NULL` |
error | place to store error (if any). | [out][optional]

#### Returns

information about the PV on the given `device` or `NULL` in case of error (the `error` ) gets populated in those cases)

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`.

[transfer full]

### bd_lvm_pvs ()

    BDLVMPVdata **
    bd_lvm_pvs (GError **error);

#### Parameters

error | place to store error (if any). | [out][optional]

#### Returns

information about PVs found in the system

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`.

[array zero-terminated=1]

### bd_lvm_vgcreate ()

    gboolean
    bd_lvm_vgcreate (const gchar *name,
                     const gchar **pv_list,
                     guint64 pe_size,
                     const BDExtraArg **extra,
                     GError **error);

#### Parameters

name | name of the newly created VG |
pv_list | list of PVs the newly created VG should use. | [array zero-terminated=1]
pe_size | PE size or 0 if the default value should be used |
extra | extra options for the VG creation (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the VG `name` was successfully created or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_CREATE`

### bd_lvm_vgremove ()

    gboolean
    bd_lvm_vgremove (const gchar *vg_name,
                     const BDExtraArg **extra,
                     GError **error);

#### Parameters

vg_name | name of the to be removed VG |
extra | extra options for the VG removal (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the VG was successfully removed or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_REMOVE`

### bd_lvm_vgrename ()

    gboolean
    bd_lvm_vgrename (const gchar *old_vg_name,
                     const gchar *new_vg_name,
                     const BDExtraArg **extra,
                     GError **error);

#### Parameters

old_vg_name | old name of the VG to rename |
new_vg_name | new name for the `old_vg_name` VG |
extra | extra options for the VG rename (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the VG was successfully renamed or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_vgactivate ()

    gboolean
    bd_lvm_vgactivate (const gchar *vg_name,
                       const BDExtraArg **extra,
                       GError **error);

#### Parameters

vg_name | name of the to be activated VG |
extra | extra options for the VG activation (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the VG was successfully activated or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_vgdeactivate ()

    gboolean
    bd_lvm_vgdeactivate (const gchar *vg_name,
                         const BDExtraArg **extra,
                         GError **error);

#### Parameters

vg_name | name of the to be deactivated VG |
extra | extra options for the VG deactivation (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the VG was successfully deactivated or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_vgextend ()

    gboolean
    bd_lvm_vgextend (const gchar *vg_name,
                     const gchar *device,
                     const BDExtraArg **extra,
                     GError **error);

#### Parameters

vg_name | name of the to be extended VG |
device | PV device to extend the `vg_name` VG with |
extra | extra options for the VG extension (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the VG `vg_name` was successfully extended with the given `device` or not.

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_vgreduce ()

    gboolean
    bd_lvm_vgreduce (const gchar *vg_name,
                     const gchar *device,
                     const BDExtraArg **extra,
                     GError **error);

#### Parameters

vg_name | name of the to be reduced VG |
device | PV device the `vg_name` VG should be reduced of or `NULL` if the VG should be reduced of the missing PVs. | [nullable]
extra | extra options for the VG reduction (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the VG `vg_name` was successfully reduced of the given `device` or not

Note: This function does not move extents off of the PV before removing it from the VG. You must do that first by calling bd_lvm_pvmove.

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_vglock_start ()

    gboolean
    bd_lvm_vglock_start (const gchar *vg_name,
                         const BDExtraArg **extra,
                         GError **error);

#### Parameters

vg_name | a shared VG to start the lockspace in lvmlockd |
extra | extra options for the vgchange command (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the lock was successfully started for `vg_name` or not

Tech category: `BD_LVM_TECH_SHARED`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_vglock_stop ()

    gboolean
    bd_lvm_vglock_stop (const gchar *vg_name,
                        const BDExtraArg **extra,
                        GError **error);

#### Parameters

vg_name | a shared VG to stop the lockspace in lvmlockd |
extra | extra options for the vgchange command (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the lock was successfully stopped for `vg_name` or not

Tech category: `BD_LVM_TECH_SHARED`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_add_vg_tags ()

    gboolean
    bd_lvm_add_vg_tags (const gchar *vg_name,
                        const gchar **tags,
                        GError **error);

#### Parameters

vg_name | the VG to set tags on |
tags | list of tags to add. | [array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the tags were successfully added to `vg_name` or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`

### bd_lvm_delete_vg_tags ()

    gboolean
    bd_lvm_delete_vg_tags (const gchar *vg_name,
                           const gchar **tags,
                           GError **error);

#### Parameters

vg_name | the VG to set tags on |
tags | list of tags to remove. | [array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the tags were successfully removed from `vg_name` or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`

### bd_lvm_vginfo ()

    BDLVMVGdata *
    bd_lvm_vginfo (const gchar *vg_name,
                   GError **error);

#### Parameters

vg_name | a VG to get information about |
error | place to store error (if any). | [out][optional]

#### Returns

information about the `vg_name` VG or `NULL` in case of error (the `error` ) gets populated in those cases)

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`.

[transfer full]

### bd_lvm_vgs ()

    BDLVMVGdata **
    bd_lvm_vgs (GError **error);

#### Parameters

error | place to store error (if any). | [out][optional]

#### Returns

information about VGs found in the system

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`.

[array zero-terminated=1]

### bd_lvm_lvorigin ()

    gchar *
    bd_lvm_lvorigin (const gchar *vg_name,
                     const gchar *lv_name,
                     GError **error);

#### Parameters

vg_name | name of the VG containing the queried LV |
lv_name | name of the queried LV |
error | place to store error (if any). | [out][optional]

#### Returns

the origin volume for the `vg_name` /`lv_name` LV or `NULL` if failed to determine (`error` ) is set in those cases)

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`.

[transfer full]

### bd_lvm_lvcreate ()

    gboolean
    bd_lvm_lvcreate (const gchar *vg_name,
                     const gchar *lv_name,
                     guint64 size,
                     const gchar *type,
                     const gchar **pv_list,
                     const BDExtraArg **extra,
                     GError **error);

#### Parameters

vg_name | name of the VG to create a new LV in |
lv_name | name of the to-be-created LV |
size | requested size of the new LV |
type | type of the new LV ("striped", "raid1",..., see lvcreate (8)). | [nullable]
pv_list | list of PVs the newly created LV should use or `NULL` if not specified. | [nullable][array zero-terminated=1]
extra | extra options for the LV creation (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the given `vg_name` /`lv_name` LV was successfully created or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_CREATE`

### bd_lvm_lvremove ()

    gboolean
    bd_lvm_lvremove (const gchar *vg_name,
                     const gchar *lv_name,
                     gboolean force,
                     const BDExtraArg **extra,
                     GError **error);

#### Parameters

vg_name | name of the VG containing the to-be-removed LV |
lv_name | name of the to-be-removed LV |
force | whether to force removal or not |
extra | extra options for the LV removal (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `vg_name` /`lv_name` LV was successfully removed or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_REMOVE`

### bd_lvm_lvrename ()

    gboolean
    bd_lvm_lvrename (const gchar *vg_name,
                     const gchar *lv_name,
                     const gchar *new_name,
                     const BDExtraArg **extra,
                     GError **error);

#### Parameters

vg_name | name of the VG containing the to-be-renamed LV |
lv_name | name of the to-be-renamed LV |
new_name | new name for the `vg_name` /`lv_name` LV |
extra | extra options for the LV rename (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `vg_name` /`lv_name` LV was successfully renamed to `vg_name` /`new_name` or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_lvresize ()

    gboolean
    bd_lvm_lvresize (const gchar *vg_name,
                     const gchar *lv_name,
                     guint64 size,
                     const BDExtraArg **extra,
                     GError **error);

#### Parameters

vg_name | name of the VG containing the to-be-resized LV |
lv_name | name of the to-be-resized LV |
size | the requested new size of the LV |
extra | extra options for the LV resize (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `vg_name` /`lv_name` LV was successfully resized or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_lvrepair ()

    gboolean
    bd_lvm_lvrepair (const gchar *vg_name,
                     const gchar *lv_name,
                     const gchar **pv_list,
                     const BDExtraArg **extra,
                     GError **error);

#### Parameters

vg_name | name of the VG containing the to-be-repaired LV |
lv_name | name of the to-be-repaired LV |
pv_list | list of PVs to be used for the repair. | [array zero-terminated=1]
extra | extra options for the LV repair (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `vg_name` /`lv_name` LV was successfully repaired or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_lvactivate ()

    gboolean
    bd_lvm_lvactivate (const gchar *vg_name,
                       const gchar *lv_name,
                       gboolean ignore_skip,
                       gboolean shared,
                       const BDExtraArg **extra,
                       GError **error);

#### Parameters

vg_name | name of the VG containing the to-be-activated LV |
lv_name | name of the to-be-activated LV |
ignore_skip | whether to ignore the skip flag or not |
shared | whether to activate the LV in shared mode (used for shared LVM setups with lvmlockd, use `FALSE` if not sure) |
extra | extra options for the LV activation (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `vg_name` /`lv_name` LV was successfully activated or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_lvdeactivate ()

    gboolean
    bd_lvm_lvdeactivate (const gchar *vg_name,
                         const gchar *lv_name,
                         const BDExtraArg **extra,
                         GError **error);

#### Parameters

vg_name | name of the VG containing the to-be-deactivated LV |
lv_name | name of the to-be-deactivated LV |
extra | extra options for the LV deactivation (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `vg_name` /`lv_name` LV was successfully deactivated or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_lvsnapshotcreate ()

    gboolean
    bd_lvm_lvsnapshotcreate (const gchar *vg_name,
                             const gchar *origin_name,
                             const gchar *snapshot_name,
                             guint64 size,
                             const BDExtraArg **extra,
                             GError **error);

#### Parameters

vg_name | name of the VG containing the LV a new snapshot should be created of |
origin_name | name of the LV a new snapshot should be created of |
snapshot_name | name of the to-be-created snapshot |
size | requested size for the snapshot |
extra | extra options for the LV snapshot creation (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `snapshot_name` snapshot of the `vg_name` /`origin_name` LV was successfully created or not.

Tech category: `BD_LVM_TECH_BASIC_SNAP`-`BD_LVM_TECH_MODE_CREATE`

### bd_lvm_lvsnapshotmerge ()

    gboolean
    bd_lvm_lvsnapshotmerge (const gchar *vg_name,
                            const gchar *snapshot_name,
                            const BDExtraArg **extra,
                            GError **error);

#### Parameters

vg_name | name of the VG containing the to-be-merged LV snapshot |
snapshot_name | name of the to-be-merged LV snapshot |
extra | extra options for the LV snapshot merge (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `vg_name` /`snapshot_name` LV snapshot was successfully merged or not

Tech category: `BD_LVM_TECH_BASIC_SNAP`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_add_lv_tags ()

    gboolean
    bd_lvm_add_lv_tags (const gchar *vg_name,
                        const gchar *lv_name,
                        const gchar **tags,
                        GError **error);

#### Parameters

vg_name | name of the VG that contains the LV to set tags on |
lv_name | name of the LV to set tags on |
tags | list of tags to add. | [array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the tags were successfully added to `device` or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`

### bd_lvm_delete_lv_tags ()

    gboolean
    bd_lvm_delete_lv_tags (const gchar *vg_name,
                           const gchar *lv_name,
                           const gchar **tags,
                           GError **error);

#### Parameters

vg_name | name of the VG that contains the LV to set tags on |
lv_name | name of the LV to set tags on |
tags | list of tags to remove. | [array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the tags were successfully removed from `device` or not

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`

### bd_lvm_lvinfo ()

    BDLVMLVdata *
    bd_lvm_lvinfo (const gchar *vg_name,
                   const gchar *lv_name,
                   GError **error);

#### Parameters

vg_name | name of the VG that contains the LV to get information about |
lv_name | name of the LV to get information about |
error | place to store error (if any). | [out][optional]

#### Returns

information about the `vg_name` /`lv_name` LV or `NULL` in case of error (the `error` ) gets populated in those cases)

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`.

[transfer full]

### bd_lvm_lvinfo_tree ()

    BDLVMLVdata *
    bd_lvm_lvinfo_tree (const gchar *vg_name,
                        const gchar *lv_name,
                        GError **error);

This function will fill out the data_lvs, metadata_lvs, and segs fields as well.

#### Parameters

vg_name | name of the VG that contains the LV to get information about |
lv_name | name of the LV to get information about |
error | place to store error (if any). | [out][optional]

#### Returns

information about the `vg_name` /`lv_name` LV or `NULL` in case of error (the `error` ) gets populated in those cases)

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`.

[transfer full]

### bd_lvm_lvs ()

    BDLVMLVdata **
    bd_lvm_lvs (const gchar *vg_name,
                GError **error);

#### Parameters

vg_name | name of the VG to get information about LVs from. | [nullable]
error | place to store error (if any). | [out][optional]

#### Returns

information about LVs found in the given `vg_name` VG or in system if `vg_name` is `NULL`

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`.

[array zero-terminated=1]

### bd_lvm_lvs_tree ()

    BDLVMLVdata **
    bd_lvm_lvs_tree (const gchar *vg_name,
                     GError **error);

This function will fill out the data_lvs, metadata_lvs, and segs fields as well.

#### Parameters

vg_name | name of the VG to get information about LVs from. | [nullable]
error | place to store error (if any). | [out][optional]

#### Returns

information about LVs found in the given `vg_name` VG or in system if `vg_name` is `NULL`.

Tech category: `BD_LVM_TECH_BASIC`-`BD_LVM_TECH_MODE_QUERY`.

[array zero-terminated=1]

### bd_lvm_thpoolcreate ()

    gboolean
    bd_lvm_thpoolcreate (const gchar *vg_name,
                         const gchar *lv_name,
                         guint64 size,
                         guint64 md_size,
                         guint64 chunk_size,
                         const gchar *profile,
                         const BDExtraArg **extra,
                         GError **error);

#### Parameters

vg_name | name of the VG to create a thin pool in |
lv_name | name of the to-be-created pool LV |
size | requested size of the to-be-created pool |
md_size | requested metadata size or 0 to use the default |
chunk_size | requested chunk size or 0 to use the default |
profile | profile to use (see lvm(8) for more information) or `NULL` to use the default. | [nullable]
extra | extra options for the thin pool creation (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `vg_name` /`lv_name` thin pool was successfully created or not

Tech category: `BD_LVM_TECH_THIN`-`BD_LVM_TECH_MODE_CREATE`

### bd_lvm_thpool_convert ()

    gboolean
    bd_lvm_thpool_convert (const gchar *vg_name,
                           const gchar *data_lv,
                           const gchar *metadata_lv,
                           const gchar *name,
                           const BDExtraArg **extra,
                           GError **error);

Converts the `data_lv` and `metadata_lv` into a new thin pool in the `vg_name` VG.

#### Parameters

vg_name | name of the VG to create the new thin pool in |
data_lv | name of the LV that should become the data part of the new pool |
metadata_lv | name of the LV that should become the metadata part of the new pool |
name | name for the thin pool (if `NULL`, the name `data_lv` is inherited). | [nullable]
extra | extra options for the thin pool creation (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the new thin pool was successfully created from `data_lv` and `metadata_lv` or not

Tech category: `BD_LVM_TECH_THIN`-`BD_LVM_TECH_MODE_CREATE`

### bd_lvm_thlvcreate ()

    gboolean
    bd_lvm_thlvcreate (const gchar *vg_name,
                       const gchar *pool_name,
                       const gchar *lv_name,
                       guint64 size,
                       const BDExtraArg **extra,
                       GError **error);

#### Parameters

vg_name | name of the VG containing the thin pool providing extents for the to-be-created thin LV |
pool_name | name of the pool LV providing extents for the to-be-created thin LV |
lv_name | name of the to-be-created thin LV |
size | requested virtual size of the to-be-created thin LV |
extra | extra options for the thin LV creation (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `vg_name` /`lv_name` thin LV was successfully created or not

Tech category: `BD_LVM_TECH_THIN`-`BD_LVM_TECH_MODE_CREATE`

### bd_lvm_thlvpoolname ()

    gchar *
    bd_lvm_thlvpoolname (const gchar *vg_name,
                         const gchar *lv_name,
                         GError **error);

#### Parameters

vg_name | name of the VG containing the queried thin LV |
lv_name | name of the queried thin LV |
error | place to store error (if any). | [out][optional]

#### Returns

the name of the pool volume for the `vg_name` /`lv_name` thin LV or `NULL` if failed to determine (`error` ) is set in those cases)

Tech category: `BD_LVM_TECH_THIN`-`BD_LVM_TECH_MODE_QUERY`.

[transfer full]

### bd_lvm_thsnapshotcreate ()

    gboolean
    bd_lvm_thsnapshotcreate (const gchar *vg_name,
                             const gchar *origin_name,
                             const gchar *snapshot_name,
                             const gchar *pool_name,
                             const BDExtraArg **extra,
                             GError **error);

#### Parameters

vg_name | name of the VG containing the thin LV a new snapshot should be created of |
origin_name | name of the thin LV a new snapshot should be created of |
snapshot_name | name of the to-be-created snapshot |
pool_name | name of the thin pool to create the snapshot in or `NULL` if not specified. | [nullable]
extra | extra options for the thin LV snapshot creation (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `snapshot_name` snapshot of the `vg_name` /`origin_name` thin LV was successfully created or not.

Tech category: `BD_LVM_TECH_THIN`-`BD_LVM_TECH_MODE_CREATE`

### bd_lvm_set_global_config ()

    gboolean
    bd_lvm_set_global_config (const gchar *new_config,
                              GError **error);

#### Parameters

new_config | string representation of the new global LVM configuration to set or `NULL` to reset to default. | [nullable]
error | place to store error (if any). | [out][optional]

#### Returns

whether the new requested global config `new_config` was successfully set or not

Tech category: `BD_LVM_TECH_GLOB_CONF` no mode (it is ignored)

### bd_lvm_get_global_config ()

    gchar *
    bd_lvm_get_global_config (GError **error);

#### Parameters

error | place to store error (if any). | [out][optional]

#### Returns

a copy of a string representation of the currently set LVM global configuration

Tech category: `BD_LVM_TECH_GLOB_CONF` no mode (it is ignored)

### bd_lvm_cache_attach ()

    gboolean
    bd_lvm_cache_attach (const gchar *vg_name,
                         const gchar *data_lv,
                         const gchar *cache_pool_lv,
                         const BDExtraArg **extra,
                         GError **error);

#### Parameters

vg_name | name of the VG containing the `data_lv` and the `cache_pool_lv` LVs |
data_lv | data LV to attach the `cache_pool_lv` to |
cache_pool_lv | cache pool LV to attach to the `data_lv` |
extra | extra options for the cache attachment (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `cache_pool_lv` was successfully attached to the `data_lv` or not

Note: Both `data_lv` and `cache_lv` will be deactivated before the operation.

Tech category: `BD_LVM_TECH_CACHE`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_cache_create_cached_lv ()

    gboolean
    bd_lvm_cache_create_cached_lv (const gchar *vg_name,
                                   const gchar *lv_name,
                                   guint64 data_size,
                                   guint64 cache_size,
                                   guint64 md_size,
                                   BDLVMCacheMode mode,
                                   BDLVMCachePoolFlags flags,
                                   const gchar **slow_pvs,
                                   const gchar **fast_pvs,
                                   GError **error);

#### Parameters

vg_name | name of the VG to create a cached LV in |
lv_name | name of the cached LV to create |
data_size | size of the data LV |
cache_size | size of the cache (or cached LV more precisely) |
md_size | size of the cache metadata LV or 0 to use the default |
mode | cache mode for the cached LV |
flags | a combination of (ORed) BDLVMCachePoolFlags |
slow_pvs | list of slow PVs (used for the data LV). | [array zero-terminated=1]
fast_pvs | list of fast PVs (used for the cache LV). | [array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the cached LV `lv_name` was successfully created or not

Tech category: `BD_LVM_TECH_CACHE`-`BD_LVM_TECH_MODE_CREATE`

### bd_lvm_cache_create_pool ()

    gboolean
    bd_lvm_cache_create_pool (const gchar *vg_name,
                              const gchar *pool_name,
                              guint64 pool_size,
                              guint64 md_size,
                              BDLVMCacheMode mode,
                              BDLVMCachePoolFlags flags,
                              const gchar **fast_pvs,
                              GError **error);

#### Parameters

vg_name | name of the VG to create `pool_name` in |
pool_name | name of the cache pool LV to create |
pool_size | desired size of the cache pool `pool_name` |
md_size | desired size of the `pool_name` cache pool's metadata LV or 0 to use the default |
mode | cache mode of the `pool_name` cache pool |
flags | a combination of (ORed) BDLVMCachePoolFlags |
fast_pvs | list of (fast) PVs to create the `pool_name` cache pool (and the metadata LV). | [array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the cache pool `vg_name` /`pool_name` was successfully created or not

Tech category: `BD_LVM_TECH_CACHE`-`BD_LVM_TECH_MODE_CREATE`

### bd_lvm_cache_pool_convert ()

    gboolean
    bd_lvm_cache_pool_convert (const gchar *vg_name,
                               const gchar *data_lv,
                               const gchar *metadata_lv,
                               const gchar *name,
                               const BDExtraArg **extra,
                               GError **error);

Converts the `data_lv` and `metadata_lv` into a new cache pool in the `vg_name` VG.

#### Parameters

vg_name | name of the VG to create the new thin pool in |
data_lv | name of the LV that should become the data part of the new pool |
metadata_lv | name of the LV that should become the metadata part of the new pool |
name | name for the thin pool (if `NULL`, the name `data_lv` is inherited). | [nullable]
extra | extra options for the thin pool creation (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the new cache pool was successfully created from `data_lv` and `metadata_lv` or not

Tech category: `BD_LVM_TECH_CACHE`-`BD_LVM_TECH_MODE_CREATE`

### bd_lvm_cache_detach ()

    gboolean
    bd_lvm_cache_detach (const gchar *vg_name,
                         const gchar *cached_lv,
                         gboolean destroy,
                         const BDExtraArg **extra,
                         GError **error);

#### Parameters

vg_name | name of the VG containing the `cached_lv` |
cached_lv | name of the cached LV to detach its cache from |
destroy | whether to destroy the cache after detach or not |
extra | extra options for the cache detachment (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the cache was successfully detached from the `cached_lv` or not

Note: synces the cache first

Tech category: `BD_LVM_TECH_CACHE`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_cache_get_default_md_size ()

    guint64
    bd_lvm_cache_get_default_md_size (guint64 cache_size,
                                      GError **error);

#### Parameters

cache_size | size of the cache to determine MD size for |
error | place to store error (if any). | [out][optional]

#### Returns

recommended default size of the cache metadata LV or 0 in case of error

Tech category: `BD_LVM_TECH_CACHE_CALCS` no mode (it is ignored)

### bd_lvm_cache_get_mode_from_str ()

    BDLVMCacheMode
    bd_lvm_cache_get_mode_from_str (const gchar *mode_str,
                                    GError **error);

#### Parameters

mode_str | string representation of a cache mode |
error | place to store error (if any). | [out][optional]

#### Returns

cache mode for the `mode_str` or `BD_LVM_CACHE_MODE_UNKNOWN` if failed to determine

Tech category: always provided/supported

### bd_lvm_cache_get_mode_str ()

    const gchar *
    bd_lvm_cache_get_mode_str (BDLVMCacheMode mode,
                               GError **error);

#### Parameters

mode | mode to get the string representation for |
error | place to store error (if any). | [out][optional]

#### Returns

string representation of `mode` or `NULL` in case of error

Tech category: always provided/supported

### bd_lvm_cache_pool_name ()

    gchar *
    bd_lvm_cache_pool_name (const gchar *vg_name,
                            const gchar *cached_lv,
                            GError **error);

#### Parameters

vg_name | name of the VG containing the `cached_lv` |
cached_lv | cached LV to get the name of the its pool LV for |
error | place to store error (if any). | [out][optional]

#### Returns

name of the cache pool LV used by the `cached_lv` or `NULL` in case of error

Tech category: `BD_LVM_TECH_CACHE`-`BD_LVM_TECH_MODE_QUERY`

### bd_lvm_cache_stats ()

    BDLVMCacheStats *
    bd_lvm_cache_stats (const gchar *vg_name,
                        const gchar *cached_lv,
                        GError **error);

#### Parameters

vg_name | name of the VG containing the `cached_lv` |
cached_lv | cached LV to get stats for |
error | place to store error (if any). | [out][optional]

#### Returns

stats for the `cached_lv` or `NULL` in case of error

Tech category: `BD_LVM_TECH_CACHE`-`BD_LVM_TECH_MODE_QUERY`

### bd_lvm_vdolvpoolname ()

    gchar *
    bd_lvm_vdolvpoolname (const gchar *vg_name,
                          const gchar *lv_name,
                          GError **error);

#### Parameters

vg_name | name of the VG containing the queried VDO LV |
lv_name | name of the queried VDO LV |
error | place to store error (if any). | [out][optional]

#### Returns

the name of the pool volume for the `vg_name` /`lv_name` VDO LV or `NULL` if failed to determine (`error` ) is set in those cases)

Tech category: `BD_LVM_TECH_VDO`-`BD_LVM_TECH_MODE_QUERY`.

[transfer full]

### bd_lvm_get_vdo_operating_mode_str ()

    const gchar *
    bd_lvm_get_vdo_operating_mode_str (BDLVMVDOOperatingMode mode,
                                       GError **error);

#### Parameters

mode | mode to get the string representation for |
error | place to store error (if any). | [out][optional]

#### Returns

string representation of `mode` or `NULL` in case of error

Tech category: always provided/supported

### bd_lvm_get_vdo_compression_state_str ()

    const gchar *
    bd_lvm_get_vdo_compression_state_str (BDLVMVDOCompressionState state,
                                          GError **error);

#### Parameters

state | state to get the string representation for |
error | place to store error (if any). | [out][optional]

#### Returns

string representation of `state` or `NULL` in case of error

Tech category: always provided/supported

### bd_lvm_get_vdo_index_state_str ()

    const gchar *
    bd_lvm_get_vdo_index_state_str (BDLVMVDOIndexState state,
                                    GError **error);

#### Parameters

state | state to get the string representation for |
error | place to store error (if any). | [out][optional]

#### Returns

string representation of `state` or `NULL` in case of error

Tech category: always provided/supported

### bd_lvm_get_vdo_write_policy_from_str ()

    BDLVMVDOWritePolicy
    bd_lvm_get_vdo_write_policy_from_str (const gchar *policy_str,
                                          GError **error);

#### Parameters

policy_str | string representation of a policy |
error | place to store error (if any). | [out][optional]

#### Returns

write policy for the `policy_str` or `BD_LVM_VDO_WRITE_POLICY_UNKNOWN` if failed to determine

Tech category: always provided/supported

### bd_lvm_vdo_get_stats ()

    BDLVMVDOStats *
    bd_lvm_vdo_get_stats (const gchar *vg_name,
                          const gchar *pool_name,
                          GError **error);

#### Parameters

vg_name | name of the VG that contains `pool_name` VDO pool |
pool_name | name of the VDO pool to get statistics for |
error | place to store error (if any). | [out][optional]

#### Returns

a structure containing selected statistics or `NULL` in case of error (`error` gets populated in those cases)

In contrast to `bd_lvm_vdo_get_stats_full` this function will only return selected statistics in a fixed structure. In case a value is not available, -1 would be returned.

Tech category: `BD_LVM_TECH_VDO`-`BD_LVM_TECH_MODE_QUERY`.

[transfer full]

### bd_lvm_vdo_get_stats_full ()

    GHashTable *
    bd_lvm_vdo_get_stats_full (const gchar *vg_name,
                               const gchar *pool_name,
                               GError **error);

#### Parameters

vg_name | name of the VG that contains `pool_name` VDO pool |
pool_name | name of the VDO pool to get statistics for |
error | place to store error (if any). | [out][optional]

#### Returns

hashtable of type string - string of available statistics or `NULL` in case of error (`error` gets populated in those cases)

Statistics are collected from the values exposed by the kernel `kvdo` module at the `/sys/kvdo/&lt;VDO_NAME>/statistics/` path. Some of the keys are computed to mimic the information produced by the vdo tools. Please note the contents of the hashtable may vary depending on the actual kvdo module version.

Tech category: `BD_LVM_TECH_VDO`-`BD_LVM_TECH_MODE_QUERY`.

[transfer full][element-type utf8 utf8]

### bd_lvm_vdo_disable_compression ()

    gboolean
    bd_lvm_vdo_disable_compression (const gchar *vg_name,
                                    const gchar *pool_name,
                                    const BDExtraArg **extra,
                                    GError **error);

#### Parameters

vg_name | name of the VG containing the to-be-changed VDO pool LV |
pool_name | name of the VDO pool LV to disable compression on |
extra | extra options for the VDO change (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether compression was successfully disabled on `vg_name` /`pool_name` LV or not

Tech category: `BD_LVM_TECH_VDO`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_vdo_disable_deduplication ()

    gboolean
    bd_lvm_vdo_disable_deduplication (const gchar *vg_name,
                                      const gchar *pool_name,
                                      const BDExtraArg **extra,
                                      GError **error);

#### Parameters

vg_name | name of the VG containing the to-be-changed VDO pool LV |
pool_name | name of the VDO pool LV to disable deduplication on |
extra | extra options for the VDO change (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether deduplication was successfully disabled on `vg_name` /`pool_name` LV or not

Tech category: `BD_LVM_TECH_VDO`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_vdo_enable_compression ()

    gboolean
    bd_lvm_vdo_enable_compression (const gchar *vg_name,
                                   const gchar *pool_name,
                                   const BDExtraArg **extra,
                                   GError **error);

#### Parameters

vg_name | name of the VG containing the to-be-changed VDO pool LV |
pool_name | name of the VDO pool LV to enable compression on |
extra | extra options for the VDO change (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether compression was successfully enabled on `vg_name` /`pool_name` LV or not

Tech category: `BD_LVM_TECH_VDO`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_vdo_enable_deduplication ()

    gboolean
    bd_lvm_vdo_enable_deduplication (const gchar *vg_name,
                                     const gchar *pool_name,
                                     const BDExtraArg **extra,
                                     GError **error);

#### Parameters

vg_name | name of the VG containing the to-be-changed VDO pool LV |
pool_name | name of the VDO pool LV to enable deduplication on |
extra | extra options for the VDO change (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether deduplication was successfully enabled on `vg_name` /`pool_name` LV or not

Tech category: `BD_LVM_TECH_VDO`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_vdo_info ()

    BDLVMVDOPooldata *
    bd_lvm_vdo_info (const gchar *vg_name,
                     const gchar *lv_name,
                     GError **error);

#### Parameters

vg_name | name of the VG that contains the LV to get information about |
lv_name | name of the LV to get information about |
error | place to store error (if any). | [out][optional]

#### Returns

information about the `vg_name` /`lv_name` LV or `NULL` in case of error (the `error` ) gets populated in those cases)

Tech category: `BD_LVM_TECH_VDO`-`BD_LVM_TECH_MODE_QUERY`.

[transfer full]

### bd_lvm_vdo_pool_convert ()

    gboolean
    bd_lvm_vdo_pool_convert (const gchar *vg_name,
                             const gchar *pool_lv,
                             const gchar *name,
                             guint64 virtual_size,
                             guint64 index_memory,
                             gboolean compression,
                             gboolean deduplication,
                             BDLVMVDOWritePolicy write_policy,
                             const BDExtraArg **extra,
                             GError **error);

Converts the `pool_lv` into a new VDO pool LV in the `vg_name` VG and creates a new `name` VDO LV with size `virtual_size` .

Note: All data on `pool_lv` will be irreversibly destroyed.

#### Parameters

vg_name | name of the VG that contains `pool_lv` |
pool_lv | name of the LV that should become the new VDO pool LV |
name | name for the VDO LV or `NULL` for default name. | [nullable]
virtual_size | virtual size for the new VDO LV |
index_memory | amount of index memory (in bytes) or 0 for default |
compression | whether to enable compression or not |
deduplication | whether to enable deduplication or not |
write_policy | write policy for the volume |
extra | extra options for the VDO pool creation (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the new VDO pool LV was successfully created from `pool_lv` and or not

Tech category: `BD_LVM_TECH_VDO`-`BD_LVM_TECH_MODE_CREATE`&`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_vdo_pool_create ()

    gboolean
    bd_lvm_vdo_pool_create (const gchar *vg_name,
                            const gchar *lv_name,
                            const gchar *pool_name,
                            guint64 data_size,
                            guint64 virtual_size,
                            guint64 index_memory,
                            gboolean compression,
                            gboolean deduplication,
                            BDLVMVDOWritePolicy write_policy,
                            const BDExtraArg **extra,
                            GError **error);

#### Parameters

vg_name | name of the VG to create a new LV in |
lv_name | name of the to-be-created VDO LV |
pool_name | name of the to-be-created VDO pool LV or `NULL` for default name. | [nullable]
data_size | requested size of the data VDO LV (physical size of the `pool_name` VDO pool LV) |
virtual_size | requested virtual_size of the `lv_name` VDO LV |
index_memory | amount of index memory (in bytes) or 0 for default |
compression | whether to enable compression or not |
deduplication | whether to enable deduplication or not |
write_policy | write policy for the volume |
extra | extra options for the VDO LV creation (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the given `vg_name` /`lv_name` VDO LV was successfully created or not

Tech category: `BD_LVM_TECH_VDO`-`BD_LVM_TECH_MODE_CREATE`

### bd_lvm_vdo_pool_resize ()

    gboolean
    bd_lvm_vdo_pool_resize (const gchar *vg_name,
                            const gchar *pool_name,
                            guint64 size,
                            const BDExtraArg **extra,
                            GError **error);

#### Parameters

vg_name | name of the VG containing the to-be-resized VDO pool LV |
pool_name | name of the to-be-resized VDO pool LV |
size | the requested new size of the VDO pool LV |
extra | extra options for the VDO pool LV resize (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `vg_name` /`pool_name` VDO pool LV was successfully resized or not

Note: Size of the VDO pool LV can be only extended, not reduced.

Tech category: `BD_LVM_TECH_VDO`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_vdo_resize ()

    gboolean
    bd_lvm_vdo_resize (const gchar *vg_name,
                       const gchar *lv_name,
                       guint64 size,
                       const BDExtraArg **extra,
                       GError **error);

#### Parameters

vg_name | name of the VG containing the to-be-resized VDO LV |
lv_name | name of the to-be-resized VDO LV |
size | the requested new size of the VDO LV |
extra | extra options for the VDO LV resize (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `vg_name` /`lv_name` VDO LV was successfully resized or not

Note: Reduction needs to process TRIM for reduced disk area to unmap used data blocks from the VDO pool LV and it may take a long time.

Tech category: `BD_LVM_TECH_VDO`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_vdopooldata_copy ()

    BDLVMVDOPooldata *
    bd_lvm_vdopooldata_copy (BDLVMVDOPooldata *data);

Creates a new copy of `data` .

[skip]

#### Parameters

data | `BDLVMVDOPooldata` to copy. | [nullable]

### bd_lvm_vdopooldata_free ()

    void
    bd_lvm_vdopooldata_free (BDLVMVDOPooldata *data);

Frees `data` .

[skip]

#### Parameters

data | `BDLVMVDOPooldata` to free. | [nullable]

### bd_lvm_devices_add ()

    gboolean
    bd_lvm_devices_add (const gchar *device,
                        const gchar *devices_file,
                        const BDExtraArg **extra,
                        GError **error);

#### Parameters

device | device (PV) to add to the devices file |
devices_file | LVM devices file or `NULL` for default. | [nullable]
extra | extra options for the lvmdevices command. | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `device` was successfully added to `devices_file` or not

Tech category: `BD_LVM_TECH_DEVICES` no mode (it is ignored)

### bd_lvm_devices_delete ()

    gboolean
    bd_lvm_devices_delete (const gchar *device,
                           const gchar *devices_file,
                           const BDExtraArg **extra,
                           GError **error);

#### Parameters

device | device (PV) to delete from the devices file |
devices_file | LVM devices file or `NULL` for default. | [nullable]
extra | extra options for the lvmdevices command. | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `device` was successfully removed from `devices_file` or not

Tech category: `BD_LVM_TECH_DEVICES` no mode (it is ignored)

### bd_lvm_get_devices_filter ()

    gchar **
    bd_lvm_get_devices_filter (GError **error);

#### Parameters

error | place to store error (if any). | [out][optional]

#### Returns

a copy of a string representation of the currently set LVM devices filter

Tech category: `BD_LVM_TECH_DEVICES` no mode (it is ignored).

[transfer full][array zero-terminated=1]

### bd_lvm_get_vdo_write_policy_str ()

    const gchar *
    bd_lvm_get_vdo_write_policy_str (BDLVMVDOWritePolicy policy,
                                     GError **error);

#### Parameters

policy | policy to get the string representation for |
error | place to store error (if any). | [out][optional]

#### Returns

string representation of `policy` or `NULL` in case of error

Tech category: always provided/supported

### bd_lvm_set_devices_filter ()

    gboolean
    bd_lvm_set_devices_filter (const gchar **devices,
                               GError **error);

#### Parameters

devices | list of devices for lvm commands to work on. | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the devices filter was successfully set or not

Tech category: `BD_LVM_TECH_DEVICES` no mode (it is ignored)

### bd_lvm_writecache_attach ()

    gboolean
    bd_lvm_writecache_attach (const gchar *vg_name,
                              const gchar *data_lv,
                              const gchar *cache_lv,
                              const BDExtraArg **extra,
                              GError **error);

#### Parameters

vg_name | name of the VG containing the `data_lv` and the `cache_pool_lv` LVs |
data_lv | data LV to attach the `cache_lv` to |
cache_lv | cache (fast) LV to attach to the `data_lv` |
extra | extra options for the cache attachment (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the `cache_lv` was successfully attached to the `data_lv` or not

Tech category: `BD_LVM_TECH_WRITECACHE`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_writecache_create_cached_lv ()

    gboolean
    bd_lvm_writecache_create_cached_lv (const gchar *vg_name,
                                        const gchar *lv_name,
                                        guint64 data_size,
                                        guint64 cache_size,
                                        const gchar **slow_pvs,
                                        const gchar **fast_pvs,
                                        GError **error);

#### Parameters

vg_name | name of the VG to create a cached LV in |
lv_name | name of the cached LV to create |
data_size | size of the data LV |
cache_size | size of the cache (or cached LV more precisely) |
slow_pvs | list of slow PVs (used for the data LV). | [array zero-terminated=1]
fast_pvs | list of fast PVs (used for the cache LV). | [array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the cached LV `lv_name` was successfully created or not

Tech category: `BD_LVM_TECH_WRITECACHE`-`BD_LVM_TECH_MODE_CREATE`

### bd_lvm_writecache_detach ()

    gboolean
    bd_lvm_writecache_detach (const gchar *vg_name,
                              const gchar *cached_lv,
                              gboolean destroy,
                              const BDExtraArg **extra,
                              GError **error);

#### Parameters

vg_name | name of the VG containing the `cached_lv` |
cached_lv | name of the cached LV to detach its cache from |
destroy | whether to destroy the cache after detach or not |
extra | extra options for the cache detachment (just passed to LVM as is). | [nullable][array zero-terminated=1]
error | place to store error (if any). | [out][optional]

#### Returns

whether the cache was successfully detached from the `cached_lv` or not

Note: synces the cache first

Tech category: `BD_LVM_TECH_WRITECACHE`-`BD_LVM_TECH_MODE_MODIFY`

### bd_lvm_is_tech_avail ()

    gboolean
    bd_lvm_is_tech_avail (BDLVMTech tech,
                          guint64 mode,
                          GError **error);

#### Parameters

tech | the queried tech |
mode | a bit mask of queried modes of operation (BDLVMTechMode) for `tech` |
error | place to store error (details about why the `tech` -`mode` combination is not available). | [out][optional]

#### Returns

whether the `tech` -`mode` combination is available -- supported by the plugin implementation and having all the runtime dependencies available

## Types and Values

### BD_LVM_ERROR

    #define             BD_LVM_ERROR

### enum BDLVMError

#### Members

BD_LVM_ERROR_TECH_UNAVAIL |  |
BD_LVM_ERROR_FAIL |  |
BD_LVM_ERROR_PARSE |  |
BD_LVM_ERROR_NOEXIST |  |
BD_LVM_ERROR_DM_ERROR |  |
BD_LVM_ERROR_NOT_ROOT |  |
BD_LVM_ERROR_CACHE_INVAL |  |
BD_LVM_ERROR_CACHE_NOCACHE |  |
BD_LVM_ERROR_NOT_SUPPORTED |  |
BD_LVM_ERROR_VDO_POLICY_INVAL |  |
BD_LVM_ERROR_DEVICES_DISABLED |  |

### BDLVMPVdata

    typedef struct {
        gchar *pv_name;
        gchar *pv_uuid;
        guint64 pv_free;
        guint64 pv_size;
        guint64 pe_start;
        gchar *vg_name;
        gchar *vg_uuid;
        guint64 vg_size;
        guint64 vg_free;
        guint64 vg_extent_size;
        guint64 vg_extent_count;
        guint64 vg_free_count;
        guint64 vg_pv_count;
        gchar **pv_tags;
        gboolean missing;
    } BDLVMPVdata;

#### Members

gchar *`pv_name`; | name of the PV |
gchar *`pv_uuid`; | UUID of the PV |
guint64 `pv_free`; | size of the free space in the PV |
guint64 `pv_size`; | size of the PV |
guint64 `pe_start`; | start of the physical extents area (i.e. offset of the first PE) |
gchar *`vg_name`; | name of the VG the PV belongs to |
gchar *`vg_uuid`; | UUID of the VG the PV belongs to |
guint64 `vg_size`; | size of the VG the PV belongs to |
guint64 `vg_free`; | size of the free space in the PV's VG |
guint64 `vg_extent_size`; | extent size used by the PV's VG |
guint64 `vg_extent_count`; | number of extents in the PV's VG |
guint64 `vg_free_count`; | number of free extents in the PV's VG |
guint64 `vg_pv_count`; | number of PVs that belong to this PV's VG |
gchar **`pv_tags`; | list of LVM tags for this PV. | [array zero-terminated=1]
gboolean `missing`; | whether this PV is missing from the system or not |

### BDLVMVGdata

    typedef struct {
        gchar *name;
        gchar *uuid;
        guint64 size;
        guint64 free;
        guint64 extent_size;
        guint64 extent_count;
        guint64 free_count;
        guint64 pv_count;
        gboolean exported;
        gchar **vg_tags;
    } BDLVMVGdata;

#### Members

gchar *`name`; | name of the VG |
gchar *`uuid`; | UUID of the VG |
guint64 `size`; | size of the VG |
guint64 `free`; | size of the free space in the VG |
guint64 `extent_size`; | extent size used by the VG |
guint64 `extent_count`; | number of extents in the VG |
guint64 `free_count`; | number of free extents in the VG |
guint64 `pv_count`; | number of PVs that belong to the VG |
gboolean `exported`; | whether the VG is exported or not |
gchar **`vg_tags`; | list of LVM tags for this VG. | [array zero-terminated=1]

### BDLVMSEGdata

    typedef struct {
        guint64 size_pe;
        guint64 pv_start_pe;
        gchar *pvdev;
    } BDLVMSEGdata;

#### Members

guint64 `size_pe`; | Size of this segment in extents |
guint64 `pv_start_pe`; | Where it starts in the physical volume in extents |
gchar *`pvdev`; | Device name of the physical volume or NULL |

### BDLVMLVdata

    typedef struct {
        gchar *lv_name;
        gchar *vg_name;
        gchar *uuid;
        guint64 size;
        gchar *attr;
        gchar *segtype;
        gchar *origin;
        gchar *pool_lv;
        gchar *data_lv;
        gchar *metadata_lv;
        gchar *roles;
        gchar *move_pv;
        guint64 data_percent;
        guint64 metadata_percent;
        guint64 copy_percent;
        gchar **lv_tags;
        gchar **data_lvs;
        gchar **metadata_lvs;
        BDLVMSEGdata **segs;
    } BDLVMLVdata;

The `segs` , `data_lvs` , and `metadata_lvs` fields are only filled by a call to bd_lvm_lvinfo_tree or bd_lvm_lvs_tree. They are all NULL normally. If they are filled, they follow these rules:

A LV is either stored directly on physical volumes, or is made up of sub-LVs. If it is stored on PVs, the `segs` list is non-empty and the `data_lvs` and `metadata_lvs` fields are both NULL. If it is made up of sub-LVs, then `segs` is NULL, `data_lvs` is non-empty and `metadata_lvs` might or might not be empty but is non-NULL. The sub-LVs contained in `data_lv` and `metadata_lv` are always included in `data_lvs` and `metadata_lvs` , respectively.

For a partial LV, the `segs` list might not be complete; i.e., the sum of the sizes of the listed segments might not be equal to the size reported for the LV itself.

Also, the order of entries in `segs` must be assumed to be random; it does not correspond to the order of segments in the logical volume itself.

#### Members

gchar *`lv_name`; | name of the LV |
gchar *`vg_name`; | name of the VG the LV belongs to |
gchar *`uuid`; | UUID of the LV |
guint64 `size`; | size of the LV |
gchar *`attr`; | attributes of the LV |
gchar *`segtype`; | segment type of the LV |
gchar *`origin`; | origin of the LV (for snapshots, etc.) |
gchar *`pool_lv`; | pool LV of the LV (for thin and cached LVs) |
gchar *`data_lv`; | data LV of the LV (for thin and cache pools) |
gchar *`metadata_lv`; | metadata LV of the LV (for thin and cache pools) |
gchar *`roles`; | comma separated list of this LV's roles |
gchar *`move_pv`; | source physical volume of a temporary logical volume created with the pvmove command |
guint64 `data_percent`; | available data space in a thin pool |
guint64 `metadata_percent`; | available metadata space in a thin pool |
guint64 `copy_percent`; | synchronization percentage of a mirrored logical volume |
gchar **`lv_tags`; | list of LVM tags for this LV. | [array zero-terminated=1]
gchar **`data_lvs`; | list of data sub-LVs this LV (for raids, etc). | [nullable][array zero-terminated=1]
gchar **`metadata_lvs`; | list of metadata sub-LVS for this LV (for raids, etc). | [nullable][array zero-terminated=1]
BDLVMSEGdata **`segs`; | The segments of this LV. | [nullable][array zero-terminated=1]

### enum BDLVMCacheMode

#### Members

BD_LVM_CACHE_MODE_UNKNOWN |  |
BD_LVM_CACHE_MODE_WRITETHROUGH |  |
BD_LVM_CACHE_MODE_WRITEBACK |  |

### enum BDLVMCachePoolFlags

#### Members

BD_LVM_CACHE_POOL_STRIPED |  |
BD_LVM_CACHE_POOL_RAID1 |  |
BD_LVM_CACHE_POOL_RAID5 |  |
BD_LVM_CACHE_POOL_RAID6 |  |
BD_LVM_CACHE_POOL_RAID10 |  |
BD_LVM_CACHE_POOL_META_STRIPED |  |
BD_LVM_CACHE_POOL_META_RAID1 |  |
BD_LVM_CACHE_POOL_META_RAID5 |  |
BD_LVM_CACHE_POOL_META_RAID6 |  |
BD_LVM_CACHE_POOL_META_RAID10 |  |

### BDLVMCacheStats

    typedef struct {
        guint64 block_size;
        guint64 cache_size;
        guint64 cache_used;
        guint64 md_block_size;
        guint64 md_size;
        guint64 md_used;
        guint64 read_hits;
        guint64 read_misses;
        guint64 write_hits;
        guint64 write_misses;
        BDLVMCacheMode mode;
    } BDLVMCacheStats;

#### Members

guint64 `block_size`; | block size used by the cache |
guint64 `cache_size`; | size of the cache |
guint64 `cache_used`; | size of the used space in the cache |
guint64 `md_block_size`; | block size used for cache metadata |
guint64 `md_size`; | size of the metadata space of the cache |
guint64 `md_used`; | size of the used metadata space in the cache |
guint64 `read_hits`; | number of read hits |
guint64 `read_misses`; | number of read misses |
guint64 `write_hits`; | number of write hits |
guint64 `write_misses`; | number of write misses |
BDLVMCacheMode `mode`; | mode the cache is operating in |

### BDLVMVDOStats

    typedef struct {
        gint64 block_size;
        gint64 logical_block_size;
        gint64 physical_blocks;
        gint64 data_blocks_used;
        gint64 overhead_blocks_used;
        gint64 logical_blocks_used;
        gint64 used_percent;
        gint64 saving_percent;
        gdouble write_amplification_ratio;
    } BDLVMVDOStats;

#### Members

gint64 `block_size`; | The block size of a VDO volume, in bytes. |
gint64 `logical_block_size`; | The logical block size, in bytes. |
gint64 `physical_blocks`; | The total number of physical blocks allocated for a VDO volume. |
gint64 `data_blocks_used`; | The number of physical blocks currently in use by a VDO volume to store data. |
gint64 `overhead_blocks_used`; | The number of physical blocks currently in use by a VDO volume to store VDO metadata. |
gint64 `logical_blocks_used`; | The number of logical blocks currently mapped. |
gint64 `used_percent`; | The percentage of physical blocks used on a VDO volume (= used blocks / allocated blocks * 100). |
gint64 `saving_percent`; | The percentage of physical blocks saved on a VDO volume (= [logical blocks used - physical blocks used] / logical blocks used). |
gdouble `write_amplification_ratio`; | The average number of block writes to the underlying storage per block written to the VDO device. |

### enum BDLVMVDOCompressionState

#### Members

BD_LVM_VDO_COMPRESSION_UNKNOWN |  |
BD_LVM_VDO_COMPRESSION_ONLINE |  |
BD_LVM_VDO_COMPRESSION_OFFLINE |  |

### enum BDLVMVDOIndexState

#### Members

BD_LVM_VDO_INDEX_UNKNOWN |  |
BD_LVM_VDO_INDEX_ERROR |  |
BD_LVM_VDO_INDEX_CLOSED |  |
BD_LVM_VDO_INDEX_OPENING |  |
BD_LVM_VDO_INDEX_CLOSING |  |
BD_LVM_VDO_INDEX_OFFLINE |  |
BD_LVM_VDO_INDEX_ONLINE |  |

### enum BDLVMVDOOperatingMode

#### Members

BD_LVM_VDO_MODE_UNKNOWN |  |
BD_LVM_VDO_MODE_RECOVERING |  |
BD_LVM_VDO_MODE_READ_ONLY |  |
BD_LVM_VDO_MODE_NORMAL |  |

### BDLVMVDOPooldata

    typedef struct {
        BDLVMVDOOperatingMode operating_mode;
        BDLVMVDOCompressionState compression_state;
        BDLVMVDOIndexState index_state;
        BDLVMVDOWritePolicy write_policy;
        guint64 used_size;
        gint32 saving_percent;
        guint64 index_memory_size;
        gboolean deduplication;
        gboolean compression;
    } BDLVMVDOPooldata;

#### Members

BDLVMVDOOperatingMode `operating_mode`; | operating mode of the VDO pool (e.g. `BD_LVM_VDO_MODE_NORMAL`) |
BDLVMVDOCompressionState `compression_state`; | state of the compression |
BDLVMVDOIndexState `index_state`; | state of the VDO index |
BDLVMVDOWritePolicy `write_policy`; | write policy of the VDO LV |
guint64 `used_size`; | currently used space |
gint32 `saving_percent`; | percentage of physical blocks saved |
guint64 `index_memory_size`; | index memory size of the VDO volume |
gboolean `deduplication`; | whether deduplication is enabled |
gboolean `compression`; | whether compression is enabled |

### enum BDLVMVDOWritePolicy

#### Members

BD_LVM_VDO_WRITE_POLICY_UNKNOWN |  |
BD_LVM_VDO_WRITE_POLICY_AUTO |  |
BD_LVM_VDO_WRITE_POLICY_SYNC |  |
BD_LVM_VDO_WRITE_POLICY_ASYNC |  |

### enum BDLVMTech

#### Members

BD_LVM_TECH_BASIC |  |
BD_LVM_TECH_BASIC_SNAP |  |
BD_LVM_TECH_THIN |  |
BD_LVM_TECH_CACHE |  |
BD_LVM_TECH_CALCS |  |
BD_LVM_TECH_THIN_CALCS |  |
BD_LVM_TECH_CACHE_CALCS |  |
BD_LVM_TECH_GLOB_CONF |  |
BD_LVM_TECH_VDO |  |
BD_LVM_TECH_WRITECACHE |  |
BD_LVM_TECH_DEVICES |  |
BD_LVM_TECH_SHARED |  |

### enum BDLVMTechMode

#### Members

BD_LVM_TECH_MODE_CREATE |  |
BD_LVM_TECH_MODE_REMOVE |  |
BD_LVM_TECH_MODE_MODIFY |  |
BD_LVM_TECH_MODE_QUERY |  |