src/tools/disks.rs: add helper to list partitions

This commit is contained in:
Dietmar Maurer 2020-06-08 12:17:15 +02:00
parent ca6124d5fa
commit 0f358204bd
1 changed files with 31 additions and 0 deletions

View File

@ -31,6 +31,7 @@ pub use smart::*;
pub const SGDISK_BIN_PATH: &str = "/usr/sbin/sgdisk";
pub const LSBLK_BIN_PATH: &str = "/usr/bin/lsblk";
pub const BLOCKDEV_BIN_PATH: &str = "/sbin/blockdev";
pub const MKFS_BIN_PATH: &str = "/sbin/mkfs";
lazy_static::lazy_static!{
static ref ISCSI_PATH_REGEX: regex::Regex =
@ -476,6 +477,36 @@ impl Disk {
}
Ok(None)
}
/// List device partitions
pub fn partitions(&self) -> Result<HashMap<u64, Disk>, Error> {
let sys_path = self.syspath();
let device = self.sysname().to_string_lossy().to_string();
let mut map = HashMap::new();
for item in crate::tools::fs::read_subdir(libc::AT_FDCWD, sys_path)? {
let item = item?;
let name = match item.file_name().to_str() {
Ok(name) => name,
Err(_) => continue, // skip non utf8 entries
};
if !name.starts_with(&device) { continue; }
let mut part_path = sys_path.to_owned();
part_path.push(name);
let disk_part = self.manager.clone().disk_by_sys_path(&part_path)?;
if let Some(partition) = disk_part.read_sys_u64("partition")? {
map.insert(partition, disk_part);
}
}
Ok(map)
}
}
/// Returns disk usage information (total, used, avail)