"mbuffer -T"는 어떻게 작동하나요?

"mbuffer -T"는 어떻게 작동하나요?

현재 테이프에 백업하고 mbuffer다음 사이에서 버퍼 역할을 하려고 합니다.

tar --acls -c /var/test | mbuffer -m 8G -P 100% -R 100M | dd of=/dev/nst0 bs=256k

하지만 약 10~20번 정도는 여전히 버퍼가 비어 있습니다. 그래서 다음 명령을 통해 파일 기반 버퍼를 사용하고 싶습니다.

tar --acls -c /var/test | mbuffer -m 60G -T /srv/testbuffer -P 100% -R 100M | dd of=/dev/nst0 bs=256k 

제가 이해한 바에 따르면 이 옵션은 -T주어진 위치에 파일을 생성하고 이를 읽기/쓰기 버퍼로 사용합니다.

그러나 파일이 생성되지 않으며 한 시스템에서는 mbuffer중단됩니다.

  • 내가 뭐 놓친 거 없니?
  • mbuffer파일이 특별한 방법으로 생성되었나요 ?
  • mbuffer다른 디렉토리에 파일을 생성하시겠습니까 ?
  • mbuffer스왑이 어떤 방식으로 확장/사용됩니까 ?

mbuffer( )의 소스 코드를 읽어보니 settings.c비아 크기만큼의 공간이 할당되어 있습니다 mbuffer.tmpfilemalloc()

이는 인수 없이 사용하는 것처럼 여전히 동일한 양의 RAM이 필요하거나 최소한 스왑이 필요하다는 의미입니까 -T?

답변1

생성된 파일이 없습니다.

mbuffer -m 60G -T /srv/testbuffer파일을 생성하고 연 다음 즉시 연결을 해제하세요. 파일 설명자를 확인하면 /proc/<PID of mbuffer>/fd다음 포인터를 찾을 수 있습니다.

/srv/testbuffer (deleted)

이것은 임시 파일에 대한 상당히 표준적인 트릭입니다. 어떤 이유로든 종료 되면 mbuffer(잔인하게 종료되더라도) 파일 ​​시스템은 결국 공간을 확보하게 됩니다(최악의 경우 정전 또는 커널 패닉: 그 이후에는 fsck나중에). 완전히 사용되지 않거나 폐기된 파일은 디스크 공간을 영원히 차지하지 않습니다.

한 시스템에서는 mbuffer그냥 멈춥니다.

이 도구는 데이터 버퍼링이라는 주요 작업을 시작하기 전에 실제로 디스크 공간을 예약합니다 fallocate(예를 들어 스파스 파일을 생성하는 것이 아니라) . truncate대용량 파일을 할당하는 데 시간이 걸릴 수 있습니다. 이 지연은 파일 시스템 유형, 조각화 가능성 등에 따라 달라집니다.

이는 인수 없이 사용하는 것처럼 여전히 동일한 양의 RAM이 필요하거나 최소한 스왑이 필요하다는 의미입니까 -T?

아니요. 선택한 경로(귀하의 경우)에 적합한 파일 시스템에 파일이 있지만 /srv/testbuffer경로가 더 이상 존재하지 않습니다. (참고: 경로가 동일한 새 파일은 inode 번호가 다른 별도의 파일이 됩니다.)

관련 정보