之前一直使用vbox虚拟了很多系统,安装一些开发中常用的工具,不同的项目进行不同的划分。但最近突然因为物理磁盘IO异常导致虚拟硬盘无法正常读取,更不要说系统正常启动了。于是便想利用另外一个能启动的系统,把这个虚拟盘挂载上去,看看能不能读取到数据。

1、在新的vbox上添加原有虚拟硬盘,并启动新虚拟机

2、查看硬盘设备fdisk -l

显示如下:磁盘 /dev/sda:1099.5 GB, 1099511627776 字节,2147483648 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x000cde78

设备 Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048      411647      204800   83  Linux

/dev/sda2          411648  2147483647  1073536000   8e  Linux LVM

磁盘 /dev/sdb:1099.5 GB, 1099511627776 字节,2147483648 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x000cde78

设备 Boot      Start         End      Blocks   Id  System

/dev/sdb1   *        2048      411647      204800   83  Linux

/dev/sdb2          411648  2147483647  1073536000   8e  Linux LVM

磁盘 /dev/mapper/centos-root:1082.1 GB, 1082117849088 字节,2113511424 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/mapper/centos-swap:17.2 GB, 17179869184 字节,33554432 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

可以看到原有硬盘应该为sdb,于是乎,想通过mount进行挂载:mount /dev/sdb2 /old/

结果显示:mount: 未知的文件系统类型“LVM2_member”

2、因为Linux(笔者环境为Centos7)安装时使用LVM2导致无法直接挂载。执行以下命令安装lvm2的工具yum install -y lvm2

安装完成以后,可以执行以下命令查看逻辑卷属性lvdisplay

显示:WARNING: found device with duplicate /dev/sdb2

WARNING: Disabling lvmetad cache which does not support duplicate PVs.
WARNING: Scan found duplicate PVs.
WARNING: Not using lvmetad because cache update failed.
WARNING: Not using device /dev/sdb2 for PV rYCqeK-0fJp-Fs32-7u30-hlvz-Utqa-h0jlWi.
WARNING: PV rYCqeK-0fJp-Fs32-7u30-hlvz-Utqa-h0jlWi prefers device /dev/sda2 because of previous preference.
--- Logical volume ---
LV Path                /dev/centos/swap
LV Name                swap
VG Name                centos
LV UUID                g5h0m2-JoYP-6Fdl-ds6d-B4Cs-XESA-aBkVNs
LV Write Access        read/write
LV Creation host, time localhost, 2018-02-08 02:54:19 +0800
LV Status              available
# open                 2
LV Size                16.00 GiB
Current LE             4096
Segments               1
Allocation             inherit
Read ahead sectors     auto
- currently set to     8192
Block device           253:1
--- Logical volume ---
LV Path                /dev/centos/root
LV Name                root
VG Name                centos
LV UUID                66oHyc-me8P-C3c0-gh0D-xjI9-Q72H-6ciKCJ
LV Write Access        read/write
LV Creation host, time localhost, 2018-02-08 02:54:19 +0800
LV Status              available
# open                 1
LV Size                1007.80 GiB
Current LE             257997
Segments               1
Allocation             inherit
Read ahead sectors     auto
- currently set to     8192
Block device           253:0

发现两块硬盘"LV Name"是一样的,这也就是导致旧硬盘无法挂载的原因。

同时执行以下命令查看有关卷组的信息vgs

显示:WARNING: Not using lvmetad because duplicate PVs were found.

WARNING: Use multipath or vgimportclone to resolve duplicate PVs?
WARNING: After duplicates are resolved, run "pvscan --cache" to enable lvmetad.
WARNING: Not using device /dev/sdb2 for PV rYCqeK-0fJp-Fs32-7u30-hlvz-Utqa-h0jlWi.
WARNING: PV rYCqeK-0fJp-Fs32-7u30-hlvz-Utqa-h0jlWi prefers device /dev/sda2 because device is used by LV.
VG     #PV #LV #SN Attr   VSize    VFree
centos   1   2   0 wz--n- 1023.80g    0

或者执行以下命令输出格式化的物理卷信息报表pvs

显示:WARNING: Not using lvmetad because duplicate PVs were found.

WARNING: Use multipath or vgimportclone to resolve duplicate PVs?
WARNING: After duplicates are resolved, run "pvscan --cache" to enable lvmetad.
WARNING: Not using device /dev/sdb2 for PV rYCqeK-0fJp-Fs32-7u30-hlvz-Utqa-h0jlWi.
WARNING: PV rYCqeK-0fJp-Fs32-7u30-hlvz-Utqa-h0jlWi prefers device /dev/sda2 because device is used by LV.
PV         VG     Fmt  Attr PSize    PFree
/dev/sda2  centos lvm2 a--  1023.80g    0

