MENU

windows下迁移esxi虚拟机与vmfs分卷数据转移

September 5, 2019 • Environment阅读设置

背景

这应该算是稳压器的续集,在上个月电网不稳定电源啸叫两天后,终于不再叫了,以为电网稳定了于是继续跑着服务器。然后第三天早上还在睡觉的时候,被蜂鸣器的响声吵醒了,蜂鸣器报1-5-4-2,查了下英特尔文档,据说是电源错误,在更换了一切能换的配件都不能启动后,万般无奈地接受了主板坏了这个事实。
在寄去某宝卖家返修后,至今已过去两周了,杳无音讯,感觉是没救了,也不知道是渣渣电源导致的主板损坏,还是某宝水深。不过上网查了下发现很多s2600系列的用户,以及广达富士康等产的同款板子,不少都出现了同样的情况,感觉这块板子本身的设计也可能存在一定问题?
主板一直安安稳稳地没砸没磕碰,元器件也没有可见损坏,但它确实是坏了。不管怎么说,短期内这台服务器是跑不起来的,那么就只能想办法把服务器上的服务进行迁移了。

计划

服务器上开了不少虚拟机,用来搭建生产环境,不过更多的是用来做实验或测试用的,真正重要的也就跑着反代、博客、gitlab的三台,故而需要迁移的就是这三台虚拟机。
这三台虚拟机跑的都是centos7,分区用的是xfs和ext4,所以计划采用diskgenius或其它工具对其磁盘进行读写,若是不行则需要搭建linux系统的虚拟机进行操作。
而为了拿到这三台虚拟机的虚拟磁盘文件,需要将esxi的datastore中的数据拷贝出来。考虑到vmware workstation可以将硬盘直通到虚拟机中,所以理论上新安装一个esxi虚拟机将vmfs分卷挂载,便可以对数据进行读写,但是这个方法有点繁琐,故而优先考虑采用现有工具直接读写datastore。
esxi中datastore的分卷格式是vmfs,而esxi6.7对应的是vmfs6,所以需要找一个可以读vmfs6的工具将其读取出来。

迁移前期

因为第一次接触对esxi的迁移,一开始想着应该有很多现成的读写工具可以把数据从硬盘中拷贝出来,结果一实际操作就懵了。
与一开始想着的一搜就有三四五六个免费好用的软件不同,实际上能找到能用的只有两款:vmfs recovery、vmfs-tools。
vmfs recovery运行于windows下,主要提供对vmfs的数据恢复功能,读写正常vmfs分卷只是其基本功能而已。很好用,不过要钱。多少钱呢?官方3000+米,某宝看到有家在卖授权的便宜了很多,也要900+,虽然是终身授权,不过资本力量薄弱无法选择。试用版测试打开vmfs分卷成功,读取数据成功,界面可以显示文件中的十六进制数据,但是不能读出不能复制,我甚至考虑是不是应该写个插件把这些十六进制读出来转成文件?
vmfs-tools则是运行于linux下,提供对vmfs分卷的支持,其是开源的、免费的、被放弃维护的?。因为vmfs revocery用不起,只能退而求其次使用vmfs-tools,这意味着我需要有台linux机子。好在我的硬盘是怼在移动硬盘盒上的,也有台ubuntu的笔记本,可以方便点不用装虚拟机。于是在ubuntu上装了vmfs-tools进行操作,然后发现,vmfs-tools不支持vmfs6,而其仓库的最后一次commit已经是几年前。。。

vmfs数据迁移

