it-swarm.com.de

Wie kann ich die Anzahl und Größe der Linux-RAM-Disks (/ dev / ram0 - / dev / ram15) ändern?

Unter Linux habe ich beim Booten automatisch 16 16-MB-RAM-Disks. Ich möchte jedoch eine wirklich große RAM-Disk erstellen, um einige Software zu testen.

Ich habe festgestellt, dass ich die Größe der bereits auf dem System vorhandenen RAM-Disks mit dem Kernel-Boot-Parameter ramdisk_size anpassen kann. Dies macht jedoch alle 16 RAM-Disks (/ dev/ram0 -/dev/ram15) zu der angegebenen Größe. Wenn ich also eine RAM-Disk mit 1 GB erstellen möchte, bräuchte ich 16 GB Speicher.

Grundsätzlich möchte ich eine 10 GB RAM-Disk erstellen, die/dev/ram0 wäre. Wie würde ich das machen? Ich nehme an, es gibt einen Kernel-Boot-Parameter, aber ich habe ihn einfach nicht gefunden.

27
Kevin S.

Kernel-Kompilierungszeit

Es gibt zwei Optionen für die Kernelkonfiguration, die Sie in Ihrer .config-Datei festlegen können:

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

Dies hat meinen Kernel so konfiguriert, dass er beim Booten eine Ramdisk mit 10G erstellt.

Anmerkungen:

  • CONFIG_BLK_DEV_RAM_SIZE ist in KB.
  • Geben Sie nicht mehr Speicher an, als Sie tatsächlich in Ihrem Computer RAM haben.
  • Suchen Sie in menuconfig unter Gerätetreiber-> Geräte blockieren.

Startzeit

Sie können die Größe der von Ihnen erstellten RAM-Festplatten über den Kernel-Boot-Parameter ramdisk_size angeben. Zum Beispiel:

kernel /vmlinuz-2.6.32.24 ro root=LABEL=/ rhgb quiet ramdisk_size=10485760

Jetzt kann ich meine Maschine booten und ein Dateisystem darauf erstellen, es mounten und genau wie ein Blockgerät verwenden.

# mkfs.xfs /dev/ram0
# mount /dev/ram0 /mnt/ramdisk

Quellen:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html [tot]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt
18
Kevin S.

Verwenden Sie stattdessen tmpfs .

mount -t tmpfs -o size=10g none /mnt/point

So erstellen Sie nach dem Booten eine große RAM-Festplatte, ohne mit den Kernel-Parametern herumzuspielen. Verwende tmpfs, erstelle eine Datei, mounte sie über eine Schleife und mounte sie über ein Dateisystem:

mount -t tmpfs -o size=200M tmpfs temp/
cd temp/
dd if=/dev/zero of=disk.img bs=1M count=199
losetup /dev/loop0 disk.img
mkfs.ext4 /dev/loop0
cd ..
mount /dev/loop0 temp2/

Wahrscheinlich ein bisschen Leistungseinbußen durch mehrere verschiedene Ebenen ... aber zumindest funktioniert es.

7
user39725

Eine andere Option ist die Verwendung der Loop-Geräte (im Gegensatz zu der zuvor erwähnten Loobpack-Funktion von mount):

dd if=dev/zero of=myfs.img bs=1M count=1024
losetup /dev/loop0 myfs.img
mkfs.xfs /dev/loop0

Jetzt ist/dev/loop ein legitimes Block-Gerät, auf das Ihre App wie auf ein physisches Gerät oder eine Ramdisk reagiert, mit der Ausnahme, dass es dateibasiert ist. Sie können es irgendwo einhängen oder Ihre App auf den Geräteknoten einwirken lassen, der die Standardblock-Ioctls implementiert. Speichert Ihren System-RAM und ist nützlich, um ihn für Testfälle usw. aufzubewahren.

(Sie können sogar myfs.img fdisk, Partitionen erstellen und --offset und --sizelimit mit losetup verwenden, um jedes/dev/loopX auf bestimmte Partitionen im Image zu verweisen, sodass loop0, loop1 genau wie sdc1, sdc2 usw. Werden )

6
David Mirabito

Sie könnten stattdessen eine Schleifendatei verwenden. Erstellen Sie einfach eine Schleifendatei in der gewünschten Größe (wenn Sie sie in eine tmpfs-Ramdisk einfügen möchten, in Ordnung), formatieren Sie die Schleifendatei und hängen Sie sie ein.

dd if=/dev/zero of=myfile bs=1G count=10
mkfs.xfs -d file myfile
mount -t xfs -o loop myfile mymntpoint
3
KFro

Das Ziel eines Ramdrive ist die Geschwindigkeit. Tmpfs ist kein Laufwerk. Loop-Geräte sind keine Laufwerke, aber Sie können ein Laufwerksabbild auf einem Loop-Gerät ablegen. RAM-Datenträger sind Laufwerke und sehr schnelle Laufwerke. Versuche es mit:

hdparm -t /dev/sda 

und dann:

hdparm -t /dev/ram0

Du wirst sehen, was ich meine! Aber hdparm zerstört manchmal den RAM-Antrieb. Also musst du es wieder schaffen.

Manchmal gibt es keine/dev/ram-Geräte. Um eins zu machen:

mknod -m 0777 /dev/ram0 b 1 0 

aber es wird keine Größe haben. Um es Größe zu geben:

dd if=/dev/zero of=/dev/ram0

und es stoppt, wenn das Laufwerk voll ist. Die maximale Größe wird vom Kernel-Konfigurations-Parameter bestimmt: CONFIG_BLK_DEV_RAM_SIZE.

Formatieren Sie es dann einfach, d.

mke2fs /dev/ram0

Und montiere es:

mount /dev/ram0 /mnt/ramdrive

Ein Favorit von mir ist das Debuggen von Code, der auf einem RAM-Laufwerk gespeichert ist. Bei den Kompilierungen wird mindestens die 10-fache Codegeschwindigkeit auf einer Festplatte gespeichert. Auf RAM-Laufwerk gespeicherte Datenbanktabellen fliegen ebenfalls, aber Sie benötigen ein Skript, das regelmäßig auf die Festplatte schreibt. Die meisten Administratoren haben nicht den Mut, Daten auf RAM-Festplatten zu speichern. Und einige Tische sind zu groß.

2
Swansword

Auf Lighthouse 64 (Puupy Linux basierend auf Slackware) habe ich das gemacht;

mke2fs /dev/ram1 4096000 # nearly 4G ramdisk, choose the size of ramdisk less than actual ram!
mount /dev/ram1 /mnt/dvd # dvd on my laptop is unused choose your device from /mnt/

Dort hast du eine Ramdisk als Verzeichnis gemountet /mnt/dvd wo du Einfügen kopieren und alles machen kannst wie in einem HD-Verzeichnis außer in RAM. Denken Sie daran, Ihre Dateien vor dem Herunterfahren auf HD zu speichern.

1
Marcos