7장 파일 시스템

Date:     Updated:

카테고리:

태그:

실습과 그림으로 배우는 리눅스 구조 7장의 내용을 정리한 글입니다.

파일시스템

리눅스에서는 저장 장치 안의 데이터에 접근할 때 일반적으로 직접 저장 장치에 접근하지 않고, 편의를 위해 파일시스템을 통해 접근합니다.

파일시스템의 필요성

저장 장치의 기능은 저장 장치 안에 지정된 주소에 대해 특정 사이즈의 데이터를 읽거나 쓰는 것입니다. 파일 시스템이 없다면, 사용자가 어떠한 파일을 저장하려고 할 때, 저장할 주소와 크기까지 고려해야합니다. 파일을 읽을려고 할 때도, 파일이 저장되어 있는 위치와 데이터의 크기까지 알고있어야 합니다.
여기에 더해, 저장 장치의 빈 영역은 어디인지까지 관리해야 할 필요성이 있습니다.

이러한 복잡한 처리를 피하고자 어디에 어느 정도의 데이터가 있는지, 어디가 빈 영역인지를 관리하는 프로그램이 파일시스템입니다.
파일시스템은 사용자에게 의미가 있는 하나의 데이터를 이름, 위치, 사이즈 등의 메타 데이터를 추가하여 파일이라는 단위로 관리합니다.

파일시스템을 사용하기 때문에, 사용자는 각 파일의 이름만 기억해 놓으면 저장 장치에서 데이터의 위치나 사이즈 등의 복잡한 정보를 기억할 필요가 없습니다.

어느 장소에 어떤 파일을 배치할지 등의 데이터 구조는 파일시스템마다 다릅니다.

리눅스의 파일시스템

파일을 카테고리별로 정리할 수 있도록 리눅스의 파일시스템에는 디렉토리라고 부르는 파일을 보관하는 특수한 파일이 존재합니다. 디렉토리안에는 일반적인 파일 또는 다른 디렉토리를 보관하는 것이 가능하며, 각각 다른 디렉토리 안에 존재한다면 여러 파일이 같은 이름을 가져도 됩니다.
이러한 방식을 위해 리눅스으 파일시스템은 트리구조로 되어 있습니다.

데이터와 메타데이터

파일시스템에는 데이터메타데이터라는 두 종류의 데이터가 있습니다.

  • 데이터 : 사용자가 작성한 문서나 사진, 동영상, 프로그램 등의 내용
  • 메타데이터 : 파일의 이름이나 저장 장치 내에 위치 사이즈 등의 보조 정보
    • 권한 정보 : 어느 사용자가 파일에 접근이 가능한가
    • 시간 정보 : 작성한 시간, 최후에 접근한 시간, 최후에 내용이 변경된 시간
    • 종류 : 데이터를 보관하는 일반 파일인지 디렉토리인지 혹은 다른 종류인지를 판별하는 정보

용량 제한

시스템을 여러 가지 용도로 사용하는 경우 특정 용도가 파일시스템의 용량을 무제한으로 사용할 수 있다면 다른 용도로 사용할 용량이 부족하게 되는 일이 발생합니다.
이러한 상황을 피하기 위해 파일시스템의 용량을 용도별로 사용할 수 있게 제한하는 기능 쿼터가 있습니다. 쿼터에는 다음과 같은 종류가 있습니다.

사용자 쿼터

파일의 소유자인 사용자별로 용량을 제한하는 것으로 예를 들어 특정 사용자 때문에 /home 디렉토리가 가득 차게 되는 사태를 방지합니다

디렉토리 쿼터

특정 디렉토리별로 용량을 제한하는 것으로 예를 들어 프로젝트 멤버가 공유하는 디렉토리에 용량 제한을 걸어둡니다.

서브 볼륨 쿼터

파일시스템 내의 서브 볼륨이라는 단위별 용량을 제한하는 것으로 거의 디렉토리 쿼터와 사용법은 유사합니다.

파일시스템이 깨진 경우

시스템을 운용하다보면 종종 파일시스템의 내용이 깨지는 경우가 발생합니다. 전형적인 예로 파일시스템의 데이터를 스토리지에 쓰고 있는 도중에 시스템의 전원이 강제적으로 끊어졌을 때와 같은 경우에 발생합니다. 파일시스템이 깨지는 것을 막기위해 저널링Copy on Write라는 두 가지 방식이 있습니다.

저널링

저널렁에서는 파일 시스템 안에 저널 영역이라는 특수한 영역을 준비합니다.
파일시스템을 업데이트 할때에는 저널 영역에 업데이트에 필요한 수행 과정을 적어놓습니다. 이 목록을 저널로그라고 부릅니다.
저널 영역의 내용을 바탕으로 실제로 파일시스템의 내용을 업데이트 합니다.

업데이트 전에 미리 저널로그를 저장하기 때문에, 파일시스템이 깨지는 상황이 발생하더라도 저널로그는 이미 저장되어 있기 때문에 파일시스템을 복구 할 수 있습니다.

Copy on Write

파일의 내용을 업데이트할 때마다, 원본 데이터를 다른 위치에 Copy를 하고 Write 하는 방법으로 업데이트 하는 것이 Copy on Write 방식입니다. Copy on Write 방식을 사용할 경우, 파일시스템이 깨져도 원본 데이터는 저장되어 있기 때문에 복구가 가능합니다.

Copy on Write방식은 프로세스를 생성할 때에도 사용됩니다.

디바이스 파일

파일 종류는 일반 파일과 파일을 보관하는 디렉토리 외 디바이스 파일이라는 종류의 파일이 있습니다. 리눅스는 스스로 동작하고 있는 하드웨어상의 장치를 거의 모두 파일로서 표현하고 있습니다 디바이스 파일캐릭터 장치블록 장치라는 두 종류로 분류합니다.

디바이스 파일에 접근할 수 있는 것은 일반적으로 root만 가능합니다.

캐릭터 장치

캐릭터 장치는 읽기와 쓰기가 가능하지만 탐색이 되지 않는 특성이 있습니다.
대표적인 캐릭터 장치는 터미널, 키보드, 마우스등이 있습니다.

터미널도 디바이스 파일 중 하나로 분류됩니다. 터미널 파일에 쓰기를 하면, 터미널 창에 출력되는 것을 알 수 있습니다. 리눅스가 제공하는 셸을 통해서 터미널에 창에 출력할 때도, 최종적으로 디바이스 파일을 조작하여 출력합니다.

블록 장치

블록 장치는 단순히 파일의 읽고 쓰기 이외에 랜덤 접근이 가능합니다. 대표적인 블록 장치는 HDDSSD등의 저장 장치가 있습니다.

Linux-architecture 카테고리 내 다른 글 보러가기

댓글 남기기