-
실습과 그림으로 배우는 리눅스 구조 7장 정리운영체제 2022. 11. 10. 01:00
파일시스템
- 리눅스의 파일 시스템은 트리 구조로 되어 있다.
- ext4, XFS, Btrfs 등의 파일 시스템을 사용할 수 있다.
- 이외에도 다양한 종류의 파일 시스템들이 존재한다.
프로세스가 파일 시스템과 관련된 시스템 콜 호출시 동작 흐름
- 커널 내 모든 파일 시스템 공통처리가 동작
- 대상 파일의 파일시스템 종류를 판별 후, 시스템 콜에 대응되는 처리를 한다.
- 파일 시스템이 XFS, ext4, Btrfs 등 인지 판별 한다.
- 데이터 읽기의 경우, 디바이스 드라이버에게 맡긴다.
- 디바이스 드라이버가 데이터를 읽어들인다.
데이터와 메타데이터
- 데이터 - 문서, 사진, 프로그램 등의 내용
- 메타데이터 - 종류, 시간정보, 권한 정보 등의 정보를 가지고 있음
- df 커맨드를 통해서 본 파일 시스템의 스토리지 양은 메타데이터의 사이즈도 더해진것이다.
- 메타데이터의 사이즈가 큰 것은 아니지만, 작은 파일을 많이 작성하는 경우 실제 파일의 총 용량보다 사용량이 적은 경우가 발생할 수 있다.
용량 제한
- 쿼터(quota)를 통해서 파일 시스템의 용량을 용도 별로 제한할 수 있다.
- 쿼터의 종류
- 사용자 쿼터
- 파일의 사용자 별로 용량을 제한하는 것
- ext4, XFS는 사용자 쿼터를 사용할 수 있다.
- 디렉토리 쿼터
- 특정 디렉토리에 용량을 제한하는 것
- 예를 들면 공유하는 디렉터리에 용량을 제한할 수 있음
- ext4, XFS 사용 가능
- 서브 볼륨 쿼터
- 서브 볼륨을 단위로 용량을 제한하는 방식
- Btrfs에서 사용 가능
- 사용자 쿼터
파일 시스템이 깨진 경우
- 시스템 운영시 파일 시스템의 내용이 깨질 수 있다.
- 예시로 파일 시스템의 데이터를 사용하는 도중 전원을 강제 종료하는 경우
- foo 디렉토리와 bar 디렉토리가 있을때, mv /bar /foo 실행시 파일시스템 변화 흐름
- 기존 링크 상태: root => foo, root => bar
- 링크 생성: foo => bar
- 링크 삭제: root => bar 링크 삭제
- 완료
- 위 흐름에서 중간에 전원을 강제 종료했을 때 파일시스템이 깨질 수 있다.
- 파일 시스템이 깨지는 것을 막기 위해서 저널링과 copy on write 두가지 방식을 사용한다.
- 저널링
- 파일 시스템에서 저널 영역을 생성 후 업데이트에 필요한 목록(저널 로그)을 저널 영역에 작성하여 보관한다.
- 저널 영역에 작성된 내용을 바탕으로 파일 시스템을 업데이트하며 문제 발생시 저널로그를 통해서 재 업데이트를 한다.
- copy on write
- 파일 시스템을 작성하면, 파일의 배치장소가 바뀌는 경우에 한해서 적용된다.
- Btrfs에 대해서만 해당되며 ext4, XFS의 경우 해당되지 않는다.
- foo 디렉토리와 bar 디렉토리가 있을때, mv /bar /foo 시 파일시스템 변화 흐름
- 기존 링크 상태: root => foo1 => A, B / root => bar
- 링크 생성: foo2 => A, B, bar
- 링크 삭제: root => foo1 / foo1 => A, B 링크 삭제
- 완료
- 파일 시스템을 작성하면, 파일의 배치장소가 바뀌는 경우에 한해서 적용된다.
- 하지만 파일시스템이 깨지는 경우가 줄어들고 있는 것이지, 여전히 발생할 가능성은 있다.
- 파일 시스템이 깨진 경우, 파일 시스템이 깨지기 전 백업한 시점으로 복원하는게 맞다.
- fsck라는 파일 시스템 백업 커맨드를 통해서 복구할 수 있지만, 사용을 추천하지는 않는다.
- 오래걸리고, 실패할 수도 있으며, 원하는 상태로 복구될 수 있다는 보장도 없다.
파일의 종류
- 리눅스에서는 디바이스를 파일로 표현하며 일반적으로 root 유저만 이 디바이스에 접근할 수 있다.
- 파일 시스템으로 접근하는 디바이스로 캐릭터 장치와 블록 장치가 있다.
- 해당 장치들은 /dev 파일 아래에 존재한다.
- 제일 앞이 c로 시작하는 것이 캐릭터 장치를 의미
- 제일 앞이 b로 시작하는 것이 블록 장치를 의미
캐릭터 장치
- 읽기와 쓰기가 가능하지만 탐색이 되지 않는다.
- 터미널, 키보드, 마우스등이 있다.
- 쉘이나 라이브러리가 디바이스 파일을 다룸으로써 디바이스를 사용할 수 있다.
- bash의 조작은 디바이스 파일의 조작으로 변환된다.
블록 장치
- 파일의 읽고 쓰기, 랜덤 접근이 가능하다.
- HDD, SSD 등이 있다.
- 블록 장치에 직접 데이터를 읽고 썼을 때, 파일 시스템으로 접근할 수 있다.
- 하지만 파일 시스템을 통해서 블록 장치에 읽고 쓰는 방식이 보편적이고 일반적이다.
- 블록 장치를 직접 다뤄야 하는 경우
- 파티션 테이블 업데이트 (parted)
- 블록 장치 레벨의 데이터 백업 및 복구 (dd)
- 파일 시스템 작성 (mkfs)
- 파일 시스템 마운트 (mount)
- 파일 시스템 복구 (fcsk)
tmpfs
- 저장 장치 대신 메모리에 작성되는 파일 시스템
- 메모리에 저장하기 때문에 휘발생이며, 빠르다.
- 재부팅 후 남아 있을 필요 없는 /tmp나 /var/run 경로에 마운트해서 사용한다.
- free 커맨드 사용시 shared는 tmpfs가 사용한 메모리 사용량을 나타낸다.
profs
- 시스템에 존재하는 프로세스 정보를 위한 파일 시스템
- procfs는 일반적으로 /proc 에 마운트 된다.
- 프로세스의 정보 뿐만 아니라 시스템에 대한 정보 또한 가지고 있다.
- 프로세스 정보 - 메모리 맵, CPU 사용 시간, 사용 메모리 양 등
- 시스템 정보 - CPU 정보, 저장 장치 정보, 메모리 정보, 커널 파라미터 등
- ps, sar, top, free 등의 커맨드 또한 /procfs에서 정보를 얻는다.
sysfs
- 시스템에 탑재된 디바이스 정보 및 파일 시스템에 대한 정보 등을 포함한다.
- sysfs는 일반적으로 /sys 경로에 마운트된다.
cgroupfs
- 프로세스 그룹에 대한 리소스 사용량 제한을 하는 cgroup기능에 대한 파일 시스템이다.
- cgroup은 파일 시스템을 통해서 다룬다.
- cgroupfs는 일반적으로 /sys/fs/cgroup에 마운트된다.
- 가상 시스템이나 컨테이너의 리소스를 제한하기 위해 사용된다.
Btrfs
- ext4나 XFS에 비해서 더 많은 기능을 제공한다.
- 멀티 볼륨
- 여러 개의 저장 장치/파티션으로부터 거대한 스토리지 풀을 만든다.
- 스토리지 풀에서 서브 볼륨 영역을 만들어 마운트할 수 있다.
- LVM + 파일 시스템이라고 생각하자.
- 이미 만들어진 Btrfs 파일 시스템에 저장 장치 추가, 삭제, 교환도 가능하다.
- 용량 변화에 따른 파일 시스템 크기 조정을 할 필요가 없다.
- 마운트 중에도 운영을 멈추지 않고 할 수 있다.
- 스냅샷
- 서브 볼륨 단위로 스냅샷을 찍을 수 있다.
- 스냅 샷은 데이터를 전부 복사하지 않고, 메타 데이터의 작성 또는 더티 페이지의 라이트 백을 통해서 빠르게 이루어진다.
- 서브 볼륨과 스냅샵은 데이터를 공유하기 때문에 공간 낭비도 적다.
- RAID
- Btrfs는 파일 시스템 레벨에 RAID를 포함한다.
- RAID 0, 1, 10, 5, 6, dup를 지원한다.
- 예시
- 저장 장치를 2개를 이용하여 RAID1 구성을 하면 저장 장치 하나가 망가져도 데이터를 잃지 않는다.
- 체크섬을 통해서 데이터 파손을 검출하고, 파손된 데이터를 복구할 수 있다.
- 추가적으로 RAID 5, 6의 패리티 비트를 이용해서 데이터를 복구할 수도 있다.
Reference
실습과 그림으로 배우는 리눅스 구조
반응형'운영체제' 카테고리의 다른 글
실습과 그림으로 배우는 리눅스 구조 8장 정리 (1) 2022.11.13 실습과 그림으로 배우는 리눅스 구조 6장 정리 (0) 2022.11.06 실습과 그림으로 배우는 리눅스 구조 5장 정리 (0) 2022.11.06 실습과 그림으로 배우는 리눅스 구조 4장 정리 (2) 2022.10.30 실습과 그림으로 배우는 리눅스 구조 3장 정리 (0) 2022.10.30