7장7장7장7장 한빛미디어 ( 주 ) 파일시스템 개요 파일시스템 종류 파일시스템 구조 루트 파일시스템 커널 부팅 방식 램디스크 JFFS2 파일시스템 파일시스템 개요 파일시스템 종류 파일시스템 구조 루트 파일시스템 커널 부팅 방식 램디스크 JFFS2 파일시스템 파일시스템
Section 01 파일시스템 개요 IT CookBook 2 파일 : 저장 매체에 보관된 데이터 집합의 추상적 개념 용도에 따라 다른 파일시스템을 사용하는 것이 효율적 FAT(File Allocation Table): MS-DOS 와 윈도우즈 95 NTFS(NT File System): 윈도우즈 XP EXT2, EXT3: 리눅스 ISO 파일시스템 : CD-ROM NFS: 네트워크 EXT3, JFFS2: 저널링 파일시스템 임베디드 시스템 제한된 자원을 사용 : 효율성 추구 열악한 환경에서도 안정적으로 가동 문제가 발생하면 자동으로 복구 전원을 차단해도 데이터 손실 없이 재가동 불필요한 파일을 제거 플래시 등에서 부팅하기 때문에 파일시스템의 설치에도 주의
3 Section 02 파일시스템 종류 IT CookBook
4 Section 02 파일시스템 종류 IT CookBook 휘발성 파일시스템 전원 인가를 제거하면 사라지는 파일시스템 메모리 일부를 하드디스크처럼 사용 시스템 설치나 장애 복구에 유용하게 사용 gzip 으로 압축 필요 시 메모리 할당, 크기 조정 하나 이상 사용 가능 디스크가 없는 시스템에 유용 램디스크 파일시스템 (RAMFS, RAM File System 혹은 RAMDISK File System) 초기 램디스크 (initrd)
5 Section 02 파일시스템 종류 IT CookBook 비휘발성 파일시스템 FAT(File Allocation Table), FAT32 NTFS(New Technology File System) EXT2, EXT3, EXT4 ReiserFS CRAMFS(Compressed ROM File System) JFFS(Journaling Flash File System), JFFS2 ISO(International Organization for Standardization) 9660
6 Section 02 파일시스템 종류 IT CookBook 특수 파일시스템 NFS(Network File System) Coda PROC(PROCess File System) VFS(Virtual File System)
파일시스템 구조 Section 03 IT CookBook 7
파일시스템 구조 Section 03 IT CookBook 8
파일시스템 구조 Section 03 IT CookBook 9 아이노드 (inode) 리눅스 파일시스템의 가장 기초가 되는 데이터 구조체 파일에 관한 필수 정보를 포함 index node 의 약어 각 파일마다 하나씩 존재 파일에 대한 제어 정보와 데이터 블록 포인터를 포함 파일 소유자 이름 파일 접근 허가권 파일 크기 파일의 마지막 접근 시간 파일의 생성 시간 디스크의 블록 위치 등
파일시스템 구조 Section 03 IT CookBook 10 10
파일시스템 구조 Section 03 IT CookBook 11 11
파일시스템 구조 Section 03 IT CookBook 수퍼 블록 (superblock) 해당 파일시스템과 관련된 정보를 관리 파일시스템을 마운트할 때 커널이 디스크에서 가장 먼저 읽는 정보 할당된 아이노드, 사용할 수 있는 아이노드, 동기화를 위 한 잠금, 파일시스템의 크기와 같은 정보를 포함 수퍼 블록이 손상되면 전체 파일시스템에 대한 정보를 잃 어버리므로 수퍼 블록의 복사본을 여러 군데 유지 아이노드에 대한 조작은 아이노드 연산 구조체를 사용
루트 파일시스템 Section 04 IT CookBook / 디렉토리에 마운트되는 파일시스템 커널이 동작하기 위한 공간, 라이브러리, 유틸리티 등을 포함 램디스크, JFFS2, NFS 등을 주로 사용 직접 구축하기 위해 준비할 데이터 glibc 라이브러리 시스템 초기화 프로그램인 sysvinit termcap 혹은 ncurses 등과 같은 라이브러리 쉘 패키지 bash 로그인을 위한 tinylogin 각종 유틸리티를 위한 패키지 busybox 커널 모듈을 관리하기 위한 유틸리티 modutils
14 IT CookBook 최초의 프로세스 init 가 공유하는 라이브러리 찾아보기 bash 쉘을 실행하기 위해 필요한 라이브러리 찾아보기 실습 7-1 실습 7-1 프로세스에 필요한 라이브러리 찾기
커널 부팅 방식 Section 05 IT CookBook 일반적인 임베디드 리눅스의 부팅 과정
커널 부팅 방식 Section 05 IT CookBook 초기 램디스크 이미지를 이용한 부팅 과정 부트로더가 커널과 초기 램디스크를 플래시에서 메모리로 적재 커널은 압축된 초기 램디스크를 메모리의 다른 장소로 압축을 품. 압축된 초기 램디스크에 의해 사용되었던 메모리 반환 초기 램디스크가 임시 루트 파일시스템으로 커널을 읽기 / 쓰기로 마운트 루트 파일시스템에서 최초로 실행하도록 설정된 쉘 스크립트 /linuxrc 를 실 행. 프로세스 1 번 init 에 의해 초기화 등의 서비스 진행 /linuxrc 가 종료될 때 실제 루트 파일시스템을 커널에 마운트 커널에 마운트된 루트 파일시스템에 /initrd 디렉토리가 존재하면 초기 램디 스크는 그곳으로 이동 ( 없으면 초기 램디스크는 언마운트 ) 루트 파일시스템에서 /sbin/init 를 포함한 일반적인 부팅 과정 수행
램디스크 Section 06 IT CookBook 램디스크를 이용한 루트 파일시스템을 사용하기 커널이 램디스크를 지원하도록 환경 설정 램디스크를 지원하는 커널을 생성 램디스크를 이용한 루트 파일시스템을 빌드 필요시 생성된 램디스크 루트 파일시스템을 수정 생성된 램디스크 루트 파일시스템을 이용하려면 커널 이 미지도 타겟 시스템에 탑재해야 한다.
18 IT CookBook 커널 설정 화면에서 [Block devices] 메뉴 선택 [RAM disk support] 항목 선택 → 초기 램디스크 항목 선택 실습 7-2 실습 7-2 램디스크 만들기 ① ③ ②
19 IT CookBook [Esc] 키를 3 번 누른 후 수정한 커널 설정 저장 루프백 디바이스와 램디스크를 지원하는 커널 이미지 Image 빌드 ( 교재 229 페이지 [ 실습 6-4] 의 ⑦ 과정 참고 ) 루프백 디바이스 존재 여부 확인 실습 7-2 실습 7-2 램디스크 만들기 ② ① ③ ④
20 IT CookBook 루프백 디바이스 파일 image_file 을 ext2 형식으로 포맷 image_file 을 임시 디렉토리 (tmp) 에 루프백 디바이스로 마운 트 →df 명령어로 생성된 파일시스템의 가용량 확인 실습 7-2 실습 7-2 램디스크 만들기 ② ① ③
21 IT CookBook 생성한 파일시스템 내부 살펴보기 생성된 파일시스템에 필요한 파일을 복사 or 새로 생성 파일시스템을 임시 디렉토리 tmp 로부터 언마운트 → image_file 을 gzip 으로 압축 (image_file.gz) ⑪ zImage( 커널 이미지 파일 ) 와 image_file.gz( 파일시스템을 압축한 파일 ) 을 타겟 시스템으로 탑재 실습 7-2 실습 7-2 램디스크 만들기 ② ① ② ① ③ ④ ⑤
22 IT CookBook 기존의 램디스크 파일시스템을 임시 디렉토리에 루프백 디 바이스로 마운트 → 파일시스템 내부로 이동 수정 혹은 추가할 내용에 대해 파일시스템 내에서 작업을 수행 수정한 파일시스템 압축 수정된 파일시스템 이미지를 타겟 보드에 탑재 실습 7-3 실습 7-3 램디스크 수정하기 ② ① ③
JFFS2 파일시스템 Section 07 IT CookBook JFFS MTD(Memory Technology Device) 계층 위에서 동작 플래시 메모리를 포장하는 하부 시스템 작은 비용으로 파일시스템의 항상성을 유지 압축과 하드 링크를 지원하지 않고, 가비지 컬렉션 (garbage collection) 수행 시간이 크다 JFFS2 는 JFFS 의 문제점을 보완 마모 - 균등화 (wear-leveling) 상태를 유지 파일을 압축해 용량을 극대화 작은 기억장치를 탑재한 임베디드시스템에 최적화 CPU 성능이 떨어질 때는 파일시스템의 성능 저하 커널 2.4 부터 사용 가능
24 IT CookBook [File systems]-[Miscellaneous filesystems] 메뉴에서 JFFS2 관련 사항 선택 [Memory Technology Devices (MTD)] 메뉴 선택 실습 7-4 실습 7-4 JFFS2 생성하기
25 IT CookBook [RAM/ROM/Flash chip drivers] 메뉴에서 항목 선택 [Mapping drivers for chip access] 메뉴에서 항목 선택 실습 7-4 실습 7-4 JFFS2 생성하기
26 IT CookBook /drivers/mtd/maps/xhyper270.c 파일에서 메모리 맵 설정 실습 7-4 실습 7-4 JFFS2 생성하기
27 IT CookBook JFFS2 파일시스템 이미지 rootfs.tgz 의 압축 해제 압축을 푼 파일에 대해 수정 / 삭제 / 추가 등의 작업을 수행한 후./mkjffs2 스크립트를 실행해 루트 파일시스템 이미지를 생성 실습 7-5 실습 7-5 JFFS2 파일시스템 이미지 생성하기 ② ① ③ ④ ⑤ ⑥
28 IT CookBook - mkjffs2 스크립트 타겟 시스템을 수동 부팅 → 생성된 rootfs.img 이미지를 부트로더 명령어를 이용해 타겟 시스템의 RAM 에 전송하고 플래시에 퓨징 타겟 시스템 재부팅 실습 7-5 실습 7-5 JFFS2 파일시스템 이미지 생성하기 01 #!/bin/sh srcpath=${1:-"rootfs"} 04 imgname=${2:-"rootfs.img"} test !-x./mkfs.jffs2 && {echo "mkfs.jffs2 does not exist."; exit1; } 07 test !-d $srcpath && { echo "$srcpath does not exist."; exit 1; } 08./mkfs.jffs2 -e 0x d $srcpath -p -o $imgname 09 exit 0
요 약요 약 요 약요 약 IT CookBook 임베디드시스템에서 사용 가능한 파일시스템은 램디스크, CRAMFS, JFFS2 등 여러 종류가 있다. 리눅스 파일시스템의 가장 기초가 되는 데이터 구조체는 아이노드며, 파 일에 대한 제어 정보와 블록 포인터를 가지고 있다. 파일시스템은 타겟 시스템의 사양에 따라 다양하게 선택할 수 있다. 리눅스 파일시스템은 부트 블록, 수퍼 블록, 아이노드 리스트, 테이터 블 록 등으로 이루어진다. 루트 파일시스템은 여러 유틸리티 등을 포함하므로 시스템 크기에 영향 을 많이 준다. 램디스크는 읽기 / 쓰기가 아주 빠르기 때문에 소규모의 루트 파일시스템 을 생성할 때 흔히 사용한다. 램디스크를 이용한 루트 파일시스템을 이용하려면 커널 환경 설정에서 램디스크를 지원하도록 수정한 후 커널 이미지를 다시 빌드해야 한다. JFFS2 는 데이터를 안정적으로 보호하는 저널링 파일시스템으로 마모 균 등화 기능을 갖추고 있고 압축으로 용량을 극대화해 플래시 메모리 기반 의 임베디드시스템에 널리 사용한다.
요 약요 약 요 약요 약 IT CookBook Thank you