Come posso spostare la directory / var / log


15

Sul nostro server di produzione è presente una piccola unità per il punto di montaggio principale /, /var/logoccupa troppo spazio e devo eliminare manualmente alcuni file. Come posso passare /var/log/per dire /home/logSENZA REBOOTING?

Ecco cosa ho pensato:

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

Ma so che alcuni servizi usano descrittori di file, quindi continueranno a usare /var/logo inode.


C'è una risposta dettagliata essenzialmente alla stessa domanda su AskUbuntu su askubuntu.com/a/346579/422224
Eborbob

Questa non è una risposta ma un suggerimento. se possibile, utilizzare per i registri un file system con compressione in tempo reale, come btrfs. Quando si monta questa partizione, utilizzare l'opzione di montaggio "compress = lzo" o "compress = zlib". lzo offre prestazioni migliori, una compressione zlib migliore.
Massimo,

Risposte:


25

Design adeguato

Presumo che tu non sia in grado di estendere semplicemente il filesystem in questione (usando lvextend && ext2online), perché non usi LVM o usi un tipo di filesystem sbagliato.

Il tuo approccio

Quello che hai proposto potrebbe funzionare se segnali i demoni con SIGHUP (uccidi -1 pid). Ovviamente dovresti in seguito "montare -o legare / / da qualche parte" e ripulire ciò che è stato lasciato sotto montato / var / log. Ma ha un cattivo odore per me, specialmente per la produzione.

Evita i tempi di inattività, ottieni un risultato pulito (ma complicato da fare)

Dimentica l'idea "mount -o bind", crea una nuova LV / partizione, ma non montarla ancora.

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

Per ogni demone che ha qualsiasi file aperto (mi aspetterei almeno syslog, inetd, sshd):

  • riconfigurare il demone no per accedere a / var / log
  • aggiorna il demone ( kill -1 o /etc/init.d/script reload)
  • confermare con lsof | grep /var/log quel demone che ha chiuso i suoi file

Montare su / var / log. Ripristina le vecchie configurazioni, SIGHUP / ricarica nuovamente i demoni.

Modo semplice (downtime)

Crea un nuovo LV / partizione e montalo correttamente su / var o / var / log. Il modo più semplice è portare il server in modalità manutenzione (modalità utente singolo) e utilizzare la console effettiva (non ssh) per l'operazione.


8

Le risposte di tutti gli altri sono eccellenti e corrette e dovresti assolutamente leggerle prima.

Ho solo pensato di condividere questo perché semplifica il copia e incolla, se il tuo caso risulta essere abbastanza semplice come il mio era:

Arresta il syslog e copia i log correnti:

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

quindi, montare la nuova posizione sopra /var/log. Supponiamo che sia un nuovo dispositivo chiamato/dev/sdb

mount /dev/sdb /var/log

ora puoi copiare nuovamente i file e riavviare il syslog:

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

Supponendo che tutto ciò accada abbastanza presto nella vita della tua macchina, rsyslogè probabilmente l'unico demone in esecuzione. YMMV!

PS: fstabprobabilmente vorrai aggiungerlo anche al tuo . Ecco un modo per farlo, assumendo ancora una volta un montaggio molto semplice:

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

