본문 바로가기
Linux

[Linux] 파일 시스템

by oncerun 2021. 2. 4.
반응형

 

파일 시스템은 저장 장치를 트리 형태의 디렉터리 구조로 조직화시키고 파일에 이름을 부여하여 저장하고 검색할 수 있게 하는 체계이다.  즉  컴퓨터에서 파일, 자료를 쉽게 발견하고 접근할 수 있도록 보관 또는 조직하는 체제를 말한다.

 

파일이란 것이 뭔지 확실히 알고 넘어가자 컴퓨터의 자료의 구성단위 중 파일은 여러 개의 (물리레코드==블럭)이 모여서 구성된 것이다. 보통 프로그램 기본 구성단위로 사용된다. 이 블록은 저장매체의 입*출력 단위이다.

 

 좀 더 쉽게 이해해보자! 보통 보조기억장치에서  주기억장치에 데이터를 주거나 받을 때 블록 단위로 데이터를 받는다는 소리이며, 윈도에서는 클러스터라는 이름으로 사용하기도 한다. 이러한 블록들이 모이면 파일이 되고 프로그램을 구성하는 단위가 된다. 이러한 파일들이 모이면 데이터베이스가 된다.

 

이러한 파일들을 컨테이너에 넣고 파일을 관리해주는 시스템이 파일 시스템인 것이다.

이러한 파일 시스템에는 여러 가지 종류가 있지만 리눅스 전용 파일 시스템을 말한다면 ext4,3가 존재합니다. 자세한 설명은 이어서 설명하겠습니다.

만약 파일 시스템이 없다면 저장 장치는 하나의 큰 더미 데이터에 불과해 정보의 구별이 불가능할 것이다.

파일 시스템이 있기에 저장 장치에서 파일을 구분하고 식별하는 것이 가능하다.

대부분의 운영체제에서 데이터의 저장 단위는 파일이다. 파일 시스템의 종류가 무엇이냐에 따라 파티션의 개수와 크기, 파일 이름의 길이, 파일의 크기, 보관할 수 있는 파일의 총수, 파일의 복수, 성능/보안/유연성 등에서 차이가 난다.

 

유닉스 계열의 운영체제에서 사용되는 파일 시스템은 대개 UFS(Unix File System)에서 유래된 것이어서 공통의 개념을 바탕으로 유사한 기본 구조를 갖는다고 할 수 있다. 

 

기본 요소

 - 슈퍼블록

파일 시스템의 특징을 기록한 레코드이다. 여기에는 디스크 블록의 크기, 전체 블록의 개수, INODE 테이블의 크기와 위치, 디스크 블록맵(디스크 사용 정보), 첫 번째 데이터 블록의 주소, 블록 그룹의 크기와 같은 파일 시스템의 중요한 정보가 들어있다. 슈퍼블록은 손상됐을 때를 대비해 여러 위치에 복사본이 유지되어야 한다.

 

*레코드란 연관된 여러 필드가 모여 구성되는 것으로 하나의 완전한 정보를 표현할 수 있는 최소 단위입니다.

프로그램 처리 단위인 논리 레코드와 프로그램 입출력의 단위인 물리 레코드(블록)로 나뉩니다. 여기서 입출력 단위는 데이터의 교환을 의미하는데, 입력된 데이터 정보를 받아 CPU를 거쳐 결과 값이 출력되는데 이때 출력되는 데이터는 큰 데이터 덩어리로 출력됩니다. 이러한 큰 데이터 덩어리를 블록이라고 합니다.

 

 - inode 테이블

디스크의 시작 부분에 있는 고정된 크기의 블록 집합으로 이것을 구성하는 항목인 inode는 파일의 이름을 제외한 해당 파일의 모든 정보, 즉 inode 번호, 파일의 형태, 크기, 접근권한, 소유 UID와 GID, 수정시간, 링크 수 , 파일 주소 등의 정보를 갖고 있다.

