tmpfs 메모리 기반 파일 시스템에 /tmp 디렉토리를 마운트하는 방법은 다음과 같습니다.
systemctl enable tmp.mount
그리고 다음 사항을 고려하세요.
이유 중 하나:서로 다른 경로에 대해 별도의 파일 시스템을 사용하면 전체 파일 시스템이나 오류가 발생한 파일 시스템으로 인해 발생하는 오류로부터 시스템을 보호할 수 있습니다.
-
다른 이유:/tmp 디렉토리에 파일을 쓰는 일부 애플리케이션은 디스크 대신 메모리를 사용할 때 큰 개선을 볼 수 있습니다.
디스크 캐싱은 항상 작동합니까? 내 말은, 당신이 글을 쓸 때어느디스크에 플러시될 때까지 어쨌든 RAM에 쓸 폴더(뿐만 아니라 /tmp
)... 커널은 이 모든 것을 뒤에서 처리하므로 조정하기 위해 개입할 필요가 없다고 생각합니다. 그렇다면 이 작업에 실제 가치가 있습니까 systemctl enable tmp.mount
? 그렇다면 있다면 어떨까요?
또한 (CentOS-7.6에서) 현재 겪고 있는 상황을 이해하기 위해 이것을 테스트하고 있습니다.
- CentOS 7.6은 500GB SSD에 설치되어 있으며, 간단한 디스크 파티션은 다음과 같습니다.
- 1GB
/dev/sda1
/boot
- 100MB
/dev/sda2
는/boot/efi
- 475GB
/dev/sda3
/
- 1GB
- 8GB DDR-4 RAM을 갖춘 PC
- 내가 이렇게 하면
systemctl enable tmp.mount
나는 얻을 것이다- 3.9GB
tmpfs
는/tmp
- 3.9GB
tmpfs /tmp at 3.9GB
(a) 먼저 디스크 캐싱으로 인해 RAM을 기반으로 최대 8GB의 용량을 갖고, (b) 사용 가능한 디스크 사용량 중 8GB RAM의 디스크 캐싱을 기반으로 400GB를 초과하는 기본 방식보다 이것이 어떻게 더 낫습니까?
답변1
이 구성이 "가치를 추가"하는지 여부는 전적으로 해당 사용 사례에 따라 다릅니다. "좋음", "나쁨"은 컨텍스트가 없는 다양한 구성 옵션에 대한 유효한 레이블이 아닙니다.
RAM 용량이 크고 트랜잭션 수가 많은 시스템의 경우 tmpfs 파일 시스템을 사용하면 성능이 향상될 수 있습니다(예:유형 2 하이퍼바이저). 이는 "좋은" 사용 사례일 수 있습니다.
또는 RAM은 적지만 저장 공간은 많은 시스템(예: 오늘날 만들어진 모든 IoT 쓰레기)은 /tmp 저장 장치에 대한 물리적 쓰기로 더 나은 성능을 발휘할 수 있습니다. 스왑도 활성화됩니다). 이는 tmpfs /tmp에 대한 "나쁜" 사례로 간주될 수 있습니다.
답변2
마운트 경로를 사용하는 경우 tmpfs
기본 크기는 실제 메모리의 절반입니다. 시스템에 메모리 부족이 없는 한 여기에 넣은 모든 파일은 메모리에 유지되며 디스크에 영향을 주지 않습니다.
이는 회전 디스크, SSD 또는 nvme와 같은 실제 영구 저장소에 파일을 쓰는 것과 대조됩니다. 500GB의 여유 메모리가 있고 회전 디스크의 파일에 대해 1GB 열기-쓰기-닫기 작업을 수행하는 경우 커널은 다음과 같은 몇 가지 작업을 수행합니다.
- 커널이 쓰기를 버퍼링합니다.
- 파일 시스템이 저널링 파일 시스템(예: ext4, xfs, btrfs, zfs 등 현재 사용 중인 대부분의 파일 시스템)인 경우 먼저 해당 로그 쓰기를 버퍼링합니다.
- 커널은 구성된 I/O 스케줄러에 따라 적절한 I/O 유휴 기간 또는 최종 기한 동안 버퍼를 적절한 순서로 플러시합니다.
- 이러한 유휴 상태가 발생하기 전에 파일을 생성하고 쓰고 삭제하더라도 커널은 결국 포함하는 디렉터리의 수정 시간을 업데이트합니다.
tmpfs는 전체 시스템 메모리 사용량이 충분히 높아서 충분한 메모리를 사용하는 애플리케이션(및 모든 프로세스)을 디스크로 교체해야 하는 경우에만 디스크에 접근합니다. tmpfs 블록은 페이지 아웃되어 다른 애플리케이션의 메모리와 마찬가지로 스왑에 기록됩니다. 스왑을 비활성화하면 커널은 메모리를 확보하기 위해 프로세스를 종료하기 시작합니다. 하지만 그 외에는 디스크에 닿는 것이 없습니다. 로그 없음, 생성/액세스/수정 타임스탬프 없음, 사용자 권한 없음, 아무것도 없습니다. tmpfs를 사용하면 "이 파일들을 다른 모든 파일과 함께 메모리에 보관하고 잊어버릴 수 있는 주 메모리로 처리합니다"라고 말하는 것입니다.
tmpfs는 처음 나왔을 때 정말 놀라웠고 Solaris/Linux에서 "램 디스크"를 만드는 거의 모든 방법을 대체했습니다(아직 어디로 이식되었는지 기억이 나지 않습니다).
- tmpfs에 대한 기본 정보:https://www.kernel.org/doc/html/latest/filesystems/tmpfs.html