用作文件容器的多个循环设备性能不佳

用作文件容器的多个循环设备性能不佳

目前,我正在管理多个远程服务器的备份服务。备份是通过 rsync 编写的,每个备份都有自己的文件容器,并作为循环设备安装。主备份分区是 8T xfs 格式,循环设备在 100G 到 600G 之间,格式为 ext2 或 ext4。因此,这是简化的 Matryoshka 式解决方案:

df -Th
> /dev/vdb1    xfs   8,0T   /mnt/backups
> /dev/loop1   ext2  100G   /mnt/srv1
> /dev/loop2   ext2  200G   /mnt/srv2

mount
> /dev/vdb1 on /mnt/backups
> /mnt/backups/srv1.ext2 on /mnt/srv1
> /mnt/backups/srv2.ext2 on /mnt/srv2

ls -R /mnt/backups
> /mnt/backups
> └─/mnt/backups/srv1.ext2
> └─/mnt/backups/srv2.ext2

主要问题是读/写速度太慢。此外,有时一切都会挂起,占用我所有的 CPU 和内存。我可以看到循环设备是导致这种情况的原因。

最近,我开始将容器从 ext4 切换到 ext2,因为我认为我并不真正需要日志记录,希望它能提高速度。我还从稀疏​​文件切换到非稀疏文件,希望它能降低 CPU/RAM 使用率。但问题仍然存在,有时会导致系统无响应。

因此,我正在寻找具有更快读写速度的更好解决方案。此外,快速查看每个配置文件使用的磁盘空间也很重要(我df现在只能使用,du速度太慢了)。从安全角度来看,循环设备提供的分离很好,但也可以使用 rsync over ssh 来解决,因此不是必需的。

我一直在考虑缩小主 xfs 分区,并将文件容器变为真正的 ext4 分区,但当第一个分区需要调整大小时,这会带来大量停机时间。我一直在考虑使用virt-make-fssqashfs,因为我可以简单地获取文件大小来获取磁盘使用情况,但我没有这方面的经验。

有人知道是否有更好的解决方案吗?

答案1

回答我自己的问题,也许对其他人有帮助。

我发现 xfs 具有xfs_quota实用程序,您可以在其中设置监视任何给定文件夹的磁盘使用情况的项目。

首先,必须启用标志来(重新)安装 xfs 分区prjquotamount -o prjquota /dev/vdb1 /mnt/backups。(可选)可以添加此标志/etc/fstab以确保其在重启时正确安装。

然后,我们设置项目:

echo "srv1:50" > /etc/projid
echo "50:/mnt/backups/srv1" > /etc/projects

mkdir /mnt/backups/srv1
xfs_quota -x -c 'project -s srv1' /mnt/backups
xfs_quota -x -c 'limit -p bsoft=100G bhard=110G srv1' /mnt/backups

这将设置 ID 为“50”的项目“srv1”,创建/mnt/backup/srv项目所在的位置并为其指定软限制“100G”和硬限制“110G”。从现在开始,xfs 将监视添加到此文件夹的所有文件并测量使用情况。

要查看使用情况,请使用:

xfs_quota -x -c report
xfs_quota -x -c 'report -h'

读/写速度与未设置 xfs_quota 的普通文件夹的写入速度相同。

相关内容