Deep Dive: Junos-Upgrade - Dateisystem ist voll

Nicht genügend Speicherplatz beim Junos-Upgrade (EX2300 und EX3400): Dies ist eine Ergänzung zum Artikel KB31198 von Juniper, der sich hauptsächlich mit den Switches der EX-Serie befasst.

  #Network as a Service   #Juniper Networks   #Deep Dive  
Noam Suisa
+41 58 510 13 45
noam.suisa@umb.ch

Liebe Leserinnen und Leser, bitte beachten Sie, dass dieser Blog schon etwas älter ist und sich daher die Inhalte, Erkenntnisse und Aussagen durch die Weiterentwicklung von Produkten, Dienstleistungen und Technologien verändert haben können.

Ganz gleich, was Sie im Leben tun oder wie Sie Ihr Geld verdienen: Irgendwann sind Sie bestimmt schon einmal mit Software-Upgrades in Berührung gekommen, und wenn Sie Netzwerktechniker sind, haben Sie vielleicht sogar eine gewisse Abneigung gegen diese Phrase entwickelt. Wir könnten wahrscheinlich ein lebhaftes Gespräch über die gemeinsamen Erfahrungen auf diesem Gebiet beginnen und darüber, was alles schief gehen könnte oder bereits schief gegangen ist. Wahrscheinlich könnten wir unzählige Fälle aufzählen, in denen das Gerät nicht mehr hochfährt, mit falscher oder beschädigter Software bootet, die Hardware ausfällt, Stromstösse auftreten oder Daten verloren gehen. Was aber, wenn wir nicht einmal starten können, weil es ein Problem in der grundlegenden Phase des Prozesses gibt? Wir haben einige Fälle erlebt, in denen wir das Software-Image nicht einmal auf die Zielgeräte hochladen konnten.

In einem ersten Schritt ist es in einem solchen Fall immer gut, nach offensichtlichen Fehlern zu suchen: Wenn der Switch nicht richtig funktioniert, der Speicherplatz vielleicht schon knapp geworden ist, ein Snapshot zu viel gemacht wurde oder man sehr grosszügig mit den Logging- und Trace-Optionen umgegangen ist. Also los, schaffen wir Platz. Nachfolgend haben wir eine einfache Dreierregel, die Sie als ersten Schritt auf dem Weg zur Erleichterung Ihres technischen Lebens umsetzen sollten.

  1. Versuchen Sie, tatsächlich mehr Platz zu schaffen
    root@juniper> request system storage cleanup
  2. Entfernen Sie alte Snapshots
    root@juniper> request system snapshot delete *
  3. Versuchen Sie, tmpfs zum Speichern eines Images zu verwenden (zum Beispiel /tmp)
    root@juniper> file copy <source> /tmp/<image>

Die Speicherbereinigung entfernt nur Dateien aus den folgenden Verzeichnissen:

/var/tmp
/var/log
/var/sw
/var/crash

 

Wenn Sie also versuchen, Ihr Image an einen Ort hochzuladen, der den Speicherplatz nicht mit diesen Verzeichnissen teilt, hilft das nichts. Snapshots sind generell ein heikles Thema, da verschiedene Juniper-Geräte sie auf unterschiedliche Weise handhaben. Einige können sie nur auf externen USB-Laufwerken (QFX5100) erstellen, da Snapshots nicht auf demselben Medium gespeichert werden können, das zum Hochfahren des Geräts verwendet wurde. Im Allgemeinen handelt es sich dabei um Kopien der aktuell laufenden Software und Konfiguration, so dass mehrere davon schnell freien Speicherplatz verbrauchen können. Ausserdem reicht normalerweise ein Snapshot aus.

Natürlich gibt es die Lösung, den lokalen Speicher überhaupt nicht zu verwenden und das Upgrade einfach über das Netzwerk durchzuführen. Wenn sich ein Benutzer für diesen Weg entscheidet, macht es eigentlich keinen Sinn, diesen Artikel weiter zu lesen. Der Nachteil dieses Ansatzes ist, dass nur TFTP und FTP als Protokolle unterstützt werden, da mgd (Managementprozess) kein SCP unterstützt. Wenn dies nicht möglich oder nicht die gewünschte Lösung ist, dann lesen Sie einfach weiter.

 

