- 파일 시스템 -
*파일 시스템이란?
파일과 그 안에 든 자료를 저장하고 찾기 쉽도록 유지 관리하는 방법
* 파일 시스템의 종류
FAT 32 : window 9x 시리즈의 파일 시스템
NTFS : windows NT4.0, window 2000 이상의 파일 시스템
EXT2 : 구 버전 리눅스에서 사용하는 파일 시스템
EXT3 : 현재 리눅스에서 널리 사용되는 파일 시스템
UFS :유닉스 파일 시스템(솔라리스)
NFS : 네트워크 파일 시스템
* 자기 디스크
하드 디스크,플로피 디스크등이 있다.
① 하드 디스크 구조
플래터 :
비자성체인 비금속(알루미늄) 원판(disk)표면에 자성체인 산화금속 막을 양면에 도장(coating)한 것이
다.
플래터위에 촘촘히 트랙을 만들고 섹터로 구분하여 데이터를 저장할 수 있는 공간을 만들어 준다.
포맷이라는 작업을 통하여 구획을 나누어 주어야 플래터에 데이터를 기록할 수 있다.
② 물리적 구조 :
1. 트랙 :
디스크의 표면에서 헤더가 돌아가는 원 모양의 섹터들의 모임이다.



2. 섹터 :
트랙을 부채꼴 모양으로 분할한 영역으로 주소가 부여되고 I/O의 단위
1Sector = 512Byte
3. 실린더 :
동일한 길이의 반지름을 가지는 트랙들이 상하로 모여 구성되는 모임이다.
4. 클러스터 : 여러개의 섹터를 묶은 단위.
③ 기억용량의 단위
하드용량 = 트랙 × 섹터 × 면수 × 바이트
실린더 수 = 트랙수
KB(Kilo Byte) : 1,024Byte = 210 = 103
MB(Mega Byte) : 1,024KByte =220 = 106
GB(Giga Byte) : 1,024MByte = 230 = 109







* 파일시스템의 구조

○VTOC 디스크 라벨(Disk Label)
VTOC에서는 디스크의 첫번째 섹터(512 바이트)를 차지하며, 각 파티션에 대한 정보를 담는다.
○부트 블록(Boot Block)
VTOC 다음의 15섹터를 차지하며, 부팅 시 최초 실행되는 Bootstrap 프로그램이 여기에 위치한다. 또
한 디렉토리의 가장 상위에 있는 ‘.(root directory)'도 여기에 위치한다.
○프라이머리 슈퍼 블록(Primary Super Block)
16섹터 크기이며, 다음과 같은 정보를 포함한다.
• 데이터 블록의 개수
• 실린더 그룹의 개수
• 데이터 블록의 크기 및 조각(Fragment)
블록 그룹 번호 (block group number)
블록 크기 (Block size)
그룹당 블록 수(Block per group)
• 하드웨어 정보
• 마운트 포인트 정보 (마운트 횟수 (Mount count))
• 파일 시스템 상태 정보
• 매직 넘버 (Magic Number)
• 개정 레벨 (Rebision Level)
• 프리 블록 (Free blocks)
• 프리 inode (Free Inode)
• 첫번째 Inode (First Inode)
○백업 슈퍼 블록(Backup Super Block)
백업 슈퍼 블록은 슈퍼 블록의 중요성 때문에 각 실린더 그룹마다 하나씩 복사하여 존재한다. 따라서
슈퍼 블록이 손상되더라도 충분히 복구가 가능해진다.
○실린더 그룹 블록(Cylinder Group Block)
각 실린더 그룹에는 다음과 같은 정보가 저장된다.
• I-노드의 개수
• 실린더 그룹에 속한 데이터 블록의 개수
• 디렉토리의 개수
• 실린더 그룹 내에 사용하지 않는 블록, I-노드 개수
○데이터 블록(Data Blocks)
실린더 그룹별 데이터 블록의 기본 크기는 8192바이트다.(8KB)

