我们有很多 Linux 服务器,它们会使用 NFS 或 SMB 安装一些 Linux 文件服务器/etc/fstab
但手动更改每个服务器/etc/fstab
非常繁琐。
有没有办法可以同时编辑多个 Linux 服务器/etc/fstab
?
答案1
puppet
从长远来看,配置管理工具(例如、、chef
)就是为完成这类任务而ansible
设计的。
对于短期解决方案,我会使用类似func
或的方法fabric
来推送fstab
文件。我将介绍一个使用示例,fabric
因为这是我最熟悉的。
安装取决于您的发行版。以下方法之一可能有效:
$ sudo pip install fabric
$ sudo easy_install fabric
$ sudo apt-get install fabric
然后,您还需要分发 ssh 密钥。很简单:
$ ssh-keygen
$ ssh-copy-id host2
$ ssh-copy-id host3
现在,您需要创建一个fab
文件(基本上是一个Python
脚本)。例如,copy_fstab.fab
看起来像这样:
from fabric.operations import put
from fabric.operations import sudo
def copy_fstab():
# Copy local fstab over
put('/etc/fstab', '/etc/fstab', use_sudo=True)
# Run mount -a
sudo('mount -a')
最后,运行 fab 文件:
$ fab -H host2,host3 copy_fstab
希望这可以帮助!
答案2
使用大规模部署工具(如automateit、salt、puppet、ansible等),您可以运行脚本(在puppet中使用exec)或如下所示的cronjob来使用mount运行大规模部署的fstab:
mount -a --fstab pathtofile
我以前的回答(如果您的挂载太旧而无法使用 --fstab / -T):在这种大规模部署工具中,您可以进行一些可怕的黑客攻击来模拟 /etc/fstab.d 行为(因为 /etc/fstab.d 尚不受支持,并且这些目录使部署工具非常有用)。
将 fstab 移至 /etc/fstab.d/01main
在文件 /etc/fstab.d/02nfsstuff 中部署 fstab 行
合并它们(这里数字顺序很重要):
cat /etc/fstab.d/* > /etc/fstab
在 /etc/cron.d/nfsstuff 中创建一个可怕的 hackjob cronjob
0 * * * * root cat /etc/fstab.d/* > /etc/fstab ; mount -a
我希望你能找到一个合适的解决方案,但在此之前,也许这是有用的。
答案3
我同意 Peter 的观点,使用部署工具是最完美的解决方案。但是我不认为从 cron 中安装东西是个好主意!
如果部署工具太过复杂,我会使用后期的 init/systemd 脚本(它可能会从中央存储库获取定义)并挂载文件系统。
答案4
假设我在每台服务器上都有一个可通过带有公钥认证的 SSH 访问的管理员帐户,我只需在 bash 循环中使用此 SSH 帐户远程运行 sed 或其他文本编辑工具。