제 목 : CentOS 5.x에서 ext4 파일시스템 사용
작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
작성일 : 2009.8.28(금)
수정일 : 2009.11.17(화) CentOS 5.4에 대한 내용 추가
CentOS 5.3 버전에서 기본적으로 제공하는 커널에서는 ext4 파일시스템의 개발버전(ext4dev)을 사용할 수 있었다. 그 후 CentOS 5.4(RHEL 5.4)이 나오면서 ext4의 개발 딱지를 떼어나고, 정식적으로 사용할 수 있게 되었다. /lib/modules/커널버전/kernel/fs/ext4/ 아래를 살펴보면 ext4.ko (또는 ext4dev.ko)등의 ext4 파일시스템 모듈을 확인할 수 있다.
ext4 파일시스템 관련 툴인 e4fsprogs패키지가 설치되어 있지 않은 경우 설치한다.
# yum install e4fsprogs # rpm -ql e4fsprogs /etc/mke4fs.conf /sbin/debuge4fs /sbin/dumpe4fs /sbin/e4fsck /sbin/e4image /sbin/e4label /sbin/e4undo /sbin/finde4fs /sbin/fsck.ext4 /sbin/fsck.ext4dev /sbin/mke4fs /sbin/mkfs.ext4 /sbin/mkfs.ext4dev /sbin/resize4fs /sbin/tune4fs |
1. 간략한 과정 정리
(방법 1) ext4 파읽시스템 생성하기
1) mkfs.ext4 -L 볼륨명 /dev/파티션
2) /etc/fstab에 해당 파티션 정보를 설정한다.
3) mount /dev/파티션
(방법 2) ext3 -> ext4로 파일시스템 변경하기
1) ext4로 변경할 파티션을 먼저 unmount한다. ( umount /dev/파티션 )
2) tune4fs -O extents,uninit_bg,dir_index /dev/파티션
3) fsck.ext4 -fpDC0 /dev/파티션
4) /etc/fstab에서 ext3 -> ext4로 바꿔 저장한다.
5) mount /dev/파티션
2. ext4 파일시스템 생성하기
ext2, ext3파일시스템 만드는 것과 동일한 방법이므로 따로 설명할 것 조차 없다. 예제에서는 /dev/sdb1 파티션으로 가정한다.
# mkfs.ext4 -L /data /dev/sdb1 (-L 은 볼륨명. 알기 쉽게 임의로 적으면 된다.) # tune4fs -l /dev/sdb1 … 생략 … Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize … 생략 … |
ext4는 ext3의 제한인 2TB보다 더 큰 16TB까지의 파일도 생성 가능하다. 위의 파일시스템 feature 중에서 'huge_file' 부분이 바로 2TB보다 더 큰 파일을 생성할 수 있음을 뜻한다. 또한 ext4에서는 32000의 서브디렉토리 제한을 넘어서 64000개까지 늘어났다. 이에 대한 것은 dir_nlink feature로 표시된다.
3. ext3 -> ext4로 파일시스템 변경하기
e4fsprogs 설치 후 tune2fs가 아닌 tune4fs 명령으로 ext3파일시스템을 ext4로 변경한다. tune4fs로 변경하기 전에 파티션은 unmount한다. /dev/sdb1 파티션을 예로 들어보자.
# tune2fs -l /dev/sdb1 (변경 전) … 생략 … Filesystem features: has_journal ext_attr resize_inode dir_index filetype sparse_super large_file Filesystem state: clean … 생략 … # # tune4fs -O extents,uninit_bg,dir_index /dev/sdb1 (파티션 ext4로 변경) tune4fs 1.41.1 (01-Sep-2008) Please run e4fsck on the filesystem. # # tune4fs -l /dev/sdb1 (변경 후, fsck 전) … 생략 … Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent sparse_super large_file uninit_bg Filesystem state: not clean … 생략 … |
2TB~16TB의 파일크기를 생성하고 싶다면 tune4fs -O 옵션에 huge_file까지, 또 32000개의 서브디렉토리 제한을 넘어서려면 dir_nlink 까지 추가해주면 된다. fsck.ext4 또는 e4fsck 로 파일시스템을 검사한다.
# fsck.ext4 -fpDC0 /dev/sdb1 /data: Group descriptor 0 checksum is invalid. FIXED. /data: Group descriptor 1 checksum is invalid. FIXED. /data: Group descriptor 2 checksum is invalid. FIXED. /data: Group descriptor 3 checksum is invalid. FIXED. /data: Group descriptor 4 checksum is invalid. FIXED. … 생략 … /data: Adding dirhash hint to filesystem. /data: 32/8895488 files (3.1% non-contiguous), 455254/8889961 blocks # # tune4fs -l /dev/sdb1 (변경 후, fsck 후) … 생략 … Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent sparse_super large_file uninit_bg Filesystem flags: signed_directory_hash Filesystem state: clean … 생략 … |
4. ext4 파일시스템 마운트하기
/etc/fstab에서 해당 파티션의 파일시스템 유형을 ext4로 변경한다. 그리고, mount하면 끝.
# mount /data # mount /dev/sda7 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) … 생략 … /dev/sdb1 on /data type ext4 (rw,nosuid) |
syslog통해서 로그는 다음과 같이 남는다.
Oct 26 18:48:10 cnx1 kernel: kjournald2 starting: pid 2497, dev sdb1:8, commit interval 5 seconds Oct 26 18:48:10 cnx1 kernel: EXT4 FS on sdb1, internal journal on sdb1:8 Oct 26 18:48:10 cnx1 kernel: EXT4-fs: delayed allocation enabled Oct 26 18:48:10 cnx1 kernel: EXT4-fs: file extents enabled Oct 26 18:48:10 cnx1 kernel: EXT4-fs: mballoc enabled Oct 26 18:48:10 cnx1 kernel: EXT4-fs: mounted filesystem sdb1 with ordered data mode |
※ CentOS 5.3에서 기본커널을 사용하는 경우 /etc/fstab에 ext4dev로 적어야 한다. mount 결과에서도 ext4dev로 표시된다.
5. mount할 때 에러 (CentOS 5.3에서 ext4 개발버전(ext4dev)일 경우)
mount할 때 다음과 같은 경고 메시지가 나올 수 있다. ext4 정식버전이면 fsck 후에 mount하면 문제없을 것이다. 그러나 ext4dev 버전일 경우에는 tune4fs로 설정 변경이 필요하다.
# mount /data mount: wrong fs type, bad option, bad superblock on /dev/sdb1, missing codepage or other error In some cases useful info is found in syslog - try dmesg | tail or so |
syslog 에는 다음과 같은 로그가 남아있다.
Aug 28 11:11:55 cnx1 kernel: EXT3-fs: sdb1: couldn't mount because of unsupported optional features (40). |
tune4fs 로 설정 변경 후 tune4fs -l 로 살펴보면, 파일시스템 flag의 변화가 있음을 알 수 있다. 이후 mount하면 문제없이 해결된다.
# mount -t ext4dev /dev/sdb1 /data Aug 28 11:26:42 cnx1 kernel: EXT4-fs: sdb1: not marked OK to use with test code. # lsmod | grep ext4 ext4dev 200029 0 jbd2 55513 1 ext4dev crc16 6209 1 ext4dev # tune4fs -E test_fs /dev/sdb1 tune4fs 1.41.1 (01-Sep-2008) Setting test filesystem flag # tune4fs -l /dev/sdb1 … 생략 … Filesystem flags: signed_directory_hash test_filesystem … 생략 … |
6. 참고자료
* EXT 파일 시스템(ext1, ext2, ext3, ext4)
http://serna.tistory.com/7
* ext4
http://en.wikipedia.org/wiki/Ext4
* huge_file feature에 대한 글
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=509893
CentOS 5.x에서 ext4 파일시스템 사용