首页 > 其他分享 >虚拟机文件系统损坏

虚拟机文件系统损坏

时间:2023-04-25 10:47:39浏览次数:40  
标签:修复 启动 虚拟机 文件系统 损坏 镜像 磁盘 rbd

  1. 问题描述
    1. linux
    2. windows
  2. 问题原因
  3. 问题影响
  4. 问题解决
    1. 问题确认
    2. 修复虚拟机磁盘
      1. linux 操作系统修复
        1. 准备修复镜像
        2. 通过下载的镜像/磁盘镜像启动新的kvm虚拟机,将故障虚拟机磁盘挂载到系统进行修复
        3. 启动虚拟机,进行修复
        4. 验证
        5. 使用 ISO 修复需注意
      2. windows 操作系统修复
        1. 下载windows iso 镜像
        2. 从镜像启动kvm虚拟机
        3. 修复windows虚拟机
    3. 使用修复过得虚拟机磁盘文件替换ceph上面的rbd image
  5. 验证

问题描述

在操作系统使用过程中,经常会遇到因掉电引起文件系统损坏导致系统无法启动的问题

linux

因计算节点重启过 rbd lock 未释放

操作系统文件系统损坏

windows

操作系统系统启动引导文件损坏

问题原因

因计算节点重启过 rbd lock 未释放,当第二次 qemu 进程在计算节点启动之后连接 该 rbd image 时由于上次 image 被 lock 了,所以无法进行io操作

因存储数据有损坏或者虚拟机进行不当操作,引起操作系统文件系统损坏

问题影响

虚拟机系统无法启动虚拟机 io 操作异常

问题解决

问题确认

关闭虚拟机查看是否有 rbd lock (J版)或者 rbd watcher(L版),通过如下命令查看

rbd lock ls vms/8a918810-33ac-410d-8b5e-2b7342202a51_disk rbd status vms/8a918810-33ac-410d-8b5e-2b7342202a51_disk

如果关闭虚拟机一分钟之后有 watcher 或者 lock 则手动去掉 lock watcher启动虚拟机即可

rbd lock ls vms/f0f6e6ae-6a3f-49c6-bc23-0b7bda049783 There is 1 exclusive lock on this image.

Locker ID Address

client.39864782 auto 140568776689264 10.85.44.162:0/387540111

rbd status vms/f0f6e6ae-6a3f-49c6-bc23-0b7bda049783_disk Watchers:

watcher=10.85.44.162:0/387540111 client.39864782 cookie=140568776689264

释放 rbd lock

rbd lock remove vms/f0f6e6ae-6a3f-49c6-bc23-0b7bda049783 \ "auto 140568776689264" client.39864782

将该watcher加入黑名单

ceph osd blacklist add 10.85.44.162:0/387540111

如果都没有则关闭虚拟机,下载虚拟机磁盘到本地 进行本地修复

修复虚拟机磁盘

以uuid为f0f6e6ae-6a3f-49c6-bc23-0b7bda049783的虚拟机为例

下载虚拟机磁盘到计算节点

确保要操作的计算节点有足够的cpu 内存 磁盘空间

创建修复目录

mkdir /var/lib/nova/workers

下载虚拟机镜像到修复目录

rbd export vms/f0f6e6ae-6a3f-49c6-bc23-0b7bda049783_disk \

/var/lib/nova/workers/f0f6e6ae-6a3f-49c6-bc23-0b7bda049783_disk

linux 操作系统修复

        1. 准备修复镜像

linux 操作系统文件系统格式一般为 xfs ext4 仅需一台可以挂载虚拟机磁 盘的 ISO或者 可启动的磁盘镜像

linux 为了方便可以直接下载 Openstack 平台的linux镜像

# 找到故障虚拟机对应操作系统的镜像uuid glance image-list

# 下载镜像磁盘到本地

# 例如镜像uuid为afed05de-ad6b-4ef4-aa29-04138b688838

rbd export images/afed05de-ad6b-4ef4-aa29-04138b688838 \

/var/lib/nova/workers/linuximg

亦可到官网下载 对应版本的ISO 进入救援模式修复

        1. 通过下载的镜像/磁盘镜像启动新的kvm虚拟机, 将故障虚拟机磁盘挂载到系统进行修复

如果虚拟机操作系统为 LVM 且操作系统 VG 还包括 另一块云硬盘,则需要把这块云硬盘也下载到本地,挂载成

vdc

上传 files/fkk-vm.xml 到 /var/lib/nova/workers/

修改 fkk-vm.xml

<emulator>/usr/libexec/qemu-kvm</emulator>

<!-->以可启动镜像文件启动<-->

<disk type='file' device='disk'>

<driver name='qemu' type='qcow2'/>

<source file='/var/lib/nova/workers/linuximg'/>

<target dev='vda' bus='virtio'/>

</disk>

<!-->将要修复的虚拟机磁盘作为vdb挂载<-->

<disk type='file' device='disk'>

<driver name='qemu' type='raw'/>

<source file=' /var/lib/nova/workers/f0f6e6ae-6a3f-49c6-bc23- 0b7bda049783_disk'/>

