ディスクにスワップしない固定サイズのLinuxRAMディスクを作成したいと思います。私の質問は、これを実行したい「理由」ではないことに注意してください(たとえば、教育目的または研究目的であるとしましょう)。質問はhow実行することです。
私が理解しているように、ramfs
はサイズを制限できないため、固定サイズのRAMディスクを使用するという私の要件には適合しません。
また、tmpfs
mayがディスクにスワップされているようです。したがって、ディスクにスワップしないという私の要件には適合しません。
ディスクにスワップしない固定サイズのLinuxRAMディスクを作成するにはどうすればよいですか?
たとえば、tmpfs
内にramfs
を作成することは可能ですか(そのようなソリューションは私の両方の要件に適合しますか)。
パフォーマンスは問題ではなく、RAMディスクがいっぱいになって「ディスクがいっぱい」エラーをトリガーすることも問題ではないことに注意してください。
これは単なる考えであり、複数の欠点がありますが、とにかく十分に使用できる可能性があります。
Ramfsの上にイメージファイルとその中にファイルシステムを作成し、そのイメージをループデバイスとしてマウントするのはどうですか?そうすれば、画像ファイルのサイズを制限するだけで、RAMディスクのサイズを制限できます。例えば:
$ 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メガバイトを超えて書き込もうとすると、ファイルシステムがいっぱいであるため、書き込みが失敗します。
もちろん、これらすべての明らかなダウンサイズの1つは、複雑さが大幅に増すことですが、少なくとも学術的な目的では、これで十分です。
(日付付き!)本 "Linux Device Drivers" Corbet、Rubini、Kroah-Hartmanには、浮気のために固定メモリ領域を割り当てるだけのサンプルドライバがあります。ファイルシステムではありませんが...