NILFS2-用于/ home的防弹文件系统



如您所知,如果可能发生麻烦,那么它就会发生。 可能每个人都有这样的情况:意外删除了一个重要的新文件,或者意外选择并删除了文本编辑器中的文本。

如果您是网站的托管人或所有者,那么您可能会面临用户帐户或网站的黑客攻击。 在这种情况下,重要的是要恢复时间顺序,找到一种渗透方式以及攻击者使用的漏洞。

为了解决这些问题,NILFS2文件系统是完美的。

自2.6.30版以来,它已存在于Linux内核中。

该文件系统的一个功能是它类似于版本控制系统:您始终可以回滚系统的状态,并查看它的前一段时间。

要提供此功能,您无需配置Cron脚本,制作快照等。 NILFS2文件系统独自完成了这一切。 如果有足够的可用磁盘空间,她绝不会覆盖旧数据,并且始终会写入磁盘的新区域。 完全符合写时复制的原则。

实际上,对文件的任何更改都需要自动创建文件系统的新快照,因此您可以将此文件系统用作时间机器并倒带文件状态。

故事


NILFS2是在日本电报电话公司的肠子中开发的,实际上,该国(它拥有控股权)和日本最大的电信公司。 更具体地说,由小西龙介(Ryusuke Konishi)领导的Cyber​​Space实验室。

为什么专门开发它-未知,但是,可以假设这样的FS具有“时间机器”功能,是存储数据的理想选择,您可能希望在其中存储更深层次的特殊服务,以便重播SMS,电子邮件等的全貌。

NILFS2可能也是内部安全服务的一个非常有价值的工具,因为它允许您恢复邮件数据库中所有已删除的信件,打开员工的门框,员工随后可以尝试通过删除或更改他们的文件来掩饰他们。

如何追踪通讯的整个历史
在Linux中,在服务器上(出于内部安全目的而值得在其中放置NILFS2),通常使用一种存储电子邮件的文件方法来存储邮件。 所谓Maildir格式。 安装Courier Mail Server并在Maildir中配置字母的存储就足够了。 另一种mbox格式是大型文本文件,可以轻松地将其解析为单个消息。

如果邮件服务器使用数据库,则NILFS2将使得可以还原数据库更改的确切时间,并可以在任何这些点还原数据库。 然后您需要使用数据库工具来查看当时的内容...

但是,出了点问题。 日本政府决定不遵循所有人的原则(按Spring的原则),或者事实证明NILFS2在传统HDD上的性能要低于底板,并且NILFS2是根据GPL许可发布的,并很快进入Linux内核,因为对编写的代码有特殊的抱怨高技能的日语,Linux内核开发人员没有。

NILFS2是什么样的?


从使用的角度来看:在版本控制系统SVN上 。 每个FS检查点都是一个在用户不知情的情况下自动进行的提交:无论是删除,更改文件内容还是访问权限。 每个提交都有一个线性增加的数字。

从程序员的角度来看:在循环缓冲区上。 文件系统将保存更改并将其写入大约8 MB的块(2048 * 4096,其中2048是块中的元素数,而4096是内存页的大小)。 整个光盘分为多个块。 记录是按顺序进行的。 当可用空间用尽时,最早的图片将被删除,大块将被覆盖。

基本的NILFS2包子


  • 版本控制!!!
  • 故障后恢复文件系统的过程很基本:加载时,它将搜索具有正确校验和的最后一块,并在其上安装超级块。 这几乎是即时操作。
  • 由于记录总是线性进行,因此:

    • 在SSD上工作时,随机记录速度慢,可以显示出良好的效果。
    • 由于几乎没有记录乘法器,因此NILFS2节省了SSD资源。
      更确切地说,它不大于2。
      事实是,在整个磁盘的循环重写过程中,NILFS2会将不可变的数据传输到新片段(块)中。

      如果磁盘上有10%的不变数据,那么在进行1次完全重写后,记录将增加10%。 好吧,对于磁盘的1次完全重写,对于50%的完整设备,增加了50%。

      最大记录增益为2。考虑到所有内容均按顺序写入,这非常小。 通常,记录的动画将小于具有4096字节扇区的常规分段文件系统的动画。 (评论)。

  • 轻松复制到远程NILFS2 FS

NILFS2用于/家庭


通常,在类似Unix的操作系统中,有一个/ home文件夹,用于存储用户数据。 各种程序将与特定用户相关的设置保存在此文件夹中。

谁(如果不是用户的话)最经常修剪? 因此,正如他们所说,上帝亲自命令在家里使用NILFS2。

此外,随着SSD的广泛分布,我们现在不必担心使用CoW文件系统时会大幅下降。

是的,我们可以在ZFS和BTRFS中随意创建FS快照,但是始终存在快照之间丢失文件更改的风险。 并且仍然需要管理图片:删除旧的图片。 在NILFS2中,所有这一切都是自动发生的,几乎每隔几秒钟。

我使用lvcreate创建了一个逻辑卷(在nvme卷组中,瘦瘦池)。 我建议在lvm卷上创建它,因为以后可以轻松对其进行扩展。 我建议使用NILFS2保留50%的可用磁盘空间,以实现适当的版本深度。

lvcreate -V10G -T nvme/thin -n home 