request system software add <protocol>://<user>@<host>:<path_to_image> <options>

 

Sie wollen also ein Image auf ein lokales Laufwerk des Geräts herunterladen und erhalten das folgende Resultat. Da könnte man durchaus in die Verweigerungsphase gehen und vielleicht sogar die Faust ballen.

 

/var: write failed, filesystem is full
[...]
error:file-fetch failed
error: could not fetchlocalcopy offile

 

Dann aber würde man prüfen, ob WIRKLICH genug Platz vorhanden ist.

 

mzwk@ex42-01> show system storage                                                  
fpc0:

 

View all

Filesystem    Size    Used    Avail    Capacity    Mounted on
/dev/da0s2a    184M    157M    12M    93%    /
devfs    1.0K    1.0K    0B    100%    /dev
/dev/md0    282M    282M    0B    100%    /packages/mnt/junos
/dev/md1    6.8M    2.1M    4.1M    33%    /packages/mfs-fips-mode-powerpc
/dev/md2    5.4M    5.4M    0B    100%    packages/mnt/fips-mode-powerpc-15.1R7.9
/dev/md3    8.7M    4.1M    3.9M    51%    /packages/mfs-jdocs-ex
/dev/md4    12M    12M    0B    100%    /packages/mnt/jdocs-ex-15.1R7.9
/dev/md5    45M    40M    1.4M    97%    /packages/mfs-junos-ex-4200
/dev/md6    83M    83M    0B    100%    /packages/mnt/junos-ex-4200-15.1R7.9
/dev/md7    14M    9.1M    3.5M    72%    /packages/mfs-jweb-ex
/dev/md8    26M    26M    0B    100%    /packages/mnt/jweb-ex-15.1R7.9
/dev/da0s3e    123M    5.6M    107M    5%    /var
/dev/md9    252M    10.0K    232M    0%    /tmp
/dev/da0s3d    369M    17M    323M    5%    /var/tmp
/dev/da0s4d    62M    272K    57M    0%    /config
/dev/md10    118M    20M    89M    18%    /var/rundb
procfs     4.0K    4.0K    0B    100%    /proc
/var/jail/etc    123M    5.6M    107M    5%    /packages/mnt/jweb-ex-15.1R7.9/jail/var/etc
/var/jail/run    123M    5.6M    107M    5%    /packages/mnt/jweb-ex-15.1R7.9/jail/var/run
/var/jail/tmp    123M    5.6M    107M    5%    /packages/mnt/jweb-ex-15.1R7.9/jail/var/tmp
/var/tmp    369M    17M    323M    5%    /packages/mnt/jweb-ex-15.1R7.9/jail/var/tmp/uploads
devfs    1.0K    1.0K    0B    100%    /packages/mnt/jweb-ex-15.1R7.9/jail/dev
/var/jail/jweb-app    123M    5.6M    107M    5%    /packages/mnt/jweb-ex-15.1R7.9/jail/var/jweb-app
/dev/md11    6.8M    2.1M    4.1M    33%    /packages/mfs-fips-mode-powerpc
/dev/md12    8.7M    4.1M    3.9M    51%    /packages/mfs-jdocs-ex
/dev/md13    45M    40M    1.4M    97%    /packages/mfs-junos-ex-4200
/dev/md14    14M    9.1M    3.5M    72%    /packages/mfs-jweb-ex

Falls die Ziel-Destination tatsächlich voll ist, kann man die Speicherbereinigung "request system storage cleanup" durchführen, wie es in unserer Dreier-Regel für Junos-Upgrades beschrieben wurde. Unten sehen Sie ein Beispiel für die Verwendung des Befehls.

 

