![如何将大文件放在两个磁盘上而不拆分?](https://linux22.com/image/30031/%E5%A6%82%E4%BD%95%E5%B0%86%E5%A4%A7%E6%96%87%E4%BB%B6%E6%94%BE%E5%9C%A8%E4%B8%A4%E4%B8%AA%E7%A3%81%E7%9B%98%E4%B8%8A%E8%80%8C%E4%B8%8D%E6%8B%86%E5%88%86%EF%BC%9F.png)
我有一个 100GB 大小的文件和一个带有两个 72GB 磁盘的服务器。
服务器运行 Ubuntu Linux,磁盘上有 ext4,没有 LVM。
如何将 100gb 文件放在 72+72gb 磁盘的服务器上?
我无法更改文件系统,也无法拆分文件;该文件必须可读。
答案1
您可以创建两个约 50GB 的文件,每个磁盘一个。然后使用losetup
将它们映射到循环设备。您现在可以将这两个循环设备组合起来,例如与 mdraid raid0。现在您可以在该阵列上创建一个文件系统,最后将文件放在那里。
这有点复杂,但是,正确的方法是在两个磁盘上使用 LVM 和/或 mdraid(如果您想将它们视为一个磁盘)。
例如,使用更小的图像(显然你需要在这里使用合理的路径,而不是/tmp
像我那样。并且可能是比“test”更好的数组名称):
root@Zia:/tmp# dd if=/dev/zero of=/tmp/img1 bs=1024k count=1024
⋮
root@Zia:/tmp# dd if=/dev/zero of=/tmp/img2 bs=1024k count=1024
⋮
root@Zia:/tmp# losetup --show -f /tmp/img1
/dev/loop0
root@Zia:/tmp# losetup -f /tmp/img2
/dev/loop1
root@Zia:/tmp# mdadm -C /dev/md/test -l 0 -n 2 /dev/loop0 /dev/loop1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/test started.
root@Zia:/tmp# mkfs.ext4 -Tlargefile4 /dev/md/test
⋮
root@Zia:/tmp# mount /dev/md/test /mnt/tmp
root@Zia:/tmp# df -h /mnt/tmp/
Filesystem Size Used Avail Use% Mounted on
/dev/md126 2.0G 3.0M 1.9G 1% /mnt/tmp
并且,要在启动时将其重新组合在一起(当然,您需要编写脚本):
root@Zia:/tmp# losetup --show -f /tmp/img1
/dev/loop0
root@Zia:/tmp# losetup --show -f /tmp/img2
/dev/loop1
root@Zia:/tmp# mdadm --assemble /dev/loop0 /dev/loop1
mdadm: device /dev/loop0 exists but is not an md array.
root@Zia:/tmp# mdadm --assemble /dev/md/test /dev/loop0 /dev/loop1
mdadm: /dev/md/test has been started with 2 drives.
root@Zia:/tmp# mount /dev/md/test /mnt/tmp
在重新启动/关闭之前将其拆除可能会起作用,但是您可以umount
在mdadm --stop /dev/md/test
两个losetup -d
循环设备上进行操作。