kvm虚拟机出现启动不了的情况 本地fsck修复qcow2

175 篇文章 18 订阅

因为一些原因导致若干kvm虚拟机出现启动不了的情况,如下图:

这应该是文件系统破坏的问题,一般情况下还可以在虚拟机中fsck修复文件系统,但是这种情况在虚拟机中根本就没有机会fsck,所以想到通过外界方法对虚拟磁盘进行fsck。创建虚拟机使用的虚拟磁盘的类型是qcow2,开机无法fsck的话,可以通过如下两种方式:

  • 通过启动其它虚拟机的时候指定损坏虚拟磁盘启动再修复
  • 通过qemu-nbd工具本地宿主机上修复qcow2

这里介绍第二种方式,直接在宿主机上修复损坏qcow2磁盘,利用qemu-nbd把qcow2映射为网络设备Network block device

加载nbd

# modprobe nbd max_part=8 # max_part表示每个设备的分区,根据实际情况修改,默认为0
# modinfo nbd   # 查看nbd相关信息
filename:       /lib/modules/3.5.0-23-generic/kernel/drivers/block/nbd.ko
license:        GPL
description:    Network Block Device
srcversion:     B540FE0119F7C28B9D15C21
depends:
intree:         Y
vermagic:       3.5.0-23-generic SMP mod_unload modversions
parm:           nbds_max:number of network block devices to initialize (default: 16) (int)
parm:           max_part:number of partitions per device (default: 0) (int)
parm:           debugflags:flags for controlling debug output (int)
# ls /dev/nbd* # 默认有16个nbd设备文件
/dev/nbd0  /dev/nbd1  /dev/nbd10  /dev/nbd11  /dev/nbd12  /dev/nbd13
/dev/nbd14  /dev/nbd15  /dev/nbd2  /dev/nbd3  /dev/nbd4  /dev/nbd5
/dev/nbd6 /dev/nbd7  /dev/nbd8  /dev/nbd9

映射损坏qcow2磁盘为nbd

# qemu-nbd --connect=/dev/nbd0 /data/0/41/disk.qcow2 
# 映射disk.qcow2为本地的nbd0设备,qcow2需要为绝对路径
# ls /dev/nbd0* # 映射虚拟磁盘有两个分区
/dev/nbd0  /dev/nbd0p1  /dev/nbd0p2

本来准备修复了,但是发现发现之前的虚拟机分区是LVM设备,如果是正常分区直接修复就可以了,而LVM需要先LVM设备激活。

# fdisk -l /dev/nbd0

Disk /dev/nbd0: 32.2 GB, 32212254720 bytes
 heads, 63 sectors/track, 3916 cylinders, total 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00065194

     Device Boot      Start         End      Blocks   Id  System
/dev/nbd0p1   *          63      208844      104391   83  Linux
/dev/nbd0p2          208845    62910539    31350847+  8e  Linux LVM

激活LVM

安装lvm

# mount /dev/nbd0p2 /mnt/ # 说明没有安装LVM
mount: unknown filesystem type 'LVM2_member'
# apt-get install lvm2 -y

激活LVM

默认状态可能LVM没有激活,如下:

# lvdisplay 
  --- Logical volume ---
  LV Name                /dev/VolGroup00/LogVol00
  VG Name                VolGroup00
  LV UUID                VJkt2b-zSeD-DB23-XcfZ-1OHn-s0Ju-u7sXAN
  LV Write Access        read/write
  LV Status              NOT available
  LV Size                21.91 GiB
  Current LE             701
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto

  --- Logical volume ---
  LV Name                /dev/VolGroup00/LogVol01
  VG Name                VolGroup00
  LV UUID                kIOZsr-0uYd-FFud-yEnk-x6x7-1GxC-Q1yEOJ
  LV Write Access        read/write
  LV Status              NOT available
  LV Size                7.97 GiB
  Current LE             255
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto

激活方式如下:

# vgchange -ay /dev/VolGroup00
 logical volume(s) in volume group "VolGroup00" now active
# ls /dev/VolGroup00/*
/dev/VolGroup00/LogVol00  /dev/VolGroup00/LogVol01

修复指定分区

# fsck -y /dev/VolGroup00/LogVol0
... ...
Free blocks count wrong (5069553, counted=5070543).
Fix? yes


/dev/mapper/VolGroup00-LogVol00: ***** FILE SYSTEM WAS MODIFIED *****
/dev/mapper/VolGroup00-LogVol00: 79036/5744640 files (0.7% non-contiguous), 672049/5742592 blocks

如上结果,最终修复磁盘成功。

取消映射

修复完成之后取消nbd映射,开启虚拟机即可,取消映射方法如下命令。

# qemu-nbd --disconnect /dev/nbd0
/dev/nbd0 disconnected

修复之后,顺利启动相关虚拟机,推荐开机之后再shutdown -F now强制修复一下,以防万一。

参考

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用fsck命令可以检查和修复文件系统中的错误。当文件系统损坏时,可以使用fsck命令来尝试修复。命令的基本格式如下:\[1\] ``` fsck \[选项\] 分区设备文件名 ``` 在修复文件系统之前,务必先进行备份,特别是当文件系统中包含有价值的数据时\[2\]。可以使用以下命令查看系统支持的文件系统类型: ``` fsck ``` 如果想要修复某个分区,可以执行以下命令: ``` fsck -r /dev/sdb1 ``` 其中,`/dev/sdb1`是要修复的分区设备文件名。使用`-r`选项可以进入互动的修复模式\[2\]。 在修复过程中,如果发现存在没有文件系统依赖的文件或目录,fsck命令会提示用户是否找回这些文件。如果用户同意找回,fsck命令会将这些文件放到`lost+found`目录中,并以文件自己对应的inode号来命名\[2\]。 因此,当修复完成后,如果发现分区中有文件丢失,可以到`lost+found`目录中查找。可以使用`file`命令查看文件系统类型,以确定哪些文件是需要的\[2\]。 需要注意的是,不同的文件系统可能需要调用不同的扫描工具。例如,对于ext3文件系统,应该使用`fsck.ext3`命令来进行修复\[3\]。 #### 引用[.reference_title] - *1* *2* [Linux学习-41-检测和修复文件系统fsck命令用法](https://blog.csdn.net/weixin_42045639/article/details/127895766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [使用fsck修复系统文件错误](https://blog.csdn.net/lileiyuyanqin/article/details/87086127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值