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.

Razique
fonte
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.

kubanczyk
fonte
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)

hwjp
fonte
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),

mfriedman
fonte
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.

Mike Castro Demaria
fonte
-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
Alexander Shcheblikin
fonte
É 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