Como posso mover o diretório / var / log

14

Em nosso servidor de produção, há uma pequena unidade para o ponto de montagem raiz / , /var/log está ocupando muito espaço e eu tenho que excluir manualmente alguns arquivos. Como posso mover /var/log/ para, digamos, /home/log SEM REINICIALIZAR?

Aqui está o que eu pensei:

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

Mas eu sei que alguns serviços usam descritores de arquivos, então eles continuarão usando /var/log ou inodes.

    
por Razique 19.08.2009 / 10:44

4 respostas

23

Design adequado

Eu suponho que você é incapaz de simplesmente estender o sistema de arquivos em questão (usando lvextend && ext2online ), porque você não usa o LVM ou usa o tipo de sistema de arquivos errado.

Sua abordagem

O que você propôs pode funcionar se você sinalizar os daemons com SIGHUP (kill -1 pid). Obviamente, você precisaria mais tarde "mount -o bind / / somewhere" e limpar o que foi deixado abaixo do / var / log montado. Mas tem um cheiro ruim para mim, especialmente para a produção.

Evite tempo de inatividade, tenha um resultado limpo (mas complicado)

Esqueça a ideia "mount -o bind", crie uma nova partição LV /, mas não a monte ainda.

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

Para cada daemon que tenha algum arquivo aberto (eu esperaria pelo menos syslog, inetd, sshd):

  • reconfigure o daemon no para logar em / var / log
  • atualize o daemon ( kill -1 ou /etc/init.d/script reload )
  • confirme com lsof | grep /var/log que o daemon fechou seus arquivos

Monte sobre / var / log. Restaure configurações antigas, SIGHUP / recarregue daemons novamente.

Modo fácil (tempo de inatividade)

Crie uma nova partição LV / e monte-a corretamente em / var ou / var / log. A maneira mais fácil é derrubar o servidor no modo de manutenção (modo de usuário único) e usar o console real (não o ssh) para a operação.

    
por 19.08.2009 / 11:26
7

As respostas de todos os outros são excelentes e corretas e você deve definitivamente lê-las primeiro.

Eu apenas pensei em compartilhar isso porque facilita o recurso de copiar e colar, se o caso for bem simples, como o meu:

Pare o syslog e copie os logs atuais:

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

em seguida, monte sua nova localização em /var/log . Digamos que seja um novo dispositivo chamado /dev/sdb

mount /dev/sdb /var/log

agora você pode copiar arquivos de volta e reiniciar o syslog:

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

Supondo que tudo isso aconteça bem cedo na vida da sua máquina, rsyslog provavelmente será o único daemon em execução. YMMV!

PS - você provavelmente desejará adicioná-lo ao seu fstab . Aqui está uma maneira de fazer isso, novamente assumindo uma montagem muito simples:

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

(cf link sobre como direcionar o mtab para o fstab)

    
por 07.06.2012 / 20:18
1

Outra coisa que você pode fazer é:

  • Pare os processos que possuem arquivos abertos em /var/log
  • Verifique se não há processos com arquivos abertos em /var/log (usando lsof como sugerido pelo kubanskamac)
  • Mova seu /var/log para outra partição com espaço livre suficiente (seguindo seu exemplo, isso seria /home/log )
  • Crie um link simbólico de / var / log para / home / log ( ln -s /home/log /var/log )
  • Reinicie os processos que você parou na primeira etapa

Por favor, note que isso está longe do que eu considero como uma boa prática. É apenas uma solução alternativa para que você não precise desligar o servidor. A solução certa seria criar uma nova partição /var ou /var/log com espaço suficiente (ou expandir a atual),

    
por 19.08.2009 / 12:41
0

Gostaria apenas de:

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
    
por 14.05.2018 / 19:28