Wie kann ich das Verzeichnis / var / log verschieben?

14

Auf unserem Produktionsserver befindet sich ein kleines Laufwerk für den Root-Mount-Punkt /, /var/logdas zu viel Speicherplatz beansprucht und ich muss einige Dateien manuell löschen. Wie kann ich mich bewegen /var/log/, um /home/logOHNE NEUBOOT zu sagen ?

Folgendes habe ich mir gedacht:

$ mkdir /home/log
$ rsync -a /var/log /home/log
$ mount --bind /home/log /var/log
$ /etc/init.d/rsyslof restart

Ich weiß jedoch, dass einige Dienste Dateideskriptoren verwenden, sodass sie weiterhin /var/logInodes verwenden.

Razique
quelle
Es gibt eine detaillierte Antwort auf im Wesentlichen die gleiche Frage bei AskUbuntu unter askubuntu.com/a/346579/422224
Eborbob
Dies ist keine Antwort, sondern ein Vorschlag. Verwenden Sie für Protokolle nach Möglichkeit ein Dateisystem mit Echtzeitkomprimierung wie btrfs. Verwenden Sie beim Mounten dieser Partition die Mount-Option "compress = lzo" oder "compress = zlib". LZO bietet eine bessere Leistung, ZLIB eine bessere Komprimierung.
Massimo

Antworten:

23

Richtiges Design

Ich lvextend && ext2onlinegehe davon aus , dass Sie das betreffende Dateisystem nicht einfach erweitern können (mithilfe von ), da Sie kein LVM oder keinen falschen Dateisystemtyp verwenden.

Ihr Ansatz

Was Sie vorgeschlagen haben, könnte funktionieren, wenn Sie die Dämonen mit SIGHUP (kill -1 pid) signalisieren. Offensichtlich müssten Sie später "mount -o bind / / somewhere" und bereinigen, was unter mount / var / log übrig geblieben ist. Aber es hat einen schlechten Geruch für mich, besonders für die Produktion.

Ausfallzeiten vermeiden, ein sauberes Ergebnis erzielen (aber kompliziert zu machen)

Vergessen Sie die Idee "mount -o bind", erstellen Sie eine neue LV / Partition, aber mounten Sie sie noch nicht.

lsof | grep /var/log             # lists open files in /var/log

Für jeden Daemon, der eine offene Datei hat (ich würde mindestens syslog, inetd, sshd erwarten):

  • Konfigurieren Sie den Dämon no so, dass er sich in / var / log anmeldet
  • Aktualisiere den Daemon ( kill -1 oder /etc/init.d/script reload)
  • Bestätigen Sie mit, lsof | grep /var/log dass der Daemon seine Dateien geschlossen hat

Mount über / var / log. Stellen Sie alte Konfigurationen wieder her und laden Sie die Daemons erneut.

Einfache Möglichkeit (Ausfallzeit)

Erstellen Sie eine neue LV / -Partition und hängen Sie sie ordnungsgemäß über / var oder / var / log an. Die einfache Möglichkeit besteht darin, den Server in den Wartungsmodus (Einzelbenutzermodus) zu versetzen und die eigentliche Konsole (nicht ssh) für den Vorgang zu verwenden.

kubanczyk
quelle
8

Die Antworten aller anderen sind hervorragend und korrekt, und Sie sollten sie unbedingt zuerst lesen.

Ich dachte nur, ich würde das teilen, weil es das Kopieren und Einfügen erleichtert, wenn sich herausstellt, dass Ihr Fall ganz einfach ist wie der meine:

Stoppen Sie das Syslog und kopieren Sie die aktuellen Logs:

