tmpfs
用 tmpfs 实现 ramdisk
手工挂载
手工操作, 实验一下. 先创建挂载点
sudo mkdir -p /mnt/ramdisk
手动挂载一个 8G 的内存盘:
sudo mount -t tmpfs -o size=8G tmpfs /mnt/ramdisk
测试写入速度和读取:
sudo dd if=/dev/zero of=/mnt/ramdisk/test5g.img bs=1G count=5 oflag=dsync
sudo dd if=/mnt/ramdisk/test5g.img of=/dev/null bs=8M
不同机器的cpu和内存性能不一样, 测试出来的 ramdisk 读写性能也不一样, 以下是在家用平台的测试:
| 机器配置 | 写入性能 | 读取性能 |
|---|---|---|
| x99 + e5 2650v4 2.2GHz + ddr4 2133 | 1.4 GB/s | 5.5 GB/s |
| e3 1265l v3 + ddr3 1600 | 2.7 GB/s | 8.8 GB/s |
| intel 13900hk 5.4g + ddr4 4000 | 3.6 GB/s | 14.7 GB/s |
| intel 13700k 5.4G + ddr4 4000 | 4.3 GB/s | 17.0 GB/s |
测试完成手工卸载并删除目录:
sudo umount /mnt/ramdisk
sudo rm -rf /mnt/ramdisk
自动挂载
创建 systemd 服务 ramdisk:
sudo vi /etc/systemd/system/ramdisk.service
内容为:
[Unit]
Description=Mount tmpfs and copy data to RAM disk
DefaultDependencies=no
After=local-fs.target
Before=umount.target
[Service]
Type=oneshot
# 确保挂载点目录存在
ExecStartPre=/bin/mkdir -p /mnt/ramdisk
# 挂载 tmpfs
ExecStart=/bin/mount -t tmpfs -o size=8G tmpfs /mnt/ramdisk
# 复制数据到内存盘
ExecStart=/bin/bash -c 'if [ -d /opt/data-for-ramdisk ] && [ "$(ls -A /opt/data-for-ramdisk)" ]; then cp -a /opt/data-for-ramdisk/* /mnt/ramdisk/; else echo "Source dir missing or empty, skip copy"; fi'
# 挂载为只读
ExecStartPost=/bin/mount -o remount,ro /mnt/ramdisk
# 在关机时自动卸载
ExecStop=/bin/umount /mnt/ramdisk
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
启动, 并设置开机自动启动:
sudo systemctl daemon-reload
sudo systemctl enable ramdisk.service
sudo systemctl start ramdisk.service