9

从PTTYPE="dos"到TYPE="LVM2_member"的救援

 收集于8个月前 阅读数 9
以下为 快照 页面,建议前往来源网站查看,会有更好的阅读体验。
原文链接: https://zhangguanzhang.github.io/2019/12/03/dos-to-gpt/

同事叫我救援一台云主机,虽说是虚拟机,但是类比到硬件服务器还是一样的操作,这里记录下给后来者查阅

故障信息

控制台进去看到centos7的背景虚化的数字7+转圈,重启下看下完整的错误,重启选了内核然后进到图形界面的时候按下ecs取消,观察终端

[  OK ] Started Show Plymouth Boot Screen.
[  OK ] Reached target Paths.
[  OK ] Reached target Basic System.
[  124.522110] dracut-initqueue[240]: Warning: dracut-initqueue timeout - starting timeout scripts
[  125.034736] dracut-initqueue[240]: Warning: dracut-initqueue timeout - starting timeout scripts
[  125.542788] dracut-initqueue[240]: Warning: dracut-initqueue timeout - starting timeout scripts
[  126.522110] dracut-initqueue[240]: Warning: dracut-initqueue timeout - starting timeout scripts
[  127.068643] dracut-initqueue[240]: Warning: dracut-initqueue timeout - starting timeout scripts
[  127.576830] dracut-initqueue[240]: Warning: dracut-initqueue timeout - starting timeout scripts
...
[  185.082387] dracut-initqueue[240]: Warning: Could not boot.
[  185.118736] dracut-initqueue[240]: Warning: /dev/centos/root does not exist
[  185.119239] dracut-initqueue[240]: Warning: /dev/mapper/centos-root does not exist
          Starting Dracut Emergency Shell...
Warning: /dev/centos/root does not exist
Warning: /dev/mapper/centos-root does not exist
Generating "/run/initramfs/rdsosreport.txt"

Entering emergency mode. Exit the shell to continue.
Type "journalctl" to view system logs.
You might want to save "/run/initramfs/rdsosreport.txt" to a USB stack or /boot
after mounting them and attach it to a bug report.

dracut:/#

处理

挂载iso进救援模式

关闭虚机,后台拷贝下系统盘的卷。然后给虚机的IDE光驱挂载了个centos的iso,修改虚机启动顺序到ISO,进 Troubleshooting –> Rescue a CentOS Linux system

1) Continue
2) Read-only mount
3) Skip to shell
3) Quit (Reboot)
Please make a selection from the above: 1

选择了1后提示没有任何Linux分区

=====================================================================================
=====================================================================================
Rescue Mount

You don't have any Linux partitions. The system will reboot automatically when you exit from the shell.
Please press <return> to get a shell.

按下回车进入交互式shell

sh-4.2# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
vda             252:0    0    40G  0 disk 
├─vda1          252:1    0     2M  0 part
├─vda2          252:2    0   200M  0 part
└─vda3          252:3    0  39.8G  0 part
vdb             252:16   0   400G  0 disk
loop0             7:1    0 420.3M  1 loop
loop1             7:1    0     2G  1 loop
├─live-rw       253:0    0     2G  0 dm    /
└─live-base     253:1    0     2G  1 dm
loop2             7:2    0   512M  1 loop
└─live-rw       253:0    0     2G  0 dm    /
sh-4.2# fdisk -l /dev/vda

Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 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 label type: dos
Disk identifier: 0x000ad4f2

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1            2048        6143        2048   83  Linux
/dev/vda2   *        6144      415743      204800   83  Linux
/dev/vda3          415744    83886079    41735168   8e  Linux LVM
sh-4.2# blkid
/run/install/repo/LiveOS/squashfs.img: TYPE="squashfs"
/dev/sr0: UUID="2018-05-03-20-55-23-00" LABEL="Centos 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sr1: UUID="2019-11-01-16-33-37-00" LABEL="config-2" TYPE="iso9660"
/dev/vda1: UUID="e438c18a-c97d-432c-ae66-a538cd1fbb4d" TYPE="xfs"
/dev/vda3: PTTYPE="dos"
/dev/loop0: TYPE="squashfs"
...

