RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR

출처 : 대전국제IT교육센터 정성재 강사

 

1. 파일 시스템이란?
파일 시스템(File System)이란 운영체제가 파일을 시스템의 디스크(흔히 블록디바이스라 불리우는
장치들) 또는 파티션에 기록될 수 있도록 구성하는 방식을 말한다. 운영체제는 시스템의 디스크 파티
션상에 파일들을 연속적이고 일정한 규칙을 가지고 저장하는데, 파일시스템은 이러한 규칙들의 방식
을 제시하는 역할을 한다.


2. 리눅스 파일 시스템의 구조
(1) 개요: 각각의 파일시스템들은 파일 시스템만의 독특한 시스템 특징을 가지고 있다. 그러나 대체
          적으로 대부분의 리눅스 파일 시스템은 비슷한 구조를 가지고 있으면 아래에 열거할 공통점
          을 가지고 있다.
(2) 리눅스 파일 시스템의 구성요소
   1) 슈퍼 블록(Super Block): 파일시스템의 전체적인 정보를 가지고 있다. 파일시스템의 크기, 매직
                             넘버, 마운트횟수, 블록그룹번호, 블록 크기, 첫번째 inode 등이 해당
                             된다.
   2) 아이노드(Inode) : 아이노드는 파일의 이름을 제외한 해당 파일의 모든 정보를 가지고 있으며
                       각 파일 이름에 부여되는 고유한 번호이다. Data Block의 위치정보, File형
                       태, 크기, 타임스탬프, File의 소유자, inode의 모드 등에 관한 정보를 가지
                       며, Inode로 이루어진 테이블에서 이 번호를 가지고 찾아 정보를 알려준다.
                       일반적으로 시스템에서는 파일이름으로 처리하는 것이 아니라 이 아이노드로
                       처리한다.
   3) 데이터 블록(Data Block) : 데이터 블록은 Inode에 포함된다. Inode가 몇 개의 데이터 블록을
                               포함하고 있다. 데이터 블록은 파일에서 데이터를 저장하기 위해
                               사용되는 공간이다.
   4) 디렉토리 블록(Directory Block) : 파일 이름과 Inode 번호를 저장하기 위해 사용된다.
   5) 간접 블록(Indirection Block) : inode에 Data Block의 위치 정보를 저장할 공간이 부족할 때,
                                    이 위치정보를 저장하기 위한 공간을 동적으로 할당하는데 이 공간
                                    이 간접 블록이다.
   6) 홀(Hole) : 홀은 Inode나 간접 블록안의 데이터 블록의 주소로 특별한 값을 저장한다. 홀은
                파일 시스템에 의해서 파일 안에 자리하게 된다. 하지만 이 홀을 위해 실질적으로
                디스크상에 공간은 할당되지 않는다. 단지 0바이트가 파일 안에서 특정 공간을 차지
                하고 있다고 가정하는 것이다.

3. 리눅스 파일 시스템의 종류와 특징
(1) 개요: 리눅스는 다양한 파일 시스템들을 지원하는데 중요 파일시스템들은 ext, ext2, minix,
          xia, umsdos, hpfs, iso9660, msdos, nfs, sysv 등이 있다.
