Warum ist die Verwendung einer Auslagerungsdatei über ein SMB / NFS-Dateisystem unter Linux nicht möglich?

6018
Avio

Ich möchte den ungenutzten RAM einer anderen Maschine als Auslagerungsbereich für meine primäre Linux-Installation verwenden. Ich war nur neugierig auf die Leistung von Netzwerk-RAM-Disks im Vergleich zu lokalen (langsamen) mechanischen Festplatten.

Die Auslagerungsdatei befindet sich auf einem tmpfsMountpoint und wird durch gemeinsam genutzt samba. Jedes Mal, wenn ich versuche, Folgendes auszustellen:

swapon /mnt/ramswap/swapfile 

Ich bekomme:

swapon: /mnt/ramswap/swapfile: swapon failed: Invalid argument 

und in dmesglese ich:

[ 9569.806483] swapon: swapfile has holes 

Ich habe versucht, die Swap-Datei mit dd if=/dev/zero of=swapfile bs=1024 (but also =4096 and =1048576)und mit zuzuordnen truncate -s 2G(beide gefolgt von mkswap swapfile), aber das Ergebnis ist immer dasselbe.

In diesem Beitrag (aus dem Jahr 2002) sagt jemand, dass die Verwendung einer Auslagerungsdatei über NFS / SMB unter Linux nicht möglich ist. Ist diese Aussage noch gültig? Und wenn ja, was ist der Grund für diese Entscheidung und gibt es eine Problemumgehung, damit dies funktioniert?

2
Ich kann das sehen, was Ihr System extrem extrem instabil macht. Der kleinste Fehler im Netzwerk kann zum Absturz systemkritischer Prozesse führen, wenn Teile von ihnen ausgelagert werden. Ganz zu schweigen davon, dass jemand, der sich in Ihr WLAN hacken kann, möglicherweise jeden Speicher lesen kann, der gerade ausgelagert wird. Darth Android vor 11 Jahren 1
Ich verwende kein WLAN, sondern ein kurzes Netzwerkkabel, das zwei Gbit / s-Ethernet-Karten miteinander verbindet. Der OSI-Stapel enthält mehrere übereinander geschichtete Prüfsummenfelder, die ausreichen sollten, um die meisten Fehler und Verfälschungen zu vermeiden. Für den Moment möchte ich einfach wissen, wann und wie dies möglich ist. Ich werde später über die Auswirkungen auf Stabilität und Sicherheit nachdenken. Avio vor 11 Jahren 2
Versuchen Sie Folgendes: http://www.raspberrypi.org/forums/viewtopic.php?f=29&t=7720 CMCDragonkai vor 9 Jahren 1

3 Antworten auf die Frage

6
user3767547

Ich weiß, dass dies ein bisschen von einem alten Thread ist, aber ich bin gerade auf dieses Problem gestoßen und habe festgestellt, dass es möglich ist, eine NFS-Swap-Partition zu verwenden, indem das Kernel-Loopback-Gerät verwendet wird:

Eine leere Datei erstellen (mit Nullen aus / dev / zero füllen):

root@machine:/# dd if=/dev/zero of=/swap bs=1024 count=1048576 

Machen Sie ein Loop-Gerät:

root@machine:/# losetup /dev/loop0 /swap 

Machen Sie es für den Austausch geeignet:

root@machine:/# mkswap /dev/loop0 Setting up swapspace version 1, size = 1048572 KiB no label, UUID=931d6e04-78ec-41fd-ab2c-22522ac2711d 

Jetzt benutze es:

root@machine:/# swapon /dev/loop0 

Machen Sie die Änderung dauerhaft

Schreiben Sie ein Skript, um diesen Swap dauerhaft zu machen. /etc/init.d/swap kann wie folgt aussehen:

#!/bin/sh  set -e  case "$1" in start) losetup /dev/loop0 /swap swapon /dev/loop0 ;; stop) swapoff /dev/loop0 losetup -d /dev/loop0 ;; restart) swapoff /dev/loop0 swapon /dev/loop0 ;; *) echo "Usage: swap { start | stop | restart }" >&2 exit 1 ;; esac  exit 0 

Machen Sie die Datei ausführbar:

root@machine:/# chmod +x /etc/init.d/swap 

Aktivieren Sie es:

root@machine:/# update-rc.d swap defaults 

Quelle: http://www.emanuelis.eu/2010/06/21/how-to-swap-to-nfs-mount/

Wie ist das vernetzt? Es wird keine Vernetzung erwähnt. Ken Sharp vor 7 Jahren 0
3
Michael Hampton

Um die Manpage zu zitieren ...

Dies liegt an der Implementierung der Auslagerungsdatei im Kernel, die erwartet, dass sie direkt in die Datei schreiben kann, ohne das Dateisystem zu unterstützen.

Es ist nicht möglich, direkt auf ein NFS-Mount zu schreiben, ohne das Dateisystem zu durchlaufen. Daher erhalten Sie diese leicht verwirrende Fehlermeldung.