(cfr /server//a/267610/80606 sulla cattura di mtab in fstab)


5
Bella soluzione. L'unica cosa che cambierei è sostituire il tuo cp -rcon sudo tar cpfe sudo tar xpfper preservare la proprietà e le autorizzazioni dei file nel caso ci siano registri creati da un utente diverso da root.
Brenda Bell,

2

Un'altra cosa che potresti fare è:

  • Arresta i processi in cui sono presenti file aperti /var/log
  • Verifica che non ci siano processi con file aperti attivi /var/log(usando lsofcome suggerito kubanskamac)
  • Sposta il tuo /var/login un'altra partizione con abbastanza spazio libero (seguendo il tuo esempio, sarebbe /home/log)
  • Crea un collegamento simbolico da / var / log a / home / log ( ln -s /home/log /var/log)
  • Riavvia i processi che hai interrotto nel primo passaggio

Si prega di notare che questo è lontano da quello che considererei una buona pratica. È solo una soluzione alternativa, quindi non è necessario arrestare il server. La soluzione giusta sarebbe quella di creare una nuova /varo una /var/logpartizione con spazio sufficiente (o espandere quella corrente),


Ci sarebbe qualche effetto nel fare l'idea del link se il logrotate fosse eseguito? Non sapevo se avrebbe sovrascritto o rovinato le posizioni dei file se non fossero già link ... ciò potrebbe significare più mal di testa di manutenzione in seguito.
Bart Silverstrim,

Sì, finalmente sembra che fare questa operazione mentre il server è in esecuzione non sia così buono. Non sarò quindi in grado di vedere quale processo utilizza ancora il vecchio / var / log / Inoltre penso che alcune applicazioni non gestiscano facilmente il collegamento simbolico in modo da poter eventualmente rovinare il registro. Forse dovrei programmare una modalità di manutenzione. In realtà sto eliminando manualmente i file quando lo spazio a sinistra diventa breve. mriedman: Controllerò se posso ridimensionare quella partizione
Razique,

0

Un'altra soluzione basata su @hwjp, se non è possibile utilizzare un altro volume di unità per spostarli, è possibile creare un volume di unità virtuale in un altro volume che ha più spazio disponibile (questo è il mio caso):

Crea volume virtuale:

A) fare: sudo dd if=/dev/zero of=VHD-log.img bs=1M count=1200

  • if = / dev / zero: file di input per fornire un flusso di caratteri per l'inizializzazione della memorizzazione dei dati
  • of = VHD.img: file immagine da creare come volume di archiviazione su / thevolumeofyourchoice
  • bs = 1M: legge e scrive fino a 1M alla volta
  • count = 1200: copia solo 1200M (1GB) blocchi di input

B) fare: sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.imgformattare il tipo di file system EXT4 nel file di immagine del registro VHD con l'utilità mkfs.

C) fare: sudo mkdir /thevolumeofyourchoice/vlogMontare il registro VHD in una directory (punto di montaggio)

D) fare: sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /thevolumeofyourchoice/vlog

D1) Per montare VHD-log all'avvio del sistema nella directory finale, aggiungere questa voce nel file / etc / fstab.

/thevolumeofyourchoice/VHD-log.img  /var/log/  ext4    defaults        0  0

Sposta i vecchi file di registro:

E) fare:

  • service rsyslog stop
  • lsof | grep /var/log per elencare i file aperti in / var / log e disattivare il demone necessario (apach2, freshclam nel mio caso)
  • cp -rp /var/log/* /thevolumeofyourchoice/vlog (cp -p come --preserve = mode, proprietà, timestamps)

F) fare:

  • sudo umount /thevolumeofyourchoice/vlog
  • sudo mv /var/log /var/log-old
  • sudo mkdir /var/log
  • sudo chgrp syslog /var/log
  • sudo mount -t auto -o loop /thevolumeofyourchoice/VHD-log.img /var/log

G) do: service rsyslog starte riavvia gli altri servizi che hai interrotto

Infine ricontrolla:

Puoi fare un - lsof | grep /var/logper elencare i file aperti in / var / log e verificare che puntino a / var / log e non / var / log-old

Puoi mv, eseguire il backup o eliminare / var / log-old dopo tutto è ok.


-1

Vorrei solo:

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

È bello lasciarlo /var/logmontato così /home/logcom'è? Tutta questa domanda non è per gli amministratori esperti, presumo.
Kubanczyk,

Cosa intendi? / home / log è montato su / var / log, non viceversa. E sì, non è un problema lasciarlo così com'è, assicurati solo che sia ripristinato su ogni avvio automaticamente e abbastanza presto per tutti i processi per non tentare di creare alcuni nuovi log nel punto di montaggio vuoto / var / log.
Alexander Shcheblikin,

molte volte i requisiti di sicurezza richiedono / var / log e / var / log / audit su punti di montaggio separati effettivi. Altrimenti lasciali essere e basta impostare la rotazione del registro appropriata per evitare l'utilizzo del disco non necessario.
Brad,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.