
Wenn ich Linux starte, habe ich automatisch 16 Ramdisks mit je 16 MB. Allerdings möchte ich zum Testen einiger Software eine wirklich große Ramdisk erstellen.
Ich habe festgestellt, dass ich die Größe der bereits im System vorhandenen Ramdisks mit dem Kernel-Boot-Parameter anpassen kann. ramdisk_size
Dadurch werden jedoch alle 16 Ramdisks (/dev/ram0 - /dev/ram15) auf die angegebene Größe gebracht. Wenn ich also eine 1 GB große Ramdisk erstellen möchte, benötige ich 16 GB Speicher.
Im Grunde möchte ich eine 10 GB große Ramdisk erstellen, die /dev/ram0 heißen würde. Wie gehe ich dabei vor? Ich gehe davon aus, dass es einen Kernel-Boot-Parameter gibt, aber ich habe ihn einfach nicht gefunden.
Antwort1
Kernel-Kompilierungszeit
Es gibt zwei Kernelkonfigurationsoptionen, die Sie in Ihrer .config
Datei festlegen können:
CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760
Dadurch wurde mein Kernel so konfiguriert, dass beim Booten eine 10 GB große Ramdisk erstellt wird.
Anmerkungen:
CONFIG_BLK_DEV_RAM_SIZE
ist in KB.- Geben Sie nicht mehr Speicher an, als tatsächlich über RAM in Ihrem Computer verfügt.
- Schauen
menuconfig
Sie unter „Gerätetreiber“ -> „Blockgeräte“ nach.
Startzeit
Sie können die Größe der von Ihnen erstellten Ram-Disks über den Kernel-Boot-Parameter angeben ramdisk_size
. Beispiel:
kernel /vmlinuz-2.6.32.24 ro root=LABEL=/ rhgb quiet ramdisk_size=10485760
Jetzt kann ich meine Maschine booten, ein Dateisystem darauf erstellen, es mounten und es genau wie ein Blockgerät verwenden.
# mkfs.xfs /dev/ram0
# mount /dev/ram0 /mnt/ramdisk
Quellen:
Antwort2
Du solltest benutzentmpsdafür stattdessen.
mount -t tmpfs -o size=10g none /mnt/point
Antwort3
So erstellen Sie nach dem Booten eine große RAM-Disk, ohne mit Kernel-Parametern herumzuspielen. Verwenden Sie tmpfs, erstellen Sie eine Datei, mounten Sie sie über eine Schleife und mounten Sie 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 kleiner Leistungsverlust durch das Durchlaufen mehrerer verschiedener Ebenen … aber zumindest funktioniert es.
Antwort4
Das Ziel eines Ramdrives ist die Geschwindigkeit. Tmpfs ist kein Laufwerk. Loop-Geräte sind keine Laufwerke, aber Sie können ein Laufwerksabbild auf ein Loop-Gerät legen. Ram-Disks „sind“ Laufwerke, und zwar sehr schnelle Laufwerke. Versuchen Sie Folgendes auszuführen:
hdparm -t /dev/sda
und dann:
hdparm -t /dev/ram0
Du wirst verstehen, was ich meine! Aber hdparm zerstört manchmal das RAM-Laufwerk. Also musst du es erneut erstellen.
Manchmal sind keine /dev/ram-Geräte vorhanden. So erstellen Sie eines:
mknod -m 0777 /dev/ram0 b 1 0
aber es hat keine Größe. So geben Sie ihm Größe:
dd if=/dev/zero of=/dev/ram0
und es wird gestoppt, wenn das Laufwerk voll ist. Die maximale Größe wird durch den Kernel-Konfigurationsparameter bestimmt: CONFIG_BLK_DEV_RAM_SIZE
.
Dann formatieren Sie es einfach, d.h.
mke2fs /dev/ram0
Und montieren Sie es:
mount /dev/ram0 /mnt/ramdrive
Besonders gerne debugge ich Code, der auf einem RAM-Laufwerk gespeichert ist. Die Kompilierungen sind mindestens zehnmal schneller als Code, der auf einer Festplatte gespeichert ist. Datenbanktabellen, die auf einem RAM-Laufwerk gespeichert sind, sind ebenfalls schnell, aber Sie benötigen ein Skript, das regelmäßig auf die Festplatte schreibt. Die meisten Administratoren haben nicht den Mut, Daten auf RAM-Laufwerke zu schreiben. Und manche Tabellen sind zu groß.