강좌
클라우드/리눅스에 관한 강좌입니다.
자격증 분류

리눅스마스터1급 : 리눅스파일시스템 ext4의 특징

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터1: 리눅스파일시스템 ext4의 특징



 

3) ext4의 특

 

EXT4는 리눅스 커널 2.6.28의 일부이며, 가장 많이 사용된 리눅스 파일 시스템인 Ext3에서 발전된 것이다.

 

 

 

 

Ext4는 여러 측면에서 Ext3Ext2에 대해 개선되었던 것 보다 더욱 근본적인 향상이 있었다.

 

 

 

 

Ext3Ext2에 저널링을 추가한 것이 대부분이었지만, Ext4는 파일 데이터의 저장에 관한 것들을 포함하여 파일 시스템의 중요한 데이터 구조(data structures)를 수정했다.

 

 

 

 

이에 따라 Ext4는 디자인, 더욱 좋은 수행능력(performance), 신뢰성(reliability) 및 기능들에서 향상된 파일 시스템이 되었다.

 

 

 

 

다음은 Ext4의 주요한 특징들이다.

 

 

 

 

 

호환성(Compatibility)

 

현존하는 모든 Ext3 파일 시스템은 읽기 전용(read-only) 모드에서 두 개의 명령어를 실행하는 쉬운 절차를 거쳐서 Ext4로 마이그레이션이 가능하다.

 

 

 

 

이에 따라 단지 Ext4로 업그레이드함에 의해, 현재의 운영체제와 소프트웨어 환경을 다시 포맷하거나 재설치할 필요 없이 현재의 파일 시스템의 수행능력, 저장 한계 및 기능들을 향상시킬 수 있다.

 

 

 

 

그리고 그 절차는 안전하고 자료 또한 안전하다(다만, 중요한 자료의 백업은 항상 필요할 것이다). Ext4는 새로운 데이터에만 새로운 데이터 구조를 사용할 것이고, 기존의 구조들은 그대로 남아 있을 것이며, 필요한 경우에 기존의 데이터들을 읽거나 수정하는 것이 가능하다.

 

 

 

 

따라서 일단 파일 시스템을 Ext4로 전환하면 다시 Ext3로 되돌릴 수는 없다(새로운 디스크 포맷을 사용하지 않아도 Ext3 파일 시스템을 Ext4로 마운트 할 가능성이 있고 이것을 다시 Ext3로 마운트할 수 있기는 하지만, Ext4의 이점들의 많은 부분을 잃게 된다).

 

 

 

더 큰 파일 시스템/파일 크기

현재 Ext3는 최대 파일 시스템 크기로서 16 TiB(테비 바이트)를 지원하고 최대 파일 크기로 2 TiB를 지원한다.

 

 

 

 

Ext448비트 블록 주소(48-bit block addressing)를 추가하여 최대 파일 시스템 크기로서 1 EiB(엑스비바이트)를 지원하고 최대 파일 크기의 16 TiB를 지원한다(1 EiB = 1,048,576 TiB (1 EiB = 1024 PiB, 1 PiB = 1024 TiB, 1 TiB = 1024 GiB)).

 

64비트가 아닌 48를 채택한 이유는, Ext4를 완전하게 64비트가 가능하도록 제작하기 전에 수정될 필요가 있는 몇 가지 한계들이 있었기 때문이다.

 

 

 

 

Ext4 데이터 구조는 이것을 염두에 두고 설계되었기 때문에, 장래의 Ext4의 업데이트는 어떤 점에서 완전한 64비트를 지원하도록 할 것이고, 그 이전까지 1 EiB는 충분할 것이라고 한다(처음 Ext4가 도입된 시점에 e2fsprogs 프로그램에 의해 파일 시스템을 16 TiB보다 크게 만들 수는 없었다).

 

 

 

 

서브디렉토리 확장성

Ext3에서 하나의 디렉토리 내에 포함되는 서브디렉토리(sub directories)의 최대 가능 숫자는 32,000개이지만, Ext4는 서브디렉토리의 숫자에 한계가 없다.

 

 

 

 

 

Extents

Ext3와 같이 전통적으로 유닉스에서 파생된 파일 시스템은, 파일의 데이터에 상응하는 블록들을 위해 사용되는 각 블록을 파악하기 위해 간접 블록 매핑 방식(indirect block mapping scheme)을 사용한다.

 

 

 

 

