假设我有一个主机,它是一个 Web 服务器,其中安装了相关的 Ansible 角色nginx,在 中执行一些基本配置/etc/nginx,并在防火墙中打开端口 80 和 443。
在某些时候,我希望该特定主机不再是 Web 服务器,因为出于某种原因,我将该服务移到了其他地方。只是从[webservers]库存中移除服务器会在服务器中留下垃圾。理想情况下,我想卸载nginx、删除/etc/nginx目录(和一些其他目录),并关闭防火墙中的端口 80 和 443。
在 Puppet 中,我可以做到这一点。作为 Web 服务器的主机将在其配置中具有以下内容:
class { 'nginx':
ensure => present,
}
Run Code Online (Sandbox Code Playgroud)
而我所要做的就是用“缺席”替换“存在”。如果nginx类编写得很好,它将撤消所做的更改。(通常,管理员会将“present”替换为“absent”,然后,当他确定所有受影响的主机都已撤消配置时,他将从清单中删除该项目。)
更重要的是,我认为Puppet防火墙模块会自动删除清单中再也找不到的防火墙规则;所以我认为,对于防火墙,你甚至不需要做上面那个“缺席”的事情,无论如何防火墙都会自动关闭。
如何使用 Ansible 实现这些目标?
短版:rm -rf mydir与mydir(递归),含2.5万个文件,需要一个闲置的大部分机上约12小时。
更多信息:大多数被删除的文件是其他目录中文件的硬链接(被删除的目录实际上是由 制作的最旧的备份rsnapshot;rm命令实际上是由 给出的rsnapshot)。所以主要是目录条目被删除——文件内容本身并不多;它大约是几十 GB。
我远不能确定那btrfs是罪魁祸首。我记得在我开始使用之前备份也很慢btrfs,但我不确定慢是在删除。
该机器是具有 4 GB RAM 的 Intel Core i5 2.67 GHz。它有两个 SATA 磁盘:一个有操作系统和其他一些东西,备份磁盘是 1 TB WDC WD1002FAEX-00Z3A0。主板是华硕P7P55D。
编辑:该机器是带有 Linux 的 Debian wheezy 3.16.3-2~bpo70+1。这是文件系统的挂载方式:
root@thames:~# mount|grep rsnapshot
/dev/sdb1 on /var/backups/rsnapshot type btrfs (rw,relatime,compress=zlib,space_cache)
Run Code Online (Sandbox Code Playgroud)
编辑:使用rsync -a --delete /some/empty/dir mydir大约需要 6 个小时。一个显着的改进rm -rf,但我认为还是太多了。(解释为什么rsync比rm:“[M]大多数文件系统以 btree 格式存储它们的目录结构,删除文件的顺序 [in] 很重要。执行取消链接时需要避免重新平衡 …
我的 Puppet master 包含一些敏感文件。我希望每个傀儡代理只能访问那些特定代理感兴趣的文件。换句话说:
我不知道这是否重要,但我正在运行乘客(并且我的所有代理和主机都是 2.7.6 来自挤压反向端口)。
在 Debian 10 上,service rabbitmq-server start需要 10 秒;service rabbitmq-server stop需要 5 秒。
这适用于负载极低且启动/停止速度比 RabbitMQ 性能或可靠性更重要的 Docker 开发环境。因此,停止并重新启动容器需要 15 秒。
我怎样才能让它更快?我添加log.default.level = debug了rabbitmq.conf以防万一它会告诉我它在启动过程中正在做什么,但它没有给我任何有用的东西。