[Linux] 파일 시스템 File System 과 링크 (hard link & symbolic link)
파일시스템(File System)
파일시스템은 물리적인 저장장치(e.g.하드디스크)에 파일을 생성, 저장, 관리하기 위한 논리적인 자료구조이다. 물리적인 저장장치는 논리적인 파티션으로 나눠지며, 파티션별로 고유한 파일시스템(e.g. NTFS, EXT2, EXT3, EXT4)을 생성한다.
mount : 특정 디렉터리와 파일시스템을 연결해주는 것
umount : 특정 디렉터리와 파일시스템 연결을 해제하는 것
파일시스템 구성
- Boot block: 운영체제가 부팅하거나 초기화하기 위한 부트스트랩 코드를 담고 있는 블록
- Super block: 파일시스템을 관리하기 위한 정보를 담고 있는 블록
- inode list: 파일시스템 내 파일들에 대한 속성 정보를 담고 있는 리스트
- Data block: 실제 파일의 내용(데이터)이 저장되는 블록으로 고정 크기 블록으로 구성
inode list
파일시스템 내에 있는 파일들에 대한 속성 정보를 담고 있는 구조체 리스트이다. 각 파일의 속성 정보는 다음과 같다.
속성 | 설명 |
inode number | 파일시스템 내에서 해당 파일을 식별하기 위한 고유한 식별자 |
파일타입 | 파일 유형 (e.g. 일반파일, 디렉터리, 장치파일 등) |
접근권한 | 파일에 대한 접근권한 |
link count | 해당 inode를 참조하는 하드링크 개수 |
소유자 | 파일의 소유자(UID) |
소유그룹 | 파일의 소유그룹(GID) |
파일크기 | 파일의 크기 |
MAC Time | - Last Modification Time - Last Access Time - Last Change Time |
Block index | Data block에 저장된 파일 데이터에 대한 인덱스 정보 |
inode에는 파일명이 없으며 파일명은 디렉터리를 통해 관리된다. 침해 사고가 발생하게 되면 피해 시스템 파일에 대한 무결성을 확인을 위한 타임라인 분석을 수행한다. 이 때, inode 구조체의 MAC Time을 점검한다.
MAC Time
- Last Modification Time : 파일의 내용을 마지막으로 수정한 시간
- Last Access Time : 파일을 마지막으로 접근한 시간
- Last Change Time : 파일의 속성을 마지막으로 변경한 시간
파일의 속성은 inode 정보를 의미한다. 즉, 소유자나 접근권한 등의 속성이 변경되면 Last Change Time이 변경된다. 파일의 내용을 바꾸면 3가지의 MAC Time 모두 변경된다.
리눅스에서 stat 명령을 통해 확인 가능
파일 시스템과 링크 파일
링크(link)는 윈도우 시스템의 바로가기 아이콘처럼 기존 파일에 대한 또 다른 접근 포인트를 만들어 주는 기능이다. 링크에는 하드링크와 심볼릭링크로 구분할 수 있다.
하드 링크 (Hard link)
하드링크는 원본 파일과 동일한 inode number을 가지는 파일을 생성하여 접근하는 방식을 말한다. inode number은 파일시스템별로 고유한 값이기 때문에 동일 파일시스템 내에서만 하드 링크가 가능하고 디렉터리는 하드 링크가 불가능하다.
ln [File] [File_hl]
하드 링크 파일을 생성하면 해당 inode의 link count 가 1 증가하고 파일 삭제 시 1 감소한다. 그 값이 0이 되었을 때 해당 파일의 inode 정보 및 데이터가 삭제된다. 즉 inode를 참조하는 파일이 있으면 삭제하지 않는다.
gang.dat 파일에 대한 하드링크 파일인 gang_hl.dat 파일을 생성한다. gang.dat과 gang_hl.dat 파일의 inode number가 동일하고 link count가 2로 증가한 것을 알 수 있다.
gang.dat 파일을 삭제하더라도 하드링크 파일인 gang_hl.dat 파일의 내용이 남아있으며 gnag_hl.dat 파일을 삭제하면 link count 수가 0이 되며 inode 정보 및 데이터가 삭제된다.
심볼릭 링크 (Symbolic link)
원본 파일에 대한 경로를 내용으로 하는 파일을 생성해서 접근하는 방식으로 하드링크와 달리 inode number가 아닌 파일 경로를 기반으로 하므로 파일시스템에 제한이 없으며 디렉터리도 가능하다. 하지만 원본 파일이 삭제되거나 이동하게 되면 해당 경로가 바뀌므로 심볼릭링크 파일은 끊어지게 된다.
ln -s [File] [File_sl]
동일 파일시스템 내에서만 링크할 수 있고 디렉터리는 링크할 수 없는 하드링크의 단점을 보완
gang.dat 원본파일에 대한 심볼링링크 파일인 gang_sl.dat 파일을 생성한다. 심볼릭링크 파일은 ls
명령의 결과로 원본 파일에 대한 경로를 보여준다. gang.dat과 gang_sl.dat 의 inode number 이 다르며 각각 link count 수는 1이다.
원본 파일인 gang.dat 파일을 삭제했을 때, gang_sl.dat의 경로가 깨진 것을 알 수 있다.