如何在两个 MBR 分区驱动器上的 MDADM RAID1 上将 LVM 转换为 GPT 而不丢失数据

如何在两个 MBR 分区驱动器上的 MDADM RAID1 上将 LVM 转换为 GPT 而不丢失数据

我有一台 Ubuntu 18.04 LTS 服务器,上面有两个 3TB 富士通 SATA 磁盘,带有 MBR 分区表。fdisk -l 和 lsblk 的输出如下所示:

sudo fdisk -l /dev/sd[ab]
Disk /dev/sda: 2,7 TiB, 3000592982016 bytes, 5860533168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x0f6b5c4d

Device     Boot      Start        End    Sectors   Size Id Type
/dev/sda1             2048 1953525167 1953523120 931,5G fd Linux RAID autodetect
/dev/sda2       1953525760 4294967294 2341441535   1,1T fd Linux RAID autodetect


Disk /dev/sdb: 2,7 TiB, 3000592982016 bytes, 5860533168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x0f6b5c4d

Device     Boot      Start        End    Sectors   Size Id Type
/dev/sdb1             2048 1953525167 1953523120 931,5G fd Linux RAID autodetect
/dev/sdb2       1953525760 4294967294 2341441535   1,1T fd Linux RAID autodetect

jan@xenon:/etc/grub.d$ lsblk
NAME                MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                   8:0    0   2,7T  0 disk  
├─sda1                8:1    0 931,5G  0 part  
│ └─md0               9:0    0 931,4G  0 raid1 
│   ├─lvraid0-boot  253:0    0   952M  0 lvm   /boot
│   ├─lvraid0-root  253:1    0   9,3G  0 lvm   /
│   ├─lvraid0-usr   253:2    0  41,4G  0 lvm   /usr
│   ├─lvraid0-var   253:3    0  27,1G  0 lvm   /var
│   ├─lvraid0-local 253:4    0    20G  0 lvm   /usr/local
│   └─lvraid0-home  253:5    0   1,3T  0 lvm   /home
└─sda2                8:2    0   1,1T  0 part  
  └─md1               9:1    0   1,1T  0 raid1 
    └─lvraid0-home  253:5    0   1,3T  0 lvm   /home
sdb                   8:16   0   2,7T  0 disk  
├─sdb1                8:17   0 931,5G  0 part  
│ └─md0               9:0    0 931,4G  0 raid1 
│   ├─lvraid0-boot  253:0    0   952M  0 lvm   /boot
│   ├─lvraid0-root  253:1    0   9,3G  0 lvm   /
│   ├─lvraid0-usr   253:2    0  41,4G  0 lvm   /usr
│   ├─lvraid0-var   253:3    0  27,1G  0 lvm   /var
│   ├─lvraid0-local 253:4    0    20G  0 lvm   /usr/local
│   └─lvraid0-home  253:5    0   1,3T  0 lvm   /home
└─sdb2                8:18   0   1,1T  0 part  
  └─md1               9:1    0   1,1T  0 raid1 
    └─lvraid0-home  253:5    0   1,3T  0 lvm   /home
sdc                   8:32   0 238,5G  0 disk  
├─sdc1                8:33   0    32G  0 part  [SWAP]
└─sdc2                8:34   0 206,5G  0 part  

mdadm 设置如下:

sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sat Mar  8 12:55:25 2014
        Raid Level : raid1
        Array Size : 976630488 (931.39 GiB 1000.07 GB)
     Used Dev Size : 976630488 (931.39 GiB 1000.07 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Sun Mar  7 16:39:14 2021
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : xenon:0  (local to host xenon)
              UUID : 862908d9:73a53975:471031c2:2e8d79fd
            Events : 1429528

    Number   Major   Minor   RaidDevice State
       2       8        1        0      active sync   /dev/sda1
       3       8       17        1      active sync   /dev/sdb1

sudo mdadm --detail /dev/md1
/dev/md1:
           Version : 1.2
     Creation Time : Wed Apr 29 23:17:46 2020
        Raid Level : raid1
        Array Size : 1170588608 (1116.36 GiB 1198.68 GB)
     Used Dev Size : 1170588608 (1116.36 GiB 1198.68 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Sun Mar  7 16:27:26 2021
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : xenon:1  (local to host xenon)
              UUID : df9fa048:c1e13ee2:fc85098e:0292f063
            Events : 2010

    Number   Major   Minor   RaidDevice State
       0       8        2        0      active sync   /dev/sda2
       1       8       18        1      active sync   /dev/sdb2

如上所示,每个磁盘都有两个分区,用于制作两个软件 RAID 1 卷 md0 和 md1,而 LVM 又将它们用于卷组 lvraid0。这一切都运行良好,但由于使用 MBR 分区表,磁盘布局浪费了大量空间,这使我无法使用磁盘的全部大小。原因是我最初有两个 1 TB 磁盘,后来我将其替换为 3 TB 磁盘。我还应该提到我的服务器使用的是 BIOS(不是 UEFI)

为了使用整个磁盘空间,我想将磁盘分区从 MBR 更改为 GPT。我研究过如何做到这一点,似乎可以使用类似以下的方法,但我希望得到一些使用特定命令做过类似事情的人的意见,这样我就不会安装失败:

  1. 从 RAID 卷 md0 和 md1 中删除一个驱动器 /dev/sdb
   mdadm --manage /dev/md0 --fail /dev/sdb1  
   mdadm --manage /dev/md1 --fail /dev/sdb2  
   mdadm --manage /dev/md0 --remove /dev/sdb1  
   mdadm --manage /dev/md1 --remove /dev/sdb2  

我是否应该将 /dev/sdb 分区的内容清零以避免 mdadm 设备扫描出现问题?

dd if=/dev/zero of=/dev/sdb1 bs=1M count=1000  
dd if=/dev/zero of=/dev/sdb2 bs=1M count=1000  

如果我不这样做,我担心某些 mdadm 或 lvm2 扫描可能会发现剩余内容 - 请指定相关命令

  1. 重新分区 /dev/sdb 以使用 GPT

我想对驱动器进行如下分区:

a. 一个分区 /dev/sdb1 用于 md0,就像 MBR 磁盘上一样

Device     Boot      Start        End    Sectors   Size Id Type  
/dev/sdb1             2048 1953525167 1953523120 931,5G fd Linux RAID autodetect

b. 一个分区 /dev/sdb2 供 GRUB2 使用,大小为 10 MB ?
c. 一个分区 /dev/sdb3 用于将来可能的 UEFI - 100MB ?
d. 一个分区 /dev/sdb4 用于 md1,比原始 md1 大
e. 留出一些空间供将来 MDADM/LVM2 使用

我应该为 RAID autodect、可启动、GRUB 等的新分区使用哪些 GPT 代码。我知道它们与 MBR 磁盘不同,但不知道该使用哪一个

  1. 将 /dev/sdb 重新添加到两个 RAID 卷

    我是否需要删除 RAID 写入意图位图?如果需要,如何删除、何时删除,以及如何/何时重新创建?

   mdadm -–manage /dev/md0 -–add /dev/sdb1  
   mdadm --manage /dev/md1 --add /dev/sdb4  

现在等待重新同步完成

  1. 在新创建的分区上安装 grub2

grub-install /dev/sdb 会正常工作吗?我想如果我对专用 grub 分区使用了正确的代码,它就会正常工作。据我所知,LBA 扇区 0 应该有一个保护性引导记录,其余的在 GRUB 分区中。这能确保磁盘可引导吗?

我想我现在应该更新我的 mdadm 配置:

mdadm --detail --scan > /etc/mdadm/mdadm.conf  

and  update the boot environment:

update-initramfs -u -k all  
update-grub  

/etc/fstab 应该没问题,因为 UUID 是 LVM2 UUID

并在进一步更改其他 MBR 磁盘 /dev/sda 之前验证系统是否可以从新的 GPT 磁盘启动

  1. 调整卷大小

我假设在两个驱动器都从 MBR 更改为 GPT 后会发生这种情况

我保留 /dev/md0 的大小作为原始 MBR 磁盘,这样应该没问题吧?

我怀疑我需要告诉 mdadm /dev/md1,它现在位于比原始 MBR 磁盘大得多的分区 /dev/sdb3 上,需要扩展。我该怎么做?

mdadm –grow /dev/md1 –size=max  ??  

完成后,我想我还需要告诉 LVM2 使用现在更大的物理卷 /dev/md1。我该怎么做?

pvresize /dev/md1 ??  

我想我还需要调整 /home 的大小,驻留在 /dev/md1 上,以使用增加的空间。我使用 ext4 文件系统,所以我想我应该使用一些

resize2fs /dev/lvraid0/home ??  

希望有人能帮忙?我以前在网上找到过一些指南,但现在似乎找不到了 :-(

相关内容