ディスクにスワップしない固定サイズのLinux RAMディスクを作成する方法は?


9

ディスクにスワップしない固定サイズのLinux ramdiskを作成します。私の質問は「なぜ」私がこれをやりたいと思っているのではないことに注意してください(たとえば、それは教育目的または研究のためであることを言いましょう):問題はそれを行う方法です。

ramfsはサイズを制限できないことを理解しているので、固定サイズのRAMディスクを使用するという私の要件には適合しません。

また、そのようでtmpfs あり、ディスクにスワップされます。したがって、ディスクにスワップしないという私の要件には適合しません。

ディスクにスワップしない固定サイズのLinux RAMディスクをどのように作成できますか?

それは可能であり、例えば、作成するために、tmpfs内部でramfs(そのような解決策は、両方の私の要求事項に適合します)ので、どのようにしたら?

パフォーマンスは問題ではなく、RAMディスクがいっぱいになり、「ディスクがいっぱい」のエラーをトリガーすることも問題ではないことに注意してください。


私はこれがあなたの懸念を解決
Kiwy


(tmpfsやramfsではなく)実際のramdiskを使用するには、カーネルに組み込まれているサポートが必要ですが、一部のディストリビューションカーネルではサポートされていない可能性があります。にramデバイスがあるかどうかを確認しますdev。そうでない場合は、お試しくださいmodprobe rd
goldilocks 2014年

1
サイズの制限とスワッピングについては回答がないため、この質問は重複しているとは思いません。
Marco

3
なぜあなたが何かをしたいのと人々が尋ねるとき、それはあなたが求めていることが彼らに少し(または多く)奇妙に聞こえるからです。「うーん、彼はXを達成するために本当に複雑な方法を求めています、彼はdo-Xコマンドについて知っていますか?」複数の方法がある場合もあり、正しい方法は、それを行う理由によって異なります。たとえば、一連のファイルを削除する方法を尋ねた場合、その方法は理由によって異なります。ディスク領域を解放する必要がある場合はrmが優れていますが、ディスクを空にする必要がある場合はそれほど多くありません。要約すると、私は先に進んで質問します... なぜですか?
derobert 2014年

回答:


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メガバイトを超えて書き込もうとすると、ファイルシステムがいっぱいであるため、書き込みが失敗します。

これらすべての明らかなダウンサイズの1つは、もちろん、はるかに複雑さが増していることですが、少なくとも学術目的ではこれで十分です。


ループバックマウントされたファイルはスワッピングの対象になります...
フォンブランド、2014年


-1

できません。すべてのRAMは、CPUハードウェア設計とLinuxマイクロカーネル設計の両方でページングの影響を受けます。そうでなければ記憶を扱う正当な理由はありません。すべてのソフトウェアアルゴリズムは、ファイルキャッシング方式とページメモリを使用するように適合させることができます。仮想は常により良く、より効率的です。

限られたサイズのRAMディスクは、仮想世界の基本原則に反します。ホストファイルシステムに対して有用なファイル要求のみが行われ、そのようなすべての要求が仮想世界(重要な唯一のモデル)で重要性と優先度が等しいと想定する必要があります。

リアルタイムプロセスでさえこのルールに適合することが数学的に証明されています。速度の問題が発生した場合は、RAMをストレージとして使用しても解決できません==ホストシステム全体が、CPUからI / Oバス、永続的なストレージデバイスまで高速に動作する必要があります。人工的な縮退コンピューティングの問題以外はすべて、十分なブランチとファイルI / O要件があり、RAMキャッシングの平均速度の向上が最高です。


できません。すべてのRAMは、CPUハードウェア設計とLinuxマイクロカーネル設計の両方でページングの影響を受けます。 間違った「: 、mlock()mlock2()およびmlockall()スワップ領域にページングされることから、そのメモリを防ぎ、RAMにロック一部または呼び出したプロセスの仮想アドレス空間のすべての。」
Andrew Henle
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.