- 파일 시스템 -
*파일 시스템이란?
파일과 그 안에 든 자료를 저장하고 찾기 쉽도록 유지 관리하는 방법
* 파일 시스템의 종류
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 |