Shell-Skript zur Suche von Dateien in NetWorker

Die meisten Dell EMC NetWorker Admins werden wohl den ‚typischen‘ Restore kennen. Häufig handelt es sich bei der Anforderung um einen Enduser, welcher eine Datei oder ein Verzeichnis nicht mehr findet. Das gesuchte Objekt wurde letzte Woche zuletzt gesehen, glaubt man. Kann aber auch schon einen Monat her sein. Den genauen Pfad kennt man auch nicht mehr so genau und auch den exakten Dateinamen weiß man ebenfalls nicht, höchstens noch Bestandteile davon. Achja, und super-dringend ist es natürlich auch, weil in einer Stunde der Wirtschaftsprüfer kommt.
Die Suche im NetWorker hat (zumindest bei mir) kaum jemals irgendetwas gefunden. Und das DP Search (Dell EMC Data Protection Search) Tool haben auch nicht all zu viele Leute im Einsatz.
Deswegen habe ich mir vor Ewigkeiten (noch zu NW 7 Zeiten, da gabs weder die Suchfunktion in der NMC, noch DP Search) ein Shell-Skript geschrieben, welches mir immer wieder gute Dienste geleistet hat.
Dahinter steckt keine Raketenwissenschaft, aber vielleicht hilft es ja wem. Vielleicht findet sich ja auch jemand, der das in PowerShell nachprogrammiert – dann gäbe es auch keine Variante für Windows.
Das Skript ist wie bereits geschrieben schon uralt und ich habe es auch nie wirklich optimiert. Ist halt eher eine Quick & Dirty Lösung. 🙂

Das Skript an sich ist einfach gehalten und bietet Möglichkeiten zur Modifikation, z.B. wenn man Ergebnisse noch weiter herunterbrechen möchte.

#!/bin/ksh
export LC_TIME=C
client="client"
startdatum="MM/DD/YYYY HH:MM:SS"
enddatum="MM/DD/YYYY HH:MM:SS"
saveset="xxx"
search='yyy'
mminfo -ot -c $client -r "name,savetime(17),ssid" -q "savetime>= $startdatum,savetime<=$enddatum" -xc";" | grep "$saveset" | awk ' BEGIN { FS=";";OFS=";"} {print $2}' | while read zeile ;do
zeit=`echo "$zeile" | sed 's/\//_/g' | sed 's/ /_/g' | sed 's/:/_/g`
echo "$zeile"
nsrinfo -t "$zeile" $client | grep -v "objects found" | grep -v "scanning client" | grep -i "$search" | grep -v "/$" | sort -u
done > results.txt

Es handelt sich dabei um ein KSH-Skript, d.h. man benötigt dafür eine KSH. Sollte bei Linux/Unix aber im Normalfall kein Problem darstellen, da diese für den NetWorker je nach Version ohnehin benötigt wird und sich auch einfach nachinstallieren lässt.
Das /bin/ksh muss man ggf. anpassen, falls die Binary in der jeweiligen Umgebung an einer anderen Stelle liegt.
Mit dem „export LC_TIME=C“ wird eine amerikanische Datumsausgabe der NetWorker-Befehle gewährleistet.
Danach folgen die Variablen, welche es nun auszufüllen geht.
Bei Saveset muss der Name des Savesets stehen, wie er auch im mminfo angezeigt wird. Hier kann man sicherlich auch noch optimieren.
Wenn man z.B. nach /var sucht, man aber auch ein Saveset namens /var/irgendwas hat, würde /var/irgendwas ebenfalls durchsucht werden.
Das Skript führt einen mminfo aus und beschränkt sich dabei auf Resultate aus dem angegebenen Zeitraum. Die Ergebnisse werden an nsrinfo verfüttert. Und dessen Ausgabe wird dann (case-insensitive) nach den gewünschen Objekt durchsucht. Am Ende wird alles nach Datum sortiert in die Datei results.txt eingetragen.
Beim nsrinfo kann man nach dem ‚grep -i „$search‘ noch weitere greps hinzufügen, wenn man da noch was machen möchte.

Als Beispiel möchte ich nach Dateien mit dem Namen „.bashrc“ in /home von Anfang Oktober auf meinem Test-NW-Server suchen:

client="ddp-e01-vst-139"
startdatum="10/01/2019 00:00:01"
enddatum="10/14/2019 13:00:00"
saveset="/home"
search='.bashrc'

Ausgabe:

[root@ddp-e01-vst-139 tmp]# ./nw_filesearch.ksh 
[root@ddp-e01-vst-139 tmp]# cat results.txt 
10/01/19 10:00:08
10/02/19 10:00:07
10/03/19 10:00:10
10/04/19 10:00:06
10/05/19 10:00:09
10/06/19 10:00:08
/home/admin/.bashrc
/home/nsrnmc/.bashrc
10/07/19 10:00:10
10/08/19 10:00:08
10/09/19 10:00:09
10/10/19 10:00:09
10/11/19 10:00:09
10/12/19 10:00:07
10/13/19 10:00:08
/home/admin/.bashrc
/home/nsrnmc/.bashrc
10/14/19 10:00:07
[root@ddp-e01-vst-139 tmp]#

Da sich an den .bashrc Dateien anscheinend in letzter Zeit nichts geändert hat, wurde diese auch nur bei den Full Backups am 06.10 &  13.10. gesichert. An allen anderen Tagen waren inkrementelle Sicherungen, die diese Dateinen nicht gesichert haben. Im Gegensatz zu dem recover-Kommando, welches einem den kompletten Stand (Point-in-Time) präsentiert, liefert der nsrinfo eben nur den Inhalt des jeweiligen Backups zurück.