Kann ich / tmp und / var / in eine Ramdisk unter OS X einloggen?

12160
kbyrd

Bei nicht kritischen Linux-Systemen verschiebe ich häufig Dinge wie / tmp und / var / log in tmpfs, um das Schreiben von Festplatten zu sparen. Ich mache das seit einem Jahr oder so. Wenn ich die Protokolle je nach Neustart brauche, kommentiere ich einfach eine Zeile in / etc / fstab aus und beginne mit dem Debuggen.

In jedem Fall möchte ich dasselbe unter OS X tun. Ich habe Beiträge zum Erstellen einer Ramdisk für OS X gesehen, aber ich suche nach einer dauerhafteren Lösung, die bei jedem Booten funktioniert. Ich möchte immer, dass / tmp und / var / log in eine Ramdisk eingebunden werden, mit der Möglichkeit, das mit ein wenig Befehlszeilenbearbeitung in vi zu deaktivieren, wenn ich muss.

20
Das klingt für mich nach verfrühter Optimierung. Laufen Sie wirklich in vielen Situationen, in denen Sie Festplatten-E / A-gebunden sind, sodass Sie Schreibvorgänge speichern müssen, wann immer Sie können? Spiff vor 14 Jahren 0
Ich gebe offen zu, dass dies wahrscheinlich keine große Optimierung ist. Ich habe es ursprünglich auf einem Linux-System gemacht, auf dem ich von einem billigen USB-Stick aus bootete, und versuchte, so gut wie möglich darauf zu schreiben, während der Protokoll- und TMP-Speicherplatz nicht zur Verfügung steht. Die Idee blieb stecken und ich spürte, was ich aufgeben wollte (ich kann die Protokolle nicht sehen, um ein Problem aufzuspüren, das ich bemerkte, NACHDEM es passiert ist, wenn ich mich nicht reproduzieren kann). Für ein "Nicht-Bastler" -System würde ich das nicht tun. Mein OS X-Laptop fällt in die Kategorie "Basteln". kbyrd vor 14 Jahren 0
Eine andere Begründung ^ D ^ D ^ D ... ähm ... Rationalisierung: Mein Macbook hat eine SSD, und wenn ich willkürliche Schreibvorgänge für Dinge verhindern kann, die mich nicht besonders interessieren, ist das ganze System besser. Wie ist es damit? kbyrd vor 14 Jahren 6

2 Antworten auf die Frage

7
kbyrd

EDIT: Ich werde nur meine eigene Antwort akzeptieren, da sie einen Teil des Problems für mich gelöst hat. Wenn jemand etwas wie --bind in Linux veröffentlicht, akzeptiere ich diese Antwort.

Um mehr Antworten zu geben, werde ich anfangen, meine eigene Frage mit dem zu beantworten, was ich herausgefunden habe.

Schritt 1 ist, jedes Mal eine RAM-Disk beim Booten zu laden. Dazu erstelle ich ein Bash-Skript und dann einen Starteintrag, um das Bash-Skript beim Booten aufzurufen.

Schreiben Sie ein Bash-Skript wie folgt:

RD=ramdisk if [ ! -e "/Volumes/$RD" ]; then diskutil erasevolume HFS+ "$RD" `hdiutil attach -nomount` fi  mkdir -p /Volumes/$RD/private/tmp mkdir -p /Volumes/$RD/private/var/log mkdir -p /Volumes/$RD/private/var/tmp 

Dann rufen Sie es beim Booten auf, indem Sie es zum Starten hinzufügen, indem Sie eine Datei mit dem Namen /Library/LaunchDaemons/com.my.ramdisk.plist mit folgendem Inhalt erstellen:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.my.ramdisk</string> <key>ProgramArguments</key> <array> <string>/usr/local/sbin/ramdisk.sh</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist> 

