6 releases (major breaking)

new 4.0.1 Mar 7, 2025
3.0.0 Mar 6, 2025
2.0.0 Mar 6, 2025
1.1.1 Mar 3, 2025
0.1.1 Mar 3, 2025

#1 in #lvm

Download history 317/week @ 2025-03-01

317 downloads per month

MIT license

15KB
188 lines

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

Dependencies

~0.7–3.5MB
~69K SLoC