并将其格式化为NILFS2:

 mkfs.nilfs2 -L nvme_home /dev/nvme/home mkfs.nilfs2 (nilfs-utils 2.1.5) Start writing file system initial data to the device      Blocksize:4096 Device:/dev/nvme/home1 Device Size:10737418240 File system initialization succeeded !! 

之后,您需要从当前/ home复制所有数据。

在引导计算机之后,我从root用户输入帐户之前立即执行了此操作。 如果我以用户身份登录,则某些程序会打开用户文件夹/ home / user中的套接字和文件,这将使复制变得困难。 如您所知,root用户的主文件夹通常位于路径/ root上,因此将不会在/ home部分打开任何文件。

 mkdir /mnt/newhome mount -t nilfs2 /dev/nvme/home /mnt/newhome cp -a /home/. /mnt/newhome 

对于最后一行,请参阅文章

接下来,编辑/ etc / fstab,它将/ home的文件系统挂载到

/dev/disk/by-label/nvme_home /home nilfs2 noatime 0 0

需要noatime选项来提高性能,以使atime不会随每次文件访问而改变。 接下来,我们重新启动。

NILFS2中的图像类型。


没有删除权限的普通快照称为检查点(检查点或恢复点)。
具有自动删除保护功能的快照称为快照,然后称为快照。

查看检查点是使用lscp命令完成的

查看快照lscp -s

我们可以使用以下方法随时创建快照和检查点:

 mkcp [-s]  

恢复数据。


NILFS允许我们在与主FS分支并行工作的同时,挂载任意数量的旧图片。 但仅在读取模式下。

一切都是这样安排的。 NILFS2所做的常规检查点可以随时(在磁盘空间用尽时或通过nilfs_cleanerd的规则来自动删除),因此,在挂载之前,我们必须将检查点转换为快照,或者用俄语修复该图片。

 chcp ss _ 

之后,我们可以挂载快照,例如:

 mount -t nilfs2 -r -o cp=_ /dev/nvme/home /mnt/nilfs/_ 

然后我们将恢复的文件从快照复制到/ home。
然后我们从图像中删除不可区分的标志,以便将来自动垃圾收集器可以删除过时的数据:

 chcp cp _ 

NILFS2的实用程序


但这是麻烦。 是的,当然,我们可以创建一个文件系统,在线更改其大小,查看链点列表,制作和删除它们。 nilfs2-utils软件包提供了一个最小的绅士套装。

由于NTT削减了资金,因此没有快速,低级的实用程序来显示文件更改的历史记录并在快照之间进行区分。

我的n2u实用程序


为了填补这种空白,我编写了n2u实用程序 ,该实用程序可以显示特定文件/目录的更改历史记录:

 n2u log filename 

输出是这样的:

  CHECKPOINT DATE TIME TYPE SIZE MODE 1787552 2019-11-24 22:08:00 first 7079 cp 1792659 2019-11-25 23:09:05 changed 7081 cp 

对于选择的实现方法,它运行非常迅速:它使用二分法搜索文件之间的差异,快速安装并比较不同图像中的文件/目录。

您可以使用-cp CP1:CP2-cp CP1:CP2-cp {YEAR-MM-DD}:{YEAR-MM-DD}设置检查点范围。

您还可以查看特定文件或目录的检查点之间的区别:

 n2u diff -r cp1:cp2 filename 

您可以显示更改的全部时间顺序:特定文件/目录的检查点之间的所有差异:

 n2u blame [-r cp1:cp2] filename 

还支持此命令中的日期范围。

哭给开发商


哈布雷(Habré)有很多专家。 请完成NILFS2。 进行复制,版本之间的低级快速差异,reflink和其他功能!

参考文献


NILFS官方网站

仓库:
NILFS2
NILFS2实用程序和模块

新闻通讯:
NILFS2开发人员电子邮件 。 linux-nilfs订阅的标识符。
通讯档案

Nilfs_cleanerd配置指南
EXT4,Btrfs,XFS和NILFS2的比较性能测试


致谢:

  • NILFS2开发人员:小西龙介,佐藤浩二,上村鸣彦,木原诚司,天井良司,久住久美和森里聪。 其他主要贡献者包括:安德烈亚斯·罗纳(Andreas Rohner),丹·麦吉(Dan McGee),戴维·阿伦特(David Arendt),戴维·史密德(dexen deVries),德米特里·斯米尔诺夫(Dmitry Smirnov),埃里克·桑丹(Eric Sandeen),次郎·塞基巴(Jiro SEKIBA),马特奥·弗里戈(Matteo Frigo),三井瞳(Hitoshi Mitake),高井岩井(Takashi Iwai),维亚切斯拉夫·杜贝科(Vyacheslav Dubeyko)。
  • Amblin Entertainment和Universal Pictures拍摄了精彩的电影“回到未来” 。 帖子的第一张照片取自电影《回到未来-3》。
  • RUVDS公司的支持以及有机会在其Habré博客上发布。

您在PM中注意到的PS Direct错误。 我为此增加业力。



您可以通过从RUVDS订购以下优惠券的虚拟机来试用NILFS2 。 对于所有新客户,免费试用期为3天。

Source: https://habr.com/ru/post/zh-CN477388/


All Articles