(2) 파일 시스템의 종류와 특징
   1) ext
     리눅스 초기에 사용되던 파일 시스템으로 호환성이 없다. ext2의 구 버전으로 현재는 대부분
    사용하지 않고 있다.
   2) ext2
     현재 가장 많이 사용하는 파일 시스템으로 리눅스 파일 시스템의 대부분을 차지한다. 안정성이
    뛰어나고 속도가 빠르다. 호환성도 뛰어나고 업그레이드도 쉽게 설계되어 있다.
   3) minix
     과거 Minix에서 사용되었던 파일 시스템으로 가장 오래되고 기본이 되는 파일 시스템이다. 흔히
    가장 신뢰할 만할 파일 시스템이라고 하지만 몇가지 제한을 가지고 있다. 우선 몇몇 Time Stamp
    가 유실되고, 파일 이름은 30문자로 제한된다. 또한 파일 시스템마다 최대 64MB 성능 제한이
    있다. 대부분의 배포판의 부팅디스크는 보통 이 Minix 파일 시스템으로 구성되어 있다.
   4) xia
     Minix의 제한이었던 파일 이름과 파일 시스템에 대한 제한을 보안한 minix파일 시스템의 수정
    버전이지만 특별히 추가된 새로운 기능은 없다.
   5) msdos
     MS-DOS의 FAT파일시스템과 호환을 지원하는 파일 시스템이다. 또한 msdos는 OS/2와 윈도우 NT
    의 FAT파일시스템과도 호환된다.
   6) umsdos
     MS-DOS파일 시스템을 리눅스상에서 긴 파일명과 소유자, 접근권한, 링크와 장치 파일 등을 지원
    하도록 확장한 파일 시스템이다. umsdos는 일반적으로 DOS파일 시스템이 마치 리눅스 파일 시스
    템인 것처럼 보이도록 하는 기능을 제공하므로 따로 리눅스를 위한 파티션은 필요하지 않는다.
   7) iso9660
     ISO 기준을 따르는 CD-ROM의 표준 파일시스템이다. 이 파일시스템은 CD-ROM에 좀 더 긴 파일명
    을 사용할 수 있도록 확장한 록 브리지(Rock Bridge)가 기본으로 지원된다.
   8) hpfs
     OS/2의 파일 시스템이다. 하지만 현재는 읽기 전용인 파일 시스템으로 파일 시스템에 대한 읽기
    만 가능하다.
   9) nfs
     네트워크 파일 시스템(Network File System)이다. 네트워크상의 많은 컴퓨터들이 각각의 시스템
    에 가진 파일들을 서로 쉽게 공유하기 위해 제공되는 상호간의 파일 시스템 공유 파일시스템이다.
   10) sysv
     System V/386, Xenix 그리고 Coherent 파일 시스템이다.

