openstack虚拟机内文件遭破坏的急救方案

简介:

一、场景:

    openstack虚拟机存放于ceph存储,由于用户将系统的grub误删除,导致系统无法正常引导。现在用户要求抢救文件。

二、可行的方案:

    1、将虚拟机保存为镜像,将镜像转换成云硬盘,将云硬盘挂载到其他虚拟机上镜像抢救。

        优点:依赖默认的dashboard就能完成操作,较为简单,不需要openstack命令行基础;

        缺点:只能抢救文件,不能修复原系统。

    2、将ceph中 虚拟机对应的rbd映射到到本地,挂载为本机的一个目录,进行抢救工作

       优点:可以直接修复原虚拟机的系统;

       缺点:需要一定的openstack命令行技能。

三、修复经过

    本文主要介绍 第二种的修复方法

    (一)、找出虚拟机对应的rbd

      1、查找虚拟机的宿主机

1
<span style= "font-size:14px;" >nova show a7584a2f-7b37-4a21-ae2f-3f244da49686 | grep  hypervisor<br data-filtered= "filtered" >| OS-EXT-SRV-ATTR:hypervisor_hostname  | server-85.105.nanshu.polex.io<br data-filtered= "filtered" >< /span >

        2、关闭该虚拟机、

 

1
<span style= "font-size:14px;" > nova stop a7584a2f-7b37-4a21-ae2f-3f244da49686<br data-filtered= "filtered" >< /span >


        3、登陆宿主机,查看xml文件  

1
<span style= "font-size:14px;" > ps  -ef | grep  a7584a2f-7b37-4a21-ae2f-3f244da49686<br data-filtered= "filtered" >qemu      67511      1 17 14:17 ?        00:17:32  /usr/libexec/qemu-kvm  -name instance-0000444a -S -machine pc-i440fx-rhel7.0.0,accel=kvm,usb=off -cpu Broadwell,+abm,+pdpe1gb,+rdrand,+f16c,+osxsave,+dca,+pdcm,+xtpr,+tm2,+est,+smx,+vmx,+ds_cpl,+monitor,+dtes64,+pbe,+tm,+ht,+ss,+acpi,+ds,+vme,+rtm,+hle -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid a7584a2f-7b37-4a21-ae2f-3f244da49686 -smbios  type =1,manufacturer=Fedora Project,product=OpenStack Nova,version=13.1.2-1.el7.centos,serial=8153ba5c-de78-47c7-bc4c-c86b0d429f75,uuid=a7584a2f-7b37-4a21-ae2f-3f244da49686,family=Virtual Machine -no-user-config -nodefaults -chardev socket, id =charmonitor,path= /var/lib/libvirt/qemu/domain-instance-0000444a/monitor .sock,server,nowait -mon chardev=charmonitor, id =monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no- shutdown  -boot strict=on -device piix3-usb-uhci, id =usb,bus=pci.0,addr=0x1.0x2 -device virtio-serial-pci, id =virtio-serial0,bus=pci.0,addr=0x4 -drive  file =rbd:pool-3aae4178cb8a470aab3dfcea9307e5c9 /a7584a2f-7b37-4a21-ae2f-3f244da49686_disk : id =admin:key=AQAG1vlXEVDPIhAAyi0tZ3qZwt1HewbQHh731A==:auth_supported=cephx\;none:mon_host=10.48.106.247\:6789\;10.48.106.248\:6789\;10.48.106.249\:6789\;10.48.106.250\:6789\;10.48.106.251\:6789, if =none, id =drive-virtio-disk0, format =raw,cache=writeback,bps_rd=104857600,bps_wr=31457280,iops_rd=2000,iops_wr=500 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0, id =virtio-disk0,bootindex=1 -drive  file =rbd:pool-3aae4178cb8a470aab3dfcea9307e5c9 /a7584a2f-7b37-4a21-ae2f-3f244da4968_disk .config: id =admin:key=AQAG1vlXEVDPIhAAyi0tZ3qZwt1HewbQHh731A==:auth_supported=cephx\;none:mon_host=10.48.106.247\:6789\;10.48.106.248\:6789\;10.48.106.249\:6789\;10.48.106.250\:6789\;10.48.106.251\:6789, if =none, id =drive-ide0-1-1, readonly =on, format =raw,cache=writeback,bps_rd=104857600,bps_wr=31457280,iops_rd=2000,iops_wr=500 -device ide- cd ,bus=ide.1,unit=1,drive=drive-ide0-1-1, id =ide0-1-1 -netdev tap,fd=32, id =hostnet0,vhost=on,vhostfd=34 -device virtio-net-pci,netdev=hostnet0, id =net0,mac=fa:16:3e:4d:5e:ad,bus=pci.0,addr=0x3 -chardev  file , id =charserial0,path= /var/lib/nova/instances/a7584a2f-7b37-4a21-ae2f-3f244da49686/console .log -device isa-serial,chardev=charserial0, id =serial0 -chardev pty, id =charserial1 -device isa-serial,chardev=charserial1, id =serial1 -chardev socket, id =charchannel0,path= /var/lib/libvirt/qemu/org .qemu.guest_agent.0.instance-0000444a.sock,server,nowait -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0, id =channel0,name=org.qemu.guest_agent.0 -device usb-tablet, id =input0 -vnc 0.0.0.0:5 -k en-us -vga cirrus -incoming fd:25 -device virtio-balloon-pci, id =balloon0,bus=pci.0,addr=0x6 -msg timestamp=on<br data-filtered= "filtered" > <br data-filtered= "filtered" >  <br data-filtered= "filtered" >  <br data-filtered= "filtered" > cat  /run/libvirt/qemu/instance-0000444a .xml | grep  rbd<br data-filtered= "filtered" >        < source  protocol= 'rbd'  name= 'pool-3aae4178cb8a470aab3dfcea9307e5c9/a7584a2f-7b37-4a21-ae2f-3f244da49686_disk' ><br data-filtered= "filtered" >        < source  protocol= 'rbd'  name= 'pool-3aae4178cb8a470aab3dfcea9307e5c9/a7584a2f-7b37-4a21-ae2f-3f244da49686_disk.config' ><br data-filtered= "filtered" >< /span >

