내 이해는 하드 드라이브와 SSD가 드라이브 내부에 몇 가지 기본 오류 수정을 구현한다는 것입니다. mdadm과 같은 대부분의 RAID 구성은 드라이브가 오류를 수정하지 못하여 오프라인 상태로 만들어야하는 시점을 결정하기 위해 이것에 의존합니다. 그러나 이는 오류 진단에서 스토리지가 100 % 정확한지에 달려 있습니다. 그렇지 않습니다. 2 개 드라이브 RAID-1 미러와 같은 일반적인 구성은 취약합니다. 한 드라이브의 일부 비트가 자동으로 손상되고 드라이브가 읽기 오류를보고하지 않는다고 가정합니다. 따라서 btrfs 및 ZFS와 같은 파일 시스템은 버그가있는 드라이브 펌웨어, 결함이있는 SATA 케이블 등을 신뢰하지 않도록 자체 체크섬을 구현합니다.
마찬가지로 RAM에도 안정성 문제가있을 수 있으므로이 문제를 해결하기 위해 ECC RAM이 있습니다.
내 질문은 이것입니다 : 2 스왑 구성 (예 : 메인 라인 커널 드라이버 사용)의 드라이브 펌웨어에 잡히지 않는 자동 손상 / 비트 썩음으로부터 Linux 스왑 파일을 보호하는 정식 방법은 무엇입니까? 여기서 btrfs가 제공하는 것과 같은 엔드 투 엔드 보호 기능이없는 구성은 ECC RAM이 가져 오는 마음의 평화를 어느 정도 무효화합니다. 그러나 나는 좋은 방법을 생각할 수 없다 :
- btrfs는 스왑 파일을 전혀 지원하지 않습니다. btrfs 파일에서 루프 장치를 설정하고 교체 할 수 있습니다. 그러나 문제가 있습니다.
- 무작위 쓰기는 제대로 수행되지 않습니다 : https://btrfs.wiki.kernel.org/index.php/Gotchas#Fragmentation
- 기록 중 복사를 비활성화하라는 제안도 체크섬을 비활성화하므로이 연습의 요점을 모두 잃게됩니다. 데이터 파일에는 자체 내부 보호 기능이 있다고 가정합니다.
- : 리눅스에 ZFS는 일할 수있는 것 같아요 스왑으로 ZVOL를 사용하여 허용 http://zfsonlinux.org/faq.html#CanIUseaZVOLforSwap 그러나, 내 독서에서, ZFS는 일반적으로 메모리에 요구하고, 점점 그것은 스왑에서 작업 - 응용 프로그램 만 알아내는 작업처럼 들립니다. 나는 이것이 나의 첫번째 선택이 아니라고 생각한다. 안정적인 스왑을 위해 트리 외부 커널 모듈을 사용해야하는 이유는 무엇입니까?
- 나는이 문제에 대해 논의 정확히 이유로 메모리 관리자 자체 내에서 체크섬, 활성화 패치로 리눅스 커널 메일 링리스트에 스레드 실제로 있었다 : http://thread.gmane.org/gmane.linux.kernel/989246은 - 불행히도, 내가 알 수있는 한, 패치는 죽었고 나에게 알려지지 않은 이유로 업스트림으로 만들지 않았습니다. 너무 나쁘다, 그것은 좋은 기능처럼 들렸다. 반면에 RAID-1에 스왑을 설정하면 손상이 체크섬으로 복구 할 수없는 경우 메모리 관리자가 당황하기 전에 다른 드라이브에서 다른 드라이브를 읽으려고합니다. 아마도 메모리 관리자가해야 할 일의 범위를 벗어난 것입니다.
요약하자면:
- RAM에 ECC가 오류를 수정했습니다.
- 영구 저장소의 파일에는 오류를 수정하기위한 btrfs가 있습니다
- 스왑은 ?? <--- 이것은 내 질문이다