본문 바로가기

OS

[OS] 리눅스 1급_리눅스의 구조 2

728x90

#####. 리눅스의 구조

###. 파일 시스템의 이해

#. 파일 시스템의 개요

 - 파일 시스템이란 디스크에 사용자의 데이터를 효율적으로 저장하기 위한 파일과 디렉토리를 조직화한 체계

 - 디스크에 포맷 작업을 한다는 의미는 A4종이에 글씨를 쓰기 좋도록 미리 줄을 긋는 것과 비슷. 포맷은 디스크를 일정한 크기로 분할하고 주소를 설정하여 사용자의 자료를 조직적으로 보관 가능하게 함

 - 사용자의 데이터는 파일 단위로 관리가 되며 디스크에 저장할 쌔에는 레코드 단위 혹은 블록 단위로 저장. 각 파일은 디렉토리에 속하여 그룹을 생성할 수 있고 파일을 체계적으로 관리 가능케함

 - 파일 시스템은 파일 입출력 시 발생하는 오류에 대하여 복구할 수 있는 기능 제공

 - 디스크 입출력은 메모리에 비해 속도가 느리기 때문에 파일 시스템은 캐시 기능을 제공하여 디스크의 입출력을 최소화

#. 리눅스 파일 시스템의 구조

 - ext2의 파일 시스템 개요 : ext3, ext4는 모두 ext2를 근간으로 발전. ext2 파일 시스템의 구조를 이해하면 리눅스 파일 시스템이 어떻게 파일을 조직화하고 관리하는지 이해하는데 도움이 됨

 - 부트섹터 (boot sector), 블록 그룹(block group)

 : ext2 파일 시스템은 부트 섹터와 그에 뒤따르는 여러개의 블록 그룹들로 구성

 : 블록 그룹은 모두 같은 블록 개수를 가짐, 마지막 블록 그룹은 예외

 - 블록 그룹

 : 블록 그룹은 여러개의 블록으로 구성

 : 한 파일이 여러 블록에 나누어서 저장되어야 하는 겨웅 단편화를 최소화하기 위해 동일 블록 그룹에 위치 하려 스케줄링함

 : 블록그룹은 수퍼 블록, 그룹 디스크립터 테이블, 블록 비트맵, 아이노드 그리고 실제 사용자의 데이터를 담고 있는 블록으로 구성

 : 슈퍼 블로고가 그룹 디스크립터 테이블은 0번 블록 그룹에만 포함되어도 기능상 문제가 없으나 손상이 되면 파일 시스템 접근이 불가능하므로 다른 블록 그룹에도 사본이 보관되어있음

 : 블록 비트맵은 그룹 내의 각 블록이 할당되어 있는지 여부를 비트로 포현. 4KB 크기의 블록이라면 한 바이트는 8개의 비트로 구성되며 총 32,768개의 블록 할당 여부를 표현 가능

 - 슈퍼 블록

 :  파일 시스템의 전체 내용을 담고 있는 블록으로 1KB만 사용, 1만 사용하면 3은 비워둠

 - 그룹 디스크립터 테이블

 : 블록 그룹에 대한 정보를 담고 잇으며 32byte 크기인 그룹 디스크립터의 목록

 : 그룹 디스크립터 테이블은 블록 비트맵의 블록번호, 아이노드 비트맵의 블록번호, 첫번째 노트 테이블의 블록 번호, 그룹 안에 있는 빈 블록 수, 그룹 안에 있는 아이노드 수, 그룹 안에 있는 빈 디렉토리 수

 - 블록 비트맵

 : 블록 할당 여부를 비트로 표현

 : 각 비트에 해당하는 블록이 사용중이면1, 아니면 0으로 표현

 - 아이노드

 : 아이노드는 실제 파일과 디렉토리의 위치를 알고 있는 자료구조

 : 아이노드는 Inode Number, 파일모드, 하드링크 수, 소유자 ID, 파일 크기, 마지막 접근, 마지막 수정, Inode 수정, 데이터 블록 수의 정보를 가짐

 : 모든 파일가ㅗ 디렉토리는 각 1개의 아이ㄴ드를 가지고 잇고 고유한 주소를 가짐

 : 아이노드 1번은 슈퍼블록 2번은 루트 디렉토리 등 10번까지 예약 되어 있음

 - ext2 내부는 15개의 포인터가 있는구조, 1~12까지는 직접 블록을 위한 것. 13번 포인터는 간접 블록, 14블록은 이중 간접블록, 15번 포인터는 삼중 간접 블록 을 가르킨다.

