libvslvm(3)
π libvslvm β bestie edition π
okay so. hi. welcome to libvslvm(3), the manual page for the library that gets you into the Linux Logical Volume Manager (LVM) volume system. It's a C library, it lives in <libvslvm.h>, and honestly it's giving β¨main character energyβ¨ for anyone who's ever needed to poke at LVM internals without crying.
This is a Library Functions Manual page, k? So every entry down there is a function you can call. Buckle up, there's like a hundred of them, and we're going through all of them. No skipping. periodt. π
πΈ NAME πΈ
libvslvm.h β the library that gives you access to the Linux Logical Volume Manager (LVM) volume system. that's it, that's the whole vibe π«Ά
β¨ SYNOPSIS β¨
First things first, you gotta include the header, no cap:
#include <libvslvm.h>
Everything else is grouped up nice and cute below. Let's go group by group, bestie, don't scroll too fast π
π Support functions π
the little basics. the starter pack. the "who dis" functions πΈ
const char *
libvslvm_get_version(void);
int
libvslvm_get_access_flags_read_write(void);
int
libvslvm_get_access_flags_write(void);
int
libvslvm_get_codepage(int *codepage, libvslvm_error_t **error);
int
libvslvm_set_codepage(int codepage, libvslvm_error_t **error);
int
libvslvm_check_volume_signature(const char *filename,
libvslvm_error_t **error);
Available when compiled with wide character string support π¦
int
libvslvm_check_volume_signature_wide(const wchar_t *filename,
libvslvm_error_t **error);
Available when compiled with libbfio support π
int
libvslvm_check_volume_signature_file_io_handle(libbfio_handle_t *file_io_handle,
libvslvm_error_t **error);
π Notify functions π
for when you wanna know what's happening in there. verbose mode is lowkey the move π£οΈ
void
libvslvm_notify_set_verbose(int verbose);
int
libvslvm_notify_set_stream(FILE *stream, libvslvm_error_t **error);
int
libvslvm_notify_stream_open(const char *filename,
libvslvm_error_t **error);
int
libvslvm_notify_stream_close(libvslvm_error_t **error);
π Error functions π
the "something went wrong and we need to TALK about it" department π
void
libvslvm_error_free(libvslvm_error_t **error);
int
libvslvm_error_fprint(libvslvm_error_t *error, FILE *stream);
int
libvslvm_error_sprint(libvslvm_error_t *error, char *string,
size_t size);
int
libvslvm_error_backtrace_fprint(libvslvm_error_t *error, FILE *stream);
int
libvslvm_error_backtrace_sprint(libvslvm_error_t *error, char *string,
size_t size);
π Handle functions π
the main character of this library, fr fr. everything starts with a handle π
int
libvslvm_handle_initialize(libvslvm_handle_t **handle,
libvslvm_error_t **error);
int
libvslvm_handle_free(libvslvm_handle_t **handle,
libvslvm_error_t **error);
int
libvslvm_handle_signal_abort(libvslvm_handle_t *handle,
libvslvm_error_t **error);
int
libvslvm_handle_open(libvslvm_handle_t *handle, const char *filename,
int access_flags, libvslvm_error_t **error);
int
libvslvm_handle_open_physical_volume_files(libvslvm_handle_t *handle,
char * const filenames[], int number_of_filenames,
libvslvm_error_t **error);
int
libvslvm_handle_close(libvslvm_handle_t *handle,
libvslvm_error_t **error);
int
libvslvm_handle_get_volume_group(libvslvm_handle_t *handle,
libvslvm_volume_group_t **volume_group, libvslvm_error_t **error);
Available when compiled with wide character string support π¦
int
libvslvm_handle_open_wide(libvslvm_handle_t *handle,
const wchar_t *filename, int access_flags,
libvslvm_error_t **error);
int
libvslvm_handle_open_physical_volume_files_wide(libvslvm_handle_t *handle,
wchar_t * const filenames[], int number_of_filenames,
libvslvm_error_t **error);
Available when compiled with libbfio support π
int
libvslvm_handle_open_file_io_handle(libvslvm_handle_t *handle,
libbfio_handle_t *file_io_handle, int access_flags,
libvslvm_error_t **error);
int
libvslvm_handle_open_physical_volume_files_file_io_pool(libvslvm_handle_t *handle,
libbfio_pool_t *file_io_pool, libvslvm_error_t **error);
π Volume group functions π
the VG. the whole squad. getting its name, its identifier, its sequence number, its extent size, and counting up all the physical + logical volumes inside it π«Ά
int
libvslvm_volume_group_free(libvslvm_volume_group_t **volume_group,
libvslvm_error_t **error);
int
libvslvm_volume_group_get_name_size(libvslvm_volume_group_t *volume_group,
size_t *name_size, libvslvm_error_t **error);
int
libvslvm_volume_group_get_name(libvslvm_volume_group_t *volume_group,
char *name, size_t name_size, libvslvm_error_t **error);
int
libvslvm_volume_group_get_identifier_size(libvslvm_volume_group_t *volume_group,
size_t *identifier_size, libvslvm_error_t **error);
int
libvslvm_volume_group_get_identifier(libvslvm_volume_group_t *volume_group,
char *identifier, size_t identifier_size, libvslvm_error_t **error);
int
libvslvm_volume_group_get_sequence_number(libvslvm_volume_group_t *volume_group,
uint32_t *sequence_number, libvslvm_error_t **error);
int
libvslvm_volume_group_get_extent_size(libvslvm_volume_group_t *volume_group,
size64_t *extent_size, libvslvm_error_t **error);
int
libvslvm_volume_group_get_number_of_physical_volumes(libvslvm_volume_group_t *volume_group,
int *number_of_physical_volumes, libvslvm_error_t **error);
int
libvslvm_volume_group_get_physical_volume(libvslvm_volume_group_t *volume_group,
int volume_index, libvslvm_physical_volume_t **physical_volume,
libvslvm_error_t **error);
int
libvslvm_volume_group_get_physical_volume_by_name(libvslvm_volume_group_t *volume_group,
const char *volume_name, size_t volume_name_length,
libvslvm_physical_volume_t **physical_volume,
libvslvm_error_t **error);
int
libvslvm_volume_group_get_number_of_logical_volumes(libvslvm_volume_group_t *volume_group,
int *number_of_logical_volumes, libvslvm_error_t **error);
int
libvslvm_volume_group_get_logical_volume(libvslvm_volume_group_t *volume_group,
int volume_index, libvslvm_logical_volume_t **logical_volume,
libvslvm_error_t **error);
π Physical volume functions π
the actual disks, basically. name, identifier, device path, size β the whole little dossier π
int
libvslvm_physical_volume_free(libvslvm_physical_volume_t **physical_volume,
libvslvm_error_t **error);
int
libvslvm_physical_volume_get_name_size(libvslvm_physical_volume_t *physical_volume,
size_t *name_size, libvslvm_error_t **error);
int
libvslvm_physical_volume_get_name(libvslvm_physical_volume_t *physical_volume,
char *name, size_t name_size, libvslvm_error_t **error);
int
libvslvm_physical_volume_get_identifier_size(libvslvm_physical_volume_t *physical_volume,
size_t *identifier_size, libvslvm_error_t **error);
int
libvslvm_physical_volume_get_identifier(libvslvm_physical_volume_t *physical_volume,
char *identifier, size_t identifier_size,
libvslvm_error_t **error);
int
libvslvm_physical_volume_get_device_path_size(libvslvm_physical_volume_t *physical_volume,
size_t *device_path_size, libvslvm_error_t **error);
int
libvslvm_physical_volume_get_device_path(libvslvm_physical_volume_t *physical_volume,
char *device_path, size_t device_path_size,
libvslvm_error_t **error);
int
libvslvm_physical_volume_get_size(libvslvm_physical_volume_t *physical_volume,
size64_t *size, libvslvm_error_t **error);
π Logical volume functions π
ok this one ATE. this is where you actually read bytes out of a logical volume, seek around in it, and inspect its segments. read_buffer, read_buffer_at_offset, seek_offset β chef's kiss, bestie β¨
int
libvslvm_logical_volume_free(libvslvm_logical_volume_t **logical_volume,
libvslvm_error_t **error);
ssize_t
libvslvm_logical_volume_read_buffer(libvslvm_logical_volume_t *logical_volume,
void *buffer, size_t buffer_size, libvslvm_error_t **error);
ssize_t
libvslvm_logical_volume_read_buffer_at_offset(libvslvm_logical_volume_t *logical_volume,
void *buffer, size_t buffer_size, off64_t offset,
libvslvm_error_t **error);
off64_t
libvslvm_logical_volume_seek_offset(libvslvm_logical_volume_t *logical_volume,
off64_t offset, int whence, libvslvm_error_t **error);
int
libvslvm_logical_volume_get_offset(libvslvm_logical_volume_t *logical_volume,
off64_t *offset, libvslvm_error_t **error);
int
libvslvm_logical_volume_get_size(libvslvm_logical_volume_t *logical_volume,
size64_t *size, libvslvm_error_t **error);
int
libvslvm_logical_volume_get_name_size(libvslvm_logical_volume_t *logical_volume,
size_t *name_size, libvslvm_error_t **error);
int
libvslvm_logical_volume_get_name(libvslvm_logical_volume_t *logical_volume,
char *name, size_t name_size, libvslvm_error_t **error);
int
libvslvm_logical_volume_get_identifier_size(libvslvm_logical_volume_t *logical_volume,
size_t *identifier_size, libvslvm_error_t **error);
int
libvslvm_logical_volume_get_identifier(libvslvm_logical_volume_t *logical_volume,
char *identifier, size_t identifier_size, libvslvm_error_t **error);
int
libvslvm_logical_volume_get_number_of_segments(libvslvm_logical_volume_t *logical_volume,
int *number_of_segments, libvslvm_error_t **error);
int
libvslvm_logical_volume_get_segment(libvslvm_logical_volume_t *logical_volume,
int segment_index, libvslvm_segment_t **segment,
libvslvm_error_t **error);
π§ Segment functions π§
a logical volume is made of segments, and every segment is a little chunk with an offset, a size, and some stripes β¨
int
libvslvm_segment_free(libvslvm_segment_t **segment,
libvslvm_error_t **error);
int
libvslvm_segment_get_offset(libvslvm_segment_t *segment,
off64_t *offset, libvslvm_error_t **error);
int
libvslvm_segment_get_size(libvslvm_segment_t *segment, size64_t *size,
libvslvm_error_t **error);
int
libvslvm_segment_get_number_of_stripes(libvslvm_segment_t *segment,
int *number_of_stripes, libvslvm_error_t **error);
int
libvslvm_segment_get_stripe(libvslvm_segment_t *segment,
int stripe_index, libvslvm_stripe_t **stripe,
libvslvm_error_t **error);
β Stripe functions β
and a segment has stripes, and a stripe knows which physical volume and offset it's chillin' on. that's the bottom of the stack, babe π«Ά
int
libvslvm_stripe_free(libvslvm_stripe_t **stripe,
libvslvm_error_t **error);
int
libvslvm_stripe_get_physical_volume_name_size(libvslvm_stripe_t *stripe,
size_t *physical_volume_name_size, libvslvm_error_t **error);
int
libvslvm_stripe_get_physical_volume_name(libvslvm_stripe_t *stripe,
char *physical_volume_name, size_t physical_volume_name_size,
libvslvm_error_t **error);
int
libvslvm_stripe_get_data_area_offset(libvslvm_stripe_t *stripe,
off64_t *data_area_offset, libvslvm_error_t **error);
π¦ DESCRIPTION π¦
so the literal one sentence the original gives us here?
The libvslvm_get_version() function is used to retrieve the library version.
that's it. that's the description. the rest of this page is just waves hands at the SYNOPSIS π iconic honestly.
π RETURN VALUES π
Most of the functions return NULL or -1 on error, dependent on the return type. For the actual return values see "libvslvm.h".
so likeβ¦ if something goes wrong, expectNULLor-1. which one? depends on the return type, bestie. go read"libvslvm.h"if you want the exact deets π
β¨ ENVIRONMENT β¨
None
β¨ FILES β¨
None
π NOTES π
libvslvm can be compiled with wide character support (wchar_t). π¦
To compile libvslvm with wide character support use:
./configure --enable-wide-character-type=yes
or define:
_UNICODE
or:
UNICODE
during compilation.
LIBVSLVM_WIDE_CHARACTER_TYPE in libvslvm/features.h can be used to determine if libvslvm was compiled with wide character support. π
π BUGS π
Please report bugs of any kind on the project issue tracker:
https://github.com/libyal/libvslvm/issues
not me asking you to file an issue π do it though, they wanna hear it
π AUTHOR π
These man pages are generated from "libvslvm.h".
πΈ COPYRIGHT πΈ
Copyright (C) 2014-2024, Joachim Metz <joachim.metz@gmail.com>.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
ok that part is serious. NO warranty, not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. read it, internalize it, respect it fr fr π
π«Ά SEE ALSO π«Ά
the libvslvm.h include file
and that's the whole page, bestie!! this beautiful thing is libvslvm from the Library Functions Manual, and it's dated March 6, 2019 π β so yeah, go forth, read your stripes, free your handles, and remember: NULL or -1, choose wisely πβ¨π
π¦ where this page comes from
- debian trixie: libvslvm-dev 20240504-1+b1 Β· LGPL-3.0-or-later
- opensuse-leap 16.0: libvslvm-devel 20240504-bp160.1.13 Β· GFDL-1.3-or-later AND LGPL-3.0-or-later
- opensuse-leap 16.0: libvslvm-devel 20240504-bp160.1.13 Β· GFDL-1.3-or-later AND LGPL-3.0-or-later
- opensuse-leap 16.0: libvslvm-devel 20240504-bp160.1.13 Β· GFDL-1.3-or-later AND LGPL-3.0-or-later
- opensuse-leap 16.0: libvslvm-devel 20240504-bp160.1.13 Β· GFDL-1.3-or-later AND LGPL-3.0-or-later
- ubuntu questing: libvslvm-dev 20240504-1build1
- ubuntu resolute: libvslvm-dev 20240504-2build1 Β· LGPL-3.0-or-later
- ubuntu stonking: libvslvm-dev 20240504-2build1 Β· LGPL-3.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms