1. 플래시 기반 스토리지
디스크 유형 (전통적인 하드 드라이브와 솔리드 스테이트 디스크) 또는 내가 알지 못하는 다른 변수에 의존합니까? Linux에서만 발생합니까 (그렇다면) 다른 OS에서도 발생합니까?
선택 사항이 있으면 완전히 종료하지 않고 플래시 기반 스토리지의 전원이 꺼지지 않도록해야합니다.
SD 카드와 같은 저비용 스토리지에서는 전체 지우기 블록 (4KB보다 몇 배 더 큼)이 손실되어 다른 파일이나 파일 시스템의 필수 구조에 속할 수있는 데이터가 손실 될 수 있습니다.
일부 고가의 SSD는 정전시 더 나은 보증을 제공한다고 주장 할 수 있습니다. 그러나 타사 테스트에 따르면 많은 고가의 SSD가 그렇지 않은 것으로 나타났습니다. "마모 레벨링"에 대한 블록을 다시 매핑하는 레이어는 복잡하고 독점적입니다. 가능한 실패는 드라이브의 모든 데이터 손실을 포함합니다.
테스트 프레임 워크를 적용하여 총 3 천 건 이상의 결함 주입주기를 사용하여 6 개의 다른 공급 업체의 17 가지 상용 SSD를 테스트합니다. 우리의 실험 결과는 테스트 된 17 개의 SSD 장치 중 14 개가 비트 손상, 혼돈 쓰기, 직렬화 불가능 쓰기, 메타 데이터 손상 및 전체 장치 고장을 포함하여 전원 오류시 놀라운 고장 동작을 보이는 것으로 나타났습니다.
2017 : https://dl.acm.org/citation.cfm?id=2992782&preflayout=flat
2013 : https://www.usenix.org/system/files/conference/fast13/fast13-final80.pdf?wptouch_preview_theme=enabled
2. 하드 디스크 드라이브 회전
회전하는 HDD의 특성은 다릅니다. 안전과 단순성을 위해 플래시 기반 스토리지와 동일한 실제 불확실성이 있다고 가정합니다.
특정한 증거가 없다면 분명히 그렇지 않습니다. HDD 회전에 대한 비교 수치는 없습니다.
HDD는 불완전하게 작성된 섹터 하나에 잘못된 체크섬이 남게되어 나중에 읽기 오류가 발생할 수 있습니다. 대체로, HDD의이 고장 모드는 전적으로 예상됩니다. 기본 Linux 파일 시스템은이를 염두에두고 설계되었습니다. 그들은 fsync()
이러한 유형의 정전 손실에 직면 한 계약을 유지하는 것을 목표로합니다 . (우리는 이것이 SSD에서 보장되는 것을 정말로 원합니다).
그러나 Linux 파일 시스템이 모든 경우에 이것을 달성하는지 또는 가능한지 확실하지 않습니다.
이 유형의 오류 후 다음 부팅시 파일 시스템 복구가 필요할 수 있습니다. 이것은 리눅스이기 때문에 파일 시스템 복구가 이해하지 못하는 몇 가지 질문을 할 수 있습니다. 여기서 Y 키만 누르고 그 자체로 정렬되기를 바랍니다.
2.1 fsync () 계약이 무엇인지 모르는 경우
fsync () 계약은 좋은 소식과 나쁜 소식의 근원입니다. 좋은 소식을 먼저 이해해야합니다.
좋은 소식 : fsync()
"저장"을 누른 경우 파일 데이터를 작성하는 올바른 방법으로 문서화되어 있습니다. 예를 들어 텍스트 편집기는 기존 파일을 원자 적으로 대체해야한다는 것이 널리 알려져 rename()
있습니다. 이것은 항상 이전 파일을 유지하거나 새 파일 ( fsync()
이름 바꾸기 이전 에 ed)을 가져 오도록 하기위한 것입니다. 새 파일의 반으로 작성된 버전을 남기고 싶지 않습니다.
나쁜 소식 : 수년 동안 가장 인기있는 Linux 파일 시스템에서 fsync ()를 호출하면 전체 시스템이 효과적으로 수십 초 동안 중단 될 수 있습니다. 응용 프로그램은 이것에 대해 아무것도 할 수 없으므로 fsync ()없이 rename ()을 낙관적으로 사용하는 것이 일반적이었습니다.이 파일 시스템에서 비교적 안정적인 것으로 보입니다.
따라서 fsync ()를 올바르게 사용하지 않는 응용 프로그램이 있습니다.
이 파일 시스템의 다음 버전은 일반적으로 fsync ()의 올바른 사용에 의존하기 시작하면서 동시에 fsync () 정지를 피했습니다.
이것은 모두 꽤 나쁘다. 이 역사를 이해하는 것은 아마도 충돌하는 많은 커널 개발자들이 사용했던 무시 무시한 분위기와 독창성에 도움이되지 않을 것입니다.
현재 해상도는 현재 가장 인기있는 Linux 파일 시스템입니다. fsync ()를 요구하지 않고 rename () 패턴을 지원하도록 기본 설정이전 버전과의 "버그 간 버그 호환성"을 구현합니다. mount 옵션으로 비활성화 할 수 있습니다 noauto_da_alloc
.
이것은 완전한 보호가 아닙니다. 기본적으로 rename () 시간에 보류중인 IO를 플러시하지만 이름을 바꾸기 전에 IO가 완료되기를 기다리지 않습니다. 이것은 60 초 위험 창보다 훨씬 낫습니다! 기존 파일을 rename ()으로 바꿀 때 충돌 안전성을 위해 fsync ()가 필요한 파일 시스템에 대한 답변도 참조하십시오 .
덜 인기있는 파일 시스템은 보호 기능을 제공하지 않습니다. XFS는 거부 합니다. 그리고 UBIFS 는 그것을 구현하지 않았 으며 , 분명히 받아 들일 수는 있지만 가능하게하려면 많은 노력이 필요합니다. 같은 페이지에서 UBIFS에는 전원 손실을 포함하여 데이터 무결성에 대한 몇 가지 다른 "TODO"문제가 있다고 지적합니다. UBIFS는 플래시 스토리지에서 직접 사용되는 파일 시스템입니다. 플래시 스토리지에서 UBIFS가 언급 한 어려움 중 일부는 SSD 버그와 관련이 있다고 생각합니다.