inode 번호는 파일을 식별할 수 있는 고유번호이며 ls -i 명령으로 파일의 inode번호를 확인할 수 있다. 디렉터리는 단순히 파일 목록을 가지고 있는 파일로 취급된다. inode 테이블에는 파일의 이름을 저장하지 않는데, 이것은 해당 파일을 포함하고 있는 부모 디렉터리의 정보가 있는 데이터 블록에 inode번호와 함께 파일의 이름이 저장된다.

 

* File이란 관련된 여러 개의 레코드가 모여 하나의 파일이 되며, 프로그램을 구성하는 단위로 컴퓨터에서 정보를 저장하는 단위로 사용됩니다. 연관성 있는 레코드들의 집합이라 할 수 있습니다.

 

 - 데이터 블록

일반 파일의 경우 데이터 블록에 실제 데이터가 저장된다. 디렉터리의 경우는 그것이 가지고 있는 파일이나 서브 디렉터리의 이름이 inode 번호와 함께 저장된다. 디렉터리 정보를 포함한 블록을 디렉터리 블록으로 구분하여 부르기도 한다.

 

리눅스에서 마운트를 하기 위해선 파티션을 정해주고 볼륨을 설정하고 파일 시스템을 정해주어야 한다.

파일 시스템을 만드는 일은 파티션을 포맷하는 일이라고 할 수 있다. 리눅스가 지원하는 파일 시스템으로는 리눅스 고유의 파일 시스템, 윈도의 FAT 계열과 같은 외부 유형, iso9660과 같은 범용 파일 시스템, sysfs나 proc과 같은 가상의 파일 시스템 등이 있다.

 파일 시스템은 다양한 저장매체에서 사용되는 여러 종류가 존재하며 크기, 보안, 유연성, 속도차 등에 따라 구조와 방법이 다르다. 쉽게 접하는 저장매체는 하드디스크이며 플래시 메모리, 자기 테이프, 광학 디스크 등이 존재한다..

 

ISO9660은 광학 디스크용으로 특별히 설계된 파일 시스템 형태이다.

 

tmpfs는 메인 메모리에서 사용되는 파일 시스템이다. 

 

NFS는 네트워크 상의 많은 컴퓨터가 공유할 수 있는 네트워크 파일 시스템이다.

 

ext4는 리눅스 전용 파일 시스템의 하나로 ext3 파일 시스템의 개선된 버전이다.  ext4는 최대 1EB=1024PB 크기의 파일 시스템과 16TB 크기의 초대형 파일을 지원하고 많은 수의 서브 디렉터리를 지원하며 블록 매핑 대신에 익스텐트 개념을 사용하며 오프라인이 아닌 온라인으로 단편화 제거를 지원한다.

 

ISO9660은 CD-ROM과 같은 광학 디스크에서 표준으로 사용되는 파일 시스템이다. 데이터의 공유가 가능하게 윈도, MacOS, 유닉스 계열의 서로 다른 운영체제를 지원한다.

 

FAT 계열: 과거 DOS나 윈도 운영체제에서 많이 사용되었던 파일 시스템 유형으로 기술 발전에 따라 다양한 종류가 존재한다.

 

HFS+ : 애플의 HFS의 개선 버전으로 대부분의 매킨토시 시스템에서 표준으로 사용되는 파일 시스템이다.

 

Btrfs : B-tree 파일 시스템의 약자로 리눅스의 차세대 파일 시스템이다.

 

 

파일 시스템 만들기 : mkfs

 

파티션이나 논리 볼륨을 만들었다면 파일 시스템을 적용시킬 준비가 된 것이다.

관리자 명령인 mkfs 명령으로 파티션에 다양한 종류의 파일 시스템을 생성시킬 수 있다. 즉 지정된 파일 시스템에 맞게 저장 장치를 포맷하는 것이다.

 

파일 시스템은 언마운트된 상태에서만 만들 수 있다.

 

mkfs 명령 형태는 다음과 같다

mkfs [-t fs-type] device 

ex) # mkfs -t ext4 논리 볼륨/파티션

 

인수로 사용되는 device는 디바이스의 이름이거나 파일 시스템과 연결된 마운트 지점이다. fs-type은 파일 시스템의 종류이다. mkfs 명령은 자동으로 장치에 포함되는 블록의 수를 계산하며 적당한 값으로 초깃값을 설정한다. 또 파일 시스템을 만드는 동안 필요한 여러 수행 결과를 상세히 출력해 준다.

 

파일 시스템 검사 : fsck

cat /etc/fstab 명령을 쳐서 확인할 수 있는 마지막의 6번째 항목은 파일 시스템 검사 여부이다. 0은 부팅 과정에서 파일 시스템을 마운트 하기 전에 파일 시스템을 검사하지 않는다는 것이며, 1은 가장 먼저 검사해야 한다는 의미로 보통 루트 파일 시스템의 경우 1로 설정된다. /home이나 /boot가 별도의 파일 시스템으로 되어 있다면 보통 2로 설정되어 1로 설정된 파일 시스템 다음에 검사 된다.

 

 fsck명령은 파일 시스템의 무결성을 검사하는 것 외에 손상된 파일 시스템을 복수하는 기능도 한다. 유닉스 계열의 운영체제에서 복구 작업을 할 때 손상된 파일은 각 파일 시스템의 최상위 디렉터리에 있는 lost+found 디렉터리에 두고 작업하는데 만약 lost+found 디렉터리에 많은 파일이 남아 있다면 손상된 파일이 많다는 증거이다. 저널링을 지원하는 파일 시스템이라면 복구의 속도와 가능성이 높아질 수 있다. 저널링은 변경을 기록하는 로그를 두어 시스템 복구를 쉽게 하는 방법이다.

 

 

스왑 영역

리눅스 운영체제에서는 마운트 지점이 루트인 표준 리눅스 파티션 외에 추가로  스왑 파티션이 반드시 필요하다.

우선 시스템에서 사용 중이거나 사용되지 않는 물리적 메모리와 스왑 메모리의 양을 알고 싶을 때는 free 명령을 사용한다. 현재 사용 중인 스왑 영역은 /proc/swaps 파일에서 확인할 수 있다.

 

파티션을 스왑 영역으로 사용하기 위한 절차는 다음과 같다.

  1. 빈 파티션을 생성한다.
  2. mkswap device를 실행하여 스왑 파티션으로 만든다.
  3. swapon device를 실행하여 일시적으로 지정한 스왑 파티션을 활성화한다. 이 명령은 커널에 스왑 영역의 사용을 등록하는 것이다.
  4. 시스템을 부팅할 때마다 스왑 영역을 사용하려면 /etc/fstab 파일에 기록해야 한다. 부팅 시 /etc/fstab파일을 참고해 마운트 하기 때문이다. 

만약 파일을 스왑 영역으로 사용하려면 스왑 파일로 사용한 파일을 초기화시켜야 한다. dd 명령을 통해 0으로만 이루어진 특별한 장치 파일 /dev/zero을 사용해 swap파일을 초기화시킨다.

 

디스크의 남은 공간을 보기 위해선 df명령을 사용한다. 기본적으로 1 KiB=1024byte 블록 단위로 출력된다.

 

df [options] [names] 형태이며 name에 장치명 마운트 지점, 파일, 디렉터리를 지정할 수 있다.

 

디스크의 사용 공간을 보기 위해서는 du 명령을 사용하는데 현재 디렉터리와 그것의 모든 서브 디렉터리에서 디스크 사용량을 1 KiB의 블록 단위로 출력한다.

반응형

'Linux' 카테고리의 다른 글

/etc/profile  (0) 2021.02.26
Firewall  (0) 2021.02.22
[Linux] cron 서비스  (0) 2020.11.21
[Linux] 프로세스의 상태  (0) 2020.11.21
[Linux] 프로세스  (0) 2020.11.21

댓글