Linux-Tutorial / Fehler reproduzieren und evidenzbasierte Wiederherstellung üben
Üben Sie die Wiederherstellung in einer isolierten Umgebung, indem Sie eine funktionierende Basislinie überprüfen, eine Störung einführen und den geänderten Zustand mithilfe von Beweisen wiederherstellen. Validieren Sie sowohl den Servicezustand als auch die für den Benutzer sichtbare Reaktion, bevor Sie die Wiederherstellung als abgeschlossen erklären.
Bereiten Sie VM-Snapshots und Konsolenwiederherstellung vor und vergleichen Sie die Beweise vor und nach jeder Änderung mithilfe von protokollbasierter Untersuchung.
Systemkonfigurationsübungen verwenden eine herkömmliche Ubuntu 26.04 LTS oder Rocky Linux 9 VM als Referenzumgebung. Container, WSL und andere Versionen können sich in Dienst- und Paketkonfiguration unterscheiden. Bereiten Sie die Konsolenwiederherstellung vor und zeichnen Sie Ihre Versionen mit der virtuellen Maschinen-Einrichtungslektion auf.
Definieren Sie das isolierte Labor und eine funktionierende Basislinie
Verwenden Sie ein Ubuntu- oder Rocky-Linux-Labor-VM mit einem systemd-Benutzermanager, Python 3 und curl. Diese Übung ändert weder Produktions-Nginx, SSH, Firewall noch Festplatten. Überprüfen Sie ss -lnt auf einen freien Loopback-Port 18080 und ändern Sie alle entsprechenden Laborwerte, falls dieser bereits verwendet wird.
Überprüfen Sie den tatsächlichen Python-Pfad mit command -v python3. Überschreiben Sie kein vorhandenes Unit- oder Lab-Verzeichnis mit diesen Namen. Der Python-Entwicklungs-HTTP-Server ist auf diese Loopback-Übung beschränkt und kein Produktions-Internetserver.
mkdir -p "$HOME/linux-recovery-lab/site" "$HOME/.config/systemd/user" printf "recovery baseline\n" > "$HOME/linux-recovery-lab/site/index.html" cat > "$HOME/.config/systemd/user/linux-course-recovery.service" <<'EOF' [Unit] Description=Isolated Linux recovery lab [Service] Type=simple WorkingDirectory=%h/linux-recovery-lab/site ExecStart=/usr/bin/python3 -m http.server 18080 --bind 127.0.0.1 EOF systemctl --user daemon-reload systemctl --user start linux-course-recovery.service systemctl --user is-active linux-course-recovery.service curl --fail --max-time 5 http://127.0.0.1:18080/ cp "$HOME/.config/systemd/user/linux-course-recovery.service" "$HOME/linux-recovery-lab/service.good"
Führen Sie einen Fehler nur ein, nachdem Sie die aktive und die erwartete Seite gesehen haben. Die funktionierende Einheit wurde gespeichert und der Dienst beim Start nicht aktiviert. Wenn die Basislinie fehlschlägt, beheben Sie den Python-Pfad, die Unit-Konfiguration oder Portkonflikte, bevor Sie fortfahren.
Experiment 1: Brechen Sie nur den ausführbaren Pfad
sed -i 's@ExecStart=/usr/bin/python3 @ExecStart=/nonexistent/course-python @' "$HOME/.config/systemd/user/linux-course-recovery.service" systemctl --user daemon-reload systemctl --user restart linux-course-recovery.service systemctl --user status linux-course-recovery.service --no-pager journalctl --user -u linux-course-recovery.service --since "5 minutes ago" --no-pager
Die Einheit verweist jetzt auf eine nicht existierende ausführbare Datei, sodass der Dienst nicht aktiv bleiben kann. Je nach Zeitpunkt kann der Startbefehl sofort fehlschlagen oder der nachfolgende Status einen Fehler aufzeigen. Die Protokolle sollten einen Ausführungsfehler identifizieren; systemd kann 203/EXEC melden. Zeichnen Sie die tatsächliche Meldung auf, anstatt jeden fehlgeschlagenen Dienst als Netzwerkproblem zu behandeln.
Konfiguration wiederherstellen und die Antwort überprüfen
cp "$HOME/linux-recovery-lab/service.good" "$HOME/.config/systemd/user/linux-course-recovery.service" systemctl --user daemon-reload systemctl --user reset-failed linux-course-recovery.service systemctl --user start linux-course-recovery.service systemctl --user is-active linux-course-recovery.service curl --fail --max-time 5 http://127.0.0.1:18080/
Die bekannte gute Datei wiederherstellen, den Manager neu laden und den Dienst starten. Reset-failed kann den Fehlerzustand und die Start-Limits zurücksetzen, repariert jedoch keine ungültige Konfiguration. Die Wiederherstellung ist erst dann abgeschlossen, wenn der Dienststatus und die erwartete Seite beide zurückkehren.
Experiment 2: Einen geschlossenen Port unterscheiden von einem HTTP-Fehler
curl -i --max-time 5 http://127.0.0.1:18080/missing-resource systemctl --user stop linux-course-recovery.service curl -i --connect-timeout 2 --max-time 5 http://127.0.0.1:18080/ ss -lnt systemctl --user start linux-course-recovery.service curl --fail --max-time 5 http://127.0.0.1:18080/
Die erste Anfrage erhält HTTP 404 von einem laufenden Server. Nach dem Stoppen des Dienstes schlägt die nächste Anfrage auf Verbindungsebene fehl, typischerweise mit Ablehnung, anstatt HTTP 404 zu erhalten. Vergleichen Sie das Verhalten von curl mit und ohne --fail, da eine gewöhnliche 404-Übertragung erfolgreich beendet werden kann. Dies unterscheidet Dienst-, Transport- und HTTP-Fehler, ohne eine Firewall zu ändern.
Ein Wiederherstellungsprotokoll für jeweils eine Änderung führen
| Protokoll | Beispielbeweis |
|---|---|
| Basislinie | Aktive Einheit, Listener, erwartete Seite |
| Änderung | Nur ExecStart oder Dienst stoppen |
| Beweise | Zeit, Exit-Status, Journal, HTTP, Socket |
| Wiederherstellung | Bekannte gute Konfiguration oder Dienst starten |
| Erneut testen | Gleiche URL, Port und erwarteter Inhalt |
| Prävention | Validierung vor der Bereitstellung und Zustandsprüfungen |
Füllen Sie die Systemfestplatte nicht, blockieren Sie nicht den Management-SSH-Zugang und löschen Sie keine zufälligen Dateien in dieser Übung. Störendere Tests erfordern einen separaten Klon, begrenzten Speicher, verifizierten Konsolenzugang und Backups. Das Ziel ist eine evidenzbasierte Diagnose und Wiederherstellung, nicht maximale Störung.
Stoppen Sie das Labor und entfernen Sie nur seine eigene Einheit.
systemctl --user stop linux-course-recovery.service systemctl --user reset-failed linux-course-recovery.service rm -- "$HOME/.config/systemd/user/linux-course-recovery.service" systemctl --user daemon-reload ss -lnt
Bestätigen Sie, dass der Loopback-Listener verschwunden ist. Überprüfen und entfernen Sie das Lab-Verzeichnis separat; es enthält die Basiskonfiguration und die statische Seite. In Umgebungen mit anderen Diensten sollten fehlgeschlagene Zustandsoperationen auf die relevante Einheit beschränkt werden, anstatt nicht zusammenhängende Benutzerfehler zu löschen.