service rsyslog stop
mkdir -p /tmp/varlog
cp -r /var/log/* /tmp/varlog

dann montieren Sie Ihren neuen Standort über /var/log . Angenommen, es handelt sich um ein neues Gerät namens/dev/sdb

mount /dev/sdb /var/log

Jetzt können Sie Dateien zurückkopieren und das Syslog neu starten:

cp -r /tmp/varlog/* /var/log
rm -rf /tmp/varlog
service rsyslog start

Vorausgesetzt, dies alles geschieht ziemlich früh im Leben Ihrer Maschine, rsyslog ist dies wahrscheinlich der einzige laufende Daemon. YMMV!

PS - Sie werden es fstabwahrscheinlich auch zu Ihrem hinzufügen wollen . Hier ist eine Möglichkeit, dies zu tun, unter der Annahme, dass die Montage sehr einfach ist:

cat /etc/mtab |grep /var/log >>/etc/fstab

( Siehe /server//a/267610/80606 zum Catten von MTAB in FSTAB)

hwjp
quelle
5
Gute Lösung. Das einzige, was ich ändern würde, ist das Ersetzen Ihrer cp -rdurch sudo tar cpfund sudo tar xpfum den Dateieigentum und die Berechtigungen für den Fall beizubehalten, dass keine Protokolle von einem anderen Benutzer als root erstellt werden.
Brenda Bell
2

Eine andere Sache, die Sie tun könnten, ist:

  • Stoppen Sie die Prozesse, bei denen Dateien geöffnet sind /var/log
  • Stellen Sie sicher, dass keine Prozesse mit geöffneten Dateien aktiviert sind /var/log(Verwendung lsofwie von Kubanskamac empfohlen).
  • Verschieben Sie Ihre /var/logauf eine andere Partition mit genügend freiem Speicherplatz (das wäre nach Ihrem Beispiel /home/log)
  • Erstellen Sie eine symbolische Verknüpfung von / var / log zu / home / log ( ln -s /home/log /var/log)
  • Starten Sie die Prozesse neu, die Sie im ersten Schritt gestoppt haben

Bitte beachten Sie, dass dies alles andere als eine gute Praxis ist. Es ist nur eine Problemumgehung, damit Sie den Server nicht herunterfahren müssen. Die richtige Lösung wäre, eine neue /varoder /var/logPartition mit genügend Speicherplatz zu erstellen (oder die aktuelle zu erweitern).

mfriedman
quelle
Würde die Link-Idee einen Effekt haben, wenn das Logrotate ausgeführt wird? Ich wusste nicht, ob es Speicherorte von Dateien überschreiben oder vermasseln würde, wenn sie noch keine Links wären ... das könnte später zu mehr Wartungsproblemen führen.
Bart Silverstrim
Ja, es scheint schließlich, dass diese Operation bei laufendem Server nicht so gut ist. Ich werde dann nicht in der Lage sein zu sehen, welcher Prozess noch das alte / var / log verwendet. Außerdem denke ich, dass einige Anwendungen sich nicht leicht mit symbolischen Links auseinandersetzen, so dass es irgendwann zu einem Versagen des Protokolls kommen könnte. Vielleicht sollte ich einen Wartungsmodus einplanen. Eigentlich lösche ich die Dateien manuell, wenn der verbleibende Platz knapp wird. mriedman: Ich werde prüfen, ob ich die Größe dieser Partition ändern kann
Razique 20.08.09
-1

Ich würde nur:

apt install lsyncd
mv /var/log /varlog.root
mkdir /var/log /home/log
mount --bind /home/log /var/log

# set up lsyncd appropriately to sync real-time between /varlog.root & /var/log
service lsyncd start
sleep 3m

service rsyslog restart
# Proceed with all the other daemons
# to switch them over to the new /var/log and release /varlog.root
sleep 3m

# Then do this a few times until no processes use the old dir
lsof +D /varlog.root && rm -rf /varlog.root
Alexander Shcheblikin
quelle
Ist es gut, /var/logmontiert zu lassen , /home/logwie es ist? Ich nehme an, diese ganze Frage ist nicht für erfahrene Admins gedacht.
Kubanczyk
Was meinen Sie? / home / log wird über / var / log gemountet, nicht umgekehrt. Und ja, es ist kein Problem, es so zu belassen, wie es ist. Stellen Sie einfach sicher, dass es bei jedem Start automatisch und früh genug wiederhergestellt wird, damit nicht alle Prozesse versuchen, neue Protokolle im leeren / var / log-Mount-Punkt zu erstellen.
Alexander Shcheblikin
Häufig müssen die Sicherheitsanforderungen / var / log und / var / log / audit auf tatsächlichen separaten Bereitstellungspunkten ausgeführt werden. Andernfalls lassen Sie sie und richten Sie einfach die entsprechende Protokollrotation ein, um unnötige Datenträgerverwendung zu vermeiden.
Brad