Linux

如何創建一個永遠不會交換到磁碟的固定大小的 Linux ramdisk?

  • May 8, 2018

我想創建一個永遠不會交換到磁碟的固定大小的 Linux ramdisk。請注意,我的問題不是“為什麼”我想這樣做(例如,它是出於教育目的或研究目的):問題是如何去做。

據我了解ramfs,大小不能受到限制,因此它不符合我對固定大小 ramdisk 的要求。

似乎tmpfs 可以交換到磁碟。所以它不符合我從不交換到磁碟的要求。

如何創建一個永遠不會交換到磁碟的固定大小的 Linux ramdisk?

例如,是否有可能tmpfs在內部創建ramfs(這樣的解決方案是否符合我的要求),如果可以,如何?

請注意,性能不是問題,ramdisk 已滿並觸發“磁碟已滿”錯誤也不是問題。

這只是一個想法,並且有不止一個缺點,但無論如何它可能足夠有用。

如何在 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 兆字節時,寫入失敗,因為文件系統已滿。

所有這一切的一個明顯的縮小當然是增加了很多複雜性,但至少對於學術目的來說這應該足夠了。

引用自:https://unix.stackexchange.com/questions/111139