前言
以下内容仅算作为思路参考,不同人情况和需求不同。
双十一的时候,在操作群晖的时候群晖突然失联了。上esxi一看所有操作都无限卡住,发觉情况不对。开终端查询了下smart信息,提示硬盘即将损坏。。闪迪的sata ssd,买了一年,写入量50T左右,寄了。
不过还好,只是盘变为了只读,数据还能拿出来,就是无法写入格式化了。(要开卡的话就得拆壳,拆壳就会失去保修)
但是炸这么一次属实给我吓到了,系统盘也得想办法备份。但是esxi并不支持软raid,我这5105的小主机也没办法上HBA卡去硬raid。vmfs也没办法和btrfs那样玩。寻思半天想起来能不能和群晖一样拿rsync来替代,然后看到了这个itiligent/RSYNC-ESXi
我的5015也没有别的盘位了,闪迪返修也要时间,(正好又坏在双十一。。)索性直接买了块铠侠,等闪迪返修回来后接usb硬盘盒插上去改做备份盘。
结果铠侠到手是960g不是1t。。。(不是,怎么还有厂商做这种啊,差那40g要多少钱啊)
esxi不重装的情况下转移数据是能通过dd的方式转移,可问题是从小盘转到大盘没问题,开机后可以去扩容vmfs。但是vmfs没办法缩小,所以大盘转小盘问题就很大了,dd进去最后vmfs的部分是不认的,索性就一起拿rsync转移了。
想法
先说下大概构思,想起到一个类似软raid1的效果。即当前正在使用的系统盘崩了,切换到备份的盘即可正常运转。
要满足这个构思,就意味着:
- 两个盘得保证有足够的空间互转数据。可以总空间不一样,但是不能1t的吃了800g想转移到500g上那没办法。
- 两个盘都要有esxi的系统部分
- esxi的系统部分是不会经常更改的,所以没有必要经常对拷。只需要保证有个系统,有系统的话就能导入配置文件。
- 两个盘的datastore vmfs分区不能直接dd,dd后uuid会一样,是很有可能会起冲突的。也就是需要重建一个vmfs。
准备工作?
进维护模式先,安全点
假设正在用的系统盘为A,拿来备份的为B,B走usb硬盘盒。
我这边偷懒使用了A盘的esxi系统,B盘直接重装个esxi然后导配置更好,这样的话uuid就不会一样。以下内容基于我“偷懒”的情况(不偷懒的话应该不会有下面这么多情况,应该能直接跳到rsync部分):
-
把A盘系统部分dd出来,即datastore vmfs分区之前的部分。在我这边大概12G,用fdisk或者DG之类的工具看下系统部分终止扇区号多少,就不用d全盘出来了。
(如果dd出来再dd回去后esxi不认就把dd的bs改为1024) -
dd出来的部分再dd进B盘,在我这由于B盘容量小于A盘,所以d过来的时候分区表是有问题的,即最后的vmfs分区“超模”了。我这边将最后的vmfs分区删了,重新随便创建了一个分区(无所谓什么文件系统),也算是纠正了一下分区表。(不创建的话后面就还得拿partedUtil去算扇区创,懒得看怎么搞了)
-
使用A盘运行的系统中插入B盘在我这基本上百分百会使得esxi失联的,怀疑是系统几个分区uuid一致导致的。关机状态下插入,开机后会发现因为uuid一致所以走了usb的盘作为系统启动,而datastore挂载的是a盘的。
-
给B盘创建过一个vmfs用来存东西,参考To add a USB backup datastore to ESXi的第9步,把刚刚随便创的那个分区格为vmfs,名字无所谓,别和A的一样就行。
-
关机,B盘带着硬盘盒接电脑上,因为系统部分uuid一样没找到办法控制谁启动以及中途插入卡死问题。只能魔改分区表去屏蔽前面的分区。如果要用B盘的时候再恢复带系统分区的分区表就行了。
魔改分区表这块,我不知道DG备份出来的分区表拿什么能改,就直接BC对比后干16进制了。。
但是有个思路没测,大概就是dg备份出来的分区表文件为ptf,创个虚拟磁盘镜像,恢复进去了这个完整的分区表,再把前面系统部分分区删了,只留vmfs部分,导出这个分区表就应该是单vmfs存储部分的了。把这个单vmfs分区表恢复进B盘,完整的和单的分区表都做好备份。 -
干完分区表后B盘接回主机上,开机。因为只剩vmfs数据分区了,所以前面系统部分是检测不到的。
-
再参考To add a USB backup datastore to ESXi的除了创分区格式化部分去做usb盘直通绑定。这样的话该盘将不会能作为u盘设备通进虚拟机。
-
重启后参考Mount a Datastore with ESXCLI手动把B盘的数据分区挂载上,再参考Cloning an ESXi OS disk with a VMFS datastore present使其开机后自动挂载,持久化。
到这一步后AB盘就算处理完了,然后就开始处理RSYNC。
正文?
-
把itiligent/RSYNC-ESXi的rsync文件扔到esxi上,同时终端执行
esxcli system settings advanced set -o /User/execInstalledOnly -i 0
(这是esxi8要做的,esxi8开始不允许执行第三方文件)
-
再参考rsync to a local USB Datastore的命令就可以开始备份了。
我个人的话用的rsync参数是-rltDvSP,其中-S是允许稀疏文件,即sparse镜像。例如500g的qcow2实际只占用了100g,拷过去不加这个就是按500去拷的,相当于变raw了。-P是--progress和--partial的结合,即进度显示+中断重试。
(-S经过测试拷贝过去的文件大小和原本的有概率不会一样,而且有概率差距很大。但是sha256是一样的,而且能用)
定时任务?
对我个人而言,这种事肯定是不能我手动干的,肯定是要自动化的,于是写了个脚本设为每个月执行一次备份,大概思路为:
- 参考VMware ESXi主机利用cron设置计划任务设置定时任务
- 脚本部分(仅供参考):
### 允许第三方可执行文件
esxcli system settings advanced set -o /User/execInstalledOnly -i 0
### 复制rsync到系统里
cp /vmfs/volumes/datastore1/rsync /usr/bin
### 关闭虚拟机,xx是vmid。可用vim-cmd vmsvc/getallvms查看vmid
vim-cmd vmsvc/power.shutdown xx
### 进入维护模式(只有虚拟机全部关完了该命令才会结束,否则一直卡着等关机)
esxcli system maintenanceMode set --enable true
### rsync同步文件,目录看个人
rsync -rltDvSP --delete /vmfs/volumes/datastore1/* /vmfs/volumes/datastore2
### 退出维护模式
esxcli system maintenanceMode set --enable false
### 和关机一样,开机
vim-cmd vmsvc/power.on xx
### 等个差不多了把允许第三方可执行文件关了(不过我测试好像没生效,不知道为啥)
sleep 50
esxcli system settings advanced set -o /User/execInstalledOnly -i 1
结束!
通过这么个操作,差不多就能做到在A盘寄的时候,把A盘拔了,B盘分区表恢复后接上去能继续用的效果。相当于raid1的两盘镜像。毕竟esxi的系统真不会有大改动,即使有,也就是相关配置和更新,但是不影响。更新可以切换后再手动更,配置的话参考Backup ESXi config备份出配置就行(不过这个备份出来是网页拿wget下载)。
B盘上去运行的时候由于datastore的uuid变化,需要重新注册下虚拟机,别的都是不用动的。
系统盘备份还是太有必要性了,毕竟真的不想一个个重装。esxi不支持软raid,unraid如其名,只有多盘校验。下次把5015换别的设备的时候可能就只能考虑pve走btrfs来实现了。
0 条评论