<target dev='vdb' bus='virtio'/>

</disk>

        1. 启动虚拟机, 进行修复

virsh create fkk-vm.xml

进入新启动的虚拟机系统修复

PC 端下载 vnc viewer

查看新建的虚拟机 vnc 端口

virsh vncdisplay fkk-vm # 输出如

:18

以上输出则 vnc 端口为 5918

通过 vnc viewer 连接,进入系统修复

分区类型主要两种 标准分区 lvm 文件系统类型主要有两种 ext4 xfs

标准分区-xfs

# 查看要要修复得分区

lsblk

# 例如 /dev/vdb1 修复

# 检查

xfs_repair -n /dev/vdb1 # 无损修复

xfs_repair /dev/vdb1

# 如无损修复失败则有损修复

xfs_repair -L /dev/vdb1

标准分区-ext4

# 查看要要修复得分区

lsblk

# 例如 /dev/vdb1 修复

fsck /dev/vdb1

lvm分区-xfs修复

# 找到想要修复的虚拟机系统分区挂载的lv和vg lvscan

vgscan # 检查

xfs_repair -n /dev/Volgroup/centos-root # 无损修复

xfs_repair /dev/Volgroup/centos-root # 如无损修复失败则有损修复

xfs_repair -L /dev/Volgroup/centos-root

至此linux修复完毕

关闭启动的修复虚拟机

可以在系统内执行 init 0

亦可使用 virsh destroy fkk-vm 来操作

        1. 验证

以修复后的虚拟机磁盘来启动虚拟机修改 fkk-vm

如果虚拟机操作系统为 LVM 且操作系统 VG 还包括 另一块云硬盘,则需要把这块云硬盘也下载到本地,挂载成

vdb

<emulator>/usr/libexec/qemu-kvm</emulator>

<!--以可启动镜像文件启动-->

<!--

<disk type='file' device='disk'>

<driver name='qemu' type='qcow2'/>

<source file='/var/lib/nova/workers/linuximg'/>

<target dev='vda' bus='virtio'/>

</disk>

-->

<!--将要修复的虚拟机磁盘作为vdb挂载-->

<disk type='file' device='disk'>

<driver name='qemu' type='raw'/>

<source file=' /var/lib/nova/workers/f0f6e6ae-6a3f-49c6-bc23- 0b7bda049783_disk'/>

<target dev='vda' bus='virtio'/>

</disk>

正常启动系统则修复成功!

        1. 使用 ISO 修复需注意

需要设置 xml 文件以 cdrom 启动

<disk type='file' device='cdrom'>

<driver name='qemu' type='raw'/>

<source file='/var/lib/nova/workers/en_windows_server_2016_x64_dvd_9718492.iso'/>

<target dev='hdc' bus='ide'/>

<readonly/>

<address type='drive' controller='0' bus='1' unit='0'/>

</disk>

<os>

<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>

<boot dev='hd'/>

<boot dev='cdrom'/>

<smbios mode='sysinfo'/>

</os>

windows 操作系统修复

windows 可操作性相对linux低的多,暂时只实践了通过ISO启动修复

        1. 下载windows iso 镜像

下载镜像上传至 /var/lib/nova/workers/ 以 windows2016server standerd 为例

en_windows_server_2016_x64_dvd_9718492.iso

        1. 从镜像启动kvm虚拟机

windows 占用资源比较大,这里使用8核16G的配置,如需调整修改 <memory unit='GB'>16</memory> <vcpu placement='static'>8</vcpu>

修改 fkk-cd.xml 从 cdrom 启动

注意虚拟机磁盘的驱动是 ide 盘符是 sda 使用 scsi virtio 均不能被识别 (如需标准的ISO可以识别这些驱动需要 在ISO中注入对应驱动,操作耗时耗力)

<disk type='file' device='disk'>

<driver name='qemu' type='raw'/>

<source file='/var/lib/nova/workers/59f01c98-a050-4ef3-994d-4f0c7da7e7d0_disk'/>

<target dev='sda' bus='ide'/>

</disk>

<disk type='file' device='cdrom'>

<driver name='qemu' type='raw'/>

<source file='/var/lib/nova/workers/en_windows_server_2016_x64_dvd_9718492.iso'/>

<target dev='hdc' bus='ide'/>

<readonly/>

<address type='drive' controller='0' bus='1' unit='0'/>

</disk>

启动虚拟机

virsh create fkk-cd.xml

连接虚拟机部分同 linux

        1. 修复windows虚拟机

选择修复已有系统

启动系统之后选择 troubleshooting 选择 command prompt

检查虚拟机磁盘是否被识别

如果不识别说明驱动不被支持,List volume 只会有一行

Diskpart List volume List disk

List partition

修复

Bootrec /FixMbr Bootrec /FIxBoot Bootrec /ScanOs Bootrec /RebuildBcd

如果前面都能执行成功 Bootrec /RebuildBcd 失败 报错如下

执行

Diskpart List volume # 或者

List disk

