2个版本
0.1.1 | 2024年6月22日 |
---|---|
0.1.0 | 2021年10月4日 |
354 在 文件系统 中
110KB
1.5K SLoC
progitoor
简介
progitoor
是一个覆盖文件系统,它将所有者和其他文件元数据存储在文本数据库中,并将该视图呈现给以root身份运行的过程,而实际的文件由用户拥有,可以在git中版本化。
一个典型的用例是构建root文件系统。在这种情况下
- 后端存储可以是用户拥有的git分支中的文件,位于
~/project/
中的某个位置 progitoor
将挂载后端存储,并在挂载点(例如,~/mnt/
)下呈现覆盖- 在
sudo chroot ~/mnt
中创建或修改的文件将具有持久化的所有者和mtime,存储在~/project/.progitoor
中(理想情况下也是git版本化的)
工作原理
文件I/O通过使用FUSE文件系统驱动程序通过 progitoor
传递。当需要重新映射文件元数据时,使用 BTreeMap
进行查找。该映射每30秒持久化(刷新)到文本文件(底层中的 .progitoor
),并在 progitoor
退出(通常在卸载文件系统时)时也进行。
对映射的每次更改也会写入一个日志文件以备安全。刷新操作删除日志。如果启动时存在日志文件(表示崩溃),则将其回放(合并到数据库中并删除)。通过写入一个特殊的(墓碑)条目并具有全零文件模式来记录文件删除。
构建和安装
要安装 progitoor
的最新版本,请确保您已安装 Rust 工具链,然后运行
cargo install progitoor
或者,从源代码构建(在 target/release/progitoor
中的二进制文件)
cargo build --release
用法
如果没有使用可选的--foreground
标志,progitoor
将挂载文件系统,然后进入后台并退出,日志记录到syslog。在前台模式下,日志会发送到stdout。
用法与正常的mount -o 选项 <设备> <挂载点>
兼容,具体来说
USAGE:
progitoor [FLAGS] [OPTIONS] <SOURCE> <TARGET>
FLAGS:
-f, --foreground Don't fork - remain in foreground
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-l, --loglevel <LOGLEVEL> Specifies the log level [default: Info]
-o <MOUNT_OPT>... Specifies the mount options
ARGS:
<SOURCE>
<TARGET>
--loglevel
的有效日志级别为Debug
、Info
、Warn
和Error
。
示例
运行progitoor(前台模式)
$ mkdir project
$ mkdir mnt
$ progitoor ./project/ ./mnt/ --foreground
Source dir: "/home/simeon/project"
Mount point: "/home/simeon/mnt"
Using fuse mount options: ["-o", "nonempty", "-o", "allow_root", "-o", "auto_unmount", "-o", "suid", "-o", "exec"]
Periodic flusher thread starting
Ready to mount...
Mounting /home/simeon/mnt
Periodic flusher thread running
在另一个终端中创建一些文件,查看它们(作为用户)
$ cd mnt
mnt$ mkdir etc
mnt$ echo "fake data" > etc/passwd
mnt$ ls -ld etc/
drwxrwxr-x 2 simeon simeon 4096 Oct 3 09:27 etc/
mnt$ ls -l etc/
total 4
-rw-rw-r-- 1 simeon simeon 10 Oct 3 09:28 passwd
作为root,调整所有权
mnt$ sudo chown -R root: etc/
用户的视图没有改变
mnt$ ls -ld etc/
drwxrwxr-x 2 simeon simeon 4096 Oct 3 09:27 etc/
mnt$ ls -l etc/
total 4
-rw-rw-r-- 1 simeon simeon 10 Oct 3 09:28 passwd
root可以看到重新映射的所有权
mnt$ sudo ls -ld etc/
drwxrwxr-x 2 root root 4096 Oct 3 09:27 etc/
mnt$ sudo ls -l etc/
total 4
-rw-rw-r-- 1 root root 10 Oct 3 09:28 passwd
许可证
progitoor
根据通用公共许可证3.0授权。请参阅LICENSE
以获取详细信息。
依赖项
~6–15MB
~195K SLoC