/var/log는 tmpfs로 마운트되며 FreeBSD에서는 마운트 해제할 수 없습니다.

/var/log는 tmpfs로 마운트되며 FreeBSD에서는 마운트 해제할 수 없습니다.

/var/logFreeBSD의 cron을 통해 로그 파일이 주기적으로 디스크에 동기화되는 tmpfs로 마운트했습니다 . 이 프로세스는 스크립트에 의해 수행됩니다 rc.

저는 다음과 같이 설치했습니다.

mount -t tmpfs -o nosuid,noexec,mode=0755,size=100M log /var/log

이제 문제는 제거하는 것입니다. (r)syslog파일이 작성되었기 때문에 제거할 수 없습니다 . 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

따라서 이를 제거하려면 먼저 syslog 데몬을 중지해야 합니다. 그러나 이 작업은 sh rc 스크립트 자체에서 관리되므로 더 나은 솔루션을 찾고 있습니다.

Linux/GNU Os에는 umount매우 편리한 주장이 있습니다 .--lazy detach the filesystem now, clean up things later

, 내가 이해한 바에 따르면 활성 프로세스가 파일 시스템에 대한 읽기 및 쓰기를 중지할 때까지 기다립니다.그 다음에제거 프로세스를 수행하면 성공하고 스크립트가 중단되지 않습니다.

그렇다면 이 문제에 대한 해결 방법으로 syslog가 일시적으로 /var/log에 기록되지 않도록 하려면 어떻게 해야 합니까? STOP을 내보내고 제거하고 신호를 보내려고 시도했지만 CONT아무 소용이 없습니다.

Lsof는 여전히 FD에 쓰기가 가능하다고 보고합니다. 스크립트에서 적용할 수 있는 솔루션이 필요하다는 점을 참고하세요 sh.

감사해요!

편집하다

umount에는 --force매개변수가 있는데, 일반적인 상황에서는 어떤 희생을 치르더라도 이를 피할 것입니다. 하지만 이것은 하나이고 tmpfs블록 장치가 아닌 메모리에서 실행되므로 아무런 해를 끼치 지 않을 것이라고 확신합니다.

여러 테스트에서 아무런 문제가 없는 것으로 나타났습니다. 나는 tmpfs 에 더미 파일을 생성하고 그 합계를 확인하고 하드 드라이브와 동기화한 다음 강제로 마운트 해제함으로써 dd이를 수행했습니다 . 해시가 일치합니다. 이는 파일이 손상되지 않았음을 의미합니다.

글쎄, 그것은 약간 지저분한 해결 방법이지만 다른 해결책은 모르겠습니다. RAM fs에서 이 접근 방식에 몇 가지 단점이 있는 사람이 있으면 알려주시기 바랍니다.

ps: 제안해주신 @layer8problem에게 감사드립니다 :-)

관련 정보