# 找到 scanos找到的系统分区

# 具体select 那个需要看scanos出来的是那个 例如是分区3 select partition 3

# 激活 active退出 exit

再进行修复即可

Bootrec /RebuildBcd Y

看到如下图,修复成功

正常启动系统则修复成功!

使用修复过得虚拟机磁盘文件替换ceph上面的rbd image

删除 ceph 上面的虚拟机磁盘文件

rbd remove vms/f0f6e6ae-6a3f-49c6-bc23-0b7bda049783_disk

上传修改过的虚拟机磁盘镜像到 ceph

rbd import f0f6e6ae-6a3f-49c6-bc23-0b7bda049783_disk \ vms/f0f6e6ae-6a3f-49c6-bc23-0b7bda049783_disk

启动虚拟机

验证

启动虚拟机可以正常使用则修复完毕

标签:修复,启动,虚拟机,文件系统,损坏,镜像,磁盘,rbd
From: https://www.cnblogs.com/xuning-xuning/p/17351904.html

相关文章

  • 虚拟机-windows 修改密码
    1、关机2、备份卷3、手动操作把系统卷挂载到别的vm上4、复制cmd.exe覆盖放大镜的exe文件5、手动卸载6、进入登录页面后点击放大镜的按钮,输入命令重置密码当前密码Tstack@1231.关机[root@openstack‐con01~(keystone_admin)]#novalist‐‐all|grep172.16.0.48|5d356c31‐......
  • 虚拟机更换 IP 地址
    旧虚拟机自助云解绑弹性IP查看虚拟机的项目openstackservershow[severid]|grepproject记录projectidproject_id:2b45a5be69804478bc1fc73e2aec1197记录projectname,如果是admin则不需要进行45操作openstackprojectlist|grep[projectid]记录projectnamep......
  • Ubuntu Vmware虚拟机 没有共享文件夹/mnt/hgfs 解决
    问题现象在Vmware虚拟机设置共享文件夹后,在Ubuntu系统侧应该在/mnt/hgfs目录下可见。然而,有时在重启虚拟机后不存在该文件夹。解决方法在终端中执行以下代码,需要root权限。sudoapt-getinstallopen-vm-toolssudomkdir/mnt/hgfssudo/usr/bin/vmhgfs-fuse.host://mnt/h......
  • windows和Linux文件系统区别
    windows和Linux文件系统区别 一、用户操作系统单用户操作系统:指一台计算机在同一时间 只能由一个用户 使用,一个用户独自享用系统的全部硬件和软件资源WindowsXP 之前的版本都是单用户操作系统多用户操作系统:指一台计算机在同一时间可以由 多个用户 使用,多个用户......
  • 给虚拟机win2003装DNS插件出现问题
    已经配置给2003配置好ip地址和子网掩码了,安装DNS插件的时候报下面错误 有个红叉没法用 重启一下虚拟机就好了,可能是之前配置ip的时候和其他虚拟机重名了,我改了之后还有缓存。(还可以恢复快照或者重装一下虚拟机) ......
  • 虚拟机代理设置
    1场景一些日常开发、调试工作一般在虚拟机中进行,如需从GitHub下载源码,会由于网络问题导致经常下载失败,一般可以通过配置ssh或直接下载zip代码包来解决。但对于一些较大型的项目,会包含一些子模块并需要安装很多其他依赖项,如继续使用上述方式将导致将导致整个过程非常繁琐且不一定......
  • PVE虚拟机出现系统启动报错“journalctl”to view system logst解决方法
    故障现象  虚拟机卡死,重启虚拟机后,不能正常进入系统解决办法xfsrepair-v-L/dev/dm-0L选项指定强制日志清零,强制xfs_repair将日志归零,即使它包含脏数据(元数据更改)。再重启下虚拟机即可......
  • 王道408操作系统-4.3文件系统 习题总结
    文件系统第一题用户使用文件系统实现对文件的按名存取,选B第二题选B,超级块是用来描述文件系统的第三题文件的存储空间实际上是对(外存空间区)的组织和管理。第四题第五题索引节点用来存放文件的描述信息,所以选B虚拟文件系统虚拟文件系统,简称VFS(Virtual......
  • Java虚拟机之JVM工具监控调优
    我是攻城师(woshigcs)前几篇我们学习了,JVM里面的运行结构,GC算法,以及各种垃圾收集器的优劣点,那么本篇我们来看下如何使用一些虚拟机性能监控工具,来监控和快速处理故障,当JVM出现一些故障时,我们通常从如下的几个方面进行着手分析,包括运行日志,异常堆栈,GC日志,线程快照(threaddump/javacor......
  • 虚拟机装的系统连不上网怎么办?
    虚拟机是一些用户经常使用的软件,使用了虚拟机之后您就可以在自己的电脑中随意安装不同类型的系统,然后使用了。使用虚拟机就相当于在使用不同系统的电脑,当然也需要联网,所以安装了虚拟机中的系统之后还需要手动设置来联网。1、在本地电脑(不是虚拟机)上按下Win+R打开运行,输入services......