在RAM中挂载/ usr(启动时从HDD加载,在关闭时保存到)
我有当前的情况:
-
16GB或RAM。 在大多数情况下,大约10~12GB未使用
-
几乎从不安装/删除软件,这是一个成熟的系统
-
每周只重启一次,因此(重新)启动时间无关紧要
-
/usr
大约8GB -
硬盘很慢,没有预算可以在不久的将来改变它
-
在
fstab
中将tmpfs
挂载/tmp
作为性能的奇迹
我只是有这个疯狂的想法:
是否有可能以某种方式使用我的RAM“存储” /usr
?
在那个,启动时,它从HDD读取当前/usr
内容并将其复制到tmpfs
并将其挂载为/usr
?
如果可能,还要在关机时将(可能更新的)内容刷回硬盘? 或者也许允许我在最终需要安装/删除新软件或更新时轻松“暂时切换回HDD”?
任何方法都是受欢迎的,即用型命令将受到高度重视。
谢谢!
这是可能的,但毫无意义。 内核在RAM中保存来自磁盘的数据缓存 。 您最近使用的数据保存在RAM中。 您自然会最终得到经常在RAM中使用的/usr
部分,而您不使用的部分将不会占用任何RAM。
如果您希望在启动应用程序时有更好的反应时间,则可以为缓存设定种子。 第一次使用时,文件会加载到内存中,并保留在内存中,直到内存重新用于其他内容。 您可以强制加载文件:
cat /path/to/file >/dev/null
例如,要将所有可执行文件和库预加载到RAM中:
cat /bin/* /lib/* /usr/bin/* /usr/lib/* >/dev/null
这可能需要一段时间才能完成,因此您应该在后台执行此操作。 您可以在/etc/rc.local
输入以下命令:
ionice -c 3 cat /bin/* /lib/* /usr/bin/* /usr/lib/* >/dev/null &
要同时加载/usr/lib*
子目录中的所有库,运行find
会很有用:
ionice -c 3 find /bin /usr/bin /usr/lib* -type f -exec ionice -c 3 cat '{}' ';' > /dev/null &
ionice -c 3 cat /bin/* /lib/* /usr/bin/* /usr/lib/* >/dev/null &
不会运行,因为libs中有很多目录。 试试找:
ionice -c 3 find /bin /usr/bin /usr/lib* -type f -exec cat '{}' ';' > /dev/null &
它产生的一切都是/ dev / null,所以什么都不会让你烦恼。
我认为两个都是必需的,因为find在自己的进程中执行命令。 如果我错了,请纠正我。 (看起来我错了。)
rc.local中的这一行应该对已经选择的答案起作用。
[edit]删除了评论中建议的第二个“ionice”。