我的 Ubuntu 服务器有 24GB 的 RAM。我想在启动时自动创建一个 ramdisk 并从/home/user1/ramdisk
文件夹中加载文件。当系统关闭时,我需要将文件从ramdisk
该目录加载回来。
我怎样才能实现这个目标?
答案1
虽然 upstart 可以用于做这样的事情,但只有在用户意识到数据是易失性的前提下才建议这样做,并且可能会迷路。
考虑一下断电的情况。机器不可能对此做出反应并快速将数据从 ramdisk 移动到其他存储设备。
这意味着:数据不再安全。
因为您想要挂载它,所以您需要超级用户权限,这意味着您还可以直接存储/dev/shm
系统启动时创建的易失性数据。
答案2
正如 status_access_denied 在他的回答中指出的那样,这对于数据来说并不安全,因为如果发生断电或其他不受控制的关机,数据就会丢失。
此外,您通常最好让操作系统决定在 RAM 中保存什么。如果您将一大块 RAM 用于此类特定文件,那么它就不能将其用于其他用途,例如缓存其他文件、VM 内存、数据库以及您的服务器正在执行的其他任何操作。
如果您想确保数据在启动时位于缓存中(如果内存确实不需要用于其他任何操作,数据将保留在那里),您可以运行如下命令:
find /path/to/directory -type f | xargs cat > /dev/null
在启动时。上述命令将导致读取所有文件,并因此通过缓存子系统。Debian 和 Ubuntu(可能还有其他发行版)/etc/rc.local
在启动过程结束时运行脚本,因此这可能是放置命令最简单的位置。如果加载的数据量很大和/或分布在许多大文件中,您可能需要限制读取的速率,以便这不会干扰正在进行的任何其他操作(即,如果您在启动后直接登录,或者其他服务仍在启动),例如:
find /path/to/directory -type f | xargs pv --rate-limit 1M --quiet > /dev/null
您会pv
在标准存储库中找到。该--rate-limit
选项按照其说明执行(在本例中将速率限制为 1Mbyte/sec)并--quiet
告诉它不要理会进度条和其他显示。
如果您希望服务器偶尔重新读取文件,以便在文件被其他程序推出时将其重新放入缓存中,则可以将命令放入 cron 作业中。