이것은 대용량 파일들, 특히 대용량 파일 삭제 및 자르기 작업에 대해 비효율적이다.

 

 

 

 

왜냐하면 매핑이 모든 하나의 블록에 대해 하나의 항목(entry)을 유지하여 대용량 파일들이 많은 블록들을 가지고 이에 따라 거대 매핑들로 인하여 처리(handle)가 느려지기 때문이다.

 

 

 

 

현대의 파일 시스템은 “extents”라고 불리는 다른 접근 방식을 사용한다.

 

 

 

 

하나의 엑스텐트(extent)는 기본적으로 인접한 물리적 블록들의 묶음이다.

 

 

 

 

엑스텐트는 기본적으로 데이터가 다음 n 블록들 내에 있다는 것을 말한다.

 

 

 

 

예를 들어 100MB 파일에 대해 25,600 블록(블록 당 4KB)에 대한 간접 매핑을 만드는 것 대신에 100MB 크기의 하나의 엑스텐트를 할당할 수 있다.

 

 

 

 

거대한 파일들은 여러 엑스텐트들로 분할된다.

 

 

 

 

엑스텐트가 디스크상의 연속적인 배치(continuous layouts)를 촉진하기 때문에, 엑스텐트들은 성능을 향상시키고 단편화를 줄이는데 도움이 된다.

 

 

 

 

 

 

다중블록 할당(Multiblock allocation)

 

Ext3가 디스크에 새로운 데이터를 작성할 필요가 있는 경우에, 어떤 자유로운 블록들이 그 데이터를 작성하기 위해 사용될 지를 결정하는 블록 할당자(block allocator)가 있다.

 

 

 

 

그러나 Ext3 블록 할당자는 한 번에 단지 하나의 블록(4KB)을 할당한다.

 

 

 

 

이것은 그 시스템이 앞서 언급한 100MB 데이터를 작성할 필요가 있는 경우에, 블록 할당자를 25,600번 호출할 필요가 있을 것이라는 것을 의미한다.

 

 

 

 

이것은 비효율적일 뿐만 아니라, 블록 할당자가 전체적으로 얼마나 많은 데이터가 할당되고 있는지를 알지 못하고 단지 하나의 블록에 대해서 알 뿐이기 때문에 블록 할당자에게 할당 정책을 최적화하는 것을 허용하지 않는다.

 

 

 

 

Ext4는 하나의 콜에 대해 하나의 블록을 할당하는 대신에 하나의 콜에 많은 블록들을 할당하는 다중블록 할당자(multiblock allocator)”(mballoc)를 사용한다.

 

 

 

 

이것은 많은 오버헤드를 회피한다.

 

 

 

 

이에 따라 이것은 성능을 향상시키고 특히 지연 할당과 extents와 함께 유용하다.

 

 

 

 

그리고 이 기능은 디스크 포맷에 영향을 주지 않는다.

 

 

 

 

또한 Ext4 블록/아이노드 할당자는 다른 개선사항들을 가지고 있다.

 

 

 

 

지연 할당(Delayed allocation)

 

지연 할당은 XFS, ZFS, btrfs Reiser4와 같은 몇 개의 현대 파일 시스템에서 보여지는 성능 관련 특징이고(이것은 디스크 포맷을 변경하지 않는다),

 

 

전통적으로 (Ext3, reiser3 등과 같은) 파일 시스템들이 가능한 한 빨리 블록들을 할당한 것과 달리 블록들의 할당을 가능한 한 많이 지연하도록 구성한다.

 

 

 

 

예를 들어 어떤 프로세스가 쓰기(write( ))라면, 파일 시스템 코드는 그 데이터가 지금 당장 그 디스크에 작성되지 않고 어느 시간 동안 캐시(cache)에 유지되는 경우 조차도 즉시 그 데이터가 놓일 블록들을 할당할 것이다.

 

 

 

 

이러한 접근은 난점을 가지고 있다.

 

 

 

 

예를 들어 어떤 프로세스가 하나의 파일에 지속적으로 쓰기를 하고 있어서 크기가 늘어나고 있는 경우에 계속적인 쓰기(write( ))는 그 데이터에 대해서 블록들을 할당하지만, 그 계속적인 쓰기(write( ))는 그 파일의 크기가 점차 늘어나고 있는지 알지 못한다.

 

 

 

 