4. ext2와 저널링파일시스템
(1) ext2 파일시스템
   1) 설명: Minix파일시스템은 리눅스가 처음으로 사용한 파일시스템이었다. 하지만 여러가지 제약
           조건이 있었고, 그 성능 또한 그리 뛰어나지 못했다. 이를 보안하기 위해 제시된 파일시
           스템이 확장 파일 시스템(EXT, Extended File System)이다. 특히 이 파일 시스템은 리눅
           스 전용으로 설계되어 1992년 4월 소개되었다. 하지만 이 파일시스템도 여러 문제점을
           가지고 있었고, 그래서 다시 ext파일시스템을 보완하기 위해서 1993년에 추가된 것이
           바로 2차 확장 파일 시스템(ext2, Extend File System 2)이다. ext2파일시스템은 자신이
           위치하고 있는 논리적인 파티션을 블록으로 다시 나누게 된다. 이 블록 그룹들은 파일시
           스템에서 무결성의 핵심을 이루는 정보를 중복해서 저장하여 실제 파일과 디렉토리를 정
           보와 데이터 블록으로 가진다. 블록 그룹들이 파일 시스템에 대해 무결성 정보를 가지고
           있는 이유는 파일시스템이 예기치 않는 시스템상의 재난으로부터 파일시스템을 복구하기
           위해서이다.
   2) 구성요소
     ㄱ. Inode: ext2 파일 시스템은 모든 파일을 ext2파일시스템에서 가장 기본이 되는 단위인 각각
               의 Inode에 의해서 표현한다. 또한 Inode는 각각을 구분할 수 있는 고유 번호를 가지
               게 되는데, 이러한 Inode의 역할은 파일의 데이터가 어느 블록의 어느 위치에 저장되
               어 있는지, 파일에 대한 접근 권한, 파일의 최종 수정시간, 파일의 종류 등의 정보를
               저장하는 것이다. 그리고 Inode는 Inode table에 저장된다.
         (참고) Inode 테에블에 저장되는 정보의 항목
               1. 모드(Mode) : Inode가 속한 파일에 대한 정보와 파일에 대한 접근 권한 정보가
                              저장된다. ext2에서 Inode는 단지 하나의 파일, 심볼릭 링크, 블록
                              장치, 문자장치 등만을 나타낸다.
               2. 소유자정보(Owner Information) : 소유자정보는 파일과 디렉토리에 대한 소유자와
                                                 그룹에 대한 식별자를 나타낸다. 소유자정보를
                                                 사용하여 파일이나 디렉토리에 대한 접근권한을
                                                 관리할 수 있다.
               3. 크기(Size): 크기(Size)는 파일의 크기 정보를 저장한다. 파일에 대한 크기정보는
                             바이트 단위로 저장된다.
               4. 타임스탬프(Time Stamp): 타임스탬프는 Inode가 생성된 시간과 최종적으로 수정을
                                         가한 시간에 대한 정보를 저장한다.
               5. 데이터 블록(Data Block): 데이터 블록은 Inode가 지정하고 있는 데이터 블록에
                                          대한 포인터를 저장한다. 데이터 블록에는 총 15개의 포
                                          인터가 존재하는데, 이 포인터들 중에서 선행의 12개 포
                                          인터는 해당 Inode가 지정하고 있는 데이터에 대한 실제
                                          블록의 포인터 정보를 가지고 있고, 나머지 3개의 포인
                                          터는 높은 수준의 간접 연결에 대한 정보를 가지고 있다.
                                          Inode는 또한 실제로 존재하지 않지만 시스템의 장치에
                                          접근할 수 있는 특별한 장치 파일의 표현에도 사용된다.
                                          리눅스시스템의 /dev디렉토리안에 위치하는 파일들이
                                          그것들이다.
     ㄴ. 슈퍼블록(Super Block): 슈퍼블록은 해당 파일시스템의 기본적인 크기나 형태에 대한 정보
                               를 저장한다. 파일시스템 관리자는 이 슈퍼블록의 정보를 이용하여
                               파일 시스템을 활용하고 유지할 수 있다.
        a. 매직 넘버(Magic Number): 마운트하는 소프트웨어에게 ext2파일 시스템의 슈퍼블록임을
                                   확인하게 하는 값이다. 현재 ext2파일 시스템에서 매직 넘버값
                                   은 OxEF53이다.
        b. 개정레벨(Revision Lever)
          개정레벨은 메이저 레벨(Major Level)과 마이너 레벨(Minor Level)로 구성되어 있으며,
         역할은 마운트프로그램이 어떤 특정한 버전에서만 지원되는 기능이 이 파일 시스템에서 지
         원되는 지에 대한 확인을 위해 사용된다. 또한 개정 레벨은 기능 호환성 항목을 포함하여
         마운트 프로그램이 해당 파일 시스템에서 안정적으로 사용할 수 있는 기능이 무엇인지를
         판단할 수 있는 기준을 제공한다.
        c. 마운트 횟수(Mount Count)와 최대 마운트 횟수(Maximum Mount Count)
         시스템은 마운트 횟수와 최대 마운트 횟수의 두 가지 정보를 이용하여 파일 시스템 전체를
         검사할 필요가 있는 지를 확인할 수 있다. 마운트 횟수는 마운트가 실행될 때마다 1씩 그
         값이 증가하며 만약 마운트 횟수가 최대 마운트 횟수에 도달하게 되면 시스템은 e2fsck를
         실행하라는 메시지를 내보낸다.
        d. 블록 그룹 번호(Block Group Number)
          블록 그룹 번호는 슈퍼 블록 복제본을 가지고 있는 블록 그룹의 번호를 나타낸다.
        e. 블록 크기(Block Size)
          블록 크기는 파일 시스템의 블록 크기를 표시한다. 블록 크기는 바이트 단위로 표시된다.
        f. 그룹당 블록 수(Blocks Per Group)
          그룹당 블록 수는 하나의 그룹에 속한 블록의 수를 나타낸다. 이 수는 블록의 크기와 마찬
         가지로 파일시스템을 만들 때 결정된다.
        g. 프리블록(Free Block) : 파일시스템 내부적으로 존재하는 프리블록의 수이다.
        h. 프리 아이노드(Free Inode): 파일시스템 내부적으로 존재하는 프리 아이노드의 수이다.
        i. 첫 아이노드(First Inode): 파일 시스템 내부적으로 존재하는 첫번째 아이노드의 번호를
                                    나타낸다. 리눅스 시스템에서 ext2파일 시스템의 첫번째 아이
                                    노드는 '/'디렉토리에 대한 엔트리를 나타낸다.
     ㄷ. 그룹 기술자(Group Descriptor): 각각의 블록 그룹을 기술하는 자료 구조이다. 그룹기술자
                                       는 슈퍼 블록과 같이 중복되게 블록 그룹에 복제되어 파일
                                       시스템의 파괴에서 안정적인 복구를 지원한다. 각 그룹의
                                       기술자에 저장되는 정보 항목은 다음과 같다.
        a. 블록 비트맵(Blocks Bitmap): 블록 비트맵은 블록 그룹에서 블록의 할당 상태를 나타내
                                      주는 비트맵으로 그 수는 블록의 수와 동일하다. 블록 비트
                                      맵은 블록을 할당하거나 해제할 경우 참고되는 정보이다.
        b. 아이노드 비트맵(Inode Bitmap)
          블록 그룹에서 블록의 아이노드 할당 상태를 나타내 주는 비트맵으로 그 수는 블록 비트맵
         과 같이 블록의 수와 동일하다. 아이노드 비트맵은 아이노드를 할당하거나 해제할 경우 참
         고 되는 정보이다.
        c. 아이노드 테이블(Inode Table)
          아이노드 테이블은 블록 그룹의 아이노드 테이블에서 시작 블록을 나타내며 그 수는 블록
         의 수와 동일하다.
        d. 기타: 프리 블록 개수(Free Block Count), 프리 아이노드 개수(Free Inode Count), 사용
                된 디렉토리 개수(Used Directory Count)가 있다. 그룹기술자(Group Descriptor)는
                연속적으로 나타나서 전체적으로 하나의 그룹 기술자 테이블을 형성하게 된다. 각
                블록 그룹(Block Group)에는 슈퍼 블록 바로 뒤에 그룹 기술자 테이블 전체가 위치
                하게 된다. 하지만 실제로 ext2파일 시스템에서 사용되는 것은 블록 그룹이 '0'인
                첫번째 복사본이다.나머지는 예상치 못한 시스템의 손상에 대비해 시스템 복구를
                준비하고 있을 뿐이다.
     ㄹ. ext2 디렉토리: ext2 파일시스템에서 디렉토리는 파일시스템상에서 파일에 대한 접근 경로를
                       생성하고 저장하는 특별한 의미의 파일로 취급된다. 각각의 디렉토리는 디렉
                       토리의 엔트리의 리스트로 나타낸다.
        a. 아이노드(Inode): 아이노드는 디렉토리 엔트르에 해당하는 Inode를 나타낸다. 아이노드값
                           은 블록 그룹의 Inode테이블에 저장되어 있는 Inode 배열에 대한 인덱스
                           값이다.
        b. 이름 길이(Name Length): 이름길이는 디렉토리 엔트리의 길이를 바이트로 나타낸 것을 의
                                  미한다.
        c. 이름(Name): 디렉토리 엔트리의 이름을 나타낸다.
