VMware VMFS分区表恢复
VMware VMFS分区表恢复
原创 李严省 虚实之路 2018-03-01
各位VMware工程师天天和VMware vSphere打交道,在使用传统共享存储的时候有没有碰到过存储卷分区表信息丢失的情况?今天我也碰到这个问题了,就和大家分享一下如何恢复vmfs分区表。
使用ssh登录到esxi主机,查看vmkernel.log日志,发现找不到分区表的日志输出,可以确认lun的分区表已经丢失。
使用客户端查看,没有任何分区信息
而另外一块磁盘则有分区信息
恢复步骤:
1. 在出现问题的主机上运行 partedUtil 命令,并验证输出是否类似于以下内容
上图输出为有分区信息
该输出信息则表示分区信息丢失,需要重建分区信息
2. 查找 VMFS 分区的开始块和结束块。要查找分区的开始块,请在主机上运行以下命令(一行脚本):
#offset="1282048"; for dev in `esxcfg-scsidevs -l | grep "Console Device:" |awk {'print $3'}`; do disk=$dev; echo $disk; partedUtil getptbl $disk; { for iin `echo $offset`; do echo "Checking offset found at $i:"; hexdump -n4-s $((0x100000+(512*$i))) $disk; hexdump -n4 -s $((0x1300000+(512*$i))) $disk;hexdump -C -n 128 -s $((0x130001d + (512*$i))) $disk; done; } | grep -B 1 -A 5d00d; echo "---------------------"; done
注意:上述脚本会检查所有存储设备,因此列表可能会很长。此脚本不适用于本地磁盘,亲自测试,恢复出来,文件系统为VMFS-unknownversion。
您会看到类似以下内容的输出:
在没有分区的磁盘中看到如下信息
Checking offsetfound at 2048.
表示VMFS分区开始位置为2048块
3. 要获取分区的结束块,请运行以下命令:
1953525134表示可用的块数量
注意:如果没有看到此输出并显示“磁盘上的未知分区表 (Unknown partition table ondisk)”错误,请运行以下命令,将表标记为 GPT 分区表:
# partedUtil mklabel/vmfs/devices/disks/naa.6006016045502500c20a2b3ccecfe011 gpt
naa. 6006016045502500c20a2b3ccecfe011为磁盘的naa号
重新运行 partedUtil getUsableSectors 命令就可以获得信息输出
4. 运行以下命令创建一个分区
以上命令为一行命令,1表示分区1,2048表示起始块,即offsize,1953525134表示可用块数量,AA31E02A400F11DB9590000C2911D1B8表示VMFS文件系统,该guid值不可以改为其它值,如果是ESXi 5以前版本,则该值为251,在esxi 5以上版本,使用gpt标记磁盘分区
5. 运行以下命令以尝试挂载 VMFS 数据存储:
注意:检查esxi存储挂载情况,如果挂载了数据存储,那么数字正确,无需调整值。
如果未挂载数据存储,可能会在 /var/log/vmkernel.log 中看到类似以下内容的消息:
最开始获得的可用块数量为整个LUN的块数量,但实际可以用来分区的块数是少于这个值的,因此挂载文件系统的时候,会报我们第一次创建的分区的块数量不对,日志会输出真实的块的数量,我们就可以拿这个值来重新计算
在这种情况下,请将偏移值(-1) 加到存储的大小,以获得实际的结束块。
例如:1953521664+ 2047 = 1953523711
6. 根据步骤5的情况,重新使用新的结尾值运行以下命令,重新创建分区:
7. 现在您已具有正确的分区。再次运行 VMFS 重新扫描:
日志输出不再有store size错误的信息,即表示挂载成功
在一台主机上成功挂载数据存储后,便可预计在能够访问此 LUN 的其他主机上运行相同的 VMFS 重新扫描命令时将会挂载 VMFS 数据存储。
以上就是我今天碰到的分区丢失信息的操作步骤,可能和官方kb有一点不一样,仅供参考,如果各位朋友在恢复的过程中数据丢失,我可不负责的啊,嘿嘿!
下面链接为官方KB链接,供参考,官方kb中间步骤感觉有点乱。。。。但命令行可以参考!
https://kb.vmware.com/s/article/2088543?other.KM_Utility.getArticleLanguage=1&r=1&other.KM_Utility.getArticleData=1&other.KM_Utility.getArticle=1&ui-comm-runtime-components-aura-components-siteforce-qb.Quarterback.validateRoute=1&other.KM_Utility.getGUser=1
下面截图为GUID的对应的文件系统表,是朋友Brody提供的,我刚开始恢复,不明白这个意思,官方的kb里写的是UUID号,我认为UUID不就唯一号码码?如主机对应一个UUID等,就随便改了这个UUID值,结果分区挂载不成功。后来才知道这个不叫UUID,应叫GUID,看来官方的KB措词也不准确啊!再次感谢Brody!
partedUtil setptbl命令使用方法见官方KB
https://kb.vmware.com/s/article/2076191