use*_*725 9 linux filesystems ram disk
我想创建一个从不交换到磁盘的固定大小的 Linux ramdisk。请注意,我的问题不是“为什么”我要这样做(例如,它是出于教育目的或研究目的):问题是如何去做。
据我所知ramfs,不能限制大小,所以它不符合我对固定大小 ramdisk 的要求。
似乎tmpfs 也可以交换到磁盘。所以它不符合我从不交换到磁盘的要求。
如何创建一个从不交换到磁盘的固定大小的 Linux ramdisk?
例如,是否可以tmpfs在内部创建ramfs(这样的解决方案是否符合我的要求),如果可以,如何创建?
请注意,性能不是问题,ramdisk 已满并触发“磁盘已满”错误也不是问题。
小智 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
Run Code Online (Sandbox Code Playgroud)
在上面的(有点太长)示例中,图像文件被创建为 2 兆字节,当尝试在其上写入超过 2 兆字节时,写入失败,因为文件系统已满。
一个明显的缩小当然是增加了很多复杂性,但至少对于学术目的来说,这应该足够了。