我们有一个内部网络服务器(虚拟化,托管 ReviewBoard,但不是超级相关),我们有一个相对一致的失败模式,失败的 NFS 挂载导致 / 被填满。Distro 是 Ubuntu(不要问)如果一个解决方案依赖于不同的发行版,它的实现会更慢。
正在对 /mnt/backup/ 执行备份,这应该是将 NFS 挂载到另一个系统。不幸的是,当挂载失败或掉线时,会在根文件系统上执行备份,正如您想象的那样,在 / 已满之前不会花很长时间,然后服务开始失败。
已经讨论了许多可能的解决方案。
监视 /mnt/backups 并确保它不是 root。也许是一项 cron 工作。
使用 /mnt/protected/backups,并首先将 /protected 挂载到一个小文件系统,也许是一个循环挂载到本地文件,这样它就不太可能失败。
chmod a-rwx /mnt/backups(根文件系统挂载点)。我不确定安装在受保护的导演上是否可行,我认为确实如此。
在挂载的树上创建一个名为“Backups”的目录,然后软链接“ln -s /mnt/backup/Backups /Backups”。除非挂载 /mnt/backup,否则使用 /Backups 进行备份将失败,因为本地树不包含子目录。
执行检查目录是否正确安装在备份脚本中。
我对这些方法的任何反馈、利弊或人们用作保护根文件系统免受此类恶意行为的标准方法的任何其他技术感兴趣。
运行 Cronjob @reboot 返回 nfs 共享上的文件不存在。
例子
@reboot python /abs/path/to/script.py
Run Code Online (Sandbox Code Playgroud)
启动时来自 crontab 的邮件显示“或多或少”
/usr/bin/python can't open file "/abs/path/to/script.py": [Error No. 2] No such file or folder.
Run Code Online (Sandbox Code Playgroud)
脚本可以从命令行运行,没有问题。
理论上是在运行 mount 之前 cronjob 正在运行。
问题。
我已经为我的服务器编译了 ZFS 0.8.1,它运行良好。我还能够创建像 mypool/myencfs 这样的加密文件系统。
但是,mypool 也是一个文件系统,似乎我无法对其启用加密:
zfs set encryption=on mypool
cannot set property for 'mypool': 'encryption' is readonly
Run Code Online (Sandbox Code Playgroud)
该池将使用来自另一个加密驱动器的密钥文件进行解密,因此我希望将可继承的属性设置得尽可能高,当我不小心将某些内容复制到 mypool/ 时,也不会冒未加密数据的风险
假设我有一个文件夹/mnt/mountpoint用作某些sshfs-mounted 目录的挂载点:
sshfs user@host /mnt/mountpoint
Run Code Online (Sandbox Code Playgroud)
现在,我想阻止应用程序在/mnt/mountpoint卸载时写入。我在这里和这里找到的问题的答案暗示使用
sudo chattr +i /mnt/mountpoint
Run Code Online (Sandbox Code Playgroud)
这可以很好地防止任何写访问。不幸的是,它也阻止了我sshfs作为普通用户安装。
什么是最好的解决方案?我更喜欢单个 sshfs-command 或至少不需要 root 权限的东西。我应该放弃这种chattr方法并尝试完全不同的方法吗?
在某些情况下,由于挂载失败,文件被写入挂载点。
有没有一种简单的方法来检测此类文件(可以轻松实现自动化)?
(我知道可以使用以下内容将文件系统挂载到新的挂载点:
mount --bind / /tmp/tmp
Run Code Online (Sandbox Code Playgroud)
然后在所有挂载点中查找文件。
但我希望更快一些