No nosso servidor de produção, há uma pequena unidade para o ponto de montagem raiz /
,
/var/log
está ocupando muito espaço e tenho que excluir manualmente alguns arquivos. Como posso mudar /var/log/
para, digamos, /home/log
SEM 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/log
ou inodes.
linux
debian
log-files
disk-space-utilization
Razique
fonte
fonte
Respostas:
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.
Para cada daemon que possui qualquer arquivo aberto (eu esperaria pelo menos syslog, inetd, sshd):
kill -1
ou/etc/init.d/script reload
)lsof | grep /var/log
que o daemon fechou seus arquivosMonte 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.
fonte
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:
em seguida, monte seu novo local
/var/log
. Digamos que seja um novo dispositivo chamado/dev/sdb
agora você pode copiar os arquivos novamente e reiniciar o syslog:
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ê
fstab
provavelmente desejará adicioná-lo ao seu . Aqui está uma maneira de fazer isso, novamente assumindo uma montagem muito direta:( consulte /server//a/267610/80606 sobre como catting mtab para fstab)
fonte
cp -r
comsudo tar cpf
eosudo tar xpf
de preservar a propriedade do arquivo e permissões na chance existem logs criados por um usuário diferente de root.Outra coisa que você pode fazer é:
/var/log
/var/log
(usandolsof
como sugerido pelo kubanskamac)/var/log
para outra partição com espaço livre suficiente (seguindo seu exemplo, isso seria/home/log
)ln -s /home/log /var/log
)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
/var
ou/var/log
partição com espaço suficiente (ou expandir a atual),fonte
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
B) do:
sudo mkfs -t ext4 /thevolumeofyourchoice/VHD-log.img
formate o tipo de sistema de arquivos EXT4 no arquivo de imagem de log VHD com o utilitário mkfs.C) do:
sudo mkdir /thevolumeofyourchoice/vlog
monte 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.
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 start
e reinicie outros serviços que você parouFinalmente, verifique novamente:
Você pode fazer a -
lsof | grep /var/log
para listar arquivos abertos em / var / log e verificar se eles apontam para / var / log e não / var / log-oldVocê pode mv, fazer backup ou excluir / var / log-old depois que tudo estiver ok.
fonte
Eu apenas:
fonte
/var/log
montado/home/log
como está? Toda essa pergunta não é para administradores experientes, presumo.