三者输出差不多,都是提示”WARNING: PV rYCqeK-0fJp-Fs32-7u30-hlvz-Utqa-h0jlWi prefers device /dev/sda2 because device is used by LV.“,同”lvdisplay“输出信息一样。

根本原因是因为它们的卷名称一样导致的。

3、重命名旧硬盘卷名称vgimportclone -n newcentos /dev/sdb2

输出:WARNING: Not using device /dev/sdb2 for PV rYCqeK-0fJp-Fs32-7u30-hlvz-Utqa-h0jlWi.

WARNING: PV rYCqeK-0fJp-Fs32-7u30-hlvz-Utqa-h0jlWi prefers device /dev/sda2 because device is used by LV.

扫描设备上的LVM物理卷和卷组,并指示lvmetad守护进程相应地更新其缓存状态:pvscan --cache

再次执行"pvs"命令,显示如下:PV         VG        Fmt  Attr PSize    PFree

/dev/sda2  centos    lvm2 a--  1023.80g    0

/dev/sdb2  newcentos lvm2 a--  1023.80g    0

可以看到sdb2的卷组名称已改为"newcentos"。

接下来使用vgchange命令将卷组状态改为活动的,命令如下:vgchange newcentos -ay

显示:2 logical volume(s) in volume group "newcentos" now active

这时再次使用"lvs"查看时显示:LV   VG        Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

root centos    -wi-ao---- 1007.80g

swap centos    -wi-ao----   16.00g

root newcentos -wi-a----- 1007.80g

swap newcentos -wi-a-----   16.00g

这样,原有硬盘的卷组也就重命名和设置为活动了

4、挂载原有硬盘

先查看硬盘信息,命令如下:fdisk -l

显示:磁盘 /dev/sda:1099.5 GB, 1099511627776 字节,2147483648 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x000cde78

设备 Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048      411647      204800   83  Linux

/dev/sda2          411648  2147483647  1073536000   8e  Linux LVM

磁盘 /dev/sdb:1099.5 GB, 1099511627776 字节,2147483648 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x000cde78

设备 Boot      Start         End      Blocks   Id  System

/dev/sdb1   *        2048      411647      204800   83  Linux

/dev/sdb2          411648  2147483647  1073536000   8e  Linux LVM

磁盘 /dev/mapper/centos-root:1082.1 GB, 1082117849088 字节,2113511424 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/mapper/centos-swap:17.2 GB, 17179869184 字节,33554432 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/mapper/newcentos-swap:17.2 GB, 17179869184 字节,33554432 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘 /dev/mapper/newcentos-root:1082.1 GB, 1082117849088 字节,2113511424 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

可以看到原有硬盘分区为"/dev/mapper/newcentos-root",执行以下命令将它挂载到"/old"目录下:mount /dev/mapper/newcentos-root /old/

本想没什么问题了,但却还是无法挂载,显示如下:mount: 文件系统类型错误、选项错误、/dev/mapper/newcentos-root 上有坏超级块、

缺少代码页或助手程序,或其他错误

有些情况下在 syslog 中可以找到一些有用信息- 请尝试

dmesg | tail  这样的命令看看。

按它的提示,执行以下命令:dmesg | tail

显示:

[    6.024016] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[    6.057797] Netfilter messages via NETLINK v0.30.
[    6.063125] ip_set: protocol 6
[    6.590940] floppy0: no floppy controllers found
[    6.590987] work still pending
[    7.299956] IPv6: enp0s3: IPv6 duplicate address fe80::afbb:c491:1873:8741 detected!
[    7.619362] IPv6: enp0s3: IPv6 duplicate address fe80::10d4:9f90:6570:93a2 detected!
[    8.641373] IPv6: enp0s3: IPv6 duplicate address fe80::b778:7075:b40:bc9f detected!
[ 2161.199751] XFS (dm-3): Filesystem has duplicate UUID c23bf14e-b7b7-4947-8b65-d73fe367d9b7 - can't mount
[ 2175.720687] XFS (dm-3): Filesystem has duplicate UUID c23bf14e-b7b7-4947-8b65-d73fe367d9b7 - can't mount

经查找方法如下:mount -o rw,nouuid /dev/mapper/newcentos-root  /old/

这样也就可以正常挂载硬盘分区了。不过笔者发现之前的数据在该目录中还是不存在,不知何故,后面继续研究。