有一台虚拟机的文件系统发生故障,由于过程有些特别,所以记录下来以备不时之需。

跟物理服务器不同,该vm磁盘镜像在host中以lv形式存在,vm磁盘镜像中分了两个分区:/boot//boot分区不能以lv方式存在,所以只有/是lv。vm磁盘镜像的分区表如下: 该vm

$ sudo fdisk -l /dev/loc/u1404-64-ntopng

Disk /dev/loc/u1404-64-ntopng: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000bd79d

                   Device Boot      Start         End      Blocks   Id  System
/dev/loc/u1404-64-ntopng1   *           1          32      248832   83  Linux (1)
Partition 1 does not end on cylinder boundary.
/dev/loc/u1404-64-ntopng2              32        1306    10233857    5  Extended
/dev/loc/u1404-64-ntopng5              32        1306    10233856   8e  Linux LVM (2)
1 该分区为/boot
2 该分区为/

修复过程:

  • /boot分区

    $ sudo kpartx -av /dev/loc/u1404-64-ntopng (1)
    add map loc-u1404--64--ntopng1 (253:32): 0 497664 linear /dev/loc/u1404-64-ntopng 2048
    add map loc-u1404--64--ntopng2 (253:33): 0 2 linear /dev/loc/u1404-64-ntopng 501758
    add map loc-u1404--64--ntopng5 (253:34): 0 20467712 linear /dev/loc/u1404-64-ntopng 501760
    
    $ sudo fsck /dev/mapper/loc-u1404--64--ntopng1 (2)
    fsck from util-linux-ng 2.17.2
    e2fsck 1.41.12 (17-May-2010)
    /dev/mapper/loc-u1404--64--ntopng1: clean, 311/62248 files, 123388/248832 blocks
    1 找出各个分区的mapper
    2 执行fsck修复特定分区
/dev/loc/u1404-64-ntopng2是扩展分区,不需要修复。
  • /分区

    /分区的修复相对复杂,因为该分区在vm中以lv方式存在。

    $ sudo pvscan
      PV /dev/mapper/loc-u1404--64--ntopng5   VG ubuntu-vg   lvm2 [9.76 GiB / 0    free]
      PV /dev/sdb1                            VG loc         lvm2 [1.82 TiB / 297.96 GiB free]
      PV /dev/sda4                            VG centos      lvm2 [29.29 GiB / 0    free]
      PV /dev/sda3                            VG pve         lvm2 [99.50 GiB / 15.50 GiB free]
      Total: 4 [1.95 TiB] / in use: 4 [1.95 TiB] / in no VG: 0 [0   ]
    
    $ ls -l /dev/mapper/ubuntu*
    /dev/mapper/ubuntu--vg-root
    /dev/mapper/ubuntu--vg-swap_1 (1)
    
    $ sudo fsck /dev/mapper/ubuntu--vg-root
    fsck from util-linux-ng 2.17.2
    e2fsck 1.41.12 (17-May-2010)
    /dev/mapper/ubuntu--vg-root: clean, 176721/607200 files, 678581/2426880 blocks
    1 swap分区不需要修复。

清理:

$ sudo vgchange -a n ubuntu-vg
  0 logical volume(s) in volume group "ubuntu-vg" now active
[root@master mapper]# kpartx -dv /dev/loc/u1404-64-ntopng
del devmap : loc-u1404--64--ntopng5
del devmap : loc-u1404--64--ntopng2
del devmap : loc-u1404--64--ntopng1
$ ls ubuntu*
ls: cannot access ubuntu*: No such file or directory

最后可以正常启动VM。