NILFS2 - /home 的防弹文件系统

NILFS2 - /home 的防弹文件系统

如您所知,如果麻烦可能发生,那么它肯定会发生。 可能每个人都遇到过最近的重要文件被意外删除,或者文本编辑器中的文本被意外选择和破坏的情况。

如果您是主机托管商或网站所有者,那么您可能遇到过用户帐户或网站遭到黑客攻击的情况。 在这种情况下,恢复时间顺序、找到进入方法以及攻击者使用的漏洞非常重要。

NILFS2 文件系统非常适合解决此类问题。

它从 2.6.30 版本开始就出现在 Linux 内核中。

这个文件系统的奇特之处在于,它类似于版本控制系统:你可以随时回滚系统的状态,看看前段时间是什么样子。

要提供此功能,您不需要配置 Cron 脚本、拍摄快照等。 NILFS2 文件系统自行完成这一切。 它永远不会覆盖旧数据,并且如果有足够的可用磁盘空间,则始终写入磁盘的新区域。 完全按照Copy-on-Write原则。

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

故事

NILFS2 - /home 的防弹文件系统NILFS2 的开发深入 日本电报电话公司事实上,是国有(拥有控股权)、日本最大的电信公司。 更具体地说,在网络空间实验室的领导下 小西龙介.

它的具体开发目的尚不清楚,但可以假设,这种具有“时间机器”功能的 FS 非常适合存储情报部门可能想要挖掘的数据,以便重放整个事件的全貌。短信、电子邮件等......

NILFS2 对于内部安全服务来说也可能是一个非常有价值的工具,因为它允许您恢复邮件数据库中所有已删除的信件,从而暴露员工的门框,这些员工随后可能会试图通过删除或更改文件来伪装它们。

如何追踪您的整个通信历史记录?在 Linux 服务器上(出于内部安全目的,应安装 NILFS2),存储电子邮件的文件方法通常用于存储电子邮件。 所谓格式 邮件目录。 够放的 快递邮件服务器 并在 Maildir 中配置邮件存储。 其他格式 MBOX 是一个大型文本文件,可以轻松解析为单独的消息。

如果邮件服务器使用数据库,那么 NILFS2 将能够恢复数据库更改的准确时间,并能够在任何这些时刻恢复数据库。 然后你需要使用数据库工具来查看当时的内容......

然而,出了点问题。 要么是日本政府改变了对每个人进行监控的想法(按照 Yarovaya 原则),要么是 NILFS2 在传统 HDD 上的性能低于标准,NILFS2 在 GPL 许可下发布并很快进入了 Linux 内核,因为对于用高质量的日语编写的代码没有什么特别的抱怨,Linux 内核的开发人员没有它。

NILFS2 是什么样的?

从用途上来说:用于版本控制系统 SVN。 每个 FS 检查点都是在发生任何更改时在用户不知情的情况下自动进行的提交:无论是删除、更改文件内容还是更改访问权限。 每次提交都有一个线性增加的数字。

从程序员的角度来看:循环缓冲区。 文件系统累积更改并将它们写入大约等于 8 MB 的块(2000 * 4096,其中 2000 是块中的元素数量,4096 是内存页的大小)。 整个磁盘被分成这样的块。 录音按顺序进行。 当可用空间耗尽时,最旧的快照将被删除并覆盖块。

NILFS2 的基本功能

  • 版本控制!!!
  • 故障后恢复文件系统的过程很简单:加载时,搜索具有正确校验和的最后一个块,并在其上安装超级块。 这几乎是即时操作。
  • 由于记录总是线性进行,因此:
    • 在随机写入缓慢的 SSD 上运行时可以显示出良好的结果。
    • NILFS2 节省了 SSD 资源,因为几乎没有写倍增因子。
      更准确地说,不超过2个。事实是,当循环重写整个磁盘时,NILFS2 会将不可更改的数据转移到新的片(块)中。

      如果磁盘上有 10% 不变的数据,那么通过 10 次完全重写,我们将获得 1% 的写入增量。 好吧,对于磁盘 50 次完全重写,设备填充度达到 50% 时增加了 1%。

      最大写入增益为 2。考虑到所有内容都是按顺序写入的,这个增益非常低。 一般来说,写入动画将小于具有 4096 字节扇区的传统碎片文件系统的写入动画。 (思想灵感来自 评论).

  • 实现复制到远程 NILFS2 FS 的潜在便利性

NILFS2 用于 /home

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

如果不是用户,谁最常犯错误? 因此,正如他们所说,上帝亲自下令在 /home 上使用 NILFS2。

此外,随着SSD的广泛使用,我们现在不必再担心使用CoW文件系统时会出现严重的损耗。

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

我使用lvcreate创建了一个逻辑卷(在nvme卷组中,精简池thin)。 我建议在 lvm 卷上创建它,因为以后可以轻松扩展它。 我建议 NILFS50 留出 2% 的可用磁盘空间,以获得适当的版本深度。

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复制所有数据。

我在启动计算机后立即执行此操作,然后以根用户身份登录我的帐户。 如果我以我的用户身份登录,某些程序会打开我的用户的 /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 {YEAR-MM-DD}:{YEAR-MM-DD}.

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

n2u diff -r cp1:cp2 filename

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

n2u blame [-r cp1:cp2] filename

还支持此命令中的日期间隔。

开发商的呐喊

有很多研究哈布雷的专家。 请完成 NILFS2。 进行复制、修订之间的低级快速差异、重新链接和其他好东西!

引用

尼尔夫官方网站.

存储库:
尼尔夫斯2.
NILFS2 实用程序和模块.

时事通讯:
面向 NILFS2 开发人员的电子邮件通讯。 linux-nilfs 订阅的 ID。
时事通讯存档.

nilfs_cleanerd 设置指南.
对 EXT4、Btrfs、XFS 和 NILFS2 性能测试进行基准测试.

谢谢:

  • NILFS2 开发者:Ryusuke Konishi、Koji Sato、Naruhiko Kamimura、Seiji Kihara、Yoshiji Amagai、Hisashi Hifumi 和 Satoshi Moriai。 其他主要贡献者包括:Andreas Rohner、Dan McGee、David Arendt、David Smid、dexen deVries、Dmitry Smirnov、Eric Sandeen、Jiro SEKIBA、Matteo Frigo、Hitoshi Mitake、Takashi Iwai、Vyacheslav Dubeyko。
  • 感谢安培林娱乐公司 (Amblin Entertainment) 和环球影业 (Universal Pictures) 制作的精彩系列电影。 “回到未来”。 帖子的第一张图片取自电影《回到未来3》。
  • 公司 右室紫外可见分光光度计 寻求支持并有机会在您的 Habré 博客上发表文章。

PS 请通过私人消息发送您发现的任何错误。 我为此增加我的业力。

您可以通过从以下网站订购虚拟机来试验 NILFS2: 右室紫外可见分光光度计 使用下面的优惠券。 所有新客户均可享受 3 天的免费试用期。

NILFS2 - /home 的防弹文件系统

来源: habr.com

添加评论