(2) 저널링(Journaling) 파일시스템
   1) 설명: ext2 시스템은 파일의 내용과 그와 관련된 데이터(보통 메타데이터라고 부르고, 파일의
           위치, 크기, 소유자, 접근 권한등의 파일과 관련된 데이터들을 말한다.)들을 유지하고
           저장하는 체계이다. 그러나 ext2는 파일의 데이터와 메타데이터를 동시에 저장하지 않는
           비동기식 파일시스템이다. 즉, 메타데이터를 파일의 내용이 저장될 때 같이 저장하는 것
           이 아니라 일정 시간 메모리에 두었다가 시간 간격을 두고 저장한다. 이러한 시스템인
           경우 성능상의 장점도 있지만 시스템이 다운되거나 여러 문제가 발생할 경우 파일 시스템
           이 손상되는 단점을 가지게 된다. 또한 이를 위해 ext2는 fsck(File System Check)라는
           파일 시스템 복구 기능을 필요로 하고 복구하는데 시간이 많이 소요된다. 만약 파일 시스
           템의 크기가 크다면 파일시스템을 복구하는데 더욱 오랜 시간이 걸린다. 물론 이 시간
           동안 시스템은 사용할 수 없게 된다. 이러한 문제점을 해결하기 위한 방법중의 하나가 바
           로 데이터베이스에서 쓰이는 저널링 기술을 적용한 저널링 파일시스템이다. 이 기술은 일
           정부분을 기록을 위해 남겨두어, 백업 및 복구 능력이 있는 파일시스템을 말하며, 파일시
           스템 복구시간이 단축된다.
   2) 작동방법: 저널링 파일시스템은 사용자가 데이터를 입력 또는 수정하면 그 데이터를 바로 하드
               디스크에 기록하기 전에 관련 데이터를 로그에 기록한다. 만약 기록중에 정전이나 기
               타 다른 이유로 비정상적인 종료가 되면 다시 부팅할 때 로그에 기록된 데이터를 참
               고로 재작성하거나 복구한다.
   3) 사용부분: 저널링 파일시스템은 빈번한 업데이트를 하는 부분이 적합하다. /var디렉토리와 같
               이 메일 스풀링 및 데이터베이스의 저장공간, 로그 기록 등의 용도로 사용되는 곳이
               효과적이다.
