缩小一个 RAID-1 分区并增大另一个分区

缩小一个 RAID-1 分区并增大另一个分区

我有一台专用服务器,/dev/md2安装有/2 TB 容量和3.5 TB 容量/dev/md3/home

现在我想缩小/dev/md2到 500 GB 并增长/dev/md3到大约 5 TB。我怎么做?我已经能够将大小调整/dev/md2到 500 GB,但不会将底层更改/dev/sd[a,b]3为 500 GB 并增加/dev/md3(和/dev/sd[a,b]4)到 5 TB。

输出cat /proc/mdstat

Personalities : [raid1]
md3 : active raid1 sda4[0] sdb4[1]
      3714478663 blocks super 1.2 [2/2] [UU]
        resync=PENDING
      bitmap: 28/28 pages [112KB], 65536KB chunk

md2 : active raid1 sda3[0] sdb3[1]
      2111700992 blocks super 1.2 [2/2] [UU]
      [====>................]  resync = 22.1% (467664704/2111700992) finish=144.6min speed=189433K/sec
      bitmap: 13/16 pages [52KB], 65536KB chunk

md1 : active raid1 sda2[0] sdb2[1]
      523712 blocks super 1.2 [2/2] [UU]

md0 : active raid1 sda1[0] sdb1[1]
      33521664 blocks super 1.2 [2/2] [UU]

相关输出fdisk -l(无 ramdisk 条目):

Disk /dev/sdb: 5.5 TiB, 6001175126016 bytes, 11721045168 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: gpt
Disk identifier: 26A1CC9A-D448-41DA-AB97-926922E45FAD

Device          Start         End    Sectors  Size Type
/dev/sdb1        4096    67112959   67108864   32G Linux RAID
/dev/sdb2    67112960    68161535    1048576  512M Linux RAID
/dev/sdb3    68161536  4291825663 4223664128    2T Linux RAID
/dev/sdb4  4291825664 11721045134 7429219471  3.5T Linux RAID
/dev/sdb5        2048        4095       2048    1M BIOS boot

Partition table entries are not in disk order.


Disk /dev/sda: 5.5 TiB, 6001175126016 bytes, 11721045168 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: gpt
Disk identifier: CF6FA031-2CD0-4CD6-939B-E761A2871AB2

Device          Start         End    Sectors  Size Type
/dev/sda1        4096    67112959   67108864   32G Linux RAID
/dev/sda2    67112960    68161535    1048576  512M Linux RAID
/dev/sda3    68161536  4291825663 4223664128    2T Linux RAID
/dev/sda4  4291825664 11721045134 7429219471  3.5T Linux RAID
/dev/sda5        2048        4095       2048    1M BIOS boot

Partition table entries are not in disk order.


Disk /dev/md0: 32 GiB, 34326183936 bytes, 67043328 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


Disk /dev/md1: 511.4 MiB, 536281088 bytes, 1047424 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


Disk /dev/md2: 2 TiB, 2162381815808 bytes, 4223401984 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


Disk /dev/md3: 3.5 TiB, 3803626151424 bytes, 7428957327 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

答案1

您已经拥有 RAID1,因此如果您准备好在重塑期间冒磁盘故障的风险,那么这是可以完成的。这不是一个完整的食谱,您必须了解自己在做什么。即使这样,你也很可能会丢失数据,我会强烈地敦促你进行备份在你开始之前。真的。是的,我是认真的。

总体计划是

  1. 破坏 RAID 镜像
  2. 调整现在未使用的一半的大小以适应新的要求
  3. 使用新大小的分区创建新的 RAID 半镜像
  4. 将所有文件系统从活动的一半复制到新调整大小的一半(在执行此操作之前停止尽可能多的服务)
  5. 使用新的一半 RAID 重新启动(棘手)
  6. 将剩余的一半镜像添加回 RAID
  7. 整理

现在,在您考虑考虑将其应用到您的实时系统之前,请先进行备份。

当它运行时,在几个一次性环回磁盘映像上尝试该过程。创建这些的方法如下:

dd if=/dev/zero bs=1M count=200 > disk1.dat                          # Create a 200MB "disk"
cp -p disk1.dat disk2.dat                                            # And another

parted disk1.dat --align optimal unit MiB --script mklabel gpt       # First disk label
parted disk1.dat --align optimal unit MiB mkpart primary 1 2         # Dummy partition
parted disk1.dat --align optimal unit MiB mkpart primary 2 3
parted disk1.dat --align optimal unit MiB mkpart primary 3 150       # First useful partition
parted disk1.dat --align optimal unit MiB mkpart primary 150 100%    # Second

