2 个版本

0.1.1 2023 年 7 月 4 日
0.1.0 2023 年 6 月 30 日
0.0.4-beta 2023 年 6 月 30 日

#442 in 文件系统

MIT/Apache

140KB
2.5K SLoC

Ext2.rs

本 crate 的目的是能够在块设备或简单磁盘映像文件形式上读取和写入 ext2 分区。

它不需要任何 Unix 内核模块即可运行。最初,它被设计为在不需要特权模式的 Docker 容器内打开 ext2 映像。

本 crate 覆盖了基本系统调用

  • open : 打开文件。
  • read_dir : 返回目录内的条目向量。
  • create_dir : 在提供的路径处创建一个新的空目录。
  • remove_dir : 删除一个空目录。
  • chmod : 更改指定文件的文件权限位。
  • chown : 将路径处的文件的所有权更改为指定的所有者(用户)和组。
  • stat : 此函数返回有关文件的信息。
  • remove_file : 从文件系统中删除文件。
  • utime : 更改文件的访问和修改时间。
  • rename : 将文件或目录重命名为新名称,如果目标已存在,则不能替换原始文件。
  • link : 为文件创建新名称。这也称为“硬链接”。
  • symlink : 为文件创建新名称。这称为符号链接。

此外,crate 还实现了自己的 OpenOptions。

您对文件拥有完全权限,并且所有指定的路径必须是绝对路径。目前,此 crate 只在类 Unix 操作系统上运行。

免责声明: 此 crate 处于早期阶段,应谨慎用于现有系统分区。

此模块包含 ext2 驱动,请参阅 osdev

未来路线图

  • 修复一些不一致性
  • 使用 std::io::Error 代替 IOError
  • 使用 ErrorKind 代替 errno
  • 在其他平台(非 UNIX)上编译
  • 无 std
  • 目录条目缓存
  • 更改当前目录
  • 设置权限

入门指南

将以下依赖项添加到您的Cargo清单中...

[dependencies]
ext2 = "0.1"

# or
ext2 = { version = "0.1" }

示例

首先,创建一个名为'disk.img'的新ext2磁盘镜像

dd if=/dev/zero of=disk.img bs=1024 count=1024
mkfs.ext2 disk.img

打开磁盘镜像,并将其写入'/foo.raw'文件

use ext2;

let f = std::fs::OpenOptions::new() // OpenOptions from std
    .read(true)
    .write(true)
    .open("disk.img")
    .expect("open filesystem failed");
let ext2 = ext2::Ext2::new(f).unwrap();

let mut f = ext2::OpenOptions::new() // OpenOptions from ext2
    .write(true)
    .create(true)
    .open("/foo.raw", ext2)
    .unwrap();
let b: Box<[u8; 1024 * 128]> = Box::new([42; 1024 * 128]);
let size = f.write(&*b).unwrap(); // write the box content to file

许可证

根据以下任一项获得许可

由您选择。

贡献

除非您明确表示,否则根据Apache-2.0许可证定义的,您有意提交以供包含在作品中的任何贡献,都将根据上述方式双重许可,没有任何额外条款或条件。

依赖项

~1.5MB
~36K SLoC