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文件

ps -ef |grep a7584a2f-7b37-4a21-ae2f-3f244da49686qemu      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     cat /run/libvirt/qemu/instance-0000444a.xml |grep rbd        <source protocol=‘rbd‘ name=‘pool-3aae4178cb8a470aab3dfcea9307e5c9/a7584a2f-7b37-4a21-ae2f-3f244da49686_disk‘>        <source protocol=‘rbd‘ name=‘pool-3aae4178cb8a470aab3dfcea9307e5c9/a7584a2f-7b37-4a21-ae2f-3f244da49686_disk.config‘>

可以看到 虚拟机对应是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

时间: 2024-08-27 10:33:58

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

如何往虚拟机内传文件的3种方法

多分享,总有用到的时候. ------------------------------------------------------------------------ 文件共享方法一 一.创建共享文件夹(这种方法最适合Windows系统,专治各种无法传送问题) 共享文件的意义在于可以把宿主机的文件传到虚拟机内,这是VMware 自带的传文件功能,非常好用. 前置条件: 在宿主机建立一个共享文件夹 操作步骤: 1) 在宿主机创建个文件夹 2) 右键"属性", 3) 点击'共享'列名,

OpenStack虚拟机快照和增量备份实现

1 快照的概念一般对快照的理解就是能够将系统还原到某个瞬间,这就是快照的作用.快照针对要保存的数据分为内存快照和磁盘快照,内存快照就是保存当前内存的数据,磁盘快照就是保存硬盘的数据.快照针对保存方式又分为内部快照和外部快照.内部快照:是指快照信息和虚拟机存在同一个qcow2镜像中,使用单个的 qcow2 的文件来保存快照和快照之后的改动.这种快照是 libvirt 的默认行为,现在的支持很完善(创建.回滚和删除),但是只能针对 qcow2 格式的磁盘镜像文件,而且其过程较慢等.外部快照:是指做快

MD3200存储中虚拟机数据文件丢失的数据恢复过程

简介: 由于MD3200存储中虚拟机的数据文件丢失,导致整个Hyper-V服务瘫痪,虚拟机无法使用,故障环境为Windows Server 2012服务器,系统中部署了Hyper-V虚拟机环境,虚拟机的硬盘文件和配置文件放在朝阳区某托管中心托管的DELL MD3200存储中(注:硬盘600G*4,4T*1).MD3200存储是由4块600G硬盘组成的阵列,用作存储虚拟机的数据文件.单块4T硬盘用作虚拟机数据文件的备份. 故障: 由于MD3200存储中虚拟机的数据文件丢失,导致整个Hyper-V服

虚拟机内Linux联网

今天遇到虚拟机内的Linux无法上网问题,原因:之前装的VM9,卸载之后没手动清理一些残留文件,就装的10,导致文件缺失,NAT服务无法启动. 查找问题顺序: 1.启动NAT服务,发现无法启动,转到2: 2.控制面板——>管理工具——>事件查看器 问题原因找到,然后卸载vm,注意,卸载完成后一定要手动清理VM的残留文件. 然后网络适配器采用NAT,进入虚拟机后发先自动获取方式能够上网,而手动设置的却不能上网,这时候需要注意按以下方式查看: 1. 2. 可以看到虚拟机给分配的子网,因此,设置的I

devstack自动部署openstack之localrc文件及遇到的问题解决

做完前期准备后,在devstack目录下创建localrc文件,最好不要直接上传,然后将下面的内容贴进去即可,下面是我转载的,以下有出处,但是部署期间有几个问题,我也列出来了. # Misc DATABASE_PASSWORD=123456ADMIN_PASSWORD=123456SERVICE_PASSWORD=123456SERVICE_TOKEN=123456RABBIT_PASSWORD=123456 # Reclone each timeRECLONE=yes ## For Keyst

本地连接虚拟机内的kafka遇到的问题

学习技术,提升自己 安装kafka 1.官网找到压缩包,下载并上传到虚拟机内(没钱买不起服务器) 2.执行解压缩命令 tar -zxvf kafka_2.11-2.1.0.tgz 3.进入到kafka_2.11-2.1.0/config目录里,执行图片中的命令,将zookeeper.properties中的信息筛选出来并将筛选出来的数据给一个新建的文件zk.properties cat zookeeper.properties | grep -v '#' >> zk.properties 4.

真机如何往虚拟机传输文件

如何往虚拟机内传文件的3种方法 多分享,总有用到的时候. ———————————————————————————————————————————————————————————————————————— 文件共享方法一 一.创建共享文件夹(这种方法最适合Windows系统,专治各种无法传送问题) 共享文件的意义在于可以把宿主机的文件传到虚拟机内,这是VMware 自带的传文件功能,非常好用. 前置条件: 在宿主机建立一个共享文件夹 操作步骤: 1) 在宿主机创建个文件夹 2) 右键“属性”, 3

【linux】虚拟机内装Linux系统的ssh访问

一般在虚拟机内安装一个Linux系统,虚拟机网络设置为桥接后,Linux系统会在安装的过程中自动设置其为dhcp配置,会给其随机分配一个ip,这个ip可以用命令 "ifconfig" 查看.当然,这个命令需要在root权限下才可以用,或者普通用户拥有sudo权限. 如果没有在安装Linux系统时选择安装桌面,不出意外的话将进入纯指令终端界面. Linux原生终端窗口有几个缺点: 1.长宽固定,你没办法在一个界面看到更多内容: 2.无法上行,其他的窗口可以通过方向键向上向下翻页查看内容,

一次解决虚拟机内的服务不能访问经历

问题是这样的,在virtualbox中安装了centos系统,然后部署了一个自己的服务,在虚拟机内通过“127*”地址和“192*”地址都能正常访问,但是虚拟机外访问被拒绝 虚拟机内 [[email protected] dsp]# curl http://192.168.199.184:7050/debug/pprof/heap heap profile: 141: 4782544 [1677: 16456768] @ heap/1048576 1: 1376256 [1: 1376256]