Wo ich stecke, ist eine Möglichkeit, Verzeichnisse innerhalb der Ramdisk unter / tmp, / var / log und / var / tmp zu verknüpfen. Diese drei Verzeichnisse sind auf meinem System alle mit / private / tmp, / private / var / log und / private / var / tmp verknüpft. Wenn ich die Symlinks so geändert habe, dass sie auf / Volumes / ramdisk / ... zeigen, startet das System nicht. Ich gehe davon aus, dass dies zum Zeitpunkt des Bootens etwas / tmp und / var / log ist, BEVOR das Skript com.my.ramdisk die Ramdisk einbindet. Ich brauche eine Möglichkeit, die Ramdisk direkt nach dem Einhängen von root einzuhängen, bevor irgendetwas anderes ausgeführt wird.

Hinweis Wenn Sie / var / log (Kernel, Daemon und andere wichtige Protokolle des Benutzerbereichs) im temporären Speicherbereich bereitstellen, gehen beim nächsten Neustart dessen Inhalte verloren. Dies kann Ihre Diagnosefähigkeit beeinträchtigen.

Die Chancen stehen gut, dass Sie dies nicht tun können, und selbst wenn Sie es können, lohnt sich die aufgewendete Zeit absolut nicht. Die gesamte öffentliche Dokumentation zum Startzyklus ist hier verfügbar, wenn Sie es wirklich versuchen: http://bit.ly/d1kAPd Hasaan Chop vor 14 Jahren 0
@NSD: Danke für den Link. Mann, ich möchte wirklich --bind montieren. kbyrd vor 14 Jahren 0
Sie könnten * wahrscheinlich * die Ausgabe des Loggers umleiten, ohne eine Kernel-Erweiterung zu schreiben, aber ich habe es eigentlich nie versucht. Hasaan Chop vor 14 Jahren 0
Einige Redakteure haben gesagt, dass Sie / var / log im permanenten Speicher haben müssen. Das stimmt nicht. Wenn es nicht nach Neustarts bestehen bleibt, ist es schwierig, einige Dinge zu debuggen. Dies ist ein Kompromiss. Wenn Sie meine ursprüngliche Frage gelesen haben, habe ich dies erwähnt. Bei einem kritischen Server würde ich das niemals tun. Für eine persönliche Maschine, mit der ich bastle, würde ich. kbyrd vor 10 Jahren 0
Mir ist klar, dass dies ein altes Problem ist, und ich kann keine richtige Antwort posten, aber es wird bei Suchanfragen prominent angezeigt. Um die Frage zu beantworten, möchten Sie `hdik -drivekey system-image = yes -nomount ram: // 262144` verwenden, um eine 128-MB-RAM-Disk zu erstellen, dann` newfs_hfs` zum Formatieren und dann `mount -o union, verwenden. nobrowse, noatime`, um das Volume über `/ tmp` zu mounten. Auf diese Weise bleiben vorhandene Dateien in `/ tmp` unberührt, aber neue Dateien werden auf der RAM-Disk gespeichert. Haravikk vor 9 Jahren 1
Mein einziger anderer Kommentar ist, dass Sie vorsichtig sein sollten; Während "tmpfs" bei Bedarf Swap verwendet, wird eine RAM-Disk nicht benötigt. Sie verlieren also einen Teil des aktiven RAMs. Das bedeutet, dass Sie ihn klein halten möchten. Einige Aufgaben in "/ tmp" erfordern jedoch möglicherweise mehr Wenn Sie mehr Speicherplatz benötigen, als Sie zuordnen, sollten Sie darauf achten, was Sie ausführen. Haravikk vor 9 Jahren 0
5
xer0x

Hier ist ein Skript zum Erstellen von Ramdisks unter OS X. Ihre Frage wird nicht beantwortet. Sie könnten damit etwas aufbauen, das beim Booten ausgeführt wird und dann / tmp und / var / log einbindet.

#!/bin/bash  ramfs_size_mb=1024  mount_point=~/volatile   ramfs_size_sectors=$(($*1024*1024/512))  ramdisk_dev=`hdid -nomount ram://$`  newfs_hfs -v 'Volatile' $  mkdir -p $  mount -o noatime -t hfs $ $   echo "remove with:"  echo "umount $"  echo "diskutil eject $"  

Von @salvatore http://pastie.textmate.org/pastes/1417478/text?key=igcxuzqqvlmlbavxooj2uw

Vielen Dank, dieses Skript ist sehr nützlich, um RAM-Laufwerke unter OS X zu erstellen hanxue vor 10 Jahren 0