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 (mitlsof
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),