#, 리눅스 로컬 파일 시스템

 - ext

 : minix 파일 시스템을 개선하기 위해 Remy Card는 최대 2기가의 파티션과 255까지의 파일명을 지원하는 ext 파일시스템을 개발함

 : 파일 접근에 대한 타임스탬프 기능, 아이노드 수정 기능의 부재와 조각화 이슈가 있었음

 - ext2

 : 타임스탬프 기능, 아이노드 수정, 쓰면 쓸수록 느려지는 조각화 이슈 해결

 : 파일 시스템의 크기는 블록 단위에 따라 2TiB~32TiB

 : 파일 크기도 블록 단위에 따라 16GiB~2TiB 

 : 데이터를 사용하는 동안 전원이 나가면, fsck명령어로 파일을 복구 할 수 있으나 느림

 - ext3

 : 커널 2.4.15 버전부터 포함된 리눅스의 대표 저널링 파일 시스템

 : 파일 시스템에 데이터를 쓰는 동안 전원이 끊어지더라도 복구할 수 있는 기능을 제공하기 위해 로그를 통해 파일 시스템을 복구하는 저널링 기술을 채용

 : 저널링에는 저널모드, 순서모드, 쓰기 저장 모드가 있음

 : 온라인 파일 시스템 증대, 큰 디렉토리를 위한 HTree 인덱싱 기능, ACL을 통한 접근 제어를 제공

 : 단점 : 온라인 조각 모음 프로그램이 없음

 : ext2와 마찬가지로 최대 파일 크기는 16GiB~2TiB 최대 파일 시스템의 크기는 2TiB~32TiB

 - ext4

 : ext2와 ext3를 호환하면서 기능을 확장하였으며 48비트 블록 주소 지정을 통하여 1EiB까지의 디스크 볼륨과 16TiB까지의 파일을 지원

 : 큰 파일 처리를 개선하고 단편하ㅗ 현상을 줄이기 위해 ext2, ext3의 간접 블록 매핑 방식 대신 Extents 방식을 사용

 : ext2, ext3를 ext4 방식으로 마운트하여 성능이 향상된 상태로 사용할 수 있으며 , ext4는 ext3 방식으로 마운트됨 그러나 Extents를 시용하는 ext4 파티션은 ext3 방식으로 마운트 될수없음

 : 파일 시스템 손상 가능성을 줄여주는 저널 체크섬 기능을 제공

 : ext3의 32000개 서브 디렉토리 제약을 극복하고 64000개로 증가함

 : XFS, ZFS, btrfs, Reiser4와 같은 현대 파일 시스템에서 사용되는 지연된 할당 기능을 제공. 프로세스가 write를 호출하더라도 즉시 디스크 블록에 할당하지 않고 캐시에 보관하는 것. 디스크에 대한 I/O를 최소화하고 mballoc 할당자를 통해 한 번에 여러 블록을 할당할 수 있으므로 성능 개선에 도움이 됨

 : ext3의 블록 할당자는 한 시점에 하나의 블록만 할당할 수 있으나 ext는 여러 블록을 동시에 할당할 수 있는 멀티 블록 할당자 mballoc을 제공, 하나의 호출 시점에 여러 블록을 할당할 수 있기에 성능 개선에 도움이 되며 지연 할당과 Extents를 동시에 사용할 때 더욱 성능 개선에 효과가 큼

 : 나노초 단위의 파일 스탬프를 제공

  - btrFS

 : 오라클 재직 중이던 크리스 메이슨 개발 B-Tree 파일 시스템

 : 전체 파일 시스템이 아닌 특정 파일, 볼륨, 하위 볼룸의 스냅샷 찍기 기능을 제공

 : 저렴한 디스크의 RAID를 제공

 : 자동 압축 기능을 제공

 : 데이터 및 메타 데이터의 체크섬을 제공

