본문 바로가기

Information Security/Digital Forensic

Linux Filesystem

반응형

Unix/Linux 계 Filesystem (ref. Wikimedia)

* Linux File Systemd의 종류와 특징

종류 설명
ext 2
(extended file system)
* 리눅스 극 초기 버전에 사용된 확장 파일 시스템
- 소형 장치, 임베디드 시스템에서 자주 사용될 수 있음
- Unix 시스템의 실린더 그룹과 유사한 형태로 블록 그룹이 존재
(블록 : 외부 단편화를 줄이고 연속된 대량의 데이터를 읽을 때 디스크 탐색을 최소화 시키는 단위)




[데이터 구조]
1. Superblock : File System 전반의 정보를 저장하는 블록
- 운영 체제 부팅 정보
- 파일 시스템 크기 정보
- 사용 가능한 공간 정보
- 블록 그룹을 백업한 복사본 보유
- 마운트 정보 등을 포함


2. Inode : 블록 단위로 저장되어 각 file과 Directory의 Metadata를 저장하는 구조체
- i_mode: 파일의 종류와 퍼미션을 나타내는 비트 필드
- i_uid: 소유자의 사용자 ID
- i_size: 파일 크기
- i_atime: 파일의 최근 접근 시간 (access)
- i_ctime: 파일의 상태 변경 시간 (change)
- i_mtime: 파일의 내용을 수정한 최근 시간 (modify)
- i_dtime: 파일이 삭제된 시간 (delete)
- i_gid: 파일의 그룹 ID
- i_links_count: 하드 링크의 개수
- i_blocks: 파일이 사용하는 데이터 블록의 수
- i_block: 데이터 블록의 주소를 가리키는 포인터 배열


3. Data Blocks : 실제 파일 데이터가 저장되는 블록




[제한 사항]
1. 최대 파일 시스템 크기는 블록 크기에 따라 제한
- 이론상 1kb의 블록 크기 기준 당, 최대 파일 시스템 크기 4TB 단위 비례


2. 한 파일의 최대 제한 크기는 특정 계산식을 따름
- 이론상 블록 크기에 따라 1KB = 16GB / 2KGB = 256GB / 4KB,8KB = 2TB로 제한


3. 파일 이름 최대 255자


4. 디렉터리 인덱싱을 제공하지 않으므로, 1만개 이상의 파일이 있는 디렉토리는 성능 문제가 발생함


5. 저널링 기능을 제공하지 않아, 시스템 충돌 시, 데이터 손실 위험 존재


6. FileSystem 크기의 동적 조정 기능이 존재하지 않아 별도로 추가 도구로 조정해야함
ext 3 * ext2에서 저널링 기능을 추가하여 안정성과 복구 능력을 향상시킨 파일 시스템




[데이터 구조]
1. SuperBlock


2. Inode : ext2와 거의 유사하며, 아래 추가된 필드를 포함
i_flags: 파일의 특정 속성을 나타내는 플래그 필드
i_generation: 파일의 세대 번호
i_file_acl: 파일의 ACL (Access Control List) 정보
i_dir_acl: 디렉터리의 ACL 정보
i_faddr: 파일의 fragment 주소


3. Data Blocks


4. Journal : ext3부터 추가되었으며, 파일 시스템 작업을 기록하는 로그 형태의 구조로, 데이터 일관성, 안전성을 보장하며 파일 시스템을 빠르게 복구할 수 있게 지원


- ext3는 3단계 저널링 방식
4.1 : Journal : 파일 시스템 메타 데이터와 파일의 컨텐츠가 메인 파일 시스템에 전달되기 전에 저널에 로깅 (낮은 리스크를 가지지만, 이중 기록으로 성능 저하 초래의 원인이 될 수 있음)


4.2 : Ordered : 메타 데이터만 저널에 기록(대부분 리눅스의 기본 설정)되며, 읽기 작업 중에 커널 패닉이 발생하면 리스크가 발생할 수 있는 문제 존재


4.3 Writeback : 메타 데이터만 기록하나, 데이터와 저널 사이에 동시성이 결여되어 데이터를 기록하지 않아 재부팅 시, 완전히 삭제되는 최대 리스크 방식




[제한 사항]
1. ext2와의 호환을 목표로 해서 설계하여 최신 파일 시스템과의 호환성이 부족


2. ext3는 쓰기를 위해 마운트 된 동안은, fsck(file system check)이 불가능


3. 마운트 되어 있는 상태에서 FileSystem Dump 작업은 데이터 손상이 발생할 수 있음