可以看到 虚拟机对应是ceph中 叫 pool-3aae4178cb8a470aab3dfcea9307e5c9/a7584a2f-7b37-4a21-ae2f-3f244da49686_disk 的 rbd

   4 挂载 rbd到本地的/dev/rbd0

1
<span style= "font-size:14px;" >rbd map pool-3aae4178cb8a470aab3dfcea9307e5c9 /a7584a2f-7b37-4a21-ae2f-3f244da49686_disk  <br data-filtered= "filtered" /dev/rbd0 <br data-filtered= "filtered" >< /span >


5、 挂载本地的/dev/rbd0 到 目录

   虚拟机是以raw格式的虚拟磁盘存放在ceph中,在挂在时候要计算偏移量,

  偏移量计算 参考文章 http://smilejay.com/2012/08/mount-an-image-file/

 

 

1
<span style= "font-size:14px;" > mount  -o offset=<br data-filtered= "filtered" >1048576<br data-filtered= "filtered" > <br data-filtered= "filtered" > /dev/rbd0  /mnt <br data-filtered= "filtered" >< /span >

 

至此 虚拟机的硬盘已经变成了我们节点上的一个目录,可以进去修复文件了。

6 撤退工作

 

 

   
1
<span style= "font-size:14px;" > <br data-filtered= "filtered" > umount  /mnt     rbd unmap  /dev/rbd0 <br data-filtered= "filtered" >< /span >

 

四、需要注意的地方

    1、虚拟机一定要关机,不然文件系统在两处同时挂载的话会产生脏数据

    2、偏移量的计算

    3、快速迭代的虚拟机还是不要使用lvm



本文转自 superbigsea 51CTO博客,原文链接:http://blog.51cto.com/superbigsea/1947192