$$. 체크섬(Checksum)은 데이터의 무결성을 확인하기 위해 사용되는 값입니다. 데이터의 무결성은 데이터가 손상되거나 변경되지 않았음을 보장하는 것을 의미합니다. 체크섬은 데이터의 일부 또는 전체에 대한 연산을 수행하여 생성합니다.

 - ZFS

 : 유닉스 파일 시스템을 대체하기 위해 SUN에서 개발한 파일 시스템으로 solaris 10에서 소개됨

 : 단순한 파일 시스템을 넘어 볼륨 매니저 역할까지 수행

 : 단일 파일시스템에 여러 개의 개별 저장장치를 처리하는 볼륨 관리 기능, 블록 수준 암호화, 데이터 손상 탐지기능, 자동 손상복구, 신속한 비동기 증분 복제, 인라인 압축 등 많을 기능을 제공

 - Reiserfs

 : 독일의 한스 라이저가 개발한 저널링 파일 시스템

 : 커널 2.4.1에 포함

 - XFS

 : 실리콘 그래픽스가 만든 고성능 64비트 저널링 파일시스템

 : 최대 파일 시스템의 크기는 8EiB -1. 리눅스 시스템의 경우 파일과 파일 시스템의 최대 크기를 모두 16TiB로 제한

 : Entents 기반 할당을 사용하며 조각화를 줄여주면서 성능 향상을 위한 사전 할당 및 지연 할당 등과 같은 다양한 할당 당법을 제공함

 : 빠른 복구를 가능하게 하는 메타데이터 저널링을 제공

 : 마운트가 활성화 되어 잇는 상태에서도 조각모음이 가능하고 볼륨의 확장이 가능

 : XFS는 b-트리 알고리즘을 사용하여 모든 사용자 데이터 및 메타데이터를 인덱스하여 우수한 I/O 확장성을 제공

 - JFS

 : IBM에 의해 개발한 64bit 저널링 파일 시스템

 

#. 클러스터 파일 시스템

 - Raw Partitions

 : 파일 시스템이 설정되어 있지 않은 상태를 뜻함

 : 운영체제의 버퍼 캐시를 사용하지 않음으로 고성능의 입출려깅 가능

 : 파일 시스템을 통하는 오버헤드가 없음

$$. 파일 시스템 오버헤드(File System Overhead)는 파일 시스템이 데이터를 저장하고 관리하는 데 필요한 추가적인 비용이나 자원 사용을 의미한다.

 : 파일 시스템을 이용하지 않기 때문에 숙련된 관리자의 관리가 필요

 - Oracle Cluster FilesSystem(OCFS)

 - Raw Partition의 다루기 어려운 문제를 해결하면서 RAC (Real Application Cluster)의 사용 목적을 위해 설계된 파일 시스템

 - OCFS의 다음 버전인 OCFS2는 POSIX를 호환하는 범용 클러스터 파일 시스템으로 개발 됨

$$. POSIX는 "Portable Operating System Interface for Unix"의 약자로, 유닉스 및 유닉스와 호환되는 운영 체제에서의 응용 프로그램 이식성을 향상시키기 위한 표준 인터페이스입니다.

 

#. 기타 리눅스 파일 시스템

 - minix :  리눅스도 초기에는 minix 파일 시스템을 사용

 - xiafs : minix 파일 시스템의 기초가 되었고 프랭크 시아가 개발한 리눅스 커널을 위한 파일 시스템

 - vfat : MS FAT32 파일 시스템 호환을 목적으로 개발한 파일 시스템

 - isofs : ISO 기준을 따르는 표준 CD-ROM 파일 시스템

 - nfs : 네트워크 상에서 파일 시스템을 공유하기 위한 파일 시스템

 - proc : 프로세스 등 커널의 정보를 표현하는 리눅스의 가상 파일 시스템

 - smb : SMB 프로토콜을 지원하는 네트워크 파일 시스템으로 최근 CIFS로 확장됨

 

 

728x90

'OS' 카테고리의 다른 글

[OS] 리눅스 1급_Shell 셸  (0) 2023.07.01
[OS] 리눅스 1급 X 윈도우  (0) 2023.07.01
[OS] 리눅스1급_리눅스의 구조1  (0) 2023.07.01
[OS] 리눅스1급_리눅스와 하드웨어  (0) 2023.07.01
[OS] 리눅스1급_리눅스 개요  (0) 2023.07.01