parted disk2.dat --align optimal unit MiB --script mklabel gpt       # Second disk
parted disk2.dat --align optimal unit MiB mkpart primary 1 2
parted disk2.dat --align optimal unit MiB mkpart primary 2 3
parted disk2.dat --align optimal unit MiB mkpart primary 3 150
parted disk2.dat --align optimal unit MiB mkpart primary 150 100%

d1=$(losetup --show --find --partscan disk1.dat); echo $d1           # Loop device
d2=$(losetup --show --find --partscan disk2.dat); echo $d2

mdadm --create /dev/md103 --metadata default --level=1 --raid-devices=2 ${d1}p3 ${d2}p3
mdadm --create /dev/md104 --metadata default --level=1 --raid-devices=2 ${d1}p4 ${d2}p4

mkfs -t ext4 -L 103 /dev/md103
mkfs -t ext4 -L 104 /dev/md104

mkdir /mnt/103 /mnt/104                                              # Mountpoints for our test filesystems
mount /dev/md103 /mnt/103
mount /dev/md104 /mnt/104

您现在将拥有两个 RAID1 文件系统/dev/md103/dev/md104您可以在其中复制一些数据并尝试该过程。您已将$d1$d2作为环回磁盘映像设备的基本名称。

这是一些细节。你的备份完成了吗?

  1. 破坏 RAID 镜像

    您可以使用以下命令将两个 RAID 分区中的一半设置为故障

    mdadm /dev/md103 --set-faulty ${d2}p3 --remove ${d2}p3    # sdb3
    mdadm --zero-superblock ${d2}p3
    
    mdadm /dev/md104 --set-faulty ${d2}p4 --remove ${d2}p4    # sdb4
    mdadm --zero-superblock ${d2}p4
    
  2. 调整第二个磁盘分区的大小

    使用您喜欢的工具删除并重新创建第二个磁盘上的分区。例如,

    parted $d2 --align optimal unit MiB rm 3
    parted $d2 --align optimal unit MiB rm 4
    

    此时您可能需要重新启动系统。 (或者,也有可能partprobe满足要求。)不要忘记重新创建循环设备并分配,$d1$d2在完成后进行分配。

    parted $d2 --align optimal unit MiB mkpart primary 3 50
    parted $d2 --align optimal unit MiB mkpart primary 50 100%
    
  3. 使用新大小的分区创建新的 RAID 半镜像

    创建 RAID 设备和文件系统。不要担心第一个会警告您它似乎已经是数组的一部分 - 曾经是,但现在不是。

    mdadm --create /dev/md203 --metadata default --level=1 --raid-devices=2 missing ${d2}p3
    mdadm --create /dev/md204 --metadata default --level=1 --raid-devices=2 missing ${d2}p4
    
    mkfs -t ext4 -L 203 /dev/md203
    mkfs -t ext4 -L 204 /dev/md204
    
    mkdir /mnt/203 /mnt/204
    mount /dev/md203 /mnt/203
    mount /dev/md204 /mnt/204
    
  4. 将所有文件系统从活动的一半复制到新调整大小的一半

    在运行之前停止尽可能多的服务非常重要,以便文件系统尽可能稳定。

    cp -ax /mnt/103 /mnt/203    # cp -ax / /mnt/203
    cp -ax /mnt/104 /mnt/204    # cp -ax /home /mnt/204
    
  5. 使用新的半 RAID 重新启动

    您必须/etc/mdadm/mdadm.conf使用新数组进行更新。使用此命令并添加尚未列出的任何内容

    mdadm --examine --scan
    

    您还需要更新grub您的系统,initramfs以便它可以找到新的根文件系统。您尚未在设置中提供这些详细信息,因此我无法为您提供说明。

  6. 将剩余的一半镜像添加回 RAID

    当您完全确定在新的半反射镜 RAID 上成功运行时,您可以销毁原始的半反射镜并将其添加回新的半反射镜。如果您仍然挂载文件系统,这些命令将会失败。 (现阶段不应该如此。)

    mdadm --stop /dev/md103
    mdadm --zero-superblock ${d1}p3
    
    mdadm --stop /dev/md104
    mdadm --zero-superblock ${d1}p4
    

    现在使用上述命令调整剩余磁盘分区的大小parted

    将新调整大小的分区添加到新的半镜像 RAID1

    mdadm /dev/md203 --add ${d1}p3
    mdadm /dev/md204 --add ${d1}p4
    
  7. 整理

    /etc/mdadm/mdadm.conf、、 和中删除旧设备。重启。grubinitramfs/etc/fstab

相关内容