GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich das Verzeichnis /var/log verschieben

Lösung 1:

Richtiges Design

Ich nehme an, Sie können das betreffende Dateisystem nicht einfach erweitern (mit lvextend && ext2online ), da Sie kein LVM oder einen falschen Dateisystemtyp verwenden.

Ihr Ansatz

Was Sie vorgeschlagen haben, könnte funktionieren, wenn Sie die Daemons mit SIGHUP (kill -1 pid) signalisieren. Offensichtlich müssten Sie später "mount -o bind / /somewhere" ausführen und aufräumen, was unter dem gemounteten /var/log übrig geblieben ist. Aber es riecht für mich unangenehm, besonders für die Produktion.

Vermeiden Sie Ausfallzeiten, erzielen Sie ein sauberes Ergebnis (aber kompliziert)

Vergessen Sie die "mount -o bind"-Idee, 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):

  • konfiguriere den Daemon neu, um sich in /var/log anzumelden
  • Aktualisieren Sie den Daemon (kill -1 oder /etc/init.d/script reload )
  • mit lsof | grep /var/log bestätigen dieser Daemon hat seine Dateien geschlossen

Einhängen über /var/log. Alte Konfigurationen wiederherstellen, SIGHUP/Daemons neu laden.

Einfacher Weg (Ausfallzeit)

Erstellen Sie eine neue LV/Partition und hängen Sie sie ordnungsgemäß über /var oder /var/log ein. Der einfache Weg besteht darin, den Server in den Wartungsmodus (Einzelbenutzermodus) herunterzufahren und die eigentliche Konsole (nicht ssh) für den Vorgang zu verwenden.

Lösung 2:

Die Antworten aller anderen sind ausgezeichnet und richtig, und Sie sollten sie auf jeden Fall zuerst lesen.

Ich dachte nur, ich teile dies, weil es das Kopieren und Einfügen erleichtert, wenn sich herausstellt, dass Ihr Fall so einfach ist wie meiner:

Stoppen Sie das Syslog und kopieren Sie aktuelle Protokolle heraus:

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

mounten Sie dann 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

Angenommen, dies geschieht ziemlich früh im Leben Ihrer Maschine, rsyslog ist wahrscheinlich der einzige Daemon, der läuft. YMMV!

PS - Sie möchten es sicher zu Ihrem fstab hinzufügen auch wahrscheinlich. Hier ist eine Möglichkeit, dies zu tun, wobei wir wieder von einem sehr einfachen Mount ausgehen:

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

(vgl. https://serverfault.com/a/267610/80606 über das Catting von mtab zu fstab)

Lösung 3:

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

  • Stoppen Sie die Prozesse, die Dateien auf /var/log geöffnet haben
  • Stellen Sie sicher, dass es keine Prozesse mit offenen Dateien auf /var/log gibt (mit lsof wie Kubanskamac vorgeschlagen hat)
  • Bewege deinen /var/log auf eine andere Partition mit genügend freiem Speicherplatz (nach Ihrem Beispiel wäre das /home/log )
  • Erstellen Sie einen symbolischen Link von /var/log nach /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, einen neuen /var zu erstellen oder /var/log Partition mit genügend Speicherplatz (oder erweitern Sie die aktuelle),


Linux
  1. Unterschied zwischen /var/log/messages, /var/log/syslog und /var/log/kern.log?

  2. 20 Linux-Protokolldateien, die sich im Verzeichnis /var/log befinden

  3. So kürzen Sie /var/log/lastlog-Datei

  4. So verschieben Sie /usr und /var auf eine andere Partition oder Festplatte

  5. So verschieben Sie /var auf eine separate Festplatte als separaten Einhängepunkt (Online)

So ändern Sie den Pfad der auditd-Protokolldatei /var/log/audit/audit.log

CentOS / RHEL :So rotieren Sie /var/log/wtmp- und /var/log/btmp-Dateien mit logrotate

Wie kann ich überprüfen, ob ein Verzeichnis existiert?

Django static_root in /var/www/... - keine Berechtigungen für collectstatic

Wie kann ich ein chmod im etc-Verzeichnis zurücksetzen?

Systemprotokolle sind leer (/var/log/messages; /var/log/secure; etc)