我有一台专用服务器,/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,因此如果您准备好在重塑期间冒磁盘故障的风险,那么这是可以完成的。这不是一个完整的食谱,您必须了解自己在做什么。即使这样,你也很可能会丢失数据,我会强烈地敦促你进行备份在你开始之前。真的。是的,我是认真的。
总体计划是
- 破坏 RAID 镜像
- 调整现在未使用的一半的大小以适应新的要求
- 使用新大小的分区创建新的 RAID 半镜像
- 将所有文件系统从活动的一半复制到新调整大小的一半(在执行此操作之前停止尽可能多的服务)
- 使用新的一半 RAID 重新启动(棘手)
- 将剩余的一半镜像添加回 RAID
- 整理
现在,在您考虑考虑将其应用到您的实时系统之前,请先进行备份。
当它运行时,在几个一次性环回磁盘映像上尝试该过程。创建这些的方法如下:
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
作为环回磁盘映像设备的基本名称。
这是一些细节。你的备份完成了吗?
破坏 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
调整第二个磁盘分区的大小
使用您喜欢的工具删除并重新创建第二个磁盘上的分区。例如,
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%
使用新大小的分区创建新的 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
将所有文件系统从活动的一半复制到新调整大小的一半
在运行之前停止尽可能多的服务非常重要,以便文件系统尽可能稳定。
cp -ax /mnt/103 /mnt/203 # cp -ax / /mnt/203 cp -ax /mnt/104 /mnt/204 # cp -ax /home /mnt/204
使用新的半 RAID 重新启动
您必须
/etc/mdadm/mdadm.conf
使用新数组进行更新。使用此命令并添加尚未列出的任何内容mdadm --examine --scan
您还需要更新
grub
您的系统,initramfs
以便它可以找到新的根文件系统。您尚未在设置中提供这些详细信息,因此我无法为您提供说明。将剩余的一半镜像添加回 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
整理
从
/etc/mdadm/mdadm.conf
、、 和中删除旧设备。重启。grub
initramfs
/etc/fstab