커피닉스, 시스템 엔지니어의 쉼터
  CentOS 5.x에서 ext4 파일시스템 사용 작성일 : 2009/11/18 23:17
 
  • 글쓴이 : 좋은진호 ( http://coffeenix.net/ )
  • 조회수 : 23298
     
    제  목 : 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



    커피닉스, 시스템 엔지니어의 쉼터 / URL : http://coffeenix.net/board_view.php?bd_code=1690