제  목 : 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 파일시스템 사용

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다