Storage Device Managers - Helpful context managers for managing decryption and mounts of storage devices
Overview
The storage_device_managers module provides a set of utilities to manage
encrypted storage devices, handle BtrFS and ext4 mounts, and perform file
system operations in a secure and structured way. It is designed to support
common storage-related tasks such as:
- Decrypting and mounting encrypted devices
- Managing BtrFS and ext4 mounts (with automatic file system detection)
- Creating and removing symbolic links with root privileges
- Formatting and encrypting devices (BtrFS and ext4)
- Changing file ownership securely
Requires Python 3.11 or newer.
Features
- Device Decryption & Encryption: Easily decrypt and encrypt storage devices using
cryptsetup.PassCmdErroris raised when the password command fails, distinct from other shell errors. - BtrFS and ext4 Mount Management: Mount and unmount BtrFS file systems with optional compression settings, or ext4 file systems.
- Automatic File System Detection: Use
get_filesystemto detect a device's file system type, andmount_deviceto mount it without specifying the type manually. - Symbolic Link Handling: Create and remove symbolic links with elevated permissions.
- File System Operations: Format devices with BtrFS or ext4 using dedicated functions or the unified
mkfshelper, manage ownership, and check mount status. - Secure Passphrase Handling: Automatically generate safe passwords for encryption.
Usage
Decrypting and Mounting a Device
from pathlib import Path
from storage_device_managers import decrypted_device, mounted_device
# Decrypt and mount a device
with decrypted_device(Path("/dev/sdb1"), "cat /path/to/password-file") as dev:
with mounted_device(dev) as mount_point:
print(f"Device mounted at {mount_point}")
Encrypting a Device
from pathlib import Path
from storage_device_managers import encrypt_device
uuid = encrypt_device(Path("/dev/sdb1"), "cat /path/to/password-file")
print(f"Device encrypted with UUID: {uuid}")
Creating a Symbolic Link
from pathlib import Path
from storage_device_managers import symbolic_link
src = Path("/path/to/source")
dest = Path("/path/to/destination")
with symbolic_link(src, dest) as link:
print(f"Symbolic link created at {link}")
API Reference
Context Managers
decrypted_device(device: Path, pass_cmd: str) -> Iterator[Path]- Decrypts a device using
cryptsetupand returns a context-managed path. - Raises
shell_interface.PassCmdErrorif the password command fails. - Raises
shell_interface.ShellInterfaceErroron other shell-related errors.
- Decrypts a device using
mounted_device(device: Path, destination: Path | None = None, *, compression: ValidCompressions | None = None) -> Iterator[Path]- Mounts a device, auto-detecting the file system type. For BtrFS, optional compression settings are supported. If
destinationis provided, the device is mounted there and the directory is left intact after the context exits; otherwise a temporary directory is used and removed afterwards.
- Mounts a device, auto-detecting the file system type. For BtrFS, optional compression settings are supported. If
symbolic_link(src: Path, dest: Path) -> Iterator[Path]- Creates and removes a symbolic link with root privileges.
Utility Functions
get_filesystem(device: Path) -> strmount_device(device: Path, mount_dir: Path, compression: ValidCompressions | None = None) -> Nonemount_btrfs_device(device: Path, mount_dir: Path, compression: ValidCompressions | None = None) -> Nonemount_ext4_device(device: Path, mount_dir: Path) -> Noneis_mounted(device: Path) -> boolget_mounted_devices() -> Mapping[str, Mapping[Path, frozenset[str]]]unmount_device(device: Path) -> Noneopen_encrypted_device(device: Path, pass_cmd: str) -> Path- Raises
shell_interface.PassCmdErrorif the password command fails. - Raises
shell_interface.ShellInterfaceErroron other shell-related errors.
- Raises
close_decrypted_device(device: Path) -> Noneencrypt_device(device: Path, password_cmd: str) -> UUID- Raises
shell_interface.PassCmdErrorif the password command fails. - Raises
shell_interface.ShellInterfaceErroron other shell-related errors.
- Raises
mkfs(device: Path, filesystem: ValidFileSystems) -> Nonemkfs_btrfs(device: Path) -> Nonemkfs_ext4(device: Path) -> Nonegenerate_passcmd() -> strchown(file_or_folder: Path, user: int | str, group: int | str | None = None, *, recursive: bool) -> None
Contributing
Contributions are welcome! Please submit issues and pull requests via GitHub.
Metadata
Release files for storage-device-managers 3.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| storage_device_managers-3.0.0.tar.gz | 29.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| storage_device_managers-3.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 50.8 kB
Release files / storage_device_managers-3.0.0.tar.gz
| Download URL | storage_device_managers-3.0.0.tar.gz |
|---|---|
| Size | 29.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4a20f41b9e82f868b468a6132ad20c69b74edbfc2e5b28ab3316a7d3c3bccdfc
|
|
BLAKE2b-256 checksum How to use checksums |
d4bcf1d614a39141814bf816bd064ef962135a3d89eea9dbf60a393aca8218b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / storage_device_managers-3.0.0-py3-none-any.whl
| Download URL | storage_device_managers-3.0.0-py3-none-any.whl |
|---|---|
| Size | 21.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f5437a50073d45f9376f020b597157fc1725a0efe8d7b36e9a151e10f74d30c5
|
|
BLAKE2b-256 checksum How to use checksums |
a3d1e102203a3fbc05c998695af9d5f367d1d06994372e56ba358b882b42b086
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|