除了tmpfs
和之外ramfs
,另一个选择是/dev/ram0
块设备。在最新的Ubuntu版本上,默认情况下不存在此设备,但可以通过创建modprobe brd
。
这种方法更具可预测性,因为它创建了一个真实的ext4
文件系统,并且从未超出您指定的限制。但是它需要采取更多步骤来设置,并且使用RAM的效率较低。
使用brd内核模块(/ dev / ram0)
要创建和初始化4GB RAM磁盘:
mkdir /ramdisk
modprobe brd rd_nr=1 rd_size=$((4 * 1048576))
mkfs.ext4 /dev/ram0
mount /dev/ram0 /ramdisk
该rd_nr
参数指定要创建的RAM磁盘数(默认情况下,它创建16个磁盘,即/dev/ram0
通过/dev/ram15
)。该rd_size
参数的大小以千字节为单位。该$(( ... ))
语法使您可以在Shell中进行算术运算。
要取消分配RAM磁盘,请卸载它并删除brd
内核模块:
umount /ramdisk
modprobe -r brd
在内部创建块设备 ramfs
或者,您可以在以下内部创建块设备ramfs
:
mkdir /ramdisk-storage /ramdisk
mount -t ramfs ramfs /ramdisk-storage
truncate -s 4G /ramdisk-storage/ramdisk.img
mkfs.ext4 /ramdisk-storage/ramdisk.img
mount /ramdisk-storage/ramdisk.img /ramdisk
该truncate
命令将创建给定大小的空文件,以便按需初始化(即消耗内存)。
要取消分配RAM磁盘,请将其卸下并删除磁盘映像:
umount /ramdisk
rm /ramdisk-storage/ramdisk.img
与tmpfs
和比较ramfs
虽然tmpfs
与ramfs
比使用一个块设备更有效的,下面是它们的一些缺点的。
tmpfs
可能会交换到磁盘。这样效率更高,但是有时您需要纯RAM磁盘:
- 您正在使用的文件是敏感文件(例如,来自加密分区的文件)。
- 您正在执行性能测试,并且您不希望磁盘I / O成为一个因素(SSD写入时间可能相差很大)。
- 您正在解压缩一个大文件,并且不想用完SSD。
ramfs
易于设置,删除文件后可回收空间,并更有效地使用RAM(系统不会缓冲文件,因为它知道文件位于RAM中)。但是它有自己的缺点和惊奇:
该df
实用程序不报告空间使用情况:
root@cello-linux:~# df -h /ramdisk
Filesystem Size Used Avail Use% Mounted on
ramfs 0 0 0 - /ramdisk
没有大小限制参数。如果将过多的内存放入ramdisk,系统将挂起。
当您最不希望出现稀疏文件时,稀疏文件可能会变得稀疏。今天早上,我将VM映像(150G,但磁盘上使用了49G)复制到ramfs
(我有128G的RAM)。那行得通。但是,当我复制从该ramfs
到了目的地,我的系统变得反应迟钝。该cp
实用程序显然在读取时填补了漏洞,但在写入时并未填补漏洞。
无论tmpfs
和ramfs
行为可能不同于真正的ext4
文件系统。ext4
避免在RAM中创建块设备并对其进行初始化。
要进行更深入的比较:https : //www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt
mount -o size=16G -t tmpfs none /mnt/tmpfs