Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

22장. 쓰기 Barriers

쓰기 장벽 은 휘발성 쓰기 캐시를 사용하는 스토리지 장치에 전원을 잃은 경우에도 파일 시스템 메타데이터를 올바르게 작성하고 영구 스토리지에 정렬하도록 하는 데 사용되는 커널 메커니즘입니다. 쓰기 장벽이 활성화된 파일 시스템은 fsync() 를 통해 전송되는 데이터가 정전 전체에 영구적으로 유지됩니다.
쓰기 장벽을 활성화하면 일부 애플리케이션에 상당한 성능 저하가 발생합니다. 특히 fsync() 를 많이 사용하거나 많은 작은 파일을 만들고 삭제하는 애플리케이션이 훨씬 느려질 수 있습니다.

22.1. 이메일 주소

파일 시스템은 메타데이터를 안전하게 업데이트하여 일관성을 보장합니다. journalled 파일 시스템은 메타데이터 업데이트를 트랜잭션에 번들하고 영구 스토리지로 보냅니다.
  1. 파일 시스템은 트랜잭션의 본문을 스토리지 장치로 전송합니다.
  2. 파일 시스템은 커밋 블록을 보냅니다.
  3. 트랜잭션과 해당 커밋 블록이 디스크에 기록되면 파일 시스템은 트랜잭션이 전원 실패로 유지되는 것으로 가정합니다.
그러나 전원 장애 중에 파일 시스템 무결성은 추가 캐시가 있는 스토리지 장치에 대해 더 복잡해집니다. 로컬 S-ATA 또는 SAS 드라이브와 같은 스토리지 대상 장치에는 크기가 32MB에서 64MB까지의 쓰기 캐시가 있을 수 있습니다(현장 드라이브 사용). 하드웨어 RAID 컨트롤러에는 내부 쓰기 캐시가 포함된 경우가 많습니다. 또한 NetApp, IBM, Hitachi 및 EMC(다른 특성상)의 상위 엔드 어레이에도 대규모 캐시가 있습니다.
쓰기 캐시가 있는 스토리지 장치는 데이터가 캐시에 있을 때 "완전"으로 "완전"으로 보고됩니다. 캐시의 전원이 끊어지면 해당 데이터도 손실됩니다. 캐시가 영구 스토리지에 대한 단계이므로 원래 메타데이터 순서가 변경될 수 있습니다. 이 경우, 커밋 블록이 완전한 관련 트랜잭션 없이도 디스크에 존재할 수 있습니다. 결과적으로 저널은 이러한 초기화되지 않은 트랜잭션 블록을 post-power-loss recovery 중에 파일 시스템으로 재생할 수 있으므로 데이터가 일관되고 손상될 수 있습니다.

22.1.1. Barriers의 작업 방법

쓰기 장벽은 순서가 중요한 I/O 이전과 이후에 스토리지 쓰기 캐시 플러시를 통해 Linux 커널에서 구현됩니다. 트랜잭션을 작성한 후에는 스토리지 캐시가 플러시되고, commit 블록이 기록되고 캐시가 다시 플러시됩니다. 이렇게 하면 다음을 수행할 수 있습니다.
  • 디스크에는 모든 데이터가 포함됩니다.
  • 재주문이 발생하지 않았습니다.
장벽이 활성화되면 fsync() 호출에서 스토리지 캐시 플러시를 발행합니다. 이렇게 하면 fsync() 가 반환하는 직후 전원 손실이 발생하는 경우에도 파일 데이터가 디스크에 영구적으로 유지됩니다.