반응형

메모리 맵 파일?

리눅스에서는 메모리 맵 파일(Memory-Mapped File)이라는 강력한 기능을 제공합니다.

이 기능은 파일의 특정 부분을 메모리 주소 공간에 매핑하여, 파일 내용을 메모리처럼 직접 접근할 수 있도록 해줍니다.

이때 mmap() 함수를 사용하여 파일을 메모리로 읽어오고, 그 영역을 가상 주소 공간에 매핑합니다.

이렇게 하면, 파일에 대한 수정이 메모리에 적용되면서 이후 디스크에도 반영됩니다.

왜 메모리 맵 파일을 사용할까?

  • 성능 최적화: 디스크에 접근하는 시간을 줄이고 메모리 접근 속도로 작업을 처리할 수 있습니다.
  • 메모리 효율성: 필요한 부분만 메모리에 적재하여 전체 파일을 로드하지 않고도 작업할 수 있습니다.
  • 프로그래밍의 간소화: 파일을 메모리처럼 다룰 수 있기 때문에 파일 입출력 작업이 더 단순해집니다.

메모리맵 대표적 사례

  • 데이터베이스 관리 시스템(DBMS): 데이터베이스 시스템에서는 대량의 데이터를 빠르게 처리해야 하므로, 메모리 맵 파일을 이용하여 데이터 접근 속도를 높이고, 메모리 사용량을 최적화합니다.
  • 멀티미디어 응용 프로그램: 이미지나 비디오 파일과 같은 대용량 멀티미디어 파일을 실시간으로 처리할 때, 메모리 맵핑을 통해 파일을 빠르게 접근하고 수정할 수 있습니다.
  • 텍스트 편집기 및 뷰어: 큰 텍스트 파일을 빠르게 로드하고 편집하기 위해 메모리 맵 파일 기능을 사용할 수 있습니다.

사용 방법 예시

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);

 

 

리눅스에서 사용되는 주요 파일 시스템

리눅스는 다양한 파일 시스템을 지원하며, 대표적으로 ext4, XFS, Btrfs가 있습니다. 각 파일 시스템은 다음과 같은 특징을 가집니다.

  1. ext4: 리눅스에서 널리 사용되며, 이전 버전인 ext2, ext3 파일 시스템과의 호환성을 제공합니다.
  2. XFS: 대규모 데이터를 다룰 때 성능이 뛰어나며, 높은 입출력 처리량에 적합한 파일 시스템입니다.
  3. Btrfs: 스냅샷과 데이터 무결성 기능이 뛰어나며, 복잡한 파일 시스템 관리에 적합합니다.

파일 시스템의 주요 차이점

각 파일 시스템은 데이터 관리 구조와 처리 방식에서 차이를 보입니다. 주요 차이점은 다음과 같습니다:

  1. 파일 시스템 최대 크기
  2. 파일 최대 크기
  3. 최대 파일 개수
  4. 파일명 최대 길이
  5. 동작별 처리 속도
  6. 표준 기능 이외의 추가 기능 지원 여부

이와 같은 다양한 기능과 구조적 차이로 인해, 사용 목적에 따라 적합한 파일 시스템을 선택하는 것이 중요합니다.

 

하나의 디스크 안에서 여러 파티션을 나누어 다음과 같이 여러 파일시스템을 사용할 수도 있습니다!!

/dev/sda1 - ext4 (루트 파일 시스템 /)

/dev/sda2 - swap (스왑 파티션)

/dev/sda3 - XFS (데이터 저장용)

/dev/sda4 - Btrfs (스냅샷 및 데이터 무결성 보장용)

 

저널링이란?

데이터를 저장 장치에서 읽거나 쓰는 도중에 시스템 전원이 갑자기 꺼지는 경우, 파일 시스템의 내용에 오류가 발생할 수 있습니다.

이러한 오류를 방지하기 위해 저널링과 같은 기술이 사용되며, 리눅스의 ext4 파일 시스템은 저널링을 사용합니다.

 