4. ext4 또는 그 외 파일 시스템에서 제공하는 extends 기능이 존재하지 않아 데이터가 불 연속적으로 분포되는 경우가 다수 존재
(extends : 데이터 블록을 연속 공간으로 유지하며 파일 크기의 확장 및 축소를 효율적으로 처리하는 기능)


5. Inode에서 32,000개의 링크를 지원하게 되면서 하위 디렉토리에 생성 될 수 있는 서브 디렉토리의 수가 31,998개


6. 파일 조각 모음 기능이 존재하지 않아, 필요 시 ext2로 재변환 후 기능을 사용해야 함
(해당 단편화 이슈는 서버급 응용 프로그램의 사용 시, ext3에서 큰 문제로 부각)


7. 파일 시스템 최대 크기는 블록 크기에 따라 차등 상승
(1KiB = 2TiB / 2KiB = 8Tib /  3KiB = 16TiB / 4KiB = 32TiB /
단, 파일 최대 크기는 ext2와 동일 계산식으로 결과값 동일)


8. Journal에서 Checksum 검사를 수행하지 않음
(파일에 오류 메타데이터가 있을 시, 굳이 읽을 필요가 없는 winner라는 유효하지 않은 트랜잭션을 포함한 로그를 한번 더 읽음)
ext 4 * 대부분 리눅스에서 권장 스토리지(기본) FileSystem으로 채택되는 ext
- 백그라운드 파일 시스템 체크 기능이 추가되어, 시스템 부하를 줄이고 파일 시스템의 기능성을 향상 시킴




[데이터 구조]
1.SuperBlock


2. Inode : ext3와 비교하여 개선된 필드와 구조를 보유
(ext4에서 추가된 기능으로 4개의 extends가 존재할 수 있음)
i_flags: 파일의 특정 속성을 나타내는 플래그 필드
i_size: 파일 크기
i_atime: 파일의 최근 접근 시간
i_ctime: 파일의 상태 변경 시간
i_mtime: 파일의 최근 수정 시간
i_generation: 파일의 세대 번호
i_uid: 소유자의 사용자 ID
i_gid: 파일의 그룹 ID
i_links_count: 하드 링크의 개수
i_blocks: 파일이 사용하는 데이터 블록의 수
i_block: 데이터 블록의 주소를 가리키는 포인터 배열
i_file_acl: 파일의 ACL 정보
i_size_high: 파일 크기의 상위 32비트 (64비트 시스템에서만 사용)
i_faddr: 파일의 fragment 주소
i_disk_version: inode가 디스크와 일치하는지 확인하기 위한 필드
i_extra_isize: 추가적인 inode 크기



3. Data Blocks


4. Extends : ext4부터 추가된 데이터 구조로, 파일의 블록을 연속적인 공간으로 유지하여 단편화를 줄이고 파일의 크기 조정 및 검색 성능을 향상시킨 구조
- ext2, 3의 Block Mapping 방식을 대체하는 데이터 구조
- extends는 최대 128MiB의 연속적인 공간에 매핑될 수 있음
(해당 공간은 4KiB 크기의 블록으로 구분)



[특징]
1. 최대 파일 시스템 크기은 1EB


2. 최대 파일 크기는 16TB


3. 하위 호환성을 가지고 있어 ext2, 3 파일 시스템을 ext4로 마운트 시킬 수 있음
(단, Extends를 사용하는 경우, ext3로는 마운트가 불가능)


4. 지연된 할당(Allocate on flush)라는 파일 시스템 성능 기술이 사용되며, 실제 파일 크기에 기반하여 블록 크기를 할당하므로, 데이터가 디스크에 쓰여지기 전까지 블록 할당을 지연시켜 여러곳에 분산시켜 할당 되는것을 최대한 방지하여 디스크 성능을 향상 시킴
(단, 해당 기능은 ext3에서 의도한 동작을 변경하기 때문에 모든 데이터가 디스크에 기록되기 전에 발생한 충돌이나 전원 차단 시, 데이터 유실의 위험성이 존재하며, 대신 롤백 기능이 존재)


5. ext3 대비 하위 디렉터리 개수가 거의 2배 가량 (64,000개)로 증가하였으며, dir_nlink(디렉토리 엔트리의 하드링크 개수를 나타내는 필드) 기능을 사용하면 더 큰 개수도 허용함

- 이외에도 리눅스 자체가 베포판이 워낙 다양하기 때문에 별도 FileSystem (Btrfs, F2FS, XFS, ZFS 등...)이 있지만 대표적인 ext 파일 시스템에 대해서만 열거함

반응형