mzwk@ex42-01> request system storage cleanup   
Please check the list of files to be deleted using the dry-run option. i.e.
request system storage cleanup dry-run
Do you want to proceed ? [yes,no] (no)yes
fpc0:
--------------------------------------------------------------------------
List of files to delete:
Size Date         Name
11B Sep 11  2018/var/jail/tmp/alarmd.ts
148B May 13 08:28/var/log/default-log-messages.0.gz
8667B May  8 13:45/var/log/default-log-messages.1.gz
6955B Aug  2  2018/var/log/default-log-messages.2.gz
6492B Jul  5  2017/var/log/default-log-messages.3.gz
11.7K Jul  5  2017/var/log/default-log-messages.4.gz
12.7K Jul  5  2017/var/log/default-log-messages.5.gz
12.7K Jul  5  2017/var/log/default-log-messages.6.gz
14.0K Jul  5  2017/var/log/default-log-messages.7.gz
21.8K Jul  5  2017/var/log/default-log-messages.8.gz
21.4K Jul  5  2017/var/log/default-log-messages.9.gz
225.8K Jul  5  2017/var/log/erp-default.0.gz
224.9K Jul  5  2017/var/log/erp-default.1.gz
228.7K Jul  5  2017/var/log/erp-default.2.gz
353B Mar 29  2017/var/log/install.0.gz
289B Apr 30  2015/var/log/install.1.gz
12.4K May 13 08:28/var/log/interactive-commands.0.gz
11.2K Apr  2 14:00/var/log/interactive-commands.1.gz
13.8K Mar 29 15:45/var/log/interactive-commands.2.gz
14.2K Oct 28  2018/var/log/interactive-commands.3.gz
11.0K Sep 24  2017/var/log/interactive-commands.4.gz
9990B Jul 19  2017/var/log/interactive-commands.5.gz
10.2K Jul 18  2017/var/log/interactive-commands.6.gz
14.0K Jul 18  2017/var/log/interactive-commands.7.gz
12.5K Jul 17  2017/var/log/interactive-commands.8.gz
11.2K Jul 14  2017/var/log/interactive-commands.9.gz
12.6K May 13 08:28/var/log/messages.0.gz
16.8K May  6 16:00/var/log/messages.1.gz
5609B Apr  1 09:45/var/log/messages.2.gz
5642B Apr  1 05:30/var/log/messages.3.gz
5540B Apr  1 01:15/var/log/messages.4.gz
5676B Mar 31 21:00/var/log/messages.5.gz
5532B Mar 31 16:45/var/log/messages.6.gz
5537B Mar 31 12:30/var/log/messages.7.gz
5509B Mar 31 08:15/var/log/messages.8.gz
5574B Mar 31 04:00/var/log/messages.9.gz
559B May 13 08:17/var/log/wtmp.0.gz
27B May  3 14:30/var/log/wtmp.1.gz
57B Jan  1  2010/var/log/wtmp.2.gz
689B Apr  3 14:46/var/log/wtmp.3.gz
93B Mar 19 19:13/var/log/wtmp.4.gz
57B Sep 11  2018/var/tmp/krt_rpf_filter.txt
42B Sep 11  2018/var/tmp/pfe_debug_commands
0B Sep 11  2018/var/tmp/rtsdb/if-rtsdb

 

Wenn nach der Ausführung der Speicherbereinigung immer noch nicht genug Platz auf dem Gerät vorhanden ist, kann man ausserdem in den Home-Verzeichnissen der Benutzer nachsehen, insbesondere /root/folder.

Auch wenn Sie sich sicher sind, dass der Speicherplatz auf dem Juniper-Gerät so gross ist, dass Sie sich darin verirren könnten, können Sie auf ein ärgerliches Problem stossen, wie Sie unten sehen.

 

Junos CLI – download

 

mzwk@ex42-01>filecopyscp://mzwk@10.255.0.4:/home/
mzwk/jinstall-ex-4200-15.1R7.9-domestic-signed.tgz/var/tmp
mzwk@10.255.0.4's password:
jinstall-ex-4200-15.1R7.9-domestic-signed.tgz                                                                                                                                                           80%  107MB   1.3MB/s  00:18 ETA
/var: write failed, filesystem is full
jinstall-ex-4200-15.1R7.9-domestic-signed.tgz                                                                                                                                                          100%  132MB   1.3MB/s  01:41   
/var/home/remote/...transferring.file.........UapdFg
/jinstall-ex-4200-15.1R7.9-domestic-signed.tgz: No space left on device
error:file-fetch failed
error: could not fetchlocalcopy offile

 

