/dev/null과 같은 "블랙홀" 디렉터리를 만드는 방법은 무엇입니까?

/dev/null과 같은 "블랙홀" 디렉터리를 만드는 방법은 무엇입니까?

/dev/null" " 디렉토리(또는 "블랙홀" 디렉토리)를 생성하여 거기에 기록된 모든 파일이 실제로 기록되지 않고 사라지도록 하고 싶습니다 .

디렉토리에 큰 임시 파일을 쓰는 응용 프로그램이 있습니다. 나는 파일 이름을 제어할 수 없으며 해당 파일의 내용에 대해 별로 관심이 없습니다. 주기적으로 이러한 파일을 삭제하는 스크립트를 작성할 수 있지만 파일이 매우 빠르게 기록되어 디스크가 꽉 차게 됩니다. 나는 더 똑똑한 것을 찾고 있습니다. 실제로는 쓰기가 다른 쪽 끝에서 삭제되는 경우에도 응용 프로그램이 이러한 파일을 작성하고 있다고 "생각"하기를 원합니다.

또한보십시오이것오래된 관련 스레드.

답변1

내가 아는 한, UNIX에서는 기본적으로 지원되지 않지만 거의 모든 작업을 수행할 수 있습니다.퓨즈. 적어도nullfs1 구현, 모든 파일이 존재하고 유사하게 동작하는 파일 시스템입니다 /dev/null(이것이 제가 본 유일한 구현은 아닙니다).

^ 비교하지 마세요*BSD 널프, 이는 다음과 유사합니다.파일 시스템 바인딩.

답변2

또 다른 접근 방식은 LD_PRELOAD래퍼입니다. 기본적으로 libc.so 이전에 로드하고 open()무언가에 대한 호출을 가로채서 예상 파일 경로를 확인하고 /dev/null이를 대체하여 대상 디렉터리에 있는지 확인하는 작은 공유 라이브러리입니다.

이것의 장점은 (a) 완전히 사용자 공간에 있습니다. 커널 해킹이 필요하지 않습니다. (b) 결함이 있는 단일 응용 프로그램에만 영향을 미칩니다.

간단한 예는 다음과 같습니다http://www.noah.org/wiki/LD_PRELOAD_notesaccess(), 그러나 귀하의 경우에는 , open()& creat()시스템 ​​호출을 가로채기를 원할 것입니다 . 보다 완전한 구현을 위해 chdir(), accessat(), openat()및 기타 항목을 가로챌 수도 있습니다 .

답변3

나는 기본적으로 nullfsvfs라는 블랙홀 파일 시스템인 Linux 커널의 ramfs 예제를 기반으로 커널 모듈을 만들었습니다. FUSE 시스템을 구현하려면 사용자 공간에서 커널 공간으로 데이터를 복사해야 하는데, 이는 커널 모듈로 직접 구현하는 것에 비해 상당히 느립니다. 바라보다:

https://github.com/abbbi/nullfsvfs

답변4

프로그램이 이러한 로그를 닫을 수 없을 만큼 멍청하다면, 로그 파일을 연 후에도 오류를 확인하지 않는 것이 아닐까요? 가상 읽기 전용 파일 시스템을 마운트하려고 합니다(예: mount -o loop.)

관련 정보