扩展软件 RAID1 配置

扩展软件 RAID1 配置

有一个系统有 2 个同等的 HDD(都是 4TB),并且它们“绑定”在一起突袭1:

$ sudo mdadm --query --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Oct  8 22:22:53 2017
        Raid Level : raid1
        Array Size : 3906887488 (3725.90 GiB 4000.65 GB)
     Used Dev Size : 3906887488 (3725.90 GiB 4000.65 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Fri Aug  4 19:48:49 2023
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : -------:0  (local to host -------)
              UUID : -------
            Events : 13519

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync   /dev/sda
       1       8       16        1      active sync   /dev/sdb

在它们之上还有卷组,根据 @roaima 的回答,我现在可以识别配置:

sda                           8:0    0   3.7T  0 disk
└─md0                         9:0    0   3.7T  0 raid1
  └─md0p1                   259:1    0   3.7T  0 part
    └─lukslvm-XXXXXXXXX     253:3    0   3.7T  0 crypt
      ├─vg--XXXXXXXXX-AAAA  253:4    0   500G  0 lvm   /media/AAAA
      └─vg--XXXXXXXXX-BBBB  253:5    0   3.2T  0 lvm   /media/BBBB
sdb                           8:16   0   3.7T  0 disk
└─md0                         9:0    0   3.7T  0 raid1
  └─md0p1                   259:1    0   3.7T  0 part
    └─lukslvm-XXXXXXXXX     253:3    0   3.7T  0 crypt
      ├─vg--XXXXXXXXX-AAAA  253:4    0   500G  0 lvm   /media/AAAA
      └─vg--XXXXXXXXX-BBBB  253:5    0   3.2T  0 lvm   /media/BBBB

假设这种配置,我如何将这些磁盘替换为更大的磁盘(假设为 8TB),不失去任何东西(注意:主板上没有更多的物理连接器)?

将一个 4TB 替换为 8TB,然后等待两个硬盘的 raid1 状态变为active sync,然后将另一个 4TB 替换为 8TB,再次等待active sync?然后明显延长VG,延长FS?

答案1

从文件系统的顶部开始并按逻辑向下工作会更容易。 (不过,这实际上意味着通过 的输出向上工作lsblk。)

lsblk

NAME                    MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
mmcblk0                 179:0    0 29.7G  0 disk
├─mmcblk0p1             179:1    0   63M  0 part  /boot
├─mmcblk0p2             179:2    0    8G  0 part  /
└─mmcblk0p3             179:3    0 21.7G  0 part
  ├─pi_p3-raid1a        254:2    0    1G  0 lvm
  │ └─md1                 9:1    0 1022M  0 raid1
  │   └─crypt_md1       254:4    0 1006M  0 crypt
  │     └─vgtest-lvtest 254:5    0  100M  0 lvm   /mnt/dsk
  └─pi_p3-raid1b        254:3    0    1G  0 lvm
    └─md1                 9:1    0 1022M  0 raid1
      └─crypt_md1       254:4    0 1006M  0 crypt
        └─vgtest-lvtest 254:5    0  100M  0 lvm   /mnt/dsk

在您的情况下,您可能希望从根文件系统开始。在我的例子中,这是一个 SD 卡分区mmcblkp02,这对说明没有太大帮助,因此我创建了一个以安装在 上的 ext4 文件系统开头的层/mnt/dsk。让我们遵循这一点。

  1. /mnt/dsk是一个ext4标记为的文件系统ext4test

    findmnt /mnt/dsk
    
    TARGET   SOURCE                    FSTYPE OPTIONS
    /mnt/dsk /dev/mapper/vgtest-lvtest ext4   rw,relatime,data=ordered
    
  2. 向上移动树,我们可以看到它是从设备创建的 LVM 组件crypt_md1。我们可以使用lvs和确认 LV 和 VG 名称pvs,实际上它们是lvtest文件系统 LV 和vgtestVG 的名称:

    lvs
    
      LV      VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lvtest  vgtest -wi-ao---- 100.00m
    
    pvs
    
      PV                    VG     Fmt  Attr PSize    PFree
      /dev/mapper/crypt_md1 vgtest lvm2 a--  1004.00m 904.00m
    
  3. 将树向上移动一层,我们可以看到这crypt_md1是一个crypto_LUKS构建在md1

  4. 再上一层,我们可以识别出这md1是一个linux_raid_member.快速回避cat /proc/mdstat将证实这一点:

    cat /proc/mdstat
    
    Personalities : [raid6] [raid5] [raid4] [raid1]
    md1 : active raid1 dm-3[1] dm-2[0]
          1046528 blocks super 1.2 [2/2] [UU]
    
    unused devices: <none>
    
  5. 也许令人困惑的是,我们现在可以看到我的烟雾和镜子:我从md1另一个现有的 LVM VG创建了两个 RAID 镜像半部分pi_p3。这是真的:我创建了两个组件raid1araid1b然后用于mdadm --create构建本示例的 RAID1 镜像,这意味着我有“物理 → VG → 2x LV → 2x RAID → MD(RAID1) → LUKS → VG → LV → EXT4”!以下是我用于构建的全套命令,请记住我已经有了 LVM VG /dev/pi_p3

    lvcreate --size 1G --name raid1a /dev/pi_p3
    lvcreate --size 1G --name raid1b /dev/pi_p3
    mdadm --create /dev/md1 --level 1 --raid-devices 2 /dev/pi_p3/raid1{a,b}
    
    cryptsetup -c aes-xts-plain -s 512 -y luksFormat /dev/md1    # "test"
    cryptsetup luksOpen /dev/md1 crypt_md1
    
    pvcreate /dev/mapper/crypt_md1
    vgcreate vgtest /dev/mapper/crypt_md1
    lvcreate --size 100M --name lvtest vgtest
    
    mkfs -L ext4test -t ext4 /dev/vgtest/lvtest
    mount /dev/vgtest/lvtest /mnt/dsk
    

在您的情况下,您应该看到两个物理设备而不是我的 LVM 组件raid1araid1b因此我将在此停止分析。

如果您的结构不是您所期望的,即它不是“RAID -> LUKS -> LVM -> FS 配置“那么你现在应该已经能够使用这种方法识别真实的结构了。


现在关于问题的第二部分,如何使用更大的磁盘来扩展结构。我将通过用 2GB 替换我的 1GBraid1araid1bLV来实现此示例raid1craid1d

# Synthesise two "larger disks" from the VG
lvcreate --size 2G --name raid1c /dev/pi_p3
lvcreate --size 2G --name raid1d /dev/pi_p3

# Swap out the first disk
mdadm --manage /dev/md1 --add /dev/pi_p3/raid1c
mdadm --manage /dev/md1 --set-faulty /dev/pi_p3/raid1a
mdadm --manage /dev/md1 --remove /dev/pi_p3/raid1a

# Wait for synchronisation to complete!
cat /proc/mdstat

等待同步完成。如果你不等你将要在下一步中丢失整个文件系统及其数据。

# Swap out the second disk
mdadm --manage /dev/md1 --add /dev/pi_p3/raid1d
mdadm --manage /dev/md1 --set-faulty /dev/pi_p3/raid1b
mdadm --manage /dev/md1 --remove /dev/pi_p3/raid1b

# Grow the new RAID1 array
mdadm --grow /dev/md1 --size max

# Resize the encrypted layer
cryptsetup resize /dev/mapper/crypt_md1

# Resize the PV for the LVM VG
pvresize /dev/mapper/crypt_md1

此时,您应该看到 PV 已成功调整大小的确认信息:

  Physical volume "/dev/mapper/crypt_md1" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

现在pvs /dev/mapper/crypt_md1vgs vgtest显示新大小为 2GB(新“磁盘”的大小):

  PV                    VG     Fmt  Attr PSize PFree
  /dev/mapper/crypt_md1 vgtest lvm2 a--  1.98g 1.88g

  VG     #PV #LV #SN Attr   VSize VFree
  vgtest   1   1   0 wz--n- 1.98g 1.88g

最后,请记住要等到第二次 RAID1 同步完成后再关闭电源或重新启动系统:

cat /proc/mdstat

相关内容