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

一、场景:

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

二、可行的方案:

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

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

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

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

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

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

三、修复经过

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

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

      1、查找虚拟机的宿主机

nova show a7584a2f-7b37-4a21-ae2f-3f244da49686 |grep hypervisor| OS-EXT-SRV-ATTR:hypervisor_hostname  | server-85.105.nanshu.polex.io

        2、关闭该虚拟机、

 nova stop a7584a2f-7b37-4a21-ae2f-3f244da49686

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

<span style="font-size:14px;">ps -ef |grep a7584a2f-7b37-4a21-ae2f-3f244da49686<br>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> <br>  <br>  <br>cat /run/libvirt/qemu/instance-0000444a.xml |grep rbd<br>        <source protocol='rbd' name='pool-3aae4178cb8a470aab3dfcea9307e5c9/a7584a2f-7b37-4a21-ae2f-3f244da49686_disk'><br>        <source protocol='rbd' name='pool-3aae4178cb8a470aab3dfcea9307e5c9/a7584a2f-7b37-4a21-ae2f-3f244da49686_disk.config'><br></span>

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

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

rbd map pool-3aae4178cb8a470aab3dfcea9307e5c9/a7584a2f-7b37-4a21-ae2f-3f244da49686_disk  /dev/rbd0

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

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

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

mount -o offset=1048576 /dev/rbd0 /mnt

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

6 撤退工作

umount /mnt    rbd unmap /dev/rbd0

四、需要注意的地方

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

    2、偏移量的计算

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员同行者

14-使用glusterfs做持久化存储

1472
来自专栏散尽浮华

Centos6.X 下安装并使用VNC的操作记录

VNC是一个的"远程桌面"工具。,通常用于“图形界面”的方式登录服务器,可视化操作。废话不多说了,操作记录如下: 1)安装桌面环境 [root@vm01 ~]#...

3377
来自专栏大魏分享(微信公众号:david-share)

身份验证和权限管理---Openshift3.9学习系列第三篇

OAuth是由Blaine Cook、Chris Messina、Larry Halff 及David Recordon共同发起的,目的在于为API访问授权提供...

3366
来自专栏Felix的技术分享

Stetho的通信原理

2883
来自专栏PaddlePaddle

速问速答|想在Windows环境中快速安装PaddlePaddle,还需解决哪些问题?

PaddlePaddle近期新上线的Windows快速安装包,已经有很多小伙伴跑来体验

1576
来自专栏Java编程技术

UML建模(组件图)

组件图是为了展示组元(components),组元提供的接口(provided inerfaces)和需要调用的接口(required interfaces),...

3882
来自专栏智能大石头

如何部署编译NDIS驱动的环境(内部资料)

0,安装VC6英文版。 1,安装WinXP DDK。要完全安装,不然会比较麻烦。 2,安装DS。最好也完全安装,要不也是很麻烦。 3,DS安装好以后,运行"开始...

2229
来自专栏开源优测

python selenium2示例 - email发送

前言 在进行日常的自动化测试实践中,我们总是需要将测试过程中的记录、结果等等等相关信息通过自动的手段发送给相关人员。python的smtplib、email模块...

3507
来自专栏互扯程序

Linux常用Shell脚本,值得学习及收藏

在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运...

1351
来自专栏何俊林

手把手图文并茂教你用Android Studio编译FFmpeg库并移植

之前曾写过一篇《FFmpeg在Linux下安装编译过程》,今天有空就用Android Studio编译FFmpeg库并移植,并附上调用ffmpeg简单示例,看下...

3676

扫码关注云+社区