查看下块,vda2是boot,vda3是lvm也就是根所在,问题是 /dev/vda3: PTTYPE="dos" 不知道为何变成了dos类型,正常应该是 TYPE="LVM2_member"

/dev/vda3: UUID="xxxxxxxxxxxxxx" TYPE="LVM2_member"

重做lvm为了去掉PTTYPE=”dos”

尝试着重做pv试试

sh-4.2# vgremove centos
Do you really wanto ro remove volume group "centos" containing 1 logical volumes? [y/n]: y
  Logical volume "root" successfully removed
  Volume group "centos" successfully removed
sh-4.2# pvremove /dev/vda3
  Labels on physical volume "/dev/vda3" successfully wiped.
sh-4.2# pvcreate /dev/vda3
WARNING: dos signature detected on /dev/vda3 at offset 510. Wipe it? [y/n]: y
  Wiping dos signature on /dev/vda3.
  Physical volume "/dev/vda3" successfully created.
sh-4.2# vgcreate centos /dev/vda3
  Volume group "centos" successfully created
sh-4.2# lvcreate -n root -l 100%FREE centos
  Logical volume "root" created
sh-4.2# mkdir /mnt/root
sh-4.2# mount /dev/centos/root /mnt/root

输出被滚动冲没了,大致就是lvcreate的时候提示有xfs标签,不擦除,最终得到了个残缺的的 /dev/centos/root ,然后 xfs_repair 后重启也无法开机。再次进救援模式挂载了chroot进去发现报错 /bin/bash no such file ,才意识到损坏了文件,很多so都丢了

留有备份,打算在文件层面恢复

最后也应该是最开应该做的正确操作

下发了台不是lvm的centos7.6机器,然后给该机器挂载了数据盘为vdb(50G,其实大于等于故障机器根的真实占用大小即可),备份的卷挂载为vdc。利用数据盘中转下原有的文件

打算把lvm的文件系统文件拷贝到数据盘vdb的文件系统,然后在故障机器的救援模式下挂载这个数据盘,把数据盘的根文件拷贝到残缺的系统盘的根下

格式化vdb