(3) ext3 파일시스템
   1) 설명: ext3 파일 시스템은 ext2파일시스템에 저널링기술을 추가하여 만든 파일시스템이다. ext
           2 파일시스템이 가지고 있는 단점들을 극복하였다. 데이터 무결성은 물론 뛰어난 복구
           기능까지 가질 수 있게 되었다.
   2) ext3 파일시스템으로의 포팅 동기
     etx2 파일 시스템에서는 fsck(File System Check)라는 기능으로 파일시스템을 복구한다. 그러
    나, 이 fsck는 시간이 많이 걸린다는 단점이 있다. 특히 요즘 같은 대용량 하드디스크가 보편화
    되어 있는 상황에서는 더욱 그러하다. 또한 fsck는 시스템이 비정상적으로 셧다운되어 파일시스
    템에 손상이 되었을 경우 이외에도 슈퍼블록에 마운트 횟수를 저장하는 영역이 있어 마운트 횟
    수가 일정횟수 이상이 될 경우에는 자동으로 fsck를 실행해 오랜시간 동안 시스템을 사용할 수
    없게 되는 단점도 가지고 있다. 또한 ext2는 기능적인 측면보다는 파일 시스템의 효율과 퍼포먼
    스에 중점을 두고 디자인된 파일시스템이다. 그래서, ext2는 파일의 내용과 파일에 대한 허가권,
    소유권, 생성과 접근 시간과 같은 메타 데이터를 동기화하지 않는다.이럴 경우 만약 파일의 내용
    을 수정하는 도중에 시스템에 문제가 생길 경우 해당 파일의 메타데이터와 내용이 일치하지 않는
    문제점이 발생하게 된다. 따라서 이러한 문제점을 보안하기 위해서 저널링(Journaling)기술을
    이용한 ext3파일시스템이 대두된 것이다.
