Eu tenho /var/log
montado como um tmpfs, onde os arquivos de log são sincronizados periodicamente no disco pelo cron no FreeBSD. O processo é feito pelo script rc
.
Estou montando como:
mount -t tmpfs -o nosuid,noexec,mode=0755,size=100M log /var/log
Agora o problema é - desmontá-lo. Não consegue desmontar, porque (r)syslog
grava no arquivo. Isso é mostrado por lsof:
lsof /var/log/
lsof: WARNING: compiled for FreeBSD release 11.1-RELEASE-p6; this is 11.1-RELEASE.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 85515 root 2w VREG 255,2264924190 210 13 /var/log/security
rsyslogd 85515 root 4w VREG 255,2264924190 210 3 /var/log/auth.log
rsyslogd 85515 root 5w VREG 255,2264924190 2292 7 /var/log/kern.notice
rsyslogd 85515 root 6w VREG 255,2264924190 2292 11 /var/log/messages
rsyslogd 85515 root 7w VREG 255,2264924190 2292 5 /var/log/debug.log
Portanto, para desmontá-lo, primeiro tenho que parar o daemon syslog. No entanto, estou procurando uma solução mais agradável, já que essas ações são gerenciadas por um script sh rc em si.
No Linux / GNU Os's umount
tem um argumento muito útil:
--lazy detach the filesystem now, clean up things later
, que, pelo meu conhecimento, espera que um processo ativo pare o sistema de arquivos, e o então processa com a desmontagem, o que resultaria em sucesso e não quebraria o script.
Então, como uma solução alternativa para isso, como posso parar a gravação temporária do syslog em / var / log? Eu tentei emitir STOP
, tentando desmontar e CONT
sinal, mas sem efeito.
Lsof ainda relata que existem FD que estão abertos para escrita. Observe que preciso de uma solução que possa ser aplicada a partir do script sh
.
Obrigado!
EDITAR
O umount tem --force
argumento, que em circunstâncias normais eu evitaria a qualquer custo.
Mas como esse é um tmpfs
e é executado a partir de um dispositivo de memória que não bloqueia, acredito que não causará nenhum dano.
Alguns testes mostraram que não há problemas. Eu fiz isso criando arquivos fictícios no tmpfs com dd
, verifiquei suas somas, sincronizei com o hdd e, em seguida, forcei o desmembramento.
Os hashes correspondem, o que significa que os arquivos não foram corrompidos.
Bem, isso é meio que uma solução suja, mas não tenho conhecimento de outras soluções. Se alguém tiver algumas desvantagens contra este método no ram fs, por favor me avise.
ps: kudos para @ layer8problem para conselhos: -)