文件系统宁愿先写低LBA?

也许标题混乱,但让我解释一下…

我们的mysql服务器(在xen虚拟机上)有时会在磁盘上生成巨大的tmp文件。 所以我们需要一个大的tmpdir来存储它们。 我们决定将tmpdir安装到SSD以获得更好的性能。 但是,正如你所知,SSD在某种程度上是昂贵的,而且mysql并不总是生成那么大的tmp文件。 所以如果我们把每一个虚拟机的mysql都设置成一个大的SSD,那就太浪费了。 因此,我们只想给每个tmpdir(例如10G)提供小型SSD(实际上是在xen SSD上备份的虚拟磁盘)。

但正如前面所说,有时候mysql会生成超过10G的巨大tmp文件。 如果发生这种情况,那么mysql查询将失败。 所以我们要这样的剂量:

将一个ssd和hdd合并成一个驱动器(这样它可以挂载到mysql的tmpdir)。 当ssd用完所有空间,然后使用硬盘。

然后我认为dmseupt或LVM也许可以做到这一点。 所以我做了一个简单的testing:

1 SSD 0.5G | 1 HDD 10G | 一个逻辑卷在两个驱动器之上 | 上面逻辑卷上的ext4文件系统

并使用dd工具生成一些大小为0.3G的文件。然后我可以看到SSD使用增长了0.3G,硬盘没有改变。 一切都很好,直到现在! 但是,当我删除该文件,然后创build,然后删除,…这样做。

原来硬盘空间的使用量不断增加!

所以我客人ext4剂量不倾向于覆盖删除的文件? 我们可以禁用此function还是有另一个文件系统首选写低LBA?

谢谢阅读!

您想要将旋转磁盘的低成本与SSD的高性能相结合? 是的,可以这样做:混合存储池是一个好主意。 但是,我不认为你的计划重新混合存储是一个好主意。

混合存储在名为ZFS的文件系统中实现得非常漂亮。 今天可以免费使用ZFS:

  1. 尝试将独立的虚拟机作为运行您select的Nexenta,OpenIndiana或FreeBSD的ZFS存储服务器。
  2. 为ZIL(写入caching)和L2ARC(读取caching)创build具有适当指定的SSD的ZFS存储池。
  3. 提供您需要的混合存储卷,无论是iSCSI目标还是在您的环境中最有意义。
  4. 让ZFS自动pipe理哪些块存储在RAM或SSD以及旋转磁盘上。