Wie erstelle ich eine Linux-Ramdisk mit fester Größe, die niemals auf die Festplatte wechselt?

9

Ich möchte eine Linux-Ramdisk mit fester Größe erstellen, die niemals auf die Festplatte wechselt. Beachten Sie, dass meine Frage nicht "warum" ist, was ich tun möchte (sagen wir zum Beispiel, dass es zu Bildungszwecken oder für Forschungszwecke ist): Die Frage ist, wie es geht.

Soweit ich ramfsweiß , kann die Größe nicht begrenzt werden, daher entspricht es nicht meiner Anforderung, eine Ramdisk mit fester Größe zu haben.

Es scheint auch , dass tmpfs kann auf der Festplatte ausgelagert werden. Es entspricht also nicht meiner Anforderung, niemals auf die Festplatte zu wechseln.

Wie können Sie eine Linux-Ramdisk mit fester Größe erstellen, die niemals auf die Festplatte wechselt?

Ist es zum Beispiel möglich, tmpfsinnerhalb eines zu erstellen ramfs(würde eine solche Lösung sowohl meinen Anforderungen entsprechen) als auch wie?

Beachten Sie, dass die Leistung kein Problem darstellt und die Ramdisk, die voll wird und "Festplatten voll" -Fehler auslöst, ebenfalls kein Problem darstellt.

user57725
quelle
Ich denke, diese Antwort ist Ihr Anliegen cyberciti.biz/faq/howto-create-linux-ram-disk-filesystem
Kiwy
Mögliches Duplikat von Erstellen einer RAM-Disk unter Linux
Kiwy
Um eine tatsächliche Ramdisk (und nicht tmpfs oder ramfs) zu verwenden, benötigen Sie Unterstützung, die in Ihren Kernel integriert ist. Einige Distribution-Kernel tun dies möglicherweise nicht mehr - oder es handelt sich um ein Modul. Überprüfen Sie, ob ramGeräte vorhanden sind dev. Wenn nicht, versuchen Sie es modprobe rd.
Goldlöckchen
1
Ich denke nicht, dass diese Frage ein Duplikat ist, da keine der Antworten die Größenbeschränkung und den Austausch betrifft.
Marco
3
Wenn Leute dich fragen, warum du etwas tun willst, dann deshalb, weil das, was du fragst , für sie ein wenig (oder viel) verrückt klingt. "Hmmm, er fragt nach einem wirklich komplizierten Weg, um X zu erreichen. Weiß er etwas über den Befehl do-X?" Manchmal liegt es auch daran, dass es mehrere Möglichkeiten gibt und die richtige davon abhängt, warum Sie es tun. Wenn Sie beispielsweise fragen, wie eine Reihe von Dateien gelöscht werden soll, hängt die Vorgehensweise davon ab, warum - rm ist ideal, wenn Sie Speicherplatz freigeben müssen, aber nicht so sehr, wenn Sie eine Festplatte zur Entsorgung leeren müssen. Zusammenfassend werde ich also fragen, warum?
Derobert

Antworten:

5

Dies ist nur ein Gedanke und hat mehr als einen Nachteil, aber es könnte trotzdem brauchbar genug sein.

Wie wäre es, wenn Sie eine Image-Datei und ein darin enthaltenes Dateisystem über Ramfs erstellen und das Image dann als Loop-Gerät bereitstellen? Auf diese Weise können Sie die Größe der Ramdisk begrenzen, indem Sie einfach die Größe der Bilddatei begrenzen. Zum Beispiel:

$ 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

Im obigen (etwas zu langen) Beispiel wird die Bilddatei mit 2 Megabyte erstellt. Wenn Sie versuchen, mehr als 2 Megabyte darauf zu schreiben, schlägt das Schreiben einfach fehl, da das Dateisystem voll ist.

Eine offensichtliche Verkleinerung für all dies ist natürlich, dass es viel mehr Komplexität gibt, aber zumindest für akademische Zwecke sollte dies ausreichen.

Sami Laine
quelle
Die Loopback-Datei kann ausgetauscht werden ...
ausgetauscht werden vonbrand
1

Das (datierte!) Buch "Linux Device Drivers" von Corbet, Rubini und Kroah-Hartman enthält einen Beispieltreiber, der lediglich einen festen Speicherbereich zum Herumalbern zuweist. Kein Dateisystem, aber ...

vonbrand
quelle
-1

Nicht machbar. Der gesamte Arbeitsspeicher wird sowohl vom CPU-Hardware-Design als auch vom Linux-Mikrokernel-Design ausgelagert. Es gibt KEINE legitimen Gründe, das Gedächtnis anders zu behandeln. ALLE Softwarealgorithmen können angepasst werden, um das Dateicaching-Schema und den ausgelagerten Speicher zu verwenden. Virtual ist IMMER besser und effizienter.

RAM-Disks mit begrenzter Größe widersprechen den Grundprinzipien der virtuellen Welt. Sie müssen davon ausgehen, dass nur nützliche Dateianforderungen an das Host-Dateisystem gesendet werden und dass alle diese Anforderungen in der virtuellen Welt (dem einzigen Modell, das zählt) die gleiche Bedeutung und Priorität haben.

Es wurde mathematisch bewiesen, dass sogar Echtzeitprozesse dieser Regel entsprechen. Wenn Sie ein Geschwindigkeitsproblem haben, das NIEMALS durch Verwendung von RAM als Speicher gelöst werden kann == Das gesamte Hostsystem muss schneller von der CPU über den E / A-Bus bis zum permanenten Speichergerät arbeiten. Alle außer künstlichen degenerierten Computerproblemen haben ausreichende Verzweigungs- und Datei-E / A-Anforderungen, sodass die durchschnittliche Geschwindigkeitssteigerung beim RAM-Caching das Beste ist, was Sie tun können.

Super Troll
quelle
Nicht machbar. Der gesamte Arbeitsspeicher wird sowohl vom CPU-Hardware-Design als auch vom Linux-Mikrokernel-Design ausgelagert. Falsch : „ und Schlossteil oder alle des anrufenden virtuellen Adressraum des Prozesses in dem Speicher, dass der Speicher zu verhindern , dass an den Swap - Bereich ausgelagert zu werden.“ mlock()mlock2()mlockall()
Andrew Henle