파일 시스템의 무결성을 유지하면서 fsck가 손상을 수정하는지 어떻게 확인할 수 있습니까?
클라이언트가 NFS를 통해 서버에 많은 수의 파일을 썼는데 손상(비정상적인 종료/기타 커널 패닉)을 일으키는 일이 발생했다고 가정해 보겠습니다. 따라서 파일 시스템의 현재 상태를 알 수 없습니다(부분적으로 기록됨 등). 그런 다음 fsck를 실행하면 손상(예: 유효하지 않은 블록)이 수정되고 파일 시스템은 이제~해야 한다최신 상태를 유지하세요. 내 파일 시스템이 최신 상태인지 어떻게 확인하나요?
일반적으로 나는 작성된 파일의 소스를 다시 확인하기 위해 diff나 dt를 사용합니다. 하지만 이 경우 파일에 쓴 이후에는 소스가 더 이상 존재하지 않는 것으로 가정합니다.
답변1
Fsck는 파일 시스템을 다음으로 반환합니다.마디 없는상태. 충돌 시 해당 상태가 손실될 수 있으므로 이것이 반드시 파일 시스템의 "최신" 상태는 아닙니다. 실제로 충돌 당시 절반만 작성된 파일이 있는 경우 파일 시스템이 일관된 상태에 있지 않은데, 이는 fsck가 수정하도록 설계된 것입니다. 즉, fsck를 실행한 후에는 파일 시스템이 최대한 최신 상태가 됩니다.
응용 프로그램이 충돌 시 디스크에 저장된 내용에 대한 피드백이 필요한 경우 파일에 쓰는 것 이상의 작업을 수행해야 합니다. 전화해야 해sync
, 또는 더 나은fsync
, 쓰기 작업 후 특정 쓰기가 디스크에 커밋되었는지 확인합니다(그러나 이 작업을 자주 수행하면 성능이 저하되고 데이터베이스 엔진으로 전환해야 합니다). 최대 충돌 생존(최대 속도 아님)을 위해 구성된 저널링 파일 시스템이 필요합니다.
수행된 작업(예: 디스크 쓰기)을 (시스템이 충돌하더라도) 실행 취소할 수 없는 속성을 호출합니다.내구성. 이게 그 중 하나야데이터베이스(ACID)의 4가지 기본 속성. 이 속성이 필요한 경우 다음을 읽어보세요.거래.
파일 시스템은 데이터베이스 유형이지만 일반적으로 ACID 속성과 잘 작동하지 않도록 설계되어 유연성을 강조합니다. 전용 데이터베이스 엔진을 통해 더 나은 내구성을 얻을 수 있습니다. 그런 다음 시스템이 아닌 디스크가 충돌하는 경우 어떤 일이 발생하는지 생각해 보세요. 높은 내구성을 위해서는 복제도 필요합니다.
답변2
-N은 실행되지 않고 수행할 작업만 표시합니다.
이번에도 다음을 수행하면 됩니다.shell> fsck -N /dev/sda1