* i 노드 테이블 : 실린더 그룹에 대한 I노드들의 정보를 담고 있다.
총 15개의 데이터 블록 포인터를 가지고 있다.


• 파일의 종류와 접근모드
inode가 어느 파일에 해당하는지 나타내는 정보와, 접근권한을 나타내는 정보가
저장
• 파일의 소유자 및 그룹에 대한 UID와 GID
• 파일의 크기
• 파일에 마지막으로 접근, 변조, i노드가 변경된 시간
• 데이터 저장에 사용된 총 데이터 블록의 수
데이터 저장된 블록에 대한 포인터
맨 앞의 12블록은 inode가 실제 데이터를 가르키고 있다.
간접 블록과,이중 간접 블록,삼중 간접 블록은 해당 데이터를
i-노드는 이러한 데이터 블록에 대한 참조(Index) 정보를 가지고 있다.
각 파일은 각 실린더 그룹에 속하며 하나의 i-노드에 의해 구성된다.
i-node에는 데이터 블록에 대해 총 15개의 참조 정보가 있으며, 12번째 데이터 블록까지 기본으로
사용되며, 파일의 크기가 96KB 를 넘으면 13번째의 확장 참조자가 사용된다.
12번째까지 데이터 블록 포인터는 각각 8KB의 데이터 블럭을 가리킨다.(12 * 8=96KB)
13번째는 파일이 16MB 이하의 경우에 사용된다.
• 2048개의 데이터 블록 포인터를 갖는다.
• 16384KB ( 2048 * 8)
• 13번째 포인터까지 사용한 경우 최대 파일의 크기는 96+16384=16480KB
14번째는 32GB, 15번째는 70TB까지 이론상으로 가능하다.
• 확장 참조자가 다시 포인터만을 가진 간접 데이터 블록을 한번 더 거치게 된다.
사실상 파일 시스템에서 크기가 1TB 이상인 파일은 존재할 수 없다.
*가상 파일 시스템(The Virtual File System)
< 구조 (The VFS structure) >
VFS는 모든 파일 시스템이 필요로 하는 일련의 펑션을 정의하고 있다. 이러한 인터페이스는 세 종류
대상과 관련된 일련의 동작으로 구성된다. 즉 파일시스템, 아이노드, 열린 파일이다.
VFS는 커널에서 지원하는 파일시스템 타입을 알고 있다. 이는 커널 구성 동안에 만들어 지는 테이블
을 사용한다.이 테이블 내의 각 엔트리가 하나의 파일 시스템 타입을 정의한다.즉 파일시스템 타입
의 이름과 펑션에 대한 포인터이다.
어떤 파일 시스템이 마운트 될 때 그에 맞는 마운트 펑션이 불려 진다. 이 펑션이 디스크의 슈퍼블
록을 읽는 것을 담당하며,내부 변수를 초기화하고vfs에 마운트된 파일시스템 디스크립터를 돌려 준
다.
파일시스템이 마운트 된 후에 vfs 펑션은 물리적인 파일시스템 루틴을 접근하는데 이 디스크립터를
사용한다. 마운트된 파일시스템 디스크립터는 모든 파일시스템 타입에 공통된 며 가지의 데이터를 포
함 한다. 물리적 파일시스템 커널코드에 의해 제공되는 펑션에 대한 포인터와 물리적인 파일 시스템
코드에 필요한 고유정보이다.파일시스템 디스크립터에 포함된 펑션 포인터는VFS가 파일 시스템 내
부 루틴을 접근하는 것을 허용한다.
두 가지의 다른 디스크립터가 VFS에 의해 사용된다. 아이노드 디스크립터와 열린 파일 디스크립터이
다. 각 디스크립터는 사용 중인 파일에 관련된 정보와 물리적인 파일시스템 코드에 의해 제공되는 일
련의 동작을 갖고 있다. 아이노드 디스크립터는 어떤 파일에 대해서도 사용되는 펑션에 대한 포인터
를 포함하는데 비해 (e.g. create, unlink) 파일 디스크립터는 열린 파일에 대해서만 작동하는 펑션에
대한 포인터를 갖는다. (e.g. read, write)

