Skip to content

Rust library for reading ext2/ext4 filesystems

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

nicholasbishop/ext4-view-rs

ext4-view-rs

Crates.io Docs.rs codecov.io

This repository provides a Rust crate that allows read-only access to an ext4 filesystem. It also works with ext2 filesystems. Write access is an explicit non-goal. The crate is no_std, so it can be used in embedded contexts. However, it does require alloc.

Usage

Add the dependency:

cargo add ext4-view

Basic example:

use ext4_view::{Ext4, Metadata};

// Load the filesystem. The data source can be be anything that
// implements the `Ext4Read` trait. The simplest source is a
// `Vec<u8>` containing the whole filesystem.
let fs_data: Vec<u8> = get_fs_data_from_somewhere();
let fs = Ext4::load(Box::new(fs_data))?;

// If the `std` feature is enabled, you can load a filesystem by path:
let fs = Ext4::load_from_path(std::path::Path::new("some-fs.bin"))?;

// The `Ext4` type has methods very similar to `std::fs`:
let path = "/some/file/path";
let file_data: Vec<u8> = fs.read(path)?;
let file_str: String = fs.read_to_string(path)?;
let exists: bool = fs.exists(path)?;
let metadata: Metadata = fs.metadata(path)?;
for entry in fs.read_dir("/some/dir")? {
    let entry = entry?;
    println!("{}", entry.path().display());
}

Design Goals

In order of importance:

  1. Correct
    • All valid ext2/ext4 filesystems should be readable.
    • Invalid data should never cause crashes, panics, or non-terminating loops.
    • No unsafe code in the main package (it is allowed in dependencies).
    • Well tested.
  2. Easy to use
    • The API should follow the conventions of std::fs where possible.
  3. Good performance
    • Performance should not come at the expense of correctness or ease of use.

Non-goals:

  • Write support.
  • Recovery of corrupt filesystems.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

Contributing

See the code of conduct and contributing.md.

Bug reports and PRs are welcome!

Disclaimer

This project is not an official Google project. It is not supported by Google and Google specifically disclaims all warranties as to its quality, merchantability, or fitness for a particular purpose.

About

Rust library for reading ext2/ext4 filesystems

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Code of conduct

Stars

Watchers

Forks

Languages