한편, 지연 할당은 프로세스가 쓰기(write( ))인 경우에 블록들을 즉시 할당하지 않고, 그 파일이 캐시에 유지되고 있는 동안에는 그것이 디스크에 실제로 작성될 때까지 블록의 할당을 지연시킨다.

 

 

 

 

이것은 블록 할당자에게 지난 시스템이 그러지 못했던 상황들에서 할당을 최적화할 기회를 제공한다.

 

 

 

 

지연 할당은 이전에 언급된 extents와 다중블록 할당과 함께 매우 잘 작동하는데, 파일이 마침내 디스크에 작성될 때의 많은 작업부하(workloads)에서 블록 할당이 다중블록 할당자(mballoc)와 함께 행해지는 extents에 그 파일이 할당될 것이기 때문이다.

 

 

 

 

이에 따라 성능이 상당히 개선되고, 단편화(fragmentation)도 어느 정도의 작업부하에서 상당히 개선된다.

 

 

 

 

 

빠른 fsck(Fast fsck)

 

fsck는 매우 느린 작동을 하는데, 파일 시스템에서의 모든 아이노드를 확인하는 첫 번째 단계에서 특히 그렇다.

 

 

 

 

Ext4는 각 그룹의 아이노드 테이블의 마지막에 (안정을 위해 체크섬(checksum)과 함께) 사용되지 않은 아이노드의 목록이 저장되고, 그래서 fsck는 그 아이노드들을 확인하지 않는다.

 

 

 

 

이에 따라 전체 fsck 시간은 사용된 아이노드의 숫자에 따라 2배에서 20배까지 개선되었다.

 

 

 

 

그렇지만 사용되지 않은 아이노드들의 목록을 만드는 것은 Ext4가 아니라 fsck이다.

 

 

 

 

따라서 이를 위해서는 fsck를 실행해야 하고, 다음 fsck가 실행되는 경우에 속도가 더 빨라진다(Ext3 파일 시스템을 Ext4 파일 시스템으로 전환하기 위해서 fsck를 거쳐야 할 필요가 있다). 파일 시스템 작동을 빠르게 하는 플렉서블 블록 그룹들(flexible block groups)”fsck의 속도를 향상시킨다.

 

 

 

 

 

 

저널 체크섬(Journal checksumming)

 

저널은 디스크 상에서 가장 많이 사용되는 부분이기 때문에, 그것의 일부를 형성하는 블록들을 더욱 더 하드웨어 장해에 취약해 진다.

 

 

 

 

그리고 오류가 발생한 저널을 이용하여 파일 시스템을 복구하는 것은 수많은 오류발생(massive corruption)을 일으킬 수 있다.

 

 

 

 

Ext4는 저널 블록들이 작동이 안 되거나 오류가 발생되는지 여부를 알기 위해 저널 데이터를 체크섬한다.

 

 

 

 

그러나 저널 체크섬은 추가적인 이점이 있는데, 이것은 저널 체크섬이 Ext3의 저널링의 2단계 커밋(commit) 체계를 1단계로 전환할 수 있도록 한다는 점이다.

 

 

 

 

그래서 어떤 경우에는 20%까지 파일 시스템 작동을 빠르게 하고, 이에 따라 신뢰성과 성능이 동시에 개선된다.

 

 

 

저널링 비사용(No Journaling) 모드

 

저널링은 계속되는 디스크 변경들을 지속적으로 로그함에 의해 파일 시스템의 무결성(integrity)를 보장한다.

 

 

 

 

그러나 저널링은 조금의 오버헤드(overhead)를 가지는 것으로 알려져 있다.

 

 

 

 

특별한 조건과 작업량을 가진 어떤 사람들은 저널링 비사용 모드를 선택함에 의해 저널과 이것에 의한 이익들 없이 Ext4 파일 시스템을 실행할 수 있다.

 

 

 

 

Ext4에서 저널링 기능이 비사용으로 처리될 수 있고, 이에 따라 약간의 성능이 향상된다.

 

 

 

 

 

온라인 단편화 해소(Online defragmentation)지연 할당, extents 및 다중블록 할당이 단편화를 감소하는데 도움이 되지만, 사용과 함께 파일 시스템은 여전히 단편화될 수 있다.

 

 

 

 

예를 들어 디스크상의 디렉토리에 연속하여 3개의 파일을 작성한 경우에, 중간 파일을 업데이트할 필요가 있을 때 업데이트된 파일이 한 비트만 커지더라도 그것을 위한 충분한 공간이 없게 된다.

 

 

 

 

