lvm-sys2

Crates.iolvm-sys2
lib.rslvm-sys2
version
sourcesrc
created_at2025-03-03 20:10:21.064575+00
updated_at2025-03-07 17:26:14.00198+00
descriptionLVM FFI bindings
homepagehttps://github.com/skorobogatydmitry/lvm-sys2
repository
max_upload_size
id1576262
Cargo.toml error:TOML parse error at line 21, column 1 | 21 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Dmitry Skorobogaty (skorobogatydmitry)

documentation

README

lvm-sys2

Basic FFI lvm bindings for Rust. This crate, unlike the original lvm-sys, uses the new header lvm2cmd.h instead of lvm2app.h, which is not available starting from around 2018.

This library was developed on

  LVM version:     2.03.30(2) (2025-01-14)
  Library version: 1.02.204 (2025-01-14)
  Driver version:  4.49.0

Usage

Library contains unsafe bindings for lvm2cmd.h and a safe wrapper in [lvm::Lvm].

Non-root execution

To run LVM commands as non-root (e.g. in crate's tests), you need to

  1. Temporary (until next reboot)
  • sudo usermod -aG disk USERNAME and re-login
  • sudo chmod g+rw /dev/mapper/control; sudo chown :disk /dev/mapper/control
  • sudo chmod g+rwx /run/lock/lvm; sudo chown :disk /run/lock/lvm
  • sudo chmod g+rw /run/lvm/hints; sudo chown :disk /run/lvm/hints
  • sudo find /run/lvm/ -type f -print -exec chmod g+rw {} \;
  • sudo find /run/lvm/ -type s -print -exec chmod g+rw {} \;
  • sudo find /run/lvm/ -type d -print -exec chmod g+rwx {} \;
  • sudo find /run/lvm/ -type f -print -exec chown :disk {} \;
  • sudo find /run/lvm/ -type s -print -exec chown :disk {} \;
  • sudo find /run/lvm/ -type d -print -exec chown :disk {} \;
  • sudo setcap cap_sys_admin,cap_fowner+ep BINARY_NAME

Refreshing:

BIN_NAME=`which lvm`
sudo chmod g+rw /dev/mapper/control; sudo chown :disk /dev/mapper/control
sudo chmod g+rwx /run/lock/lvm; sudo chown :disk /run/lock/lvm
sudo chmod g+rw /run/lvm/hints; sudo chown :disk /run/lvm/hints
sudo find /run/lvm/ -type f -print -exec chmod g+rw {} \;
sudo find /run/lvm/ -type s -print -exec chmod g+rw {} \;
sudo find /run/lvm/ -type d -print -exec chmod g+rwx {} \;
sudo find /run/lvm/ -type f -print -exec chown :disk {} \;
sudo find /run/lvm/ -type s -print -exec chown :disk {} \;
sudo find /run/lvm/ -type d -print -exec chown :disk {} \;
sudo setcap cap_sys_admin,cap_fowner+ep $BIN_NAME
  1. Permanent: TBD

Quick research for /dev/mapper/control showed that it, it seems, appears before any udev rules take effect.

Docs

cargo doc --open --document-private-items

Etc

LVM DBus interface

Command to list services:

dbus-send --session           \
  --dest=org.freedesktop.DBus \
  --type=method_call          \
  --print-reply               \
  /org/freedesktop/DBus       \
  org.freedesktop.DBus.ListNames

... doesn't show LVM.

There's no DBus daemon on Manjaro => raised a question on forum

Command to check methods in the future:

dbus-send --system --type=method_call --print-reply \
      --dest=org.asamk.Signal \
      /org/asamk/Signal \
      org.freedesktop.DBus.Introspectable.Introspect
Commit count: 0

cargo fmt