Antworten:
Natürlich ist die SSH die bessere.
Nfs verwendet ein komplexes Netzwerkprotokoll mit verschiedenen Remoteprozeduraufrufen und Wartezeiten für die Datensynchronisation. Im Fall von ssh gelten diese nicht.
Darüber hinaus gibt es viele Schlösser. Das Löschen von Dateien in NFS funktioniert folgendermaßen:
rm
Befehl gibt den unlink()
Syscallunlink()
Aufrufunlink()
Aufruf auf der Remote-Seite ausunlink()
Aufrufs Ihres Originalsrm
rm
iteriert zur nächsten Datei, gehe zu 1Jetzt ist das Wichtigste: zwischen 2-7 rm
muss warten. Es könnte den nächsten unlink()
Anruf asynchron senden , aber es ist ein Single-Threaded-Tool, nicht ereignisorientiert. Selbst wenn es könnte, würde es immer noch knifflige NFS-Mount-Flags erfordern. Bis es nicht zum Ergebnis kommt, wartet es.
Nfs - und jedes Netzwerk-Dateisystem - ist immer viel langsamer.
In vielen Fällen können Sie rekursive Löschungen mit einem Trick quasi unendlich schnell ausführen:
mv -vf oldfilms oldfilms-
)rm -rf oldfilms- &
)Unter vielen (aber nicht allen) Gesichtspunkten sieht diese Verzeichnisentfernung so aus, als ob sie in praktisch null Zeit stattgefunden hätte.
Erweiterung: Wie @ el.pascado in seinem ausgezeichneten Kommentar erwähnt, muss 2-7 für alle Dateien 3x ausgeführt werden:
lstat()
Systemaufruf),unlink()
im Fall von Verzeichnissen, das opendir()
Löschen aller Dateien / Verzeichnisse in rekursiv, dann closedir()
schließlich rmdir()
.readdir()
Aufruf zum nächsten Verzeichniseintrag .Dies erfordert 3 nfs RPC-Befehle für Dateien und weitere 3 für Verzeichnisse.
Ja. Vielleicht. Es hängt davon ab, ob. Bei einer kleinen Anzahl von Dateien und Verzeichnissen würde dies keinen großen Unterschied machen.
Das Ausführen von Dateien in großen Mengen in einem NFS-gemounteten Verzeichnis ist langsam. Wenn Sie die Möglichkeit haben, sich beim NFS-Server selbst anzumelden und diese im eigentlichen Verzeichnis auszuführen, ist dies schneller.
Testen wir es, indem wir die OpenBSD-Ports-Sammlung entfernen, die ich aus CVS ausgecheckt und über NFS gemountet habe:
Auf dem NFS-Server:
$ cd /export/shared/ports
$ du -hs .
2.6G .
$ find . | wc -l
179688
$ time rm -rf /export/shared/ports/*
0m20.87s real 0m00.12s user 0m04.62s system
Auf dem Client (nach dem Wiederherstellen der Originaldateien aus dem Backup):
$ time rm -rf /usr/ports/*
6m49.73s real 0m01.55s user 1m08.96s system
-r
Flag erwähnt ,rm
muss zuerst überprüft werden, ob es sich bei der Datei um ein Verzeichnis handelt (lstat
über nfs), es geöffnet werden (opendir
über nfs), der Inhalt gelesen werden (readdir
über nfs) und erst dann das tatsächliche Löschen durchgeführt werden, wie in der Antwort für jede Datei in und beschrieben Rekursiv in Unterverzeichnisse, schließen Sie das Verzeichnis (closedir
über nfs) und wiederholen Sie es für jedes gefundene Verzeichnis.