缩小 RAID1 以释放 HDD 上的空间用于新的 RAID1 分区

缩小 RAID1 以释放 HDD 上的空间用于新的 RAID1 分区

不久前我设置了一个网络服务器,但犯了一个错误。我确实有以下问题:

/dev/md0 swap  (made from sda1 and sdb1)
/dev/md1 /boot (made from sda2 and sdb2)
/dev/md2 /     (made from sda3 and sdb3)
/dev/md3 /home (made from sda5 and sdb5)

(sda4 和 sdb4 是扩展分区)

我在设置 RAID 时输入了错误(我使用了安装程序脚本),最终得到以下大小:

swap   10GB
/boot  500MB
/      50GB
/home  The Rest (About    1,8TB)

一切都很顺利……直到我将大约 80GB 的文件上传到 /var/www,传输中途崩溃。一切都变得一团糟。过了一会儿,我发现我只是填满了 / 分区,导致 MySQL 服务器崩溃,并立即意识到将 / 弄得太小是愚蠢的(或者至少我应该将 /var/www 放在不同的分区上)。好吧,服务器现在已经使用了相当长一段时间,我真的不想再次设置一切。我备份了所有内容,以防万一,但正如你们所知,设置服务器是一项工作,而使用备份将其设置为已知状态则是一项更大的工作。所以我想解决这个问题。

我现在想做的事情如下:

  • 将 /home 分区缩小到大约 1TB
  • 在现在的可用空间中添加一个新分区
  • 移至 /var/www
  • 在该位置安装新分区

因此,我的计划如下:

  1. 卸载/home
  2. 在 /dev/md3 上执行 e2fsck
  3. 将 /dev/md3 的大小调整为大约 990GB,以留出 10GB 作为安全裕度
  4. mdadm 将 /dev/md3 的大小调整为 1TB
  5. resize2fs 不指定大小,将其增加到新 md 上可用的最大值

(到目前为止一切顺利,到目前为止一切都顺利)

  1. 在现在的可用空间中添加新分区 sda/b6
  2. 让他们进行突袭
  3. 将其挂载到 /mnt
  4. 复制 /var/www
  5. diff /var/www 和 /mnt 只是为了确保
  6. rm -rf * 在 /var/www
  7. 挂载 /dev/md4 到 /var/www,并在 fstab 中添加相应的条目以使其永久生效。

我现在卡在了第 6 点:raid 缩小了,/dev/md3 的大小约为 1TB,一切都很好,但分区 /dev/sda5 和 /dev/sdb5 仍然是旧的大小。我错过了什么?分区不应该随 md 一起缩小吗?如何在不破坏 raid 的情况下缩小它们?

答案1

缩小 RAID 并不会缩小分区 - 您必须手动执行此操作。

这并非 100% 简单,因为您的 MD raid 可能在开始或结束处包含 RAID 超级块。

如果 RAID 超级块处于开始状态(版本 1 及更高版本),那么这应该是轻而易举的事:fdisk或者选择您选择的工具并删除(是的:我的意思是删除)sda5 注意到它的起始块后,然后使用相同的起始块和足够的空间重新创建它。然后您可以sda6在剩余的空间中创建。我建议您重新启动以确保一切按计划进行,然后再使用 重复该过程sdb

如果 RAID 超级块位于末尾(版本 0.9),事情就会变得非常混乱 - 我建议您使用mdadm --detail,然后mdadm --stop最后mdadm --create ... --metadata=1.0将其移动到设备的开头,然后按上述操作。

编辑

我没有指出(因为我错误地认为它很清楚),你需要mdadm --stop ...首先:在退出时,fdisk指示内核重新读取分区表,这将 raid 的一半标记为不是最新的。

答案2

不幸的是,这比看起来要难得多。MD 块设备使用底层磁盘上的分区(这些磁盘需要有正确的大小)和连续的空间块。

注意:此类磁盘操作有风险。请先备份。

由于您的主目录位于 www 目录之后,因此缩小它将释放磁盘末尾的空间 - 但您需要磁盘开头的空间。您可能能够使用 gparted 将 /sda3、sda5、sdb3 和 sdb5 移动到磁盘末尾,但我使用该工具的运气不佳。

我会这样做(如果出于以下原因不从头开始的话)是将 /home 临时移动到 /www 上(或者如果已经太大则移动到外部存储器上),使用 fdisk,删除 sda3,5 和 sdb3,5,然后删除 sda2 和 sdb2 并使用相同的起始块重新创建,但稍后结束块确保设置分区类型(对于 RAID 设置为 fd),然后使用剩余空间重新创建 sda3,5 和 sdb3,5(或者仅 sdb3 - 如果您确定不需要超过 4 个分区)。

此后,重新启动并扩展 RAID,然后重新创建 md3、/home 并将数据复制回来。您还需要修改 fstab。

话虽如此,我会认真考虑重新开始使用 2 个 RAID 分区 - 一个小分区用于启动,一个大分区用于其他所有分区。然后,我会在大 RAID 分区上使用 LVM 将其划分为 /www、/home 等块 - 因为使用 LVM 提供了很大的灵活性,包括能够调整分区大小而不管底层几何形状如何,添加磁盘和拍摄快照。

相关内容