我们目前有一台配备 3 个 SSD 驱动器的专用服务器。我们注意到我们实际上已将操作系统部署在单个驱动器上,其他 2 个驱动器目前未被使用。但是,此磁盘几乎已满:
/dev/md2 91G 83G 3.0G 97% /home
此处的合理解决方案是合并所有三个驱动器(3 x 120 GB)的容量并将它们变成一个卷。最好的方法是什么?
不幸的是,重新安装操作系统或类似操作目前不是一个选择。
服务器运行的是 Ubuntu 14.04.5 LTS。我找到了 LVM,但尚未确定这是否是最佳解决方案。
按照要求:
root@hv01:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 20G 2.5G 16G 14% /
devtmpfs 16G 4.0K 16G 1% /dev
none 4.0K 0 4.0K 0% /sys/fs/cgroup
none 3.2G 572K 3.2G 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 16G 24K 16G 1% /run/shm
none 100M 0 100M 0% /run/user
/dev/md2 91G 84G 2.6G 98% /home
root@hv01:~# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath] [faulty]
md1 : active raid1 sdc1[2] sda1[0] sdb1[1]
20478912 blocks [3/3] [UUU]
md2 : active raid1 sdc2[2] sda2[0] sdb2[1]
96211904 blocks [3/3] [UUU]
unused devices: <none>
答案1
/proc/mdstat
明确地讲,您为操作系统 (md1) 和 Home (md2) 创建了一个三向镜像集 (RAID1)。虽然这提供了足够的冗余,但会占用大量空间。
由于您仅在 上受到磁盘限制/home
,因此最简单的方法就是进行一些磁盘调整。
警告:请注意,如果 SSD 在错误的时间点损坏,则会导致您丢失所有文件 - 请备份并做好准备。
尽管如此,我将继续
- 从 md2 中删除 2 个镜像。这样您的系统仍然可用,不会有任何停机时间,但有 2 个可用分区。
mdadm --remove /dev/md2 /dev/sda2 && mdadm --remove /dev/md2 /dev/sdb2
- 擦除这两个中的所有 fs 和 RAID 超级块。
wipefs --all /dev/sda2 && wipefs --all /dev/sdb2
- 使用这两个分区创建一个 RAID5,将其用作
missing
第三个分区。这实际上会创建一个临时 RAID0,其大小是原始分区 (md3) 的两倍。mdadm --create -n 3 --level=5 --bitmap=internal /dev/md3 /dev/sda2 /dev/sdb2 missing
- 将此 RAID5 作为一个镜像添加到原始 md2 并等待重新同步完成
mdadm --add /dev/md2 /dev/md3
等待同步否则将丢失数据! - 从 md2 中删除最后一个原始镜像,只留下一条腿,即新创建的 md3
mdadm --remove /dev/md2 /dev/sdc2
- 扩大 md2 以使用全部 md3
mdadm --grow --size=max /dev/md2
- 调整文件系统大小以使用所有 md2这取决于所使用的 FS
- 从最后一个分区擦除 FS 和 RAID 超级块
wipefs --all /dev/sdc2
- 将其添加到 RAID5 并等待重新同步完成。
mdadm --add /dev/md3 /dev/sdc2
现在您有一个只有一个镜像的镜像集,它本身就是一个 RAID5,大小是初始大小的两倍。这似乎是冗余和大小之间的一个相当好的平衡。
好的部分:您不会遇到任何停机时间 - 使用文件系统时可以执行上述所有步骤。