파일시스템, 스왑 영역, 장치 파일 관리
파일시스템(file system) 관리
- File system 이란? 파일과 그 안에 든 자료를 저장하고 찾기 쉽도록 유지, 관리하 는 방법을 말함 OS 별로 지원하는 파일 시스템의 종류가 다름 간단하게 컴퓨터가 저장 장치에 파일을 저장하는 형식 플로피디스크, CD-ROM, 하드 드라이브 와 같이 random access를 지원하는 저장 매체에 파일 시스템이 필요함
Block & Sector sector : 하드디스크에서 데이터를 저장하는 최소 단위 일반적으로 512byte, 최근 4096byte로 표준이 확장 block : 파일시스템에서 파일을 저장하는 최소 단위 Sector의 정수 배의 크기를 가짐 file system을 설정할 때 block 크기를 결정할 수 있음 그런데 메모장에 a 하나 입력한 one character txt 파일을 만들어서 저장하면, 디스크 할당크기가 0으로 뜬다! Why?
파일 시스템의 동작 원리 파일 시스템에 inode block과 data block이 있다. Inode block에는 파일들의 메타데이터와 data block 위치가, data block에는 실제 파일 내용이 들어있다. 메타데이터(Metadata): 속성정보, 주어진 데이터의 위치와 내용, 작성자에 관한 정보, 이용 내력 등이 기록되어있다. 메타데이터 : 데이터에 관한 구조화된 데이터로, 다른 데이터를 설명해 주는 데이터 속성정보라고도 한다. 대량의 정보 가운데에서 찾고 있는 정보를 효율적으로 찾아내서 이용하기 위해 일정한 규칙에 따라 콘텐츠에 대하여 부여되는 데이터이다. 여기에는 콘텐츠의 위치와 내용, 작성자에 관한 정보, 권리 조건, 이용 조건, 이용 내력 등이 기록되어 있다. Inode: Index node의 약자 Data block: Inode block의 저장위치가 기록
파일 시스템의 종류 윈도우: FAT16, FAT32, NTFS 리눅스: Btrfs, EXT2, EXT3, EXT4, ReiserFS, XFS 맥: HFS+
EXT 리눅스에서 지원하는 파일시스템 ext2 ext3
저널링 파일 시스템에 가해진 변경 사항들을 기록해 두는 기술로, 파일 시스템의 복구를 쉽게 만들어준다 파일 시스템에 가해진 변경 사항들을 기록해 두는 기술로, 파일 시스템의 복구를 쉽게 만들어준다 EXT2, FAT16, FAT32는 저널링 파일시스템이 아니다. 앞에서 언급된 시스템 중 위 세 개를 제외한 나머지는 저널링 지원 새로운 자료 구조인 저널이 이용된다 파일 시스템 드라이버는 파일의 메타 데이터를 변경하기 전에 해당 사항을 저널에 기록한다
EXT3에서 지원하는 저널링 지원하는 저널링의 종류: Journal: 파일컨텐츠와 메타데이터가 저널에 먼저 쓰인 다음에 주 파일 시스템에 쓰인다. 가장 신뢰할만한 방식이지만 데이터가 두 번 쓰이기 때문에 속도가 느릴 수 있다. Ordered: 메타데이터만 저널에 쓰인다. 파일은 쓴 후에 저널에 반영하 기 때문에 파일 쓰는 도중에 오류가 나면 확인이 가능함 Writeback: 메타데이만 저널에 쓰인다. 저널에 쓰기 전 또는 후에 파일 데이터가 쓰이기 때문에 신뢰성이 가장 떨어질 수 있음 Journal(리스크 최소) 메타 데이터와 파일 내용 모두 저널에 쓴 뒤에 메인 파일 시스템에 업데이트 한다. 데이터가 2번 기록되기 때문에 성능이 저하될 수 있다. Ordered(리스크 중간) 메타 데이터만 저널에 기록된다. 저널의 메타 데이터에 commited라고 표시된 경우 파일 내용도 제대로 쓰여 졌다고 확신할 수 있다. 저널의 메타 데이터에 not commited라고 표시된 경우, 이 메타 데이터가 가리키는 파일이 새로운 파일이거나 추가된 파일의 경우, 자동으로 삭제된다. 덮어씌우는 파일을 가리키는 경우, 이는 과거 버전, 현재 버전 어느것으로도 복구할 수 없다 Writeback(리스크 높음) 실제 데이터가 기록되기 전이나 후에나 저널이 업데이트 될 수 있다. 문제가 생기기 직전 기록하고 있던 파일들은 제대로 기록된 것인지 아닌지 확인하기 힘들다.
EXT4 ext3의 64비트 버전 많은 배포판의 기본 파일 시스템 하위 디렉토리 제한(ext3에서 32000개) 없음 할당 지연 기능 지원 데이터가 디스크에 쓰여지기 전까지 블록할당을 지연: 실제 파일크기 에 따라 블록할당을 하여 하나의 파일에 대한 블록이 여러 곳으로 분 산 되는 것을 막음 Extents 기능 추가 할당지연기능: 디스크 이동을 최소화하여 성능 개선
일반적으로 Inode block에서 data block을 가리키는 포인터의 숫자는 고정되어 있다 일반적으로 Inode block에서 data block을 가리키는 포인터의 숫자는 고정되어 있다. 그렇다면 data block이 많이 필요한, 크기가 매우 큰 파일을 저 장하기 위해선…
파일 시스템의 동작 원리 그 경우 inode block의 포인터들은 빈 data block을 가리키고 그 data block 안에 포인터들을 배치시켜서 파일의 data block 들을 가리키게 할 수 있는데, 이를 single indirect라 한다 data block의 포인터들이 다른 data block들을 가리키고, 거기 서 가리켜진 data block들의 포인터들이 파일의 실제 data block들을 가리키면 이는 double indirect이다
큰 파일은 block의 개수가 매우 많고 매핑또한 매우 많아서 성능이 떨어지게 된다.
Extents 연속적인 다수의 블록으로 저장 데이터가 다음 블록에 연속적으로 있음을 표시되어있기 때문에 쉽게 많은 data block을 빠르게 읽고 쓸 수 있다. EXT4에서 지원하여 성능 향상 대용량파일 접근 성능 향상
그 외 XFS ReiserFS 저널링을 사용하는 고성능 64비트 파일 시스템 디스크를 쓰기보다는 메모리상에 많은 데이터를 캐시함. 특히 큰 파일 을 주로 다루는 시스템에서 좋다 할당 지연 기능 지원 ReiserFS 저널링을 지원한 최초의 파일 시스템 초기에는 metadata에 대한 저널링만 지원하였음
File system의 선택에 따라 달라지는 것 block size maximum 파일명 길이 maximum 파일 크기 maximum 파일 시스템 크기 저장되는 metadata의 종류 안정성 등등
Partition 하드 디스크를 나누어 놓은 구획 하나의 물리적인 하드디스크를 논리적으로 여러 개의 저장소인 것처럼 취급 하나의 물리적인 하드디스크를 논리적으로 여러 개의 저장소인 것처럼 취급 한 파티션의 파일 시스템에 손상이 가더라도 다른 파티션에 영 향이 가지 않게 한다. 안정성이 높아짐 필요한 파티션만 포맷가능 파티션: 유지관리 및 백업 관리를 효율적으로 하기 위해 사용되어진다. 물론 하드디스크가 완전히 고장나면 노답 primary partition 와 extended partition 이 존재, extended partition은 여러 개의 partition을 저장한 그릇? logical partition
MBR(Master Boot Record) 파티션 개수가 4개로 제한 파티션 크기 제한이 2TB 1980년대에 나와 호환성이 좋음 파티션의 정보를 저장하기 위한 공간: MBR하고 GPT가 있다. 하드 디스크의 맨 앞에 기록되어 있는 시스템 기동용 영역(첫 512byte). 개인용 컴퓨터(PC)에 전원을 넣으면 먼저 첫 번째 하드 디스크의 MBR에 기록되어 있는 프로그램이 읽힌다. 이렇게 읽힌 MBR의 프로그램은 분할표(partition table)의 정보를 기점으로 기동하는 분할(partition)의 부트 섹터(boot sector:분할의 맨 앞에 있는 OS 기동 프로그램이 기록된 부분)를 읽어 이 섹터의 프로그램에 의해 운영 체계(OS)가 기동된다.
primary partition 실제 디스크를 직접적으로 나눈 파티션 MBR의 구조 때문에 하나의 디스크에 최대 4개의 primary partition을 가질 수 있음 4개 이상의 partition을 만드려면 logical partition을 이용해야 함
extended / logical partition 하나의 디스크에는 최대 하나의 extended partition을 가질 수 있음 하나의 extended partition은 여러 개의 logical partition을 담는 그릇 한 디스크에 만들 수 있는 partition의 최대 개수는 제한되어 있 음 logical partition과 primary partition의 속도 차이는 없음 primary partition에만 설치 가능한 OS도 있음 보통 많은 수의 partition이 필요한 경우 3개의 primary partition + 1개의 extended partition(which includes many logical partitions) 와 같이 구성함
파티션이 가지는 장점 안정성 어떤 한 파티션의 파일 시스템에 손상이 가더라도, 다른 파티션의 파일 시스템에는 보통 문제가 없다 업그레이드 용이 리눅스를 업그레이드할 때, /home 디렉토리에 데이터를 보관시키고 나머지 파티션들에 대해서 업그레이드를 진행할 수 있다 물론, 시스템 백업을 충실히 한다면 위와 같은 점은 큰 문제가 되지 않는다
리눅스에서 file system 관리 파티션 설정 파일시스템 설정 장치 마운트 / 언마운트 파일 시스템 점검/복구 fdisk mkfs 장치 마운트 / 언마운트 mount/umount 파일 시스템 점검/복구 fsck
1. 파티션 설정 리눅스 시스템의 장치 파일들은 /dev에서 볼 수 있다. IDE 형식의 하드디스크는 /dev/hda, /dev/hdb, /dev/hdc, …와 같이 지 정된다. SATA, SCHI 형식의 하드디스크는 /dev/sda, /dev/sdb, /dev/sdc, …와 같이 지정된다 이러한 물리적인 디스크에 파티션이 생성되면 그 장치 파일 뒤에 1번부터 번호가 붙은 이름으로 파티션에 해당하는, 가상의 장치의 파일이 생성된다 예를 들어 /dev/hda에 대해 파티션 두개를 만들었다면 /dev/hda1, /dev/hda2로 지정된다 파티션을 어떤 디스크에서 설정할것인가? 우선 디스크 장치파일을 어떻게 나타내는지 보자.
1.파티션 설정-fdisk 옵션 # fdisk [디스크 장치] # fdisk –l [디스크 장치] 해당 디스크에 대해서 파티션 설정을 한다 # fdisk –l [디스크 장치] 해당 디스크의 파티션 테이블을 보여준다 장치를 지정하지 않으면 시스템의 파티션 테이블을 보여준다 # fdisk –s [파티션 장치] 해당 파티션의 크기를 블록 단위로 보여준다 디스크 장치: /dev/hda
1. 파티션 설정-fdisk 명령어 a: 부트 플래그 설정(설정시 파티션 테이블에서 Boot 항목에 * 표시됨) b: bsd 디스크 레이블 편집 c: 도스 호환 여부 플래그 설정 d: 파티션 제거 l: 알려진 파티션 형태의 목록 출력 m: 도움말 출력 n: 파티션 생성 o: 새로운 도스 파티션 테이블 생성 M 도움말 리눅스의 경우 fdisk로 파티션을 잘못 설정했을때 실린더(또는 섹터)의 수만 맞추면 복원이 가능하다
1. 파티션 설정-fdisk 명령어 p: 파티션 테이블 출력 q: 변경 사항을 저장하지 않고 종료 s: sun 디스크 레이블 생성 t: 파티션의 시스템 아이디 변경 u: 표시 및 엔트리 단위 변경(섹터/실린더) v: 파티션 테이블 점검 w: 변경 사항을 저장하고 종료 x: 추가적인 기능들
2. 파일시스템 설정 각 파일시스템은 자신과 관련된 고유의 mkfs명령을 가지고 있 다. ex) mkfs.msdos, mkfs.ext3 mkfs는 이러한 것들의 frontend일 뿐 Ext3 파일시스템을 만드는 명령어는 mkfs.ext3 이고 mkfs 자체는 이런 명령어를 각각 실행시켜주는 녀석에 불과함
2. 파일시스템 설정 #mkfs –t[파일 시스템 타입][파티션 장치] 파일 시스템 타입을 지정안해주면 기본값은 ext2 -c : 배드섹터 검사 mkfs –c-t[파일 시스템 타입][파티션 장치] ex) mkfs –c –t ext3 /dev/sda2
장치 마운트하기 마운트(mount) : 파일 시스템을 사용하기 위해 해당 파티션 장치와 디렉토리를 연결하는 일 Linux에서는 파일 시스템이 하나의 디렉토리에 대응됨 장치를 하나의 디렉토리와 같이 사용하기 위해 마운트 필요! 이 디렉토리를 마운트 포인트라고 부름 마운트하는 방법 etc/fstab 파일을 수정해 자동으로 마운트하기! mount 명령어를 이용해 수동으로 마운트하기!
자동 마운트(fstab 파일) etc/fstab 파일을 확인해 보아요! [장치/레이블 명] [마운트 포인트] [파일 시스템 타입] [옵션] [dump] [파일점검옵션] 옵션 중 auto는 부팅 시 자동으로 마운트 됨을 뜻함(default) 파일 점검 옵션의 경우 보통 2이고 루트 파일 시스템은 1, swap 파티션은 0을 사용 etc/fstab 파일을 확인해 보아요!
자동 마운트(fstab 파일)
수동 마운트(mount 사용) $ mount 현재 마운트 정보를 출력 $ mount –t [파일 시스템 타입] [장치파티션] [디렉토리] 장치 파티션을 특정 디렉토리와 연결시키겠다! $ mount –a /etc/fstab에서 auto로 표시되어있는 파일 시스템들을 마운트(부팅 시 자동으로 실행) $ unmount [디렉토리명/장치명] 파일시스템의 마운트를 해제
파일 시스템 점검 & 복구(fsck 사용) fsck : 파일 시스템이 정상인지 검사하고 오류가 있으면 복구 항상 파일 시스템을 언마운트 한 이후에 사용! 파일 시스템마다 fsck가 존재 fsck 커맨드는 각 파일 시스템에 해당하는 특정 fsck를 호출해줌 재부팅을 해야 바뀐 내용 적용!
스왑 공간 (스왑 영역)
스왑 공간 스왑공간 : 보조 저장 장치(disk)의 일부분을 RAM 처럼 사용! (Virtual memory와 비슷) 주기억 장치(RAM)의 용량에 한계가 있으므로 working set이 클 때는 동적으로 디스크에서 필요한 data를 swap하여 사용함 일반적으로 RAM 용량의 2배 정도로 설정 너무 크면 속도가 느려지게 되고, 너무 작으면 프로그램이 갑자기 죽을수도… 스왑 공간의 할당 스왑 파일 만들기 : 시스템이 켜져 있을 때 유동적으로 생성 가능 스왑 파티션 만들기 : 디스크 상 블록이 연속적으로 위치! 성능이 좋아짐!(흔히 쓰임)
스왑 공간의 관리 (free) $ free : 시스템의 RAM 용량, SWAP 용량 등 메모리 사용 현황을 출력 [총 메모리 양] [사용된 메모리 양] [빈 메모리 양] [공유 메모리 양] [버퍼 크기] [커널이 캐시한 메모리 페이지 양] 의 형식으로 각 줄 구성 모든 수치는 KB 단위로 되어있음 (-m 옵션으로 MB로 바꿀 수 있어여!)
스왑 공간의 관리 (free)
스왑 파일/파티션 만들기 스왑 파티션 만들기 아까 배운 fdisk로 만들어 주세염 ㅎ 스왑 파일 만들기 dd 명령어를 사용! $dd if=/dev/zero of=[스왑 파일을 만들 위치] bs=[버퍼크기] count=[버퍼 개수] 버퍼크기는 보통 1024(1KB)로 설정, 따라서 버퍼 개수는 곧 파일 크기 꿀팁 : dd 명령어는 하드디스크를 백업하는 등에도 사용가능
스왑 공간 만들기(mkswap) 스왑 파일이나 파티션을 스왑 공간으로 쓰겠다! 일단 스왑 파일 접근 권한 변경(chmod) $ chmod 0600 [스왑 파일 명] : 권한 변경 (owner가 r/w/x 가능!) 숫자의 각 자리는 두번째 부터 각각 owner, 파일 그룹 내 유저, 전체를 나타냄 R : 읽기(4), w : 쓰기(2), x : 실행(1) (ex : 600은 owner가 6(4+2) 읽기 쓰기 가능) 스왑 공간 만들기! (mkswap) $ mkswap [파티션 장치/스왑파일 명] [스왑 영역 크기] 크기는 1KB단위, -c 옵션으로 배드 블록 검사 가능
스왑 영역의 활성화/비활성화 $ swapon [파티션장치/스왑파일명] 해당 파티션, 파일을 사용 가능하게 바꿈! $ swapon –a 파일 시스템 테이블(/etc/fstab)에서 sw 옵션의 모든 장치 활성화(부팅 시 실행) $ swapon -s 스왑파티션의 상태를 보여줌 $ swapoff [파티션장치/스왑파일명] 스왑 영역 비활성화 (이걸 하기전에 파일 지우면 안되고, 지웠으면 fstab 수정 필수)
실습 타임
신나는 체험 시간 1. 256MB의 빈 스왑파일을 만듭니다. $ dd if=/dev/zero of=[스왑 파일을 만들 위치] bs=[버퍼크기] count=[버퍼 개수] 2. 권한을 바꾸고, mkswap으로 스왑공간으로 만듭니다. $ chmod 0600 [파일이름] 3. swapon으로 활성화해봅니다. $ swapon [파티션장치/스왑파일명] 4. swapnon –s 를 이용해 확인해 봅니다!
출처 gangok-20110623-2.pdf coearth-20150712_1-0.pptx andromeda-20140729-0.pdf