Egal, was wir versuchen, wir sind nicht in der Lage, ein Image auf das Zielsystem herunterzuladen. Aber wir können versuchen, das Image von einem entfernten Server auf das Zielgerät zu laden und die Dateiverarbeitung dem mgd zu überlassen. Um ehrlich zu sein, sind wir bis heute erstaunt, dass das funktioniert und dass wir auf die Idee gekommen sind, es überhaupt zu versuchen.

 

Unix SCP – upload

 

mzwk@tools01:~$scpjinstall-ex-4200-15.1R7.9-domestic-signed.tgz
mzwk@10.255.0.18:/var/tmp
Password:
jinstall-ex-4200-15.1R7.9-domestic-signed.tgz                                                                                                                                                          100%  132MB   1.0MB/s  02:07   
mzwk@tools01:~$

 

Nachdem wir es endlich geschafft haben, unser zukünftiges Software-Image hochzuladen, möchten wir auf zwei Dinge hinweisen, die wir in das Junos-Upgrade-Verfahren aufnehmen sollten, um uns das Leben in Zukunft zu erleichtern: Es ist gut, die folgenden Flags in zukünftige Junos-Upgrades aufzunehmen, um Speicherplatz zu sparen: "no-copy" und "unlink".

 

request system software add <software_package> no-copy unlink reboot
  • Die Option no-copy verhindert die Erstellung von Kopien neuer Pakete im Verzeichnis /var/sw/pkg.
  • Unlink entfernt die Pakete, nachdem sie installiert wurden.

Eine abschliessende Bemerkung: Wenn ein Switch mit einem älteren Release (z. B. 15.1X) läuft und auf ein aktuelles Release (18) aktualisiert werden soll, ist ein direktes Upgrade (ohne Zwischenreleases) normalerweise möglich, insbesondere bei festen Switches der EX-Serie. Bitte beachten Sie, dass der Switch, wenn es sich um einen Virtual Chassis-Cluster handelt, während eines solchen Upgrade-Prozesses möglicherweise nicht richtig funktioniert. Dies kann zu einem Split-Cluster führen.

Wann immer es möglich ist, sollten Sie das Chassis in einzelne Switches aufteilen und ein Upgrade nach dem anderen durchführen, wenn es sich um ein grösseres "Multi-Hop"-Upgrade handelt. Sie können die Inter-Switch-Ports im Voraus vorkonfigurieren (d. h. in einem Management-VLAN und mit entsprechenden IP-Adressen) und dann einfach VC-Ports in normale Ports umwandeln. Sobald alle Geräte aufgerüstet sind, kann der VC neu erstellt werden.

 

Erstellen eines Wiederherstellungs-Snapshots

Nach dem Upgrade auf eine stabile Version des Junos-Betriebssystems empfiehlt es sich, eine neue Wiederherstellungspartition zu erstellen. Normalerweise wird die Wiederherstellungspartition durch einen manuellen Vorgang erstellt. Im Auslieferungszustand spiegelt sie das Software-Image wider, das auf dem Gerät läuft. Um einen Wiederherstellungs-Snapshot zu erstellen, geben Sie einfach Folgendes ein:

 

request system snapshot recovery

 

Leider kommt es vor, dass nach der Durchführung des Upgrades, das von unzureichendem Speicherplatz betroffen ist, der Prozess zur Erstellung des Wiederherstellungs-Snapshots das gleiche Problem meldet.

Um dies zu beheben, führen Sie den folgenden Befehlssatz aus:

 

root@:RE:0%cd/var/tmp
root@:RE:0%ls-al
root@:RE:0%rm-r rtsdb
root@:RE:0%rm-r sd-upgrade

 

Versuchen Sie nun erneut, einen Wiederherstellungs-Snapshot zu erstellen. Das sollte problemlos funktionieren.