大家好!
在本文中,我们将讨论如何自动化在其中一台服务器上扩展磁盘空间的任务。 在我不得不自动化的如此简单的任务中,有什么困难呢? 如果不使用级联合并的挂载,则什么也没有。 我觉得还有更多问题! 好吧,让我们走进猫之下。
首先,我将告诉您为什么我们使用级联集成安装。
我们有一个系统需要存储小文件(文档扫描等)。 平均文件大小为200kb至1兆字节,数据是静态的,不会改变。 其中有数十亿个文件,并且每天都在增长。 有一次,当卷已经超过6TB时,我们意识到问题很快就会开始,其中之一就是备份和恢复的时间。 然后,我们决定将数据拆分到磁盘中,并召集UnionFS来帮助我们。
该算法的定义如下:将数据写入磁盘的容量不超过2TB,结束时我们将新磁盘添加到虚拟机,对其进行标记,将其添加到UnionFS,将旧磁盘转移到ReadOnly,从中删除副本,写入磁带,然后从联机备份中删除它。
正如您已经了解的那样,此算法非常需要管理员注意-任何笨拙的移动和存储都不可用。 因此,我们决定完全排除人为因素,并记住我们拥有ZABBIX,如果在算法中添加一些PowerShell和Bash魔术,它就能很好地解决这一问题。
现在介绍如何完成此操作。
在Zabbix中,配置了一个用于释放空间的触发器,并创建了一个用于手动模式的按钮:

触发触发器后,将在服务器机器人sheduler中形成一个任务,所有自动化脚本都位于该任务上:
Powershell.exe "Enable-ScheduledTask \PROD_TASKS\Add_HDD_OS0226”
在指定的时间,将在服务器上启动一个脚本,该脚本:
将磁盘添加到所需的VM:
(同时,他选择了最多的免费音量) $vm = Get-VM -Name $vmName New-HardDisk -VM $vm -CapacityGB $newHDDCapacity -Datastore $datastoreName –ThinProvisioned
搜索服务器访问详细信息:
关闭顶部我们使用基于TeamPass的自定义访问详细信息存储库,因此脚本可以在系统中找到所需的服务器并自动接收其详细信息。 这样做是因为我们每个月都会自动更改所有密码,但这是另一篇文章的主题。
#Generate TeamPass API request string $vmTPReq = " TeamPass" #Send request to TeamPass $vmCreds = Invoke-WebRequest($vmTPReq) -UseBasicParsing | ConvertFrom-Json #Convert credentials $credential = New-Object System.Management.Automation.PSCredential($vmCreds.login,(ConvertTo-SecureString $vmCreds.pw -asPlainText -Force))
来自SSH:
#Create partition & FS, mount disk to directory, edit fstab...etc. New-SSHSession -ComputerName $vmCreds.url -Credential $credential -Verbose -AcceptKey:$true $results = Invoke-SSHCommand -SessionId 0 -Command "/mnt/autodoit.sh" Remove-SSHSession -Index 0 -Verbose
标记它并将其添加到UnionFS装载中:
不幸的是,在撰写本文时,我们还没有解决与在VEEAM中自动创建任务以归档旧磁盘并将其写入磁带相关的几个问题,因此仍然是手动完成的。 但是,一旦解决了两个问题,我们肯定会更新脚本。
由Vitaliy
Rosman (
PBCVIT )发布。
诚实地借用了一段用于粘合数组的代码,在代码中保存了指向作者的链接。
没有针对UnionFS的投诉;它已经稳定运行了两年多。
一般说来为什么存储是组织性的问题只是说说而已,只要按原样接受即可。
请注意,不同的系统必须使用不同类型的驱动器映射。 因此,要小心,力量会随之而来。