"다중 선언된 블록"은 블록이 둘 이상의 파일에 속하는 것으로 나타날 때 fsck에 의해 보고되는 오류입니다. 두 파일 중 하나가 기록되면 두 파일 모두 변경되므로 데이터가 손상될 수 있습니다.
하지만 블록이 다중 소유권을 주장하는 원래 이유는 무엇일까요? 어떻게 생성되며 어떻게 방지할 수 있나요?
답변1
명시된 바와 같이아주 초기에주오종탕그 자신은 두 개를 가질 수 있습니다즉각적인이유는"선언된 블록 곱하기" fsck가 보고한 내용:
그 중 하나는 inode 테이블에 있는 하나 이상의 블록이 잘못된 위치에 기록되어 inode 테이블에 있는 다른 블록을 덮어쓰는 것입니다.
이는 일반적으로 일부 커널 버그로 인해 발생합니다. (T'Tso는 쉽게 식별할 수 있는 일부 패턴을 설명할 수 있다는 점을 읽을 수 있습니다. => 외부 소스로 인해 발생하는 가짜 손상은 무작위가 아닙니다.)
이는 특히 드문 경쟁 조건으로 인해 EXT 파일 시스템 제품군의 새로운 기능 초기에 발생합니다.
- 그리고비갈록
- 지연 할당,
- 최근에는 지적한 바와 같이프로스트슈츠OP의 의견에서,fast_commit 함수에 대해.
두 번째 경우는 블록 할당 비트맵이 손상되어 사용 중인 일부 블록이 사용 가능으로 표시되는 경우입니다.그 다음에파일 시스템을 다시 마운트하고 파일을 파일 시스템에 기록하여 새 파일에 블록이 다시 할당되도록 합니다.
이러한 문제는 일부 손상 후에 더 무작위로 나타나며 근본 원인이 커널 버그일 가능성은 낮습니다.
여기에는 불완전한 종료, 잘못 작성된 애플리케이션, 하드웨어 환경과 관련된 불합리한 설치 옵션 등이 포함됩니다. 메모리 및 기타 하드웨어 오류.
물론 fsck
오류 보고서 생성에 대한 자신의 책임이나 다른 파일 시스템 불일치를 수정하려고 할 때 문제의 근본 원인을 잊어서는 안 됩니다.사실 이미 있어요
이를 어떻게 피할 수 있습니까? 위의 내용을 바탕으로 해당 발생 확률을 제한할 수 있습니다.
- 낮은 수준의 기술을 유지하세요 ;-) 새로운 기능이 출시되자마자 설정하지 마세요.
- ECC 메모리와 안정적인 저장 장치를 사용하여
- 파일 시스템 옵션(때때로 제공됨)을 미세 조정하고
mkfs
설치 옵션을 현명하게 선택하십시오(환경에 맞게). - 신뢰할 수 없는 모든 소프트웨어를 샌드박스에서 실행하세요.
- 마지막으로T'Tso로 일하기충돌이 발생하면 다음을 실행하십시오.
e2croncheck
:
지금 제가 실제로 하고 있는 일은 충돌이 발생할 때마다 재부팅하고 로그인한 후 바로 e2croncheck를 실행하는 것입니다. 이를 통해 잠재적인 파일 시스템 손상이 심각해지기 전에 이를 알아차릴 수 있습니다... e2fsck가 터미널 창에서 실행되는 동안 다른 작업을 수행할 수 있기 때문에 E2croncheck가 더 편리합니다.
답변2
네트워크/공유 스토리지(예: 파이버 채널, iscsi, SAN, JBOD 장치 등)에서는 다중 요청 블록이 발생할 수 있습니다. 이러한 설정을 사용하면 잘못 구성된 경우 두 시스템(가상 또는 베어메탈)이 동일한 블록에 액세스할 수 있습니다. 설정이 올바르지 않으면 블록이 다른 블록 장치에 할당될 수 있으며 다른 장치에 할당될 수 있습니다. 이러한 시스템은 다른 시스템이 블록을 사용하여 무엇을 하는지 모르기 때문에 이러한 오류가 발생할 수 있습니다.
이러한 오류를 방지하려면 블록 장치가 하나의 장치에만 할당되도록 하여 블록 장치에 대한 액세스를 하나의 시스템으로 제한하십시오. 가능하면 "잠금"을 사용하십시오. 잠금은 blockdev가 사용 중인 것으로 표시되어 다른 시스템에서 사용될 수 있음을 의미합니다(간단한 설명입니다).