相关文章
|
11月前
|
SQL 存储 数据挖掘
【虚拟机数据恢复】VMware虚拟机文件被误删除的数据恢复案例
虚拟机数据恢复环境: 某品牌R710服务器+MD3200存储,上层是ESXI虚拟机和虚拟机文件,虚拟机中存放有SQL Server数据库。 虚拟机故障: 机房非正常断电导致虚拟机无法启动。服务器管理员检查后发现虚拟机配置文件丢失,所幸xxx-flat.vmdk磁盘文件和xxx-000001-delta.vmdk快照文件还在。服务器管理员在尝试恢复虚拟机的过程中,将原虚拟机内的xxx-flat.vmdk删除后新建了一个虚拟机,并分配了精简模式的虚拟机磁盘和快照数据盘,但原虚拟机内的数据并没有恢复。
【虚拟机数据恢复】VMware虚拟机文件被误删除的数据恢复案例
|
1月前
|
监控 网络安全 虚拟化
Hyper-V中Win10,虚拟机运行错误处理的方案
当Hyper-V中的Windows 10虚拟机出现运行错误时,可按以下步骤处理:首先进行基本检查与修复,包括检查虚拟机配置、确保Hyper-V服务正常运行及重启相关服务。其次,使用PowerShell命令或DISM工具修复虚拟机配置和系统组件。接着,查看事件查看器中的错误日志,分析问题原因。调整虚拟机资源分配,优化性能。针对特定错误情况,如启动失败或网络问题,采取相应措施解决。若问题仍未解决,考虑克隆、重置或重新安装虚拟机,必要时联系技术支持。操作前请备份重要数据并以管理员身份运行命令。
|
6月前
|
数据库 虚拟化 Windows
虚拟机数据恢复—XenServer虚拟机磁盘文件丢失的数据恢复案例
虚拟机数据恢复环境: 某品牌服务器通过同品牌某型号的RAID卡,将4块STAT硬盘为一组RAID10阵列。上层部署XenServer虚拟化平台,虚拟机安装Windows Server系统,每台虚拟机有两个虚拟机磁盘(系统盘 + 数据盘),虚拟机作为Web服务器使用。 虚拟机故障&分析: 机房异常断电导致服务器中一台VPS(XenServer虚拟机)不可用,虚拟磁盘文件丢失。
|
2月前
|
存储 数据挖掘 虚拟化
vsan数据恢复—vsan缓存盘故障导致虚拟机磁盘文件丢失的数据恢复案例
VMware vsan架构采用2+1模式。每台设备只有一个磁盘组(7+1),缓存盘的大小为240GB,容量盘的大小为1.2TB。 由于其中一台主机(0号组设备)的缓存盘出现故障,导致VMware虚拟化环境中搭建的2台虚拟机的磁盘文件(vmdk)丢失。
|
6月前
|
存储 运维 虚拟化
虚拟化数据恢复——Hyper-V虚拟化故障导致虚拟机文件丢失的数据恢复案例
在Windows Server上部署的Hyper-V虚拟化环境中,因存储中虚拟机数据文件丢失导致服务瘫痪。北亚企安数据恢复工程师通过物理检测、操作系统及文件系统检测,确定为人为格式化造成,并通过镜像硬盘、重组RAID、分析并恢复文件索引项等步骤,成功恢复数据,最终在新Hyper-V环境中验证并迁移所有虚拟机,确保用户业务恢复正常运行。
|
6月前
|
Linux 测试技术 虚拟化
解决虚拟机文件因快照占用硬盘空间较多的情况(压缩虚拟机文件,节省硬盘空间)
解决虚拟机文件因快照占用硬盘空间较多的情况(压缩虚拟机文件,节省硬盘空间)
380 1
|
8月前
|
测试技术 Linux 虚拟化
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
详细的VMware虚拟机安装macOS Big Sur的保姆级教程,包括下载VMware和macOS镜像、图解安装步骤和遇到问题时的解决方案,旨在帮助读者顺利搭建macOS虚拟机环境。
394 3
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
|
7月前
|
存储 SQL 数据挖掘
虚拟化数据恢复—VMware虚拟机vmdk文件被误删除的数据恢复案例
虚拟化数据恢复环境: 某品牌服务器(部署VMware EXSI虚拟机)+同品牌存储(存放虚拟机文件)。 虚拟化故障: 意外断电导致服务器上某台虚拟机无法正常启动。查看虚拟机配置文件发现这台故障虚拟机除了磁盘文件以外其他配置文件全部丢失,xxx-flat.vmdk磁盘文件和xxx-000001-delta.vmdk快照文件还在。管理员联系VMware工程师寻求帮助。VMware工程师尝试新建一个虚拟机来解决故障,但发现ESXi存储空间不足。于是将故障虚拟机下的xxx-flat.vmdk磁盘文件删除,然后重建一个虚拟机并且分配固定大小的虚拟磁盘。
|
6月前
|
Kubernetes Linux 容器
解决删除快照后启动虚拟机显示指定的文件不是虚拟磁盘 打不开磁盘“路径”或它所依赖的某个快照磁盘。 模块“disk”启动失败。 未能启动虚拟
解决删除快照后启动虚拟机显示指定的文件不是虚拟磁盘 打不开磁盘“路径”或它所依赖的某个快照磁盘。 模块“disk”启动失败。 未能启动虚拟
530 0
|
8月前
|
测试技术 开发工具 虚拟化
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
这篇文章提供了一份保姆级的教程,指导如何在MacOS虚拟机上安装Xcode,包括环境准备、基础软件安装以及USB扩展插件的使用,以实现iOS自动化测试方案的第一步。
582 0
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
下一篇
oss创建bucket