{"id":251,"date":"2009-10-05T10:43:07","date_gmt":"2009-10-05T08:43:07","guid":{"rendered":"http:\/\/tn.genano.de\/wordpress\/?p=251"},"modified":"2009-10-05T11:06:59","modified_gmt":"2009-10-05T09:06:59","slug":"eine-ramdisk-unter-linux-erstellen-und-verwenden","status":"publish","type":"post","link":"https:\/\/tn.genano.de\/wordpress\/2009\/10\/05\/eine-ramdisk-unter-linux-erstellen-und-verwenden\/","title":{"rendered":"Eine Ramdisk unter Linux erstellen und verwenden"},"content":{"rendered":"<h1><a id=\"eine_ramdisk_erstellen\" name=\"eine_ramdisk_erstellen\">Eine Ramdisk erstellen<\/a><\/h1>\n<div>\n<p>Hier beschreibe ich wie man unter den g\u00e4ngigen Linux Distributionen eine Ramdisk erstellt. Das kann an vielen Stellen ganz n\u00fctzlich sein.<\/p><\/div>\n<h2><a id=\"was_ist_eine_ramdisk\" name=\"was_ist_eine_ramdisk\">Was ist eine Ramdisk?<\/a><\/h2>\n<div>\n<p>Eine Ramdisk ist ein Teil des fl\u00fcchtigen Arbeitsspeichers (RAM \u2013&gt; Random Access Memory), auf welchen man wie auf eine Festplatte zugreift. Gro\u00dfer Vorteil der Ramdisk ist, das diese erheblich schneller ist als eine Festplatte. W\u00e4hrend man von modernen Festplatten bis ca. 150 <acronym title=\"Megabyte\">MB<\/acronym>\/s lesen kann, kann dies bei einer Ramdisk leicht mit \u00fcber 1 <acronym title=\"Gigabyte\">GB<\/acronym>\/s passieren. Gro\u00dfer Nachteil an einer Ramdisk ist, das der Inhalt in einem fl\u00fcchtigen Speicher liegt und bei jedem Reboot oder bei jedem abschalten der Maschine verloren geht. D.h. die Ramdisk muss bei jedem starten neu \u201ebeladen\u201c werden bzw. durch tempor\u00e4ren Inhalt versorgt werden.<\/div>\n<h2><a id=\"wie_erstellt_man_eine_ramdisk\" name=\"wie_erstellt_man_eine_ramdisk\">Wie erstellt man eine Ramdisk<\/a><\/h2>\n<div>\n<p>Ein Ramdisk kann man heute unter jeder aktuellen Linux Distribution erstellen. Der Support f\u00fcr Ramdisks ist im Kernel integriert. Ich beschreibe hier alle Schritte die n\u00f6tig sind um eine Ramdisk zu erstellen und diese als \u201ePlattenersatz\u201c zu verwenden.<\/p><\/div>\n<h3><a id=\"kerneloptionen_konfigurieren\" name=\"kerneloptionen_konfigurieren\">Kerneloptionen konfigurieren<\/a><\/h3>\n<div>\n<p>Zum Erstellen einer Ramdisk muss man dem Kernel eine Option mitgeben diese zu erstellen. Das tut man in der Regel in seinem Bootloader. Auf dem meisten g\u00e4ngigen Distributionen ist dies Grub. Die Konfigurationsdatei befindet sich bei den meisten Distributionen unter <em>\/boot\/grub\/menu.lst<\/em>. In dieser ist der zu bootende Kernel aufgef\u00fchrt und seine Parameter. Erkennen kann man das an dem vorgestelltem Wort <em>kernel<\/em>. Wir f\u00fcgen an diese Zeile einfach den Parameter <em>ramdisk_size=xxxxxx<\/em> an, wobei <em>xxxxxxx<\/em> durch eine Anzahl 1024KB Bl\u00f6cke ersetzt wird. D.h. wenn ich 10 Megabyte Ramdisk haben m\u00f6chte setze ich den Wert auf 10 * 1024 = 10240. Damit erhalte ich eine 10 <acronym title=\"Megabyte\">MB<\/acronym> Ramdisk. 300 <acronym title=\"Megabyte\">MB<\/acronym> Ramdisk sind dann entsprechend 307200. Ein Beispiel einer Ramdisk mit 976,5625 <acronym title=\"Megabyte\">MB<\/acronym> .<\/p>\n<pre># grub.conf generated by anaconda\r\n#\r\n# Note that you do not have to rerun grub after making changes to this file\r\n# NOTICE:  You have a \/boot partition.  This means that\r\n#          all kernel and initrd paths are relative to \/boot\/, eg.\r\n#          root (hd0,0)\r\n#          kernel \/vmlinuz-version ro root=\/dev\/sda2\r\n#          initrd \/initrd-version.img\r\n#boot=\/dev\/sda\r\ndefault=0\r\ntimeout=5\r\nsplashimage=(hd0,0)\/grub\/splash.xpm.gz\r\nhiddenmenu\r\ntitle CentOS (2.6.18-53.1.21.el5)\r\n        root (hd0,0)\r\n        kernel \/vmlinuz-2.6.18-53.1.21.el5 ro root=LABEL=\/ ramdisk_size=1000000\r\n        initrd \/initrd-2.6.18-53.1.21.el5.img<\/pre>\n<p>Ist der Parameter hinzugef\u00fcgt worden muss gebootet werden. Damit der Kernel die Option bei Starten auswerten kann. Im Anschlu\u00df an den boot Vorgang kann man sich mit dem Befehl <em>dmesg<\/em> das Log des Kernels anschauen und folgendes entdecken:<\/p>\n<p>Diese Ausgabe kommt nicht bei jeder Distribution \u2026<\/p>\n<pre>Kernel command line: ro root=LABEL=\/ ramdisk_size=1000000<\/pre>\n<p>Diese Ausgabe sollte man aber immer sehen, die Zahlen beziehen sich auf das Beispiel mit der 976,5625 <acronym title=\"Megabyte\">MB<\/acronym> Ramdisk.<\/p>\n<pre>RAMDISK driver initialized: 16 RAM disks of 1000000K size 4096 blocksize<\/pre>\n<p>Das sagt uns das jetzt prinzipiell 16 RAM disks mit 1000000K gro\u00dfe zur Verf\u00fcgung stehen. Das ist ein bischen viel, weil 16 * 1000000 K = 15625 <acronym title=\"Megabyte\">MB<\/acronym> = 15.2587890625 <acronym title=\"Gigabyte\">GB<\/acronym>. Zuviel f\u00fcr die meisten Rechner. Den Rechner den ich hier verwende hat auch nur 8 <acronym title=\"Gigabyte\">GB<\/acronym> RAM. Also h\u00e4tten wir ein Problem, da uns der RAM nicht reicht. Aber keine Angst, wir haben nun nur die M\u00f6glichkeit 16 Ramdisks in der gr\u00f6\u00dfe verwendet, der Speicher wird erst dann verbraucht wenn wir diese auch tats\u00e4chlich nutzen. Ich ben\u00f6tige nur eine und hab damit noch genug ram frei.<\/div>\n<h3><a id=\"ramdisk_nutzen\" name=\"ramdisk_nutzen\">Ramdisk nutzen<\/a><\/h3>\n<div>\n<p>Nachdem wir nun erfolgreich die Ramdisk(s) initialisiert haben, k\u00f6nnen wir diese nun nutzen. Dazu m\u00fcssen wir ein Dateisystem auf der Ramdisk erstellen, damit wir auch Dateien abspeichern k\u00f6nnen. Die Ramdisk steht uns unter einer Device Adresse zur Verf\u00fcgung, \u00e4hnlich wie eine Festplatte. <em>\/dev\/ram0<\/em> ist die erste Ramdisk in einem System <em>\/dev\/ram1<\/em> die zweite und so weiter, in meinem Fall bis <em>\/dev\/ram15<\/em>, also die 16te Ramdisk. Ich brauche ja nur eine, nehme also die <em>\/dev\/ram0<\/em>. Auf dieser Ramdisk ben\u00f6tigen wir kein tolles Filesystem mit Journaling oder \u00e4hnlichem, da es sowieso bei jedem booten verloren geht. Also entscheide ich mich f\u00fcr das klassiche ext2 Dateisystem, dies ist recht ausgereift und auf ner Ramdisk ausreichend performant. Wir verwenden also folgenden Befehl: <em>mkfs.ext2 -m \/dev\/ram0<\/em>. Damit erstellen wir das Dateisystem auf dem Device <em>\/dev\/ram0<\/em>, die Option <em>-m<\/em> bewirkt das wir das Dateisystem im vollen Umfang nutzen k\u00f6nnen und kein Platz f\u00fcr den Benutzer <em>root<\/em> reserviert wird (weil das brauchen wir hier ja nicht). Und schon ist unsere Ramdisk fertig. Wir k\u00f6nnen Sie nun mounten und verwenden. <em>mount \/dev\/ram0 \/mnt<\/em>.<\/div>\n<h3><a id=\"zu_beachten\" name=\"zu_beachten\">Zu Beachten<\/a><\/h3>\n<div>\n<ul>\n<li>\n<div>Die Erzeugung des Filesystems und das mounten muss nach jedem reboot wiederholt werden. Ich verwende daf\u00fcr ein init script, mann kann es nat\u00fcrlich auch anders machen.<\/div>\n<\/li>\n<li>\n<div>Auch zu beachten ist, das man jetzt eine hochperformante Platte hat, von der Daten schnell gelesen und in die Daten schnell geschrieben werden k\u00f6nnen. Es kann durchaus dazu kommen, das Prozesse die zuvor an zu langsamen Platten gescheitert sind, nun pl\u00f6tzlich an nicht ausreichender Prozessorperformance scheitern, bzw. den Rechner enorm auslasten. Das muss man im Einzelfall testen.<\/div>\n<\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Eine Ramdisk erstellen Hier beschreibe ich wie man unter den g\u00e4ngigen Linux Distributionen eine Ramdisk erstellt. Das kann an vielen Stellen ganz n\u00fctzlich sein. Was ist eine Ramdisk? Eine Ramdisk ist ein Teil des fl\u00fcchtigen Arbeitsspeichers (RAM \u2013&gt; Random Access &hellip; <a href=\"https:\/\/tn.genano.de\/wordpress\/2009\/10\/05\/eine-ramdisk-unter-linux-erstellen-und-verwenden\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[164,248,165,124,163,168,167,166],"class_list":["post-251","post","type-post","status-publish","format-standard","hentry","category-linux","tag-grub","tag-linux","tag-mb","tag-performance","tag-ramdisk","tag-ramdisk-driver-initialized","tag-ramdisk_size","tag-random-access-memory"],"_links":{"self":[{"href":"https:\/\/tn.genano.de\/wordpress\/wp-json\/wp\/v2\/posts\/251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tn.genano.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tn.genano.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tn.genano.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tn.genano.de\/wordpress\/wp-json\/wp\/v2\/comments?post=251"}],"version-history":[{"count":0,"href":"https:\/\/tn.genano.de\/wordpress\/wp-json\/wp\/v2\/posts\/251\/revisions"}],"wp:attachment":[{"href":"https:\/\/tn.genano.de\/wordpress\/wp-json\/wp\/v2\/media?parent=251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tn.genano.de\/wordpress\/wp-json\/wp\/v2\/categories?post=251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tn.genano.de\/wordpress\/wp-json\/wp\/v2\/tags?post=251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}