어떤 장치 캐시가 기록되는지 디버깅/감사하려면 어떻게 해야 합니까?

어떤 장치 캐시가 기록되는지 디버깅/감사하려면 어떻게 해야 합니까?

물리적 하드 드라이브의 ext4 기본 파티션에 있는 희소 dm-crypt 장치를 기반으로 하는 btrfs 파티션에 문서를 저장합니다.

커널이 충돌하면(3.6 커널을 사용하는 ASUS P53E에서 매일 발생함 :-( )) 최근 수정된 파일이 손실됩니다(파일 내용은 항상 0으로 대체됩니다).

파일 손상을 방지하는 한 가지 방법은 쓰기 캐싱을 비활성화하는 것입니다.

이렇게 하려면 btrfs 파티션, 이를 지원하는 dm-crypt 장치 및 dm-crypt 장치가 상주하는 스파스 파일에 대한 쓰기 캐싱을 비활성화해야 합니다.

  1. 드라이브의 캐시 쓰기 상태를 확인하는 방법은 무엇입니까?
  2. 어떻게 비활성화할 수 있나요?

저는 Mint 13 Maya와 3.6.8 메인라인 커널을 사용하고 있습니다.

답변1

루프 장치를 사용하고 있는 것처럼 들리기 때문에 디스크 드라이브 쓰기 캐시가 문제를 해결할 수 있을지 확신할 수 없습니다. 따라서 Btrfs 파일 시스템과 실제 디스크 사이에는 여전히 페이지 캐시/파일이 있습니다. 저널링 파일 시스템에도 동일한 유형의 문제가 있습니다.루프 AES는 여기에서 자세히 다룹니다.. 따라서 데이터가 루프 장치에 동기화되면 실제 디스크에 있지 않고 재정렬 및 ​​기록을 기다리는 캐시에 있을 수 있습니다.

syncext4는 캐싱을 비활성화하는 데 사용되는 ext2/3 마운트 옵션을 지원하지 않습니다 . 사이에 있는 레이어 수로 인해 이것이 효과적으로 복구할 수 있는지조차 확신할 수 없습니다. 불행하게도 나는 적어도 디스크에 더 많은 데이터를 쓸 만큼 내부에 대해 충분히 알지 못합니다.

같은 방법으로 당신은 할 수 있습니다한계시스템이 디스크에 더 자주 쓸 수 있도록 페이지 캐시를 조정하여 이 문제를 해결하십시오. Linux 페이지 캐시는 해당 값을 /proc/meminfo다음과 같이 보고합니다.

"Dirty" - for pages that are currently dirty
"Writeback" - for dirty pages that are being written out to disk.

파일이 있습니다/proc/sys/vm/상태를 보고하고 데이터를 디스크에 다시 쓰는 플러시 스레드를 제어합니다.

여기에 더 작은 값(8096 또는 2페이지 이상)을 입력할 수 있습니다./proc/sys/vm/dirty_background_bytes백그라운드 pdflush 프로세스를 보다 적극적으로 실행하거나/proc/sys/vm/dirty_bytes프로세스 트리거를 보다 적극적으로 플러시합니다(성능 저하 또는 전체적으로 더 많은 디스크 쓰기를 위해).

하드웨어 쓰기 캐시가 주요 문제일 가능성은 거의 없다고 생각합니다. dm-crypt를 통해 장치에 직접 액세스하는 경우 먼저 해당 장치를 살펴보겠습니다. 어떤 경우에도 IDE 및 SATA 쓰기 캐시를 비활성화할 수 있습니다 hdparm -W0 /dev/xdx.

또한 기술적으로 실험적인 파일 시스템을 대부분의 경우보다 더 미미한 방식으로 사용하는 동안 사람들이 이러한 문제를 우연히 발견한 보다 성숙한 파일 시스템을 사용하는 것이 더 나을 수도 있습니다. Btrfs가 필요한 경우 가장 좋은 방법은 물리적 파티션을 암호화하는 것입니다.

답변2

지금까지 물리적 파티션에 대한 쓰기 캐시 동작을 설정하는 방법을 찾았습니다( /dev/sda6제 경우에는).

sudo hdparm -W /dev/sda6쓰기 동작을 확인하고 sudo hdparm -W0 /dev/sda6쓰기 캐싱을 비활성화하는 데 사용됩니다.

하지만 내 경우에는 이는 약간 과잉입니다. 전체 파티션이 아닌 dm-crypt 지원 파일에 대한 쓰기 캐싱만 비활성화하고 싶습니다.

관련 정보