万般无奈之下只能照着最原始的想法,老老实实装虚拟机了:

  1. 安装VM Workstation
  2. 安装对应版本ESXI
  3. 将硬盘连入物理机
  4. ESXI虚拟机VM设置-添加-硬盘-SCSI-使用物理磁盘-设备中选择对应硬盘-勾选使用单个分区-勾选文件系统为VMFS的分区-下一步-完成
  5. 启动ESXI虚拟机-打开http://xxx.xxx.xxx.xxx登陆web后台-Host-Actions-Services-Enable Secure Shell(SSH)
  6. SSH连接ESXI:ssh [email protected]
  7. fdisk -l查看分区是否成功通入虚拟机

    > 在这个时候,如果打开esxi的web管理页面会发现,插入的磁盘并没有被自动挂载成datastore,于是需要通过esxcfg-volume对vmfs进行挂载。
  8. esxcfg-volume -l获取vmfs卷列表

    [[email protected]:~] esxcfg-volume -l
    Scanning for VMFS-6 host activity (4096 bytes/HB, 1024 HBs).
    VMFS UUID/label: 5c498369-094be898-6050-e83935174008/BigDataB
    Can mount: Yes
    Can resignature: Yes
    Extent name: mpx.vmhba0:C0:T1:L0:1      range: 0 - 1907455 (MB)
    
    Scanning for VMFS-6 host activity (4096 bytes/HB, 1024 HBs).
    VMFS UUID/label: 5c716e03-a04c5955-bd13-001e67456991/SystemSpace
    Can mount: Yes
    Can resignature: Yes
    Extent name: mpx.vmhba0:C0:T2:L0:1      range: 0 - 228863 (MB)
  9. esxcfg-volume -M xxxx 挂载对应卷

    [[email protected]:/vmfs/volumes] esxcfg-volume -M SystemSpace
    Persistently mounting volume SystemSpace
    [[email protected]:/vmfs/volumes] esxcfg-volume -M BigDataB
    Persistently mounting volume BigDataB
    > 正常情况下到了这一步,vmfs分卷就会被挂载为datastore,并持续生效,也就意味着如果你只是想要将硬盘从一台esxi服务器搬到另一台esxi服务器上,到了这一步就可以直接开始导入硬盘中的虚拟机了。
  10. 前往/vmfs/volumes下访问对应datastore
  11. 利用scp或其它方式将内容进行转移

    C:\Users\HelloWorld
    λ scp -r [email protected]:/vmfs/volumes/SystemSpace H:\VMFSBackup\SystemSpace
    Password:
    .fbb.sf                                                                                    100% 3896KB  62.6MB/s   00:00
    .fdc.sf                                                                                    100%  129MB  74.6MB/s   00:01
    .pbc.sf                                                                                    100%   64KB  25.7MB/s   00:00
    .sbc.sf                                                                                    100% 1025MB  79.3MB/s   00:12
    .vh.sf                                                                                     100% 7168KB  66.4MB/s   00:00
    .pb2.sf                                                                                    100%   16MB  76.5MB/s   00:00
    .jbc.sf                                                                                    100%  256MB  73.6MB/s   00:03
    Sailark-Gitlab.vmx                                                                         100% 3728     3.6KB/s   00:00
    Sailark-Gitlab.vmsd                                                                        100%    0     0.0KB/s   00:00
    Sailark-Gitlab-flat.vmdk                                                                   100%   30GB  84.5MB/s   06:03
    vmware-39.log                                                                              100%  209KB  52.4MB/s   00:00
    vmx-Sailark-Gitlab-3661001560-2.vswp                                                       100%  110MB  75.9MB/s   00:01
    Sailark-Gitlab.vmdk                                                                        100%  508     0.5KB/s   00:00

服务迁移

把虚拟磁盘文件从vmfs分卷中读出来后,要对其中的数据进行迁移就简单多了,可以直接将虚拟磁盘加载到虚拟机里进行读写,也可以找找现成的工具,而对于服务的迁移,此次计划将gitlab迁移到搭建在树莓派3b+的gogs上,将博客迁移回云服务器上,再将反代迁移到路由上。这几个过程会另开新篇进行记录。

后记

你说如果事先有数据备份或者容灾预案,哪需要这么折腾~只是可惜还是受限于资本的力量~
不过还是切身体会到了:服务器性能够用就行,更重要的是功耗和稳定性。而个人搭的无法容灾但性能较好的服务器,更适合用来搭建各种不需要持续在线的环境,比如各种实验、测试、编译等等。
不过这种想要的时候随时可以给自己开一台虚拟机的感觉真爽