저널링은 파일 시스템 내에서 데이터의 변경 내역을 기록하는 메타 데이터 영역인 저널 영역을 활용하여 파일 시스템의 무결성을 보장하는 기술입니다. 이를 통해 갑작스러운 시스템 오류나 전원 차단에도 파일 시스템의 일관성을 유지할 수 있습니다.


[저널링을 이용한 파일 시스템 갱신 순서 및 오류 발생 방지]

  1. 저널 영역에 처리 목록 기록
    • 파일 시스템 갱신에 필요한 작업 목록을 먼저 저널 영역에 기록합니다. 이 기록을 저널 로그라고 부르며, 이 로그가 완전히 기록되지 않으면 파일 시스템은 해당 작업을 무시하고 처리를 진행하지 않습니다. 이를 통해 *아토믹성(Atomicity)이 보장됩니다.
      * 아토믹성 : 아토믹한 처리는 더 이상 나눌 수 없는 최소 단위의 작업을 의미합니다. 작업이 시작되면, 해당 작업은 중단 없이 끝까지 수행되거나, 전혀 수행되지 않아야 합니다. 시스템의 상태를 항상 일관되게 유지하여 데이터 정합성을 유지합니다.
  2. 파일 시스템 갱신
    • 저널 영역에 기록된 내용에 따라 파일 시스템의 실제 데이터를 갱신합니다.
  3. 저널 로그 삭제
    • 저널 로그를 성공적으로 처리한 후에는 저널 영역에서 로그를 삭제합니다. 이 과정이 끝나면 파일 시스템의 갱신 작업이 완료됩니다.
  4. 오류 발생 시 복구
    • 만약 도중에 전원이 차단되거나 시스템 오류가 발생한다면, 저널 로그를 기반으로 처리되지 않은 작업을 다시 수행하여 파일 시스템을 복구합니다.

저널링을 통해 리눅스 파일 시스템은 시스템 오류가 발생하더라도 안정적으로 복구할 수 있습니다.

 

만약, 오류가 반복될 경우 무한 반복이 생기지 않을까?

만약 계속해서 오류가 발생한다면, 저널링 파일 시스템은 동일한 복구 작업을 계속 시도할 수 있습니다.

그러나 이를 방지하기 위한 몇 가지 메커니즘이 존재합니다.

 

- 오류 횟수 제한:
대부분의 저널링 파일 시스템은 복구 시도 횟수를 제한하는 메커니즘을 가지고 있습니다. 예를 들어, 일정 횟수 이상 복구에 실패하면 더 이상 반복하지 않고 파일 시스템을 읽기 전용 모드로 전환합니다. 이를 통해 데이터 손상 또는 더 이상의 무한 반복을 방지합니다.

- 안전 모드 진입:
복구 작업이 반복적으로 실패하면, 시스템은 안전 모드 또는 비정상 종료 모드로 진입하여 사용자나 시스템 관리자에게 문제를 알립니다. 이를 통해 관리자가 직접 개입하여 문제를 해결할 수 있도록 합니다.

- 저널 자체의 무결성 검사:
저널링 파일 시스템은 저널 자체의 무결성을 주기적으로 검사합니다. 저널에 오류가 발생하면 이를 탐지하고, 저널 로그를 초기화하거나 새로운 저널을 생성하여 무한 반복 문제를 방지합니다.

 

다음 포스팅에서 다른 다양한 파일 시스템에 대해 더 알아보도록 해보자!

반응형

'IT 기술 > 리눅스' 카테고리의 다른 글

[보안] 리눅스 - 부트로더 보안  (0) 2024.09.10
[리눅스] 기본 명령어  (0) 2024.09.10
[리눅스] NFS, FUSE  (1) 2024.09.10
[리눅스] 파일시스템 #3 (tmpfs, procfs, sysfs)  (0) 2024.09.10
[리눅스] 파일시스템 #1  (0) 2024.09.10

+ Recent posts