(3) 기타 저널링 파일시스템
   1) ReiserFS
     Reiser파일시스템은 독일의 한스 라이져(Hans Reiser)가 개발한 저널링 파일시스템으로 모든 파
    일 객체들을 단일 B트리에 저장하는 데 그 트리가 지원하는 사항으로 동적인 Inode 할당, 간결하
    고 색인화된 디렉토리, 크기 재조정이가능한 아이템, 60비트 오프셋 등이 있다. 트리에는 기본적
    인 4가지 형태의 아이템이 있는데, 이 4가지는 stat 데이터, 직접적인 아이템, 간접적인 아이템,
    디렉토리 아이템이 있다. 아이템은 키를 검색해 찾게 되는데 키에는 ID, 사용자가 찾으려 하는
    객체의 오프셋, 그리고 아이템타입에 대한 정보가 있다. Reiser파일시스템 디렉토리는 콘텐츠가
    변함에 따라서 늘어나기도 하고 줄어들기도 한다. 파일 이름의 해시데이터는 디렉토리에서 엔트
    리의 오프셋을 일정하게 유지하는데 이용된다. 이와 같이 해시데이터를 인덱싱하는 트리는 별다
    른 성능의 손실없이도 매우 큰 디렉토리를 이용할 수 있도록 해준다. 파일의 경우 간접적인 아이
    템은 데이터 블록을 가리키며, 직접적인 아이템은 압축된 파일데이터를 포함하고 있다. 이러한
    압축된 데이터는 트리에 직접 저장되며, 트리노드에서 다른 객체의 아이템과 공간을 경유하게
    된다. 따라서 대용량 파일의 경우 Reiser파일시스템은 ext2파일시스템이 사용하는 것과 유사한
    블록포인터를 저장하고 있지만, 작은 파일의 경우에는 데이터를 모으고 압축해서 공간 낭비를
    줄인다. 이러한 모든 아이템들은 트리를 재조정하면 크기를 변화시킬 수 있다. 사용자는 압축된
    파일에 데이터를 추가할 수도 있고, stat데이터에서 또 다른 필드가 필요한 경우 새로운 정보를 \
    포함할 수도 있다.
   2) JFS: IBM에서 독자적으로 개발한 저널링 파일시스템이다.
   3) XFS: SGI(실리콘 그래픽스)에서 개발한 저널링 파일시스템이다.

5. 파일시스템의 점검 및 고치기
(1) 설명: ext2파일시스템을 사용하면서 비정상적인 종료시에는 재부팅과정을 거치면서 파일시스템
          을 체크하도록 되어 있다. 체크하면서 아무런 문제가 없으면 OK 사인이 떨어지지만 문제가
          발생하는 경우에는 root패스워드를 입력하라는 화면이 나타나면서 부팅을 멈추게 된다.
          ext3파일시스템은 자동으로 복구가 되도록 되어있지만 ext2파일시스템은 상황에 따라 관리
          자가 파일시스템인 복구시에 사용하는 e2fsck명령으로 복구해야 한다.
(2) 파일시스템손상과 복구
   1) 파일시스템의 복구가 쉬운 경우: 이 경우에 /etc/fstab파일에 check가 설정되어 있으면 자동
                                    으로 복구시킨다.
    ㄱ. 참조되지 않은 inode
    ㄴ. 납득할 수 없이 큰 링크의 갯수
    ㄷ. 블록맵에 기록되지 않거나 사용되지 않는 데이터블록
    ㄹ. 파일에서 사용하고 잇지만 비어있다고 기록된 데이터블록
    ㅁ. 슈퍼블록에서 부정확한 요약정보
   2) 파일시스템의 복구가 어려운 경우 : e2fsck같은 명령어를 이용하여 수동복구해야 한다.
    ㄱ. 하나이상의 파일이 요구되는 블록
    ㄴ. 파일시스템의 범위밖에서 요구하는 블록
    ㄷ. 너무 작은 링크의 개수
    ㄹ. 셀수없는 블록
    ㅁ. 할당되지 않는 inode를 가리키는 디렉토리
    ㅂ. 다양한 포맷 에러

Trackback
Reply
우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
OperatingSystem (5)
Databases (4)
OpenSource (1)
Tips! (1)
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30