ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 리눅스 파일 시스템
    Computer기본지식/Computer 2021. 9. 25. 11:24
    반응형

    이번 포스팅은 리눅스의 파일 시스템 관리에 대해서 적어보겠습니다.

    이번 내용을 정리하면서 42Seoul 라파신 과정에서 나왔던 내용들이 스물스물 기억이납니다.

    그 때는 이런 걸 왜 하지? 라고 의문을 가졌지만 지금 결국에는 공부를 해야하는 영역이구나라고 느꼈습니다.

    이번 기회로 정리를 해보겠습니다.

    File, File System이란?

    File : 컴퓨터에서 의미가 있는 정보를 담은 논리적인 단위

    File System : 파일을 효율적으로 관리하고 쉽게 사용하게하는 시스템

     

    File System

    메타 데이터로 파일을 관리합니다.

     

    메타 데이터 : 접근 권한, 확장자, 파일 이름 등을 가르킵니다.

    Inode : 파일이름을 제외한 메타데이터를 가르킵니다.

    WindowNTFS, Linuxextfs(extended file system)을 사용합니다.

    현재는 ext3와 ext4를 주로 사용하고 있습니다. 왜냐하면 저널링 기능을 가지고 있기 때문입니다.

    저널링이란 무엇일까요?

    주 파일 시스템에 변경사항을 반영하기 전 저널안에 생성되는 변경사항을 추적하는 파일 시스템입니다.

    더보기

    extfs -> ext2fs(성능, 확장성, 기능추가) -> ext3(저널링 기능 추가) -> ext4(extends 추가)

     

    Linux File System의 기능

    크게 4가지 기능으로 나누어 살펴보겠습니다.

     

    파일의 할당 : 새로 생성할 파일을 디스크에 할당하는 방법

    블록이란? 하드디스크와 데이터를 주고 받을 경우 사용하는 기본 단위(4KB)

    EXT는 하드디스크를 크기가 같은 여러개의 블록으로 나누게 됩니다.

    한 개의 블록 그룹에는 아래와 같은 구조를 가지게 됩니다.

    Inode TableData block에 대해서 살펴보겠습니다.

    하나의 Inode Table에는 여러 개의 Inode Block이 존재하게 됩니다. 그리고 블록 내의 숫자들은 각각의 Inode를 나타냅니다.

    그럼 Inode의 구조에 대해서 살펴보겠습니다.

    아래의 Inode들은 각각 데이터들을 가르키고 있는데 가르키는 데이터 블록이 위에서 보시는 Data block이 됩니다.

    하나의 Inode는 12개 direct + 1 single indirect  + 1 double indirect + 1 triple indirect 블록들을 가지고 있습니다.

    왜 이런 구조를 형성할까요? 큰 데이터의 파일도 저장할 수 있게하기 위해서입니다.

    15개의 direct block을 쓰면 60KB를 저장할 수 있습니다.

    그러나 위의 구조를 쓰면 4TB에 가까운 파일들을 저장할 수 있습니다.

    그럼 이렇게 InodeData Block들을 저장 할 경우 빈 공간의 메모리는 어떻게 찾을까요?

    Bitmap들이 그 부분을 관리하게 됩니다.

    아래의 그림과 같이 사용하고있으면 '1', 아니면 '0'으로 관리되어집니다.

     

    파일의 접근 : 사용자가 원하는 파일을 디스크에서 접근하는 방법

    첫 번째 방법으로는 데이터 블록이 계속되어 파일을 가르키게 하는 방법입니다.

    아래의 그림과 같이 디렉토리안에 디렉토리를 계속 가르키며 파일을 관리하고 있는 모습입니다.

    두 번째 방법으로는 링크를 걸어주는 것입니다.

    링크란 서로 다른 디렉토리에서 같은 파일을 접근할 수 있는 방법입니다.

    링크의 종류로는 하드 링크소프트 링크(심볼릭 링크)가 있습니다.

    심볼릭 링크의 경우에는 새로운 Inode를 할당하고 데이터 블록에 원본 파일 경로를 가르키게합니다.

    그래서 원본 파일이 삭제되어도 삭제되었는지 모릅니다. "바로가기" 파일과 같다고 생각하면 됩니다.

    하드 링크는 같은 Inode를 가르키게 됩니다. 하드 링크는 순환참조라는 큰 문제를 가지고 있습니다.

    그래서 디렉토리간의 하드 링크는 불가능합니다.

     

    파일의 보호 : 파일의 접근 권한을 관리하는 방법

    접근 권한을 부여하므로써 파일을 보호 할 수 있습니다.

    첫 번째 방법으로는 ACL(Access Control List)를 이용하는 것입니다.

    ACL은 누가 어떤 연산을 할 수 있는지 리스트 형식으로 관리하는 방법입니다. 아래의 예시입니다.

    그러나 List크기가 가변적이기 때문에 고정적인 크기를 가진 Inode에는 저장하기 불편하다는 단점이 있습니다.

    두 번째 방법으로는 흔히 사용되어지는 접근 권한 비트입니다.

    아래의 그림과 같이 파일권한을알파벳 또는 비트로 나타낼 수 있습니다.

    그럼 Read, Write, Excute에 대해서 알아볼까요?

    Read : 디렉터리내의 파일의 리스트 접근 권한

    Write : 디렉터리내의 파일의 생성, 변경, 삭제 권한

    Excute : 디렉터리 접속 또는 디렉터리내의 파일 접근 권한

     

    파일의 일관성 : 파일의 내용이 손상되지 않도록 해주는 방법

     

    첫 번째 방법으로는 FSCK(File System Checker)가 있습니다.

    파일의 불일치되는 정보가 있는지 확인해주는 검사기입니다.

    이 방법은 모든 디렉터리 구조를 스캔 해야한다는 점과 일관성이 깨져있어도 복구가 불가능하다는 단점이 있습니다.

    그래서 나온 것이 저널링입니다. 저널링은 Inode나 Bitmap수정이 있을 경우에 그 내용들을 로그에

    남깁니다. 그래서 만약 로그 작성 실패 시 실제 파일에 반영이 되지 않았으므로 영향을 주지 않고

    실제 파일 반영 중 실패 시 로그에 있던 걸로 다시 복구하면 되는 장점이 있습니다.

     

    이렇게 리눅스의 파일 시스템 관리에 대해서 살펴봤습니다.

    저는 윈도우 시스템을 사용하는데 리눅스 파일 시스템을 이해하는데 어려움이 조금 있었습니다.

    리눅스는 개발자에게 맞춰진 기능을 위주로 구현하는 느낌이고

    윈도우 운영체제는 사용자에 초점이 맞춰져있다는 느낌을 받았습니다. 

    반응형

    'Computer기본지식 > Computer' 카테고리의 다른 글

    CORS(교차 출저 리소스 공유)  (0) 2021.09.28
    리눅스 메모리 관리  (0) 2021.09.27
    WAS vs 웹 서버  (0) 2021.09.17
    네트워크 보안  (0) 2021.09.15
    Process와 Thread  (0) 2021.09.14

    댓글

Designed by Tistory.