"모든 것은 파일이다"라는 유닉스의 개념을 바탕으로 시작된 리눅스의 거의 모든 리소스도 파일이다.
리눅스에서 파일로 취급되는 것들이 무엇이 있는지 알아본다.
해당 파일들을 열고, 정보 수집, 관리에 대한 인터페이스를 제공하는 파일시스템에 대해 알아보고
커널이 프로세스나 디바이스에 대한 정보를 노출하는 데 사용하는 특수한 파일시스템에 대해서도 알아본다.
기본 개요
파일시스템 용어
- 사용자는 보통 root(/)로 시작하는 단일 파일시스템 트리를 제공받게 된다
- OS 부팅(UEFI 방식인 경우) 영역인 파일시스템도 같이 제공받음 (/boot/efi)
- 파일시스템 트리에는 디렉터리와 파일 유형이 있으며, 디렉터리가 노드가 되고, 파일이나 디렉터리가 리프가 될 수 있음
- ls, cd, pwd 명령어를 통해 파일시스템을 탐색할 수 있음
- 파일시스템은 일반적으로 커널에서 구현된다
- 드라이브
- 일반적으로 HDD, SSD와 같은 블록 디바이스를 말함
- 파일시스템 VS RAW 디바이스
- RAW 디바이스는 블록 디바이스를 계층형 파일시스템으로 할당되기 전 날 것의 디스크를 말함
- 고속의 I/O를 위해 데이터베이스에서 데이터를 저장할 때 파일시스템에 쓰는 것이 아니라 RAW 단위로 펼쳐진 디바이스에 저장
- 슈퍼 블록
- 파일시스템의 시작 부분에 메타데이터를 캡처하는 특수 섹션
- 파일시스템의 유형, 블록, 상태, 블록당 아이노드 수 등이 담김
- 아이노드
- 크기, 소유자, 위치, 날짜, 권한 같은 메타데이터를 저장
- 파일명과 실제 데이턴 저장하지 않고 해당 데이터는 디렉터리에보관, 디렉터리는 아이노드를 파일명에 매핑하는 특별한 종류의 파일이라 할 수 있음
가상 파일시스템
리눅스는 가상 파일시스템 (VFS)이라는 추상화를 통해 다양한 종류의 리소스(인메모리, 로컬 연결, 네트워크 스토리지)에 파일과 유사한 접근을 제공할 수 있다
- ext3, XFS, FAT, NTFS 같은 로컬 파일시스템
- 드라이버를 통해 로컬 블록 디바이스 에 접근
- 저장 디바이스가 지원하지 않지만 RAM에 상주하는 인메모리 파일시스템 (tmpfs)
- procfs와 같은 의사 파일시스템
- 본질적으론 인메모리 파일시스템이며, 커널 인터페이스와 디바이스 추상화에 사용
- NFS 같은 네트워크 파일시스템
- 드라이버를 통해 접근하며 드라이버에 네트워크 작업이 포함됨
논리 볼륨 관리자(LVM)
드라이브 혹은 파티션에 파일시스템을 생성하여 사용할 때 리눅스는 드라이브, 파티션을 논리적으로 분할하여 사용할 수 있는 중간자 역할의 Manager를 사용할 수 있으며 LVM으로 디바이스를 설정하는 방법은 다음과 같다.
- 파티션 상태 확인
# fdisk -l /dev/sda
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 65013759 31457280 83 Linux
/dev/sda3 65013760 209715199 72350720 8e Linux
- 파티션 변경 작업
# fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x000c8e42
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 65013759 31457280 83 Linux
/dev/sda3 65013760 209715199 72350720 83 Linux
Command (m for help): t
Partition number (1-3, default 3): **3**
Hex code (type L to list all codes): **8e**
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): p
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x000c8e42
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 65013759 31457280 83 Linux
/dev/sda3 65013760 209715199 72350720 8e Linux LVM
Command (m for help): w
- 해당 LVM에 PV-VG-LV-파일시스템 생성
...
의사 파일시스템
파일시스템인 것 처럼 가장하여 일반적인 방식(ls, cd, cat)으로 상호 작용할 수 있지만, 실제로는 커널 인터페이스를 래핑한 것
- 프로세스에 대한 정보
- 키보드와 같은 디바이스와 상호 작용
- 데이터 소스나 싱크로 사용할 수 있는 특수 디바이스 같은 유틸리티
procfs
- /proc/PID/의 프로세스 정보
- 마운트, 네트워크 관련 정보, 메모리 정보, 시스템 버전, 가동 시간 등의 정보
sysfs
커널이 표준화된 레이아웃을 사용하여 노출하는 정보
- block/
- 블록 디바이스의 심볼릭 링크
- bus/
- 커널에서 지원하는 각 물리 버스
- class/
- 디바이스 클래스가 있음
- scsi_host, fc_host등..
- dev/
- 블록 디바이스용 block/ 과 시스템의 문자 디바이스용 char/의 하위 디렉터리로 구성되어 있음
- devices, firmware, fs, module 등의 디렉터리
devfs
물리적 디바이스에서부터 모든 디바이스를 나타내는 특수 파일을 호스팅 한다
- 블록 디바이스
- 저장 디바이스 같은 블록 데이터 처리
- 문자 디바이스
- 터미널, 키보드 마우스
- 특수 디바이스
- /dev/null이나 /dev/random과 같이 데이터를 생성하거나 조작
범용 파일시스템
범용 파일시스템의 종류와 성격에 대해서는 네이버클라우드 플랫폼에서 작성한 글로 대체한다.
파일시스템을 구성하는 블록에 어떤 정보를 담고 있는지 잘 설명해주고 있다
https://blog.naver.com/n_cloudplatform/222384170516
POSIX 알아보기 #1 : Linux(리눅스) 파일 시스템의 종류와 특징
네이버클라우드 개발자가 직접 전하는 기술 이야기 POSIX 알아보기 1편 : Linux(리눅스) 파일 시스템...
blog.naver.com
https://blog.naver.com/n_cloudplatform/222481521174
POSIX 알아보기 #2 : 가상 파일 시스템 VFS(Virtual Filesystem)의 의의와 동작 방식
네이버클라우드 개발자가 직접 전하는 기술 이야기 POSIX 알아보기 2편 : VFS(Virtual Filesyste...
blog.naver.com
CoW(Copy on Write) 파일 시스템
쓰기 시 복사하는 파일시스템 I/O 속도를 높이는 동시에 공간은 적게 사용하는 개념으로 주로 컨테이너에서 사용하는 파일시스템
- 블록 A, B, C로 이루어진 원본 파일인 파일 1을 파일 2에 복사. 실제 블록을 복사하지 않고 메타데이터만 복사 - 메타데이터만 복사하여 속도가 빠르고 공간을 많이 차지하지 않음
- 파일 2가 수정되면 수정되지 않은 A, B는 그대로 가리키고 C만 C`을 사용하여 새 데이터를 캡처한다.
유니온 마운트라는 개념을 통해
여러 디렉터리를 하나의 위치로 결합하는 방식으로 계층화하여 상위 파일시스템과 하위 파일시스템으로 통합한다.
CoW 파일시스템을 사용하는 예시를 보면 왜 필요한 지 알 수 있을 것 같다.
- 이미지 레이어를 관리할 때 변경분만 추가하여 중복되는 레이어에 대해 용량 및 복사 오버헤드 감소
- 백업 본을 만들 때 변경 분에 해당하는 레이어만 관리하게 되면 복제 시간 및 용량 공간 낭비 감소
1. 오버레이 파일시스템 (상속파일시스템으로 컨테이너 환경에서 사용됨)
https://tech.kakaoenterprise.com/171
[컨테이너 인터널 #2] 컨테이너 파일시스템
시작하며 안녕하세요. 카카오엔터프라이즈에서 검색서비스를 개발하고 있는 검색클라우드기술파트의 Sam(김삼영)입니다. [컨테이너 인터널 #1] 컨테이너 톺아보기에서 예고해 드린 대로 이번 포
tech.kakaoenterprise.com
쓰기 시 복사(Copy-on-Write, CoW) - Docker 이미지 레이어 관리 전략
Docker에서는 쓰기 시 복사(Copy-on-Write, CoW)라는 전략을 사용하여 이미지 레이어를 효율적으로 관리합니다.
v3.leedo.me
2. 백업
https://majjangjjang.tistory.com/140
ZFS 의 주요기능(cow, checksum, RAID-Z..등등)
0. 서론 주요기능 10가지를 소개하겠습니다. 1. 스토리지 풀(Storage Pool) 기존의 파일 시스템은 물리적인 스토리지에 볼륨을 생성하거나 RAID 를 구축하기 위해 별도의 볼륨 매니저를 사용하였으며,
majjangjjang.tistory.com
ZFS 파일시스템
https://tech.gluesys.com/blog/2023/12/20/ZFSintro.html
글루시스 기술 블로그
A simple yet classy theme for your Jekyll website or blog.
tech.gluesys.com
'Study' 카테고리의 다른 글
[Linux] 모던 리눅스 교과서 8장 - 관측가능성 (1) | 2024.12.23 |
---|---|
[Linux] 모던 리눅스 교과서 6장 - 애플리케이션, 패키지관리,컨테이너 (1) | 2024.12.15 |
[Linux] 모던 리눅스 교과서 4장 - 접근제어 (0) | 2024.11.24 |
[Linux] 모던 리눅스 교과서 3장 - 스크립트 (1) | 2024.11.17 |
[Linux] 모던 리눅스 교과서 1,2장 (1) | 2024.11.10 |