Wie @MattH feststellte, könnten Sie möglicherweise iSCSI verwenden, aber die eigentliche Frage ist, ob es sich überhaupt lohnt. RAM ist immerhin recht günstig.

Vielen Dank für die Erklärung. So gesehen macht es Sinn, auch wenn ich es weiterhin als Einschränkung sehe. Ich weiß nicht, ob es wert ist oder nicht. Aber wenn ich es nicht einmal ausprobieren kann, werde ich es nie erfahren. Avio vor 11 Jahren 0
1
Matt H

Wenn Sie es tun könnten, wie Sie es beschrieben haben, sollte ich darauf hinweisen, dass Sie keinen ungenutzten RAM eines anderen Computers verwenden. Swap-Dateien sind eine dateibasierte Unterstützung für schnelleres lokales RAM. Sie würden den Festplattenspeicher der anderen Maschinen nutzen.

Sie können dies nicht tun, da Linux einen speziellen Partitionstyp für den Swap hat. Er muss sich auf einem lokalen Laufwerk und nicht auf einer Netzwerkfreigabe befinden. Windows macht dies nicht so, es verwendet nur eine Datei in einem vorhandenen Dateisystem. Wenn ich mich richtig erinnere, muss sich diese Datei auch auf einem lokalen Laufwerk befinden. Es kann also nicht auf NFS oder SMB sein.

Ich denke jedoch, dass Sie dies mit iSCSI tun können. Wenn Sie ein iSCSI-Ziel lokal einbinden und darin einen Swap bereitstellen, funktioniert es möglicherweise. Ist das eine gute Idee? Nein. Ich finde es aus Gründen der Leistung und Zuverlässigkeit eine schreckliche Idee. Höchstwahrscheinlich friert Linux ein, wenn das Netzwerk ausfällt und auf die Swap-Partition zugreifen muss. Mit AoE sollten Sie eine bessere Leistung erzielen. Aber wieder ein Problem mit dem Netzwerk oder der anderen Maschine, und Sie haben eine holprige Fahrt.

Kaufen Sie einfach mehr RAM, oder wenn Sie nicht mehr passen, besorgen Sie sich eine SSD und erstellen Sie eine Swap-Partition.

EDIT: Ok, du könntest es schaffen. Noch nicht empfohlen, aber dies ist eine Möglichkeit, dies theoretisch zu erreichen.

  1. Erstellen Sie auf dem Remote-Host ein tmpfs oder ramfs.
  2. Formatieren Sie die Tmpfs oder Ramfs als ext4.
  3. Erstellen Sie eine Raw-Image-Datei darauf. (dd oder abgeschnitten wird es tun)
  4. Exportieren Sie das Disk Image mit iscsi oder AoE.
  5. Verbinden Sie auf Ihrem lokalen Linux-PC das Ziel. Dann erstellen Sie den Swap mit mkswap auf dem Ziel.
  6. Dann tauschen Sie.

Viel Glück!

Wahrscheinlich habe ich vergessen, es zu erwähnen, aber dieses Experiment zielt darauf ab, die vorhandene Hardware rationeller zu verwenden. Soweit ich iSCSI verstehen kann, ist es einfach zu teuer für das, was ich versuche. Und ich würde nicht die Festplatte eines anderen Rechners verwenden, da die Auslagerungsdatei in einem `tmpfs'-Mountpoint erstellt wird, also im Wesentlichen in einem RAM-Laufwerk. Avio vor 11 Jahren 1
@Avio Es gibt * nichts * "rational" darüber :) Darth Android vor 11 Jahren 1
Linux gibt Ihnen die Freiheit, alle Arten von Medien für jeden Zweck zu verwenden: Sie müssen selbst entscheiden, ob das Spiel nicht die Kerze wert ist. Nun sagen Sie mir, warum ich eine Diskette als Swapspace verwenden kann, aber kein Netzwerk-RAM-Laufwerk. : P Avio vor 11 Jahren 1
iscsi ist nicht teuer, es gibt zielsoftware, die so offen ist wie linux selbst. Matt H vor 11 Jahren 0
Theoretisch könnte man es ja zumindest mit AoE oder iSCSI erreichen. Sie können ein tmpfs oder ramfs exportieren. Matt H vor 11 Jahren 0
@avio: Heck, ich habe eine Diskette zum Tauschen benutzt. Darn RedHat 5 benötigte ein Swap-Gerät oder die Installation wurde verweigert. Sein Installer schien voll kompatibel mit Fenstern zu sein. (Ich hatte ein dediziertes Laufwerk für Swap, das sich zum Zeitpunkt der Installation noch außerhalb des Servers befand und mit Backups geladen wurde. Das machte also wirklich Sinn). Hennes vor 11 Jahren 0
Nun, es ist eine interessante Idee. Einen Versuch wert Ich freue mich auf den Tag, an dem RDMA Standard ist, und wir sind in der Lage, andere unbenutzte RAM-Maschinen zuverlässig zu verwenden. In der Theorie ... warum nicht? Matt H vor 11 Jahren 1