[pbs-devel] [PATCH proxmox v4 2/4] proxmox-sys: add FileSystemInformation struct and helper
Dominik Csapak
d.csapak at proxmox.com
Mon Jan 17 11:48:17 CET 2022
code mostly copied from proxmox-backups 'disk_usage'
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
proxmox-sys/src/fs/mod.rs | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/proxmox-sys/src/fs/mod.rs b/proxmox-sys/src/fs/mod.rs
index 9fe333b..ee4ef42 100644
--- a/proxmox-sys/src/fs/mod.rs
+++ b/proxmox-sys/src/fs/mod.rs
@@ -102,3 +102,40 @@ impl CreateOptions {
*/
}
+/// Information about a mounted file system from statfs64 syscall
+pub struct FileSystemInformation {
+ /// total bytes available
+ pub total: u64,
+ /// bytes used
+ pub used: u64,
+ /// bytes available to an unprivileged user
+ pub available: u64,
+ /// total number of inodes
+ pub total_inodes: u64,
+ /// free number of inodes
+ pub free_inodes: u64,
+ /// the type of the filesystem (see statfs64(2))
+ pub fs_type: i64,
+ /// the filesystem id
+ pub fs_id: libc::fsid_t,
+}
+
+/// Get file system information from path
+pub fn fs_info<P: ?Sized + nix::NixPath>(path: &P) -> nix::Result<FileSystemInformation> {
+ let mut stat: libc::statfs64 = unsafe { std::mem::zeroed() };
+
+ let res = path.with_nix_path(|cstr| unsafe { libc::statfs64(cstr.as_ptr(), &mut stat) })?;
+ nix::errno::Errno::result(res)?;
+
+ let bsize = stat.f_bsize as u64;
+
+ Ok(FileSystemInformation {
+ total: stat.f_blocks * bsize,
+ used: (stat.f_blocks - stat.f_bfree) * bsize,
+ available: stat.f_bavail * bsize,
+ total_inodes: stat.f_files,
+ free_inodes: stat.f_ffree,
+ fs_type: stat.f_type,
+ fs_id: stat.f_fsid,
+ })
+}
--
2.30.2
More information about the pbs-devel
mailing list