[ 장치 파일(Device special files) ]
유닉스 계열 운영체제에서 장치는 특수 파일에 의해서 접근될 수 있다. 장치파일은 파일시스템에서
어떤 공간을 사용하지는 않는다.이들은 단지 장치드라이버의 접근점에 불과하다.
두 가지 형태의 장치특수파일이 존재한다.캐릭터와 블록 스페셜 파일이다.전자는 캐릭터 모드로 입
출력 동작을 허용하고 후자는 버퍼캐시 기능을 통해 블록모드로 데이터가 쓰여져야 한다. 특수파일에
대해서 입출력(I/O)요청이 일어날 경우 이들은 가상 장치 드라이버((pseudo) device driver)로 포워딩
된다. 특수파일은 장치형태를 구별해주는 메이저넘버와 각각의 유니트를 구별해주는 마이너넘버로 표
현된다.
[ 저널링 파일 시스템 ( Journaling FileSystem ) - ext3 파일 시스템 ]
리눅스의 표준 파일 시스템은 ext2 파일 시스템입니다. Ext2 파일 시스템은 리눅스의 표준 파일 시
스템으로 오랜 동안 안정적이고 뛰어난 성능을 보여 왔습니다. 그러나 ext2 파일 시스템은 정전이나
시스템 장애로 인하여 비정상적으로 시스템이 셧다운되었을 때 파일 시스템이 언마운트되지 않은 경
우나 Maximal mount에 도달하였을 때 데이터의 손실을 막기 위하여 데이터 구조 일치성을 파일 시스
템이 체크하도록 되어 있는데, 파일 시스템이 작을 경우에는 무의미 할 뿐더러 파일 시스템이 큰 경
우에는 부팅하는 데 상당한 오랜 시간이 걸리는 문제점이 있습니다.
그래서 부팅 할 때의 시간을 단축하면서 비정상적인 시스템 종료시 파일 시스템을 체크하지 않고 인
덱스(index)에 대한 로그를 기록하여 문제 발생 시 이를 복구할 수 있는 대체 파일 시스템이 요구되어
등장한 것이 저널리 파일 시스템입니다.
리눅스에서 지원하는 저널링 파일 시스템으로 ext3, reiserfs, XFS등이 많이 사용되고 있습니다. 레드
햇 리눅스 9 버전은 ext2 파일시스템의 대안으로 ext3 파일 시스템을 기본 파일 시스템으로 지원합니
다. Ext3 파일시스템은 ext2 파일 시스템과 호환성을 유지하는 파일 시스템입니다.
[ ext3 파일 시스템의 이점 ]
< ext3 파일 시스템의 가용성과 데이터 무결성 ( Data Integrity ) >
앞서 언급한 대로 ext2 파일 시스템은 예기치 못한 정전이나 시스템 충돌로 인하여 시스템이 비정상
종료 되었을 때 다시 부팅시 파일 일치성을 e2fsck 프로그램에 의해서 점검하게 됩니다. Ext2 파일
시스템에서는 파일 데이터를 바로 동기화시키지 않기 때문에 이러한 비상 사태가 일어나게 되면 데이
터 일치성이 맞질 않기 때문에 부팅시 이를 점검하게 되는 것입니다. 데이터 일치성 점검은 파일 시
스템 크기에 따라서 걸리는 시간이 달라 질 수 있습니다. 수기가 바이트의 파일 시스템을 갖고 있는
경우라면 파일 시스템을 체크하는데 있어서 상당한 오래 걸리며, 이 시간 동안에 시스템을 사용 할
수 없는 단점이 있습니다. 그러나 ext3 파일 시스템은 변경되는 파일 데이터를 바로 동기화시키기 때
문에 시스템이 급작스럽게 정지되더라도 다음 부팅시에는 파일 시스템을 체크하지 않고, 구조 일치성
을 체크하는데 불과 몇 초 밖에 걸리지 않기 때문에 부팅 속도가 빨라지는 이점이 있습니다. 항상 파
일시스템의 일치성을 유지하고 있어서 데이터 무결성을 보장해 주는 이점이 있습니다.
< ext2 파일 시스템에서 ext3 파일 시스템으로 변환 용이 >
레드햇 리눅스에서 저널링 파일 시스템으로 reiserfs 파일 시스템 대신에 ext3를 채택하게 된 것은
기존의 ext2 파일 시스템과의 호환성과 변환이 쉽기 때문입니다. Tune2fs 프로그램으로 사용하면
ext2 파일 시스템에 저널 ( journal )을 추가하여 ext3 로 변환할 수 있으며 ( 이때 tune2fs - j 파티
션)으로 저널링을 추가해 준다.레드햇 리눅스 9에서는 e2fsprogs 프로그램을 지원하고 있어서 이
프로그램이 설치되어 있으면 ext3 파일 시스템을 거꾸로 ext2 파일 시스템으로 사용할 수 있게 해줍
니다. 이와 같이 ext3파일 시스템은 ext2 파일 시스템에서 쉽게 변환 할 수 있는 이점이 있습니다.
< 속도 >
ext3 파일 시스템은 하드디스크의 헤더 동작을 최적화 시켜 주기 때문에 동일한 데이터를 여러 차례
반복 저장하더라도 ext2 파일 시스템에 비해 빠른 속도를 제공합니다. Ext3 파일 시스템에서는 데이
터 일치성 속도를 최적화할 수 있는 data=writeback, data=ordered, data=journal 등 세가지 저널링
모드를 제공하는데, /etc/fstab 파일에서 마운트 옵션으로 저널링 모드 값을 ‘data = 모드값’ 형태로
지정해 주어 사용할 수 있습니다. 레드햇 리눅스에서는 기본 저널링 기본값으로 data=ordered를 지원
하며, 이 모드는 블록이 순서대로 디스크에 저장되면서 완전한 데이터 일치성을 갖도록 해 줍니다.
* fsck (File system check)
파일 시스템이 완전한 상태를 유지하고 있는가를 검사하고, 잘못된 것은 바로 잡아주는 명령
사용법 #fsck [옵션] 검사 파일 시스템
[옵션]
-a : 검사도중 발견된 에러를 자동으로 복구
-r :검사도중 에러가 발견되면 복구할 것인가를 묻는다.
-V :검색 중 각종 정보를 자세하게 보여준다.
사용 예 #fsck –a /dev/hda1
* 사용량 측정
df : 디스크의 여유 공간을 보여준다
사용법 # df [옵션] 파일 시스템
[옵션]
-I : 블록 여유 용량 대신 inode 사용 정보를 보고
-k, h : 여유 용량을 킬로바이트와 메가 바이트 단위로 출력
사용 예 # df –h /dev/hda
du : 디스크의 사용량을 보여준다
사용법 # du [옵션] 디렉토리, 파일명
-s : 총 합계만 출력
-a : 크기가 계산된 각 파일의 크기를 출력
-b,h,k : 메가바이트 단위로 출력
사용 예 # du –h /root
* fdisk 명령어
파티션 생성 명령
사용법 # fdisk /dev/장치명
a      부트 파티션 저장
d      파티션 삭제
q      파티션 정보 및 종료
p      파티션 설정 상태 확인
w     파티션 정보 저장
t      파티션 시스템 유형 변경
n     새 파티션 생성
l     지원 가능한 파티션 보기

출처 - http://cominfo.tistory.com/entry/%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C 

'System > Common' 카테고리의 다른 글

linux - File Descriptor  (0) 2011.12.12
Character Device File vs Block Device File  (0) 2011.12.08
심볼릭 링크 vs 하드링크  (0) 2011.12.08
RPC 구현  (0) 2011.12.07
솔라리스와 리눅스 런레벨 비교  (0) 2011.12.05
파일 시스템 구조  (0) 2011.12.04
Posted by linuxism

댓글을 달아 주세요