Article

文章正文

手动重组发现引导丢失了,可以用此方法解决

尝试一下PVE虚拟机重组系统raid1

最开始尝试了使用常规的 zpool replace ,但是这样的话系统是无法引导的,因为没有复制过去引导分区(EFI,BOOT),所以我找到了官方的一个文档说明这个问题,下面引用一下官方的链接。

https://pve.proxmox.com/wiki/ZFS_on_Linux#sysadmin_zfs_change_failed_dev

第一步 检查

先检查系统使用的是什么方式引导,如果已知则略过

proxmox-boot-tool status

因为我用的是boot传统引导,所以输出的是

Re-executing '/usr/sbin/proxmox-boot-tool' in new private mount namespace..
System currently booted with legacy bios
4F07-8E14 is configured with: grub (versions: 6.2.16-3-pve)
WARN: /dev/disk/by-uuid/4F08-1FC2 does not exist - clean '/etc/kernel/proxmox-boot-uuids'! - skipping
6A94-CEBE is configured with: grub (versions: 6.2.16-3-pve)
9165-9F6B is configured with: grub (versions: 6.2.16-3-pve)

第二步 复制分区

如何添加一块硬盘做RAID1

第一步 检查

首先查看zpool状态 我们一下代码

zpool status

获得输出结果应该类似于

config:

        NAME          STATE     READ WRITE CKSUM
        rpool         ONLINE       0     0     0
          mirror-0    ONLINE       0     0     0
            sda3      ONLINE       0     0     2
            sdb3      ONLINE       0     0     0

可以看到我们的rpool就是系统的zfsraid,我们有两块硬盘的第三分区做了raid1

第二步 准备硬盘

首先我们要找到自己刚接入的硬盘系统给的名称,我这里建议把没用的硬盘都拔掉以免混淆,当然你也可以使用id的方式进行选择硬盘,我这里不再赘述

使用命令

lsblk

输出结果应给是这样的

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 238.5G  0 disk 
├─sda1   8:1    0  1007K  0 part 
├─sda2   8:2    0     1G  0 part 
└─sda3   8:3    0 237.5G  0 part 
sdb      8:16   0 238.5G  0 disk 
├─sdb1   8:17   0  1007K  0 part 
├─sdb2   8:18   0     1G  0 part 
└─sdb3   8:19   0 237.5G  0 part 
sdc      8:32   0 238.5G  0 disk 

可见我们的sdc是一个空的硬盘 没有任何分区

复制分区

我们将sda的分区复制给要添加到raid的sdc上面 使用以下指令

sgdisk /dev/sda -R /dev/sdc

注意,我们要加上前缀,这里的sda是健康的硬盘 sdc是要新添加的硬盘

重建GUID

我们使用以下指令进行重建

sgdisk -G /dev/sdc

这个sdc就是刚刚新添加的硬盘,这样硬盘的准备工作就完成了,我们在输入下列指令确认一下

lsblk

输出结果应该类似这样

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 238.5G  0 disk 
├─sda1   8:1    0  1007K  0 part 
├─sda2   8:2    0     1G  0 part 
└─sda3   8:3    0 237.5G  0 part 
sdb      8:16   0 238.5G  0 disk 
├─sdb1   8:17   0  1007K  0 part 
├─sdb2   8:18   0     1G  0 part 
└─sdb3   8:19   0 237.5G  0 part 
sdc      8:32   0 238.5G  0 disk 
├─sdc1   8:33   0  1007K  0 part 
├─sdc2   8:34   0     1G  0 part 
└─sdc3   8:35   0 237.5G  0 part 

重建引导

重建引导我们使用官方提供的工具 首先格式化第二个分区,也就是1G大小这个分区

proxmox-boot-tool format /dev/sdc2

然后使用这个命令进行初始化

proxmox-boot-tool init /dev/sdc2

使用此命令会进行重建EFI引导,如果用的是boot方式引导那么要多一步操作

传统引导方式

grub-install /dev/sdc
update-grub

用此方法即可使用新硬盘进行引导

第四步 添加到池

我们不需要把整个硬盘都添加到池,其他两个分区是引导分区,我们只需要把第三个分区进行添加即可,使用下列命令

检查pool状态

zpool status

输出结果应该为

config:

        NAME          STATE     READ WRITE CKSUM
        rpool         ONLINE       0     0     0
          mirror-0    ONLINE       0     0     0
            sda3      ONLINE       0     0     2
            sdb3      ONLINE       0     0     0

我们将新的硬盘添加到pool

zpool attach rpool sda3 sdc3

输出结果应该为

config:

        NAME          STATE     READ WRITE CKSUM
        rpool         ONLINE       0     0     0
          mirror-0    ONLINE       0     0     0
            sda3      ONLINE       0     0     2
            sdb3      ONLINE       0     0     0
            sdc3      ONLINE       0     0     0  (resilvering)

此时不要惊慌 耐心等待重银完成,或者可以使用下列指令实时监控重银状态

zpool status -v

此时全部步骤操作完成!我们在查看一下硬盘状态

# lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 238.5G  0 disk 
├─sda1   8:1    0  1007K  0 part 
├─sda2   8:2    0     1G  0 part 
└─sda3   8:3    0 237.5G  0 part 
sdb      8:16   0 238.5G  0 disk 
├─sdb1   8:17   0  1007K  0 part 
├─sdb2   8:18   0     1G  0 part 
└─sdb3   8:19   0 237.5G  0 part 
sdc      8:32   0 238.5G  0 disk 
├─sdc1   8:33   0  1007K  0 part 
├─sdc2   8:34   0     1G  0 part 
└─sdc3   8:35   0 237.5G  0 part 

成功!