그 디스크의 다른 장소에 데이터 초과 부분을 분할하는 것 외에는 방법이 없는데, 이것은 업데이트된 파일을 지속적으로 다른 두 파일들과 멀리 떨어진 다른 장소에 할당하도록 할 것이다.

 

 

 

 

이에 따라 애플리케이션이 디렉토리상의 모든 파일들을 읽을 필요가 있는 경우에 찾기(seek)를 유발할 것이다.

 

 

 

 

게다가 파일 시스템은 어떤 형식의 단편화에 대해서 단지 관심을 가질 수 있을 뿐이므로(예를 들어 어떤 파일들이 부트에 관련되어 있는지를 모르기 때문에 부트 관련 파일들이 인접해 있는지 알 수가 없다),

 

 

이 문제를 해결하기 위해 Ext4e4defrag 툴을 제공하는데, 이 툴은 개별 파일들이나 전체 파일 시스템의 단편화를 해소할 수 있고, 온라인 단편화 해소를 지원한다.

 

 

 

 

 

 

아이노드 관련 특징들

 

 

더 큰 아이노드들(Larger inodes) : Ext3(-I mkfs 파라미터를 통해서) 수정할 수 있는 아이노드 크기를 지원하지만. 기본 아이노드 크기가 128 바이트이다.

 

 

 

 

Ext4는 기본적으로 256바이트를 지원한다.

 

 

 

 

이것은 (10억분의 1초 타임스템프 또는 아이노드 버전화와 같이) 어떤 추가 필드들을 수용하기 위해 필요하고, 아이노드의 남은 공간이 확장 속성들(attributes)을 저장하기 위해 사용될 것이다.

 

 

 

 

이것은 더욱 빠르게 그 속성들에 접근하게 할 것이고, 확장 속성들을 사용하는 애플리케이션들의 성능을 3~7배까지 향상시킬 것이다.

 

 

 

 

 

 

아이노드 예약(Inode reservation) : 디렉토리가 만들어졌을 때 미래에 사용될 것이라고 기대하면서 여러 아이노드를 예약하는 것이다.

 

 

 

 

이것은 새로운 파일들이 그 디렉토리에 작성될 때 예약된 아이노드들을 사용할 수 있기 때문에 성능을 향상시킨다.

 

 

 

 

파일 작성과 삭제가 좀더 효율적이다.

 

 

 

 

 

 

10억분의 1초의 타임 스템프(Nanoseconds timestamps) : “수정 타임과 같은 아이노드 필드들이 Ext3의 초단위 레졸루션(resolution) 대신에 10억분의 1초의 레졸루션을 사용할 수 있다.

 

 

 

 

 

 

Ext4로 전환하기


 

Ext4 파일 시스템을 사용하기 위한 가장 쉬운 방법은 e2fsprogs 패키지를 Ext4로 업데이트하고 mkfs.ext4로 파일 시스템을 만드는 것이다.

 

그리고 Ext3Ext4로 마이그레이션하기 위해서는 다음과 같이 tune4fsfsck 툴을 사용할 수 있다.

 

 

 

 

이 툴들을 사용할 때에는 파일 시스템을 마운트 해제할 필요가 있다.

 

 

 

 

 

 

# tune2fs -O extents,uninit_bg,dir_index /dev/[파일 시스템]

# fsck -pDf /dev/[파일 시스템]

 

 

 

 

 

 

 

이렇게 마이그레이션을 하더라도 현존하는 파일들은 모든 데이터의 블록들을 매핑하기 위해서 Ext3의 간접 매핑 방식을 사용할 것인데, 온라인 defrag 툴은 이 파일들의 각각을 엑스텐트(extent) 형식으로 마이그레이션할 수 있다.

 

 

 

 

상기한 바와 같이 이렇게 전환하지 않더라도 Ext3Ext4로 마운트하는 것이 가능하다.

 

 

 

 

이를 통해 Ext3 파일 시스템을 지속적으로 사용하면서 디스크 포맷을 변경하지 않는 Ext4의 일부 기능(mballoc, 지연 할당 등)을 사용할 수 있다.

 

 

 

 

또한 다시 Ext3로 마운트하는 것도 가능하다.

 

 

 

 

 

 

 

 

 

 

# mount -t ext4 /dev/yourpartition /mnt

 

 

 

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,035 명
  • 현재 강좌수 :  35,791 개
  • 현재 접속자 :  155 명