tvc*_*tvc 17 linux filesystems partitioning
我正在构建一个安装了 Linux 的新系统,用于特定目的,涉及第三方与其交互。除了应用必要的防火墙规则将计算机与 Intranet 隔离,同时仍然允许访问 Internet 之外,我还需要该系统上的所有文件即使在发出时也能保留(即我能够稍后检索它们)rm
,可能是root
,或其他方式(程序进行系统调用来删除它)。我不仅仅想要文件系统操作的日志(我auditd
相信可以通过 Tripwire 等工具检索),我还需要文件的内容。我想了几种方法来实现这一目标:
rm
为mv some-where-else
, 或rm
二进制文件。虽然这两种方法可以在某种程度上起作用,但如果程序尝试删除文件,它就会错过,因为现在rm
不会调用二进制文件。fakeroot
。这可能行不通,因为他们坚持拥有 root 访问权限来安装程序并修改系统范围的配置(例如 in/etc
和 swap 中的配置)。他们一尝试接触这些文件就会知道这一点。rclone
. 但是,这只有在创建文件的原始进程完成后才有效。我假设如果一个非常大的zip
文件被复制到系统的其他地方,只是从中提取一个很小的文本文件,然后该zip
文件被删除,那么它就会被丢失。ext4
正常安装,但我没有任何经验,也不知道针对这种情况需要修改的任何配置。squashfs
我之前用过一段时间overlayfs
,它确实有一个我想要的功能。删除原文件后,overlayfs
仅隐藏该文件。如果overlayfs
删除分区,原始文件会重新出现。但是,我还想要新文件被删除之前的内容。rm
文件不会使其悬空并受到回收。理论上我觉得这个还不错,但是不知道有没有这样的工具。如果我的理解有什么错误,请指正。任何见解将不胜感激!
编辑:我想从用户的角度澄清这一点:
rm
成功,并且二进制文件可能会进行系统调用来删除文件,例如remove
函数返回 0。ls
文件被“删除”后不再显示。但是,我仍然希望之后能够访问该文件。它可以存储在其他地方。
dod*_*drg 17
根据您的要求(连续快照、具有 root 访问权限的用户、对用户隐藏备份操作),正确选择文件系统应该是实现您的目标的最简单方法。
\n您必须记住的一个关键字是“CoW” = “写入时复制”。\n此功能仅在更改时复制数据。复制文件仅创建指向数据的新指针,因此不会占用新空间(元数据除外)。
\n在操作系统级别,硬链接ln Path1/OrgFile Path2/OrgfileCopy
将通过链接到相同的内容来实现类似的效果inode
(以查看 inode 使用ls -i
)。但是,如果软件写入同一个文件(inode 仍然存在),副本也会更改内容 \xe2\x80\x94这不是 CoW,也不会满足您的期望。
在CoW 感知文件系统上,副本会创建一个新的 inode,并且新 inode 的指针引用原始文件的数据块。当文件更改时,CoW 功能将在写入新版本的块之前将旧数据块复制到新位置。这样,只有更改的块才会保留新的空间。\xe2\x80\x93 CoW 是任何快照的核心思想,因此真正的快照在创建时不会重复数据(占用新空间)。
\n此时,使用btrfs可能是一种选择,特别是因为快照可以传输到其他位置,甚至可以通过 ssh(请参阅btrfs send
和btrfs receive
)。
由于您偏好的是连续但不按时间安排的备份类型,因此btrfs
可能不是第一选择,因为这是按时间安排的,您可能会丢失一些短暂的生命文件。
就快照而言,与 btrfs 类似的是ZFS 。ZFS 的快照也代表时间上的状态,但不是变化状态的连续描述。ZFS 的优势体现在其他功能上,即超大容量或本机加密支持,使其成为 NAS 系统的最爱。(尽管在存储上进行了加密,但您必须使用该选项-w
将加密的快照发送到其目的地zfs send -w ...
:)
另一个解决方案是NILFS(更好的 NILFS2)。
\n"NILFS" = "日志结构文件系统的新实现" \xe2\x80\x94 整个文件系统的组织方式就像日志文件一样!
\n因此,在到达文件系统末尾之前,不会覆盖任何数据。由于其组织遵循环形缓冲区的逻辑,垃圾收集器将找到最旧的删除,以便为新数据释放空间。
\n只要您没有通过连续写入/删除垃圾数据(或使用“擦除磁盘”工具)用新数据或新创建和检测的数据填充整个磁盘大小,您就可以重建删除和更改。对于几秒钟前某人用不同的数据多次写入相同的感兴趣的索引节点的数据来说也是如此。
\n可以列出“检查点”,然后lscp
创建快照mkcp -s
(保护此状态在一段时间内不被垃圾收集器破坏)并安装快照,即使当前卷处于活动状态也是如此。\xe2\x80\x94 可以同步快照,即通过rsync
将感兴趣的状态存档到其他卷上。
另请参阅:
\n https://www.kernel.org/doc/Documentation/filesystems/nilfs2.txt
注解:
\nNILFS 的开发已由 Linux 内核团队接管,目前仍在维护中(尽管在搜索互联网时可能有第一印象)。
\n“Ryusuke Konishi”(NILFS 创始人/几乎不活跃)的原始存储库
\n Linux 内核的 NILFS2 文件系统分支(从 Linus Torvalds 分叉/维护)
\n NILFS 的真实主页:https://nilfs.sourceforge.io \xe2\ x80\x94\n (小心 nilfs.org \xe2\x80\x93 那是假的!)
小智 10
你研究过GitFS吗?看起来您的文件系统需要完整的审核功能,这是版本控制系统的一个特征。GitFS 是一个 FUSE 文件系统,它将提交每个更改并将其推送到远程。
现在对整个文件系统进行版本控制可能有点过头了,但您可以仅挂载该第三方感兴趣的目录。
附带说明:如果您与上述第三方存在信任问题,则技术解决方案可能不适合这种特定情况。
我最初的想法是尝试 Syncthing 在其他地方提供目标文件夹的单向(只读)副本,并启用版本控制。
作为一种解决方案,它避免了低级智能的需要,但如果没有尝试,我不确定它将如何处理您的 zip 文件场景。
你的rm
别名不起作用。仍然可以/bin/rm
绕过别名进行键入rm
。
改变rm
也行不通。touch dummy; mv dummy file_to_erase
将用空文件替换您的文件。perl -e 'unlink file
也会很方便。
如果出现问题确实想返回,请使用备份/克隆、快照或覆盖文件系统。
归档时间: |
|
查看次数: |
2587 次 |
最近记录: |