[root@fix-data ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom  
sr1     11:1    1  464K  0 rom  
vda    253:0    0   40G  0 disk 
└─vda1 253:1    0   40G  0 part /
vdb    253:16   0   50G  0 disk 
[root@fix-data ~]# parted /dev/vdb
GNU Parted 3.1
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt                                                      
(parted) mkpart                                                           
Partition name?  []? 1                                                    
File system type?  [ext2]? xfs                                            
Start? 1                                                                  
End? 100%                                                                 
(parted) p                                                                
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  53.7GB  53.7GB               1

(parted) q                                                                
Information: You may need to update /etc/fstab.

[root@fix-data ~]# mkfs.xfs /dev/vdb1
meta-data=/dev/vdb1              isize=512    agcount=4, agsize=3276672 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=13106688, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=6399, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
mkdir[root@fix-data ~]# mkdir -p /mnt/{root,data}

挂载需要修复的系统盘的克隆卷

后台挂载好后

# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom  
sr1     11:1    1  464K  0 rom  
vda    253:0    0   40G  0 disk 
└─vda1 253:1    0   40G  0 part /
vdb    253:16   0   50G  0 disk 
└─vdb1 253:17   0   50G  0 part 
vdc    253:32   0   40G  0 disk 
├─vdc1 253:33   0    2M  0 part 
├─vdc2 253:34   0  200M  0 part 
└─vdc3 253:35   0 39.8G  0 part

安装lvm2工具(新机器因为不是lvm的根分区所以系统没有安装这个)

yum install -y lvm2

激活lvm状态

$ vgchange -a y
  1 logical volume(s) in volume group "centos" now active

根 –> /mnt/root/

/boot –> /mnt/root/boot

数据盘 –> /mnt/data/

mount /dev/centos/root /mnt/root/
mount /dev/vdc2 /mnt/root/boot
mount /dev/vdb1 /mnt/data

然后拷贝

cp -a /mnt/root/* /mnt/data/

拷贝完后取消挂载并关机

umount /mnt/data/
umount /mnt/root/boot/
umount /mnt/root/
poweroff

拷贝

后台把该数据盘挂载到故障机器上,故障机器在救援模式里操作

sh-4.2# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0              11:0    1   4.2G  0 rom  /run/install/repo
sr1              11:1    1   464K  0 rom 
vda             252:0    0    40G  0 disk 
├─vda1          252:1    0     2M  0 part
├─vda2          252:2    0   200M  0 part /mnt/sysimage/boot
└─vda3          252:3    0  39.8G  0 part 
  └─centos-root 253:2    0  39.8G  0 lvm  /mnt/sysimage
vdb             252:16   0   400G  0 disk
vdc             252:32   0    50G  0 disk
└─vdc1          252:33   0    50G  0 part
loop0             7:1    0 420.3M  1 loop
loop1             7:1    0     2G  1 loop
├─live-rw       253:0    0     2G  0 dm    /
└─live-base     253:1    0     2G  1 dm
loop2             7:2    0   512M  1 loop
└─live-rw       253:0    0     2G  0 dm    /

可以看到数据盘为vdc,挂载vdc1到 /mnt/data ,然后拷贝到 /mnt/sysimage

sh-4.2# mkdir /mnt/data
sh-4.2# mount /dev/vdc1 /mnt/data
sh-4.2# ls -l /mnt/data
total 16
lrwxrwxrwx    1 root root    7 Jul 24  2018 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 Jul 24  2018 boot
drwxr-xr-x.   2 root root   18 Dec  3 04:24 dev
drwxr-xr-x. 143 root root 8192 Dec  3 03:54 etc
drwxr-xr-x.   3 root root   20 Jul 25  2018 home
lrwxrwxrwx    1 root root    7 Jul 24  2018 lib -> usr/lib
lrwxrwxrwx    1 root root    9 Jul 24  2018 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 Apr 11  2018 media
drwxr-xr-x.   2 root root    6 Apr 11  2018 mnt
drwxr-xr-x.   4 root root   34 Nov  1 17:19 opt
drwxr-xr-x.   2 root root    6 Jul 24  2018 proc
dr-xr-x---.   9 root root  258 Nov  5 16:14 root
drwxr-xr-x.   2 root root    6 Jul 24  2018 run
lrwxrwxrwx    1 root root    8 Jul 24  2018 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 Apr 11  2018 srv
drwxr-xr-x.   2 root root    6 Jul 24  2018 sys
drwxrwxrwt.   7 root root  114 Dec  3 04:55 tmp
drwx------    7 root root   66 Jul 24  2018 usr
drwxr-xr-x.  21 root root 4096 Jul 24  2018 var
drwxr-xr-x.   2 root root    6 Nov  4 02:09 version
sh-4.2# cd /mnt/sysimage
sh-4.2# cp -a /mnt/data/* .

重做grub.cfg,该系统不是grub2,如果是grub2则/boot下有grub2目录

mount -o bind /dev /mnt/sysimage/dev
mount -o bind /proc /mnt/sysimage/proc
mount -o bind /run /mnt/sysimage/run
mount -o bind /sys /mnt/sysimage/sys
mv boot/grub/grub.cfg{,.bak}

然后chroot进来生成 grub.cfg

chroot .
grub-mkconfig -o /boot/grub2/grub.cfg

开机正常


猜你喜欢

关于极客头条


聚合每日国内外有价值,有趣的链接。

AD