我处于一种奇怪的情况,我有足够的 RAM(额外 200GB)和几乎足够的 SSD 来执行读/写密集型过程。有没有什么办法可以说“亲爱的系统,请创建一个临时虚拟驱动器,它是 RAM 和 SSD 的组合,这样对于由 SSD 支持的某些读/写操作,它们会变得有点快,而其他操作则可以”在 RAM 的支持下运行速度真的很快”?
答案1
嗯,是的,但实际上不是。
虽然可以在 RAM 中创建虚拟磁盘,但它的处理方式与其他磁盘不同。特别是,它在 中没有设备节点/dev
,因此它对“LVM”或“mdadm”等功能不可见(否则可用于将两个不同的磁盘连接到一个大虚拟磁盘中)。
有一种方法可以满足您的要求,那就是将 SSD 变成交换空间,然后创建一个大 RAM 磁盘。但是,由于它是 RAM 磁盘,因此您无法直接从 SSD 读取数据。当您的程序尝试访问每个块时,每个块都会自动复制到 RAM 中,并且根据您正在运行的进程的确切性质,我认为颠簸很可能会破坏您希望实现的性能增益。
如果您有义务并决心完成此操作,请执行以下步骤。 (注 1:我假设您的 SSD 是/dev/sdb
。将其替换为 SSD 驱动器的实际名称。注 2:这将擦除您的 SSD。在开始之前,请确保您拥有所有重要数据的副本。注 3:您在使用可能会擦除您的系统的工具时,我们将使用 root 权限,所以要非常小心,如果有任何问题,即使是最轻微的情况,也要立即停止。)
- 格式化您的 SSD 以进行交换:
sudo mkswap /dev/sdb
. - (可选,但推荐)用于
swapon -s
获取当前活动的所有交换区域的列表,并用于sudo swapoff [device]
将其关闭。 - 激活 SSD 交换:
sudo swapon /dev/sdb
。 - 创建一个目录来挂载 RAM 磁盘:
mkdir /tmp/ramdisk
- 创建并挂载实际的 RAM 磁盘:(
sudo mount -t tmpfs -o size=[size] myramdisk /tmp/ramdisk
您必须tmpfs
为此使用,因为ramfs
不使用交换。)
就是这样。现在,您写入的任何内容/tmp/ramdisk
都将存储在 RAM 中,而对于 RAM 来说太大的任何内容都将被交换到 SSD 中。完成后,您所做的一切(格式化 SSD 除外)都将通过简单的重新启动而撤销。