Tmpfs
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
tmpfs는 가상 메모리를 활용하여 데이터를 저장하는 임시 파일 시스템으로, 하드 디스크가 아닌 메모리에 데이터를 저장한다. 시스템 재부팅 시 저장된 모든 파일이 소실되며, 유닉스 계열 운영체제에서 일반적으로 `/tmp` 디렉터리나 공유 메모리 형태로 사용된다. tmpfs는 빠른 캐시 저장으로 시스템 효율성을 높이지만, 스왑 공간 부족 시 메모리 소모가 클 수 있으며, 재부팅 시 캐시 데이터 손실의 단점이 있다. 썬OS, 리눅스, BSD, 마이크로소프트 윈도우 등 다양한 운영체제에서 구현되었으며, 각 시스템별로 특징적인 구현 방식을 보인다.
더 읽어볼만한 페이지
| Tmpfs | |
|---|---|
| 개요 | |
| 종류 | 파일 시스템 |
| 개발사 | 리눅스 BSD Solaris |
| 초기 릴리스 | 2000년 |
| 최신 버전 | 5.17 (2022년 3월 20일) |
| 라이선스 | GNU 일반 공중 사용 허가서 |
| 세부 사항 | |
| 유형 | 디스크 기반 파일 시스템 |
| 상태 | 활성 |
| 특징 | |
| 특징 | 메모리 내 파일 시스템 휘발성 크기 조정 가능 스왑 공간 사용 가능 |
2. 특징
tmpfs에 저장된 모든 것은 임시적이다. 즉, 하드 디스크와 같은 비휘발성 저장 장치에는 파일이 직접 생성되지 않는다(물론 스왑 공간이 운영 체제의 페이지 교체 정책에 따라 백업 저장소로 사용된다). 재부팅 시 tmpfs의 모든 내용은 손실된다.
tmpfs에서 사용되는 메모리는 포함된 파일에 맞춰 증가하고 감소한다.
많은 유닉스 배포판은 기본적으로 파일 시스템의 `/tmp` 분기 또는 공유 메모리에 tmpfs를 활성화하고 사용한다. 다음은 `df` 명령어를 사용하여 확인한 예시이다.
| Filesystem | Size | Used | Avail | Use% | Mounted on |
|---|---|---|---|---|---|
| tmpfs | 256M | 688K | 256M | 1% | /tmp |
일부 리눅스 배포판(예: 데비안)은 기본적으로 `/tmp`에 tmpfs가 마운트되어 있지 않다. 이 경우 `/tmp` 아래의 파일은 `/`와 동일한 파일 시스템에 저장된다.
거의 모든 리눅스 배포판에서 임시 런타임 파일(예: PID 파일 및 유닉스 도메인 소켓)을 저장하기 위해 tmpfs가 `/run/` 또는 `/var/run/`에 마운트된다.
2. 1. 장점
RAM이 디스크 스토리지보다 속도가 빠르기 때문에 tmpfs를 사용하면 캐시를 훨씬 빠르게 저장할 수 있어 전체 시스템 효율성이 높아진다. 단, 페이지 캐시를 사용하는 운영체제에서는 최근 사용한 파일 페이지가 사용 가능한 메모리가 충분하면 메모리에 유지되므로 이점이 줄어든다. RAM은 재부팅 시 초기화되므로 tmpfs를 사용하면 사용자가 임시 파일을 수동으로 삭제할 필요 없이 시스템이 너무 복잡해지는 것을 방지할 수 있다. 또한 파일을 RAM에 저장하면 디스크가 너무 빨리 채워지는 것을 방지하고 쓰기 횟수를 줄여 플래시 기반 스토리지의 수명을 연장한다.tmpfs는 일반적으로 가상 메모리 지원을 전제로 하며, 저장되는 모든 데이터는 페이징 가능한 메모리에 저장한다. 하드 디스크에 저장되지 않는다는 의미에서 일시적인 것이지만, 메모리 부족 시에는 백킹 스토어로서 스왑 영역을 이용할 수 있다. 리부트하면 tmpfs에 저장된 모든 파일은 소실된다. 디렉터리 구조 등의 메타데이터는 이론상 데이터와 마찬가지로 페이징 대상이 되거나, 또는 항상 메모리에 있을 수 있지만, 구현을 용이하게 하기 위해 후자를 채용하는 경우가 많다.
tmpfs에 사용되는 메모리 양은 저장하는 파일의 용량에 따라 가변적이지만, 스왑 영역으로 스왑 아웃될 수도 있다. 또한, 남은 용량은 가상 메모리의 남은 메모리 크기에 의존하므로, 파일 조작을 하지 않는 경우에도 남은 용량이 변화할 수 있다.
2. 2. 단점
스왑 공간이 없거나 부족한 시스템에서 tmpfs는 많은 양의 메모리를 소모할 수 있다. 만약 캐시 파일이 tmpfs에 저장된다면, 프로그램들은 재부팅 시 캐시된 데이터를 잃게 된다.tmpfs는 일반적으로 가상 메모리 지원을 전제로 하며, 저장되는 모든 데이터는 페이징 가능한 메모리에 저장한다. 이는 하드 디스크에 저장되지 않는다는 의미에서 일시적인 것이지만, 메모리 부족 시에는 백킹 스토어로서 스왑 영역을 이용할 수 있다. 리부트하면 tmpfs에 저장된 모든 파일은 소실된다. 디렉터리 구조 등의 메타데이터는 이론상 데이터와 마찬가지로 페이징 대상이 되거나, 또는 항상 메모리에 있을 수 있지만, 구현을 용이하게 하기 위해 후자를 채용하는 경우가 많다.
tmpfs에 사용되는 메모리 양은 저장하는 파일의 용량에 따라 가변적이지만, 스왑 영역으로 스왑 아웃될 수도 있다. 또한, 남은 용량은 가상 메모리의 남은 메모리 크기에 의존하므로, 파일 조작을 하지 않는 경우에도 남은 용량이 변화할 수 있다.
3. 구현
tmpfs는 여러 운영 체제에서 다양한 방식으로 구현되었다.
- 썬OS/솔라리스: 썬 마이크로시스템즈가 SunOS용으로 개발한 것이 가장 초기 버전 중 하나이다. 썬OS 4는 1987년 말 썬OS 4.0에서 tmpfs의 초기 구현을 포함하여 처음 등장했다.[1] 솔라리스에서는 1992년 12월 출시된 솔라리스 2.1부터 `/tmp` 디렉터리가 기본적으로 tmpfs 파일 시스템으로 설정되었다.[3]
- 리눅스: 리눅스 커널에서는 버전 2.4(2001년 1월 4일)부터 tmpfs를 지원한다.[5] 리눅스 tmpfs는 ramfs 코드를 기반으로 하며, 페이지 캐시를 사용하고, 스왑 공간으로의 스왑 아웃, 파일 시스템 크기 및 아이노드 제한을 지원한다.[7]
- BSD: 4.2BSD는 MFS라는 메모리 기반 파일 시스템을 도입했다.[8] tmpfs는 MFS의 성능을 개선한 것으로, NetBSD 소스 트리에 2005년 9월 10일에 병합되었으며,[9] FreeBSD, DragonFly BSD, OpenBSD 등에서 사용할 수 있다.
- 마이크로소프트 윈도우: 마이크로소프트 윈도우에서는 `FILE_ATTRIBUTE_TEMPORARY` 플래그를 사용하여 파일을 생성하면, 충분한 캐시 메모리가 있는 경우 파일 시스템이 데이터를 비휘발성 저장소에 다시 쓰지 않도록 할 수 있다.[13]
3. 1. 썬OS/솔라리스
썬OS 4는 tmpfs의 최초 구현에 상당하는 내용을 포함하고 있다. 1987년 말, 어떤 오브젝트라도 메모리 매핑을 할 수 있게 도와주는 새로운 수직 주소 공간 관리와 더불어 썬OS 4.0에 처음 등장하였다.[16][17]1994년 11월 공개된 솔라리스에서 /tmp 디렉터리는 솔라리스 2.1부터 기본적으로 tmpfs 파일 시스템으로 구성되었다.[3][4] 솔라리스의 df 명령어 출력은 tmpfs 볼륨에 대응하여 swap이라는 파일 시스템으로 표시한다.
```text
# df -k
Filesystem kbytes used avail capacity Mounted on
swap 601592 0 601592 0% /tmp/test
3. 2. 리눅스
tmpfs는 리눅스 커널 버전 2.4 이상부터 지원한다.[18] tmpfs (과거 이름: shmfs)는 시동 중 사용되는 ramfs 코드에 기반을 두며 페이지 캐시를 사용하지만, ramfs와는 달리 덜 사용되는 페이지들을 스왑 공간으로 스왑 아웃 처리를 지원하며, 메모리 부족 상황을 피하기 위해 파일 시스템 크기와 inode 제한을 지원한다. (각각, 기본적으로 물리 RAM의 절반, RAM 페이지 수의 절반)[19] 이러한 옵션들은 마운트 시에 설정되며 파일 시스템을 다시 마운트함으로써 수정할 수 있다.```
df -h
mount -o remount,size=4G /tmp
df -h
```
다시 마운트하기 전에 (free 명령을 사용하여) 충분한 여유 RAM 공간이 있는지 확인할 필요가 있다. 이를테면 2GB 이상 사용하려고 하면 64비트 리눅스 커널이 필요하다. (uname -a 명령으로 확인 가능)
tmpfs는 버전 2.4(2001년 1월 4일)부터 리눅스 커널에서 지원된다.[5] 리눅스 tmpfs(이전에는 '''shm fs'''로 알려짐)[6]는 부팅 과정에서 사용되는 ramfs 코드를 기반으로 하며, 페이지 캐시도 사용하지만, ramfs와 달리 사용 빈도가 낮은 페이지를 스왑 공간으로 스왑 아웃하는 것을 지원하며, 메모리 부족 상황을 방지하기 위해 파일 시스템 크기 및 아이노드 제한을 지원한다(기본적으로 물리적 RAM의 절반과 RAM 페이지 수의 절반).[7][14] 이는 ramfs의 코드를 기반으로 하며, 부팅 중에 사용될 뿐만 아니라 페이지 캐시의 목적으로도 사용된다. 또한 파일 시스템과 동일한 크기의 페이지 파일을 스왑 아웃하거나, inode가 메모리 부족(out of memory) 상태가 되는 것을 방지하기 위한 제한(기본적으로 물리 RAM과 페이징은 전체 메모리 용량의 절반)을 하는 등 ramfs에는 없는 기능이 추가되었다.[15]
3. 3. BSD
4.2BSD는 MFS를 도입했는데,[8] 이는 기존의 FFS 디스크 파일 시스템을 가상 메모리 영역에 적용하여 구현한 메모리 기반 파일 시스템이었다.tmpfs는 MFS의 성능을 개선하기 위해 기존의 메모리 내 데이터 구조를 사용하여 구현된 메모리 파일 시스템으로, 2005년 9월 10일에 공식 NetBSD 소스 트리에 병합되었으며,[9] 4.0 및 이후 버전에서 사용할 수 있다.
FreeBSD는 NetBSD의 구현을 포팅했으며, 7.0 및 이후 버전에서 사용할 수 있다.[10]
DragonFly BSD 또한 NetBSD의 구현을 포팅했으며, 2.5.1 및 이후 버전에서 사용할 수 있다.
OpenBSD 역시 NetBSD의 tmpfs 구현을 포팅했으며, 처음에는 페드로 마르텔레토(Pedro Martelletto)가 시작하여 많은 사람들에 의해 개선되었다. 2013년 12월 17일부터 빌드에 활성화되었고,[11] tmpfs가 포함된 OpenBSD의 첫 번째 릴리스는 5.5였다.[12] OpenBSD 6.0은 유지 관리 부족으로 인해 tmpfs를 비활성화했다.
3. 4. 마이크로소프트 윈도우
마이크로소프트 윈도우에서 `FILE_ATTRIBUTE_TEMPORARY` 플래그를 사용하여 파일을 생성하면, 충분한 캐시 메모리가 있을 때 파일 시스템이 데이터를 비휘발성 저장소에 다시 쓰지 않도록 할 수 있다.[13]참조
[1]
웹사이트
tmpfs: A Virtual Memory File System
http://wiki.deimos.f[...]
2007-05-07
[2]
웹사이트
SunOS 4.1 Performance Tuning
https://web.archive.[...]
2007-05-07
[3]
웹사이트
SPARC: Installing Solaris Software
http://www.bitsavers[...]
SunSoft
1992-12-01
[4]
웹사이트
Solaris Operating System (Unix)
http://www.operating[...]
[5]
웹사이트
Common threads: Advanced filesystem implementor's guide, Part 3
http://www.ibm.com/d[...]
IBM DeveloperWorks
2013-02-15
[6]
웹사이트
Common threads: Advanced filesystem implementor's guide, Part 3
http://www.ibm.com/d[...]
IBM DeveloperWorks
2013-02-15
[7]
웹사이트
tmpfs.txt
https://www.kernel.o[...]
kernel.org
2010-03-16
[8]
웹사이트
NetBSD mount_mfs(8) man page
http://netbsd.gw.com[...]
2007-12-08
[9]
웹사이트
NetBSD-SoC: Efficient memory file-system
http://netbsd-soc.so[...]
2006-02-24
[10]
웹사이트
FreeBSD tmpfs(5) manpage
https://www.freebsd.[...]
2013-04-23
[11]
웹사이트
CVS: cvs.openbsd.org: src - enable tmpfs so it gets tested some more
http://marc.info/?l=[...]
[12]
웹사이트
OpenBSD 5.5
http://www.openbsd.o[...]
2014-05-01
[13]
웹사이트
CreateFileA function (fileapi.h) - Win32 apps
https://learn.micros[...]
2024-06-27
[14]
웹사이트
Common threads: Advanced filesystem implementor's guide, Part 3
http://www.ibm.com/d[...]
IBM DeveloperWorks
2013-02-15
[15]
웹사이트
tmpfs.txt
https://www.kernel.o[...]
kernel.org
2010-03-16
[16]
웹인용
tmpfs: A Virtual Memory File System
http://wiki.deimos.f[...]
2007-05-07
[17]
웹인용
SunOS 4.1 Performance Tuning
http://www.sun3arc.o[...]
2007-05-07
[18]
웹인용
Common threads: Advanced filesystem implementor's guide, Part 3
http://www.ibm.com/d[...]
IBM DeveloperWorks
2013-02-15
[19]
웹인용
tmpfs.txt
https://www.kernel.o[...]
kernel.org
2010-03-16
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com