如何创建永不交换到磁盘的固定大小的Linux ramdisk?


9

我想创建一个永远不会交换到磁盘的固定大小的Linux ramdisk。请注意,我的问题不是我为什么要这样做(例如,出于教育目的或研究目的):问题是如何去做。

据我了解ramfs,不能限制大小,因此它不符合我对具有固定大小的ramdisk的要求。

似乎tmpfs 可以交换到磁盘上。因此,这不符合我从不交换到磁盘的要求。

如何创建永不交换到磁盘的固定大小的Linux ramdisk?

例如,是否可以tmpfs在内部创建ramfs(这样的解决方案是否符合我的要求),如果可以,怎么做?

请注意,性能不是问题,并且ramdisk变满并触发“ disk full”错误也不是问题。




要使用实际的ramdisk(而不是tmpfs或ramfs),您将需要内核中内置的支持,某些发行版内核可能不再支持它了-否则它是一个模块。查看中是否有任何ram设备dev。如果不是,请尝试modprobe rd
goldilocks 2014年

1
我不认为这个问题是重复的,因为没有一个答案解决了大小限制和交换问题。
Marco Marco

3
当人们问您为什么要做某事时,这是因为您的要求听起来对他们有些疯狂(或很多)。“嗯,他正在要求一种复杂的方法来完成X,他知道do-X命令吗?” 有时也是因为有多种方式,正确的方式取决于您为什么这样做。例如,如果您询问如何删除一堆文件,则执行该方法的原因取决于-如果需要释放磁盘空间,rm很好,但是如果需要清空磁盘以供处理,则不需要太多。因此,总而言之,我将继续问... 为什么?
derobert

Answers:


5

这只是一个想法,并且有多个缺点,但是无论如何它可能足够有用。

如何在ramfs顶部创建映像文件和其中的文件系统,然后将映像挂载为循环设备呢?这样,您可以通过简单地限制映像文件大小来限制ramdisk的大小。例如:

$ mkdir -p /ram/{ram,loop}
$ mount -t ramfs none /ram/ram
$ dd if=/dev/zero of=/ram/ram/image bs=2M count=1
1+0 records in
1+0 records out
2097152 bytes (2.1 MB) copied, 0.00372456 s, 563 MB/s
$ mke2fs /ram/ram/image
mke2fs 1.42 (29-Nov-2011)
/ram/ram/image is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
256 inodes, 2048 blocks
102 blocks (4.98%) reserved for the super user
First data block=1
Maximum filesystem blocks=2097152
1 block group
8192 blocks per group, 8192 fragments per group
256 inodes per group

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done
$ mount -o loop /ram/ram/image /ram/loop
$ dd if=/dev/zero of=/ram/loop/test bs=1M count=5
dd: writing `/ram/loop/test': No space left on device
2+0 records in
1+0 records out
2027520 bytes (2.0 MB) copied, 0.00853692 s, 238 MB/s
$ ls -l /ram/loop
total 2001
drwx------ 2 root root   12288 Jan 27 17:12 lost+found
-rw-r--r-- 1 root root 2027520 Jan 27 17:13 test

在上面的示例(有点长)中,映像文件被创建为2兆字节,并且当尝试在其上写入2兆字节以上时,由于文件系统已满,写入仅会失败。

所有这一切的一个明显缩水当然是增加了很多复杂性,但是至少就学术目的而言,这已经足够了。


环回安装的文件可以交换...
vonbrand 2014年

1

由Corbet,Rubini和Kroah-Hartman 撰写的“ Linux Device Drivers”(已过时!)书中有一个示例驱动程序,该驱动程序仅分配了一个固定的内存区域供您随意使用。不是文件系统,但是...


-1

无法完成。CPU硬件设计和Linux微内核设计都将对所有RAM进行分页。否则,没有正当的理由来处理记忆。所有软件算法都可以调整为使用文件缓存方案和分页内存。虚拟总是更好,更高效。

有限大小的RAM磁盘与虚拟世界的基本原理背道而驰。您必须假设仅对主机文件系统提出了有用的文件请求,并且所有此类请求在虚拟世界(唯一重要的模型)中都具有同等的重要性和优先级。

数学上已经证明,甚至实时过程也符合此规则。如果您遇到速度问题,则永远无法通过使用RAM作为存储来解决==整个主机系统需要从CPU到I / O总线再到永久存储设备,才能更快地运行。除了人为的退化计算问题外,所有其他问题都具有足够的分支和文件I / O要求,以使RAM缓存的平均速度增加是您所能做到的最好。


无法完成。CPU硬件设计和Linux微内核设计都将对所有RAM进行分页。 错误:“ mlock(),,mlock2()并将mlockall()部分或全部调用进程的虚拟地址空间锁定在RAM中,从而阻止将该内存分页到交换区。”
安德鲁·亨利
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.