ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 실습과 그림으로 배우는 리눅스 구조 7장 정리
    운영체제 2022. 11. 10. 01:00

     

    파일시스템

    • 리눅스의 파일 시스템은 트리 구조로 되어 있다. 
    • ext4, XFS, Btrfs 등의 파일 시스템을 사용할 수 있다. 
      • 이외에도 다양한 종류의 파일 시스템들이 존재한다. 

     

     

    프로세스가 파일 시스템과 관련된 시스템 콜 호출시 동작 흐름 

    1. 커널 내 모든 파일 시스템 공통처리가 동작
    2. 대상 파일의 파일시스템 종류를 판별 후, 시스템 콜에 대응되는 처리를 한다. 
      • 파일 시스템이 XFS, ext4, Btrfs 등 인지 판별 한다. 
    3. 데이터 읽기의 경우, 디바이스 드라이버에게 맡긴다.
    4. 디바이스 드라이버가 데이터를 읽어들인다.

     

     

    데이터와 메타데이터

    • 데이터 -  문서, 사진, 프로그램 등의 내용
    • 메타데이터 - 종류, 시간정보, 권한 정보 등의 정보를 가지고 있음 
    • 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의 조작은 디바이스 파일의 조작으로 변환된다. 

    캐릭터 장치를 통해서 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

    실습과 그림으로 배우는 리눅스 구조 

     

    반응형

    댓글

Designed by Tistory.