Features
=========

*libblockdev* is a C library supporting GObject introspection for manipulation
of block devices. It has a plugin-based architecture where each technology (like
LVM, Btrfs, MD RAID, Swap,...) is implemented in a separate plugin, possibly
with multiple implementations (e.g. using LVM CLI or the new LVM DBus
API). Every plugin is also usable as a standalone shared library.


partitions
-----------

:supported technologies:
   MBR, GPT, partition manipulation on partitionable devices

:functions:
   * mklabel
   * create_part
   * resize_part
   * remove_part


filesystems
------------

:supported technologies:
   * DONE: ext2, ext3, ext4, xfs, vfat

:functions:
   * make_FSTYPE
   * resize_FSTYPE
   * check_FSTYPE
   * repair_FSTYPE
   * change_label_FSTYPE

   * wipefs
   * mount
   * unmount
   * generic_resize [TODO]


LVM
----

:supported technologies:
   "plain LVM", LVM Thin Provisioning

:TODO:
   * read-only locking and default config

:functions:
   * get_global_config
   * set_global_config
   * get_possible_pe_sizes
   * is_supported_pe_size
   * get_max_lv_size
   * round_size_to_pe
   * get_lv_physical_size
   * get_thpool_padding
   * is_valid_thpool_metadata_size
   * is_valid_thpool_chunk_size

   * pvcreate
   * pvresize
   * pvremove
   * pvmove
   * pvscan
   * pvinfo
   * pvs

   * vgcreate
   * vgextend
   * vgremove
   * vgactivate
   * vgdeactivate
   * vgreduce
   * vginfo
   * vgs

   * lvorigin
   * lvcreate
   * lvremove
   * lvresize
   * lvactivate
   * lvdeactivate
   * lvsnapshotcreate
   * lvsnapshotmerge
   * lvinfo
   * lvs

   * thpoolcreate
   * thlvcreate
   * thlvpoolname
   * thsnapshotcreate

   * cache_get_default_md_size
   * cache_get_mode_str
   * cache_get_mode_from_str
   * cache_create_pool
   * cache_attach
   * cache_detach
   * cache_create_cached_lv
   * cache_pool_name
   * cache_stats

   * data_lv_name
   * metadata_lv_name

   * thpool_convert
   * cache_pool_convert

BTRFS
------

:supported technologies:
   btrfs as both filesystem and multi-device volume, subvolumes, snapshots

:functions:
   * create_volume
   * add_device
   * remove_device
   * list_devices
   * create_subvolume
   * delete_subvolume
   * list_subvolumes
   * get_default_subvolume
   * set_default_subvolume
   * create_snapshot
   * filesystem_info
   * mkfs
   * resize
   * check
   * repair
   * change_label


SWAP
-----

:supported technologies:
   swap partitions/LVs, swap files

:functions:
   * mkswap
   * swapon
   * swapoff
   * swapstatus


MDRAID
-------

:supported technologies:
   all RAID levels supported by the MD RAID

:functions:
   * get_superblock_size
   * create
   * destroy
   * activate
   * deactivate
   * run
   * nominate
   * denominate
   * add
   * remove
   * examine
   * canonicalize_uuid
   * get_md_uuid
   * detail
   * node_from_name
   * name_from_node


CRYPTO/LUKS
------------

:supported technologies:
   only LUKS encrypted devices

:functions:
   * generate_backup_passphrase
   * device_is_luks
   * luks_uuid
   * luks_status
   * luks_format
   * luks_open
   * luks_close
   * luks_add_key
   * luks_remove_key
   * luks_change_key
   * luks_resize
   * escrow_device


MULTIPATH
----------

:supported technologies:
   just very basic functionality

:functions:
   * flush_mpaths
   * device_is_mpath_member
   * get_mpath_members
   * set_friendly_names


LOOP
-----

:supported technologies:
   basic operations with loop devices

:functions:
   * get_backing_file
   * get_loop_name
   * loop_setup
   * loop_teardown


DEVICE MAPPER
--------------

:supported technologies:
   basic operations with raw device mapper and DM RAID sets

:functions:
   * create_linear
   * remove
   * node_from_name
   * name_from_node
   * map_exists
   * get_member_raid_sets
   * activate_raid_set
   * deactivate_raid_set
   * get_raid_set_type


s390
-----

:supported technologies:
   DASD, zFCP

:functions:
   * s390_dasd_format
   * s390_dasd_needs_format
   * s390_dasd_online
   * s390_dasd_is_ldl
   * s390_dasd_is_fba
   * s390_sanitize_dev_input
   * s390_zfcp_sanitize_wwpn_input
   * s390_zfcp_sanitize_lun_input
   * s390_zfcp_online
   * s390_zfcp_scsi_offline
   * s390_zfcp_offline


KBD (Kernel Block Devices)
---------------------------

:supported technologies:
   bcache, zram

:functions:
   * bcache_create
   * bcache_destroy
   * bcache_attach
   * bcache_detach
   * bcache_status
   * bcache_set_mode
   * bcache_get_mode
   * bcache_get_backing_device
   * bcache_get_cache_device

   * zram_create_devices
   * zram_destroy_devices
   * zram_get_stats


utils
------

Library (not a plugin) providing utility functions usable for multiple plugins
and any third-party code.

:functions:
   * exec_and_report_error
   * exec_and_capture_output
   * size_human_readable
   * size_from_spec
   * init_logging
   * version_cmp
   * check_util_version
