Como posso mover o diretório / var / log


15

No nosso servidor de produção, há uma pequena unidade para o ponto de montagem raiz /, /var/logestá ocupando muito espaço e tenho que excluir manualmente alguns arquivos. Como posso mudar /var/log/para, digamos, /home/logSEM REINICIAR?

Aqui está a coisa 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 arquivo, então eles continuarão usando /var/logou inodes.


Há uma resposta detalhada para essencialmente a mesma pergunta sobre a AskUbuntu em askubuntu.com/a/346579/422224
— Eborbob

Esta não é uma resposta, mas uma sugestão. se possível, use para registrar um sistema de arquivos com compressão em tempo real, como btrfs. Ao montar esta partição, use a opção de montagem "compress = lzo" ou "compress = zlib". lzo oferece melhor desempenho, zlib melhor compactação.
— Massimo

Respostas:


25

Design adequado

Suponho que você não possa simplesmente estender o sistema de arquivos em questão (usando lvextend && ext2online), porque você não usa LVM ou usa um tipo de sistema de arquivos errado.

Sua abordagem

O que você propôs pode funcionar se você sinalizar os daemons com SIGHUP (matar -1 pid). Obviamente, você precisará posteriormente "montar -o bind / / em algum lugar" e limpar o que foi deixado sob / var / log montado. Mas tem um cheiro ruim para mim, especialmente para produção.

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

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

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

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

  • reconfigure o daemon no para efetuar logon 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. Restaurar configurações antigas, SIGHUP / recarregar daemons novamente.

Maneira fácil (tempo de inatividade)

Crie uma nova partição LV / e monte-a corretamente sobre / var ou / var / log. A maneira mais fácil é colocar 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.


8

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

Eu apenas pensei em compartilhar isso porque facilita a copiar e colar, se o seu 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 seu novo local /var/log. Digamos que seja um novo dispositivo chamado/dev/sdb

mount /dev/sdb /var/log

agora você pode copiar os arquivos novamente 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é provável que seja o único daemon em execução. YMMV!

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

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

( consulte /server//a/267610/80606 sobre como catting mtab para fstab)


5
Ótima solução. A única coisa que eu mudaria é substituir o seu cp -rcom sudo tar cpfeo sudo tar xpfde preservar a propriedade do arquivo e permissões na chance existem logs criados por um usuário diferente de root.
— Brenda Bell

2

Outra coisa que você pode fazer é:

  • Interrompa os processos que possuem arquivos abertos no /var/log
  • Verifique se não há processos com arquivos abertos ativados /var/log(usando lsofcomo sugerido pelo kubanskamac)
  • Mova o seu /var/logpara 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

Observe que isso está longe do que eu consideraria 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 /varou /var/logpartição com espaço suficiente (ou expandir a atual),


Haveria algum efeito ao executar a ideia do link se o logrotate for executado? Eu não sabia se substituiria ou danificaria a localização dos arquivos se eles ainda não fossem links ... isso poderia significar mais dores de cabeça de manutenção mais tarde.
— Bart Silverstrim

Sim, finalmente parece que fazer essa operação enquanto o servidor está em execução não é tão bom. Não poderei ver qual processo ainda usa o antigo / var / log / Além disso, acho que alguns aplicativos não lidam facilmente com o link simbólico, o que pode acabar estragando o log. Talvez eu deva agendar um modo de manutenção. Na verdade, eu estou excluindo manualmente os arquivos quando o espaço esquerdo ficar curto. mriedman: Vou verificar se eu posso redimensionar a partição
— Razique

0

Outra solução baseada em @hwjp, se você não puder usar outro volume de unidade para movê-los, poderá criar um volume de unidade virtual em outro volume que tenha mais espaço disponível (esse é o meu caso):

Crie volume virtual:

Alvoroço : sudo dd if=/dev/zero of=VHD-log.img bs=1M count=1200

  • if = / dev / zero: arquivo de entrada para fornecer um fluxo de caracteres para inicializar o armazenamento de dados
  • of = VHD.img: arquivo de imagem a ser criado como volume de armazenamento em / thevolumeofyourchoice
  • bs = 1M: leia e escreva até 1M de cada vez
  • count = 1200: copia apenas blocos de entrada de 1200M (1GB)

B) do: sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.imgformate o tipo de sistema de arquivos EXT4 no arquivo de imagem de log VHD com o utilitário mkfs.

C) do: sudo mkdir /thevolumeofyourchoice/vlogmonte o VHD-log em um diretório (ponto de montagem)

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

D1) Para montar o log VHD na inicialização do sistema no diretório final, adicione esta entrada no arquivo / etc / fstab.

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

Mova arquivos de log antigos:

E) faça:

  • service rsyslog stop
  • lsof | grep /var/log para listar arquivos abertos em / var / log e desativar o daemon necessário (apach2, freshclam no meu caso)
  • cp -rp /var/log/* /thevolumeofyourchoice/vlog (cp -p igual a --preserve = mode, propriedade, registros de data e hora)

F) faça:

  • 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 reinicie outros serviços que você parou

Finalmente, verifique novamente:

Você pode fazer a - lsof | grep /var/logpara listar arquivos abertos em / var / log e verificar se eles apontam para / var / log e não / var / log-old

Você pode mv, fazer backup ou excluir / var / log-old depois que tudo estiver ok.


-1

Eu apenas:

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

É bom deixar /var/logmontado /home/logcomo está? Toda essa pergunta não é para administradores experientes, presumo.
— Kubanczyk

O que você quer dizer? / home / log está montado sobre / var / log, e não o contrário. E sim, não é um problema deixá-lo como está, apenas verifique se ele é restaurado em cada inicialização automaticamente e com antecedência suficiente para que todos os processos não tentem criar alguns novos logs no ponto de montagem vazio / var / log.
— Alexander Shcheblikin

muitas vezes os requisitos de segurança precisam de / var / log e / var / log / audit em pontos de montagem separados reais. Caso contrário, deixe-os como estão e configure a rotação de log apropriada para evitar o uso desnecessário do disco.
— 27418 Brad
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.