ext4에서 fsck -p(preen)는 무엇을 합니까?

ext4에서 fsck -p(preen)는 무엇을 합니까?

파일 시스템 복구에 대한 블로그 게시물을 읽고 있었는데 작성자가 좋은 질문을 했습니다... fsck -p사람의 개입 없이 작은 오류를 자동으로 수정하는 것이 가능해야 합니다. 그러나 파일 시스템 조각 모음을 수행하라는 지시가 나오면 정확히 무엇을 수정합니까? 어떤 오류가 수정되며, 중지되고 사용자에게 대화형으로 fsck를 실행해야 한다고 알리는 원인은 무엇입니까? 일종의 체크리스트가 있나요?

-p나는 인터넷 검색을 했고 내가 찾은 것은 매뉴얼 페이지뿐이었습니다. 실제로 무엇이 수정될지 또는 무엇이 실습 플래그를 트리거할지 말하지 않습니다 . 저는 특히 ext4 파일 시스템에 관심이 있습니다.

답변1

귀하의 질문에 대한 답변은 e2fsck/problems.c이 파일 에 있습니다e2fsprogs소스 코드. 플래그를 찾는 것이 PR_PREEN_OK시작되어야 합니다.

발생할 수 있는 다양한 오류 조건이 있으므로 전체 오류 처리는 좀 더 복잡하므로 특정 상황이 우려되는 경우 코드를 자세히 살펴보는 것이 좋습니다. 그러나 아래 목록은 오류 조건에 대한 설명에서 가져온 것이며 대조 패턴의 효과에 대한 대략적인 아이디어를 제공합니다.

-p플래그가 지정되면 다음 오류/경고가 현재 자동으로 처리됩니다.

  • 리타겟팅 팁
  • 로그 인덱스 노드가 잘못되었습니다.
  • 로그 슈퍼블록이 손상되었습니다.
  • 슈퍼블록 has_journal 플래그가 지워졌지만 로그가 있습니다.
  • Superblock need_recovery 플래그가 설정되었지만 로그가 존재하지 않습니다.
  • 파일 시스템 개정이 0이지만 기능 플래그가 설정되어 있습니다.
  • 외부 슈퍼블록에 대한 슈퍼블록 힌트
  • 그룹 설명자 N은 초기화되지 않은 것으로 표시되며 기능 세트가 없습니다.
  • N-청크 비트맵이 초기화되지 않았지만 inode 비트맵이 사용 중입니다.
  • 그룹 설명자 N에 잘못된 사용되지 않은 inode 수가 있습니다.
  • 블록 비트맵의 마지막 세트는 초기화되지 않습니다.
  • test_fs 플래그가 설정되었습니다(그리고 ext4를 사용할 수 있습니다).
  • 마지막 마운트 시간이 미래입니다(가짜).
  • 마지막으로 작성된 시간이 미래입니다(조작됨).
  • 블록 그룹 체크섬(래치 문제)이 잘못되었습니다.
  • 루트 디렉터리에 dtime이 설정되어 있습니다.
  • 예약된 inode 모드 오류
  • 삭제된 inode의 dtime은 0입니다.
  • Inode가 사용 중이지만 dtime이 설정되어 있습니다.
  • 길이가 0인 디렉터리
  • Inode의 i_size가 올바르지 않습니다.
  • Inode에 잘못된 i_block이 있습니다.
  • 그룹의 잘못된 슈퍼 블록
  • 그룹의 잘못된 블록 그룹 설명자
  • 이유 없이 차단이 요청되었습니다.
  • 재배치 메타데이터에 대한 블록을 할당하는 중 오류가 발생했습니다.
  • 재배치 중 블록 버퍼 할당 오류
  • 메타데이터 그룹 정보를 X에서 Y로 재배치
  • 메타데이터 그룹 정보를 X로 재배치
  • 재배치 중 블록 읽기 오류
  • 재배치 중 블록 쓰기 오류
  • 장치 또는 소켓 inode에 설정된 불변 플래그
  • 0이 아닌 크기의 장치, fifo 또는 소켓 inode
  • 파일 시스템 개정이 0이지만 기능 플래그가 설정되어 있습니다.
  • 로그 inode는 사용되지 않지만 데이터를 포함합니다.
  • 다이어리 모드는 짜증나
  • 비HTREE 파일 시스템에서 INDEX_FL 플래그 설정
  • 디렉터리가 아닌 항목에 INDEX_FL 플래그 설정
  • HTREE 디렉터리의 루트 노드가 잘못되었습니다.
  • HTREE 디렉터리에서 지원되지 않는 해시 버전
  • HTREE 루트 노드의 비호환성 플래그
  • HTREE가 너무 깊음
  • 잘못된 inode->i_extra_isize
  • 잘못된 ea 항목->e_name_len
  • 잘못된 ea 항목->e_value_offs
  • 잘못된 ea 항목->e_value_block
  • 잘못된 ea 항목->e_value_size
  • 잘못된 ea 항목->e_hash
  • inode에 EXTENTS_FL이 없지만 익스텐트 inode입니다.
  • Inode는 EOFBLOCKS_FL을 설정하면 안 됩니다.
  • 디렉토리 항목이 삭제되었거나 사용되지 않은 inode
  • 카탈로그 파일 형식이 설정되지 않았습니다.
  • 파일 시스템에 설정된 디렉터리 파일 형식
  • HTREE 루트 노드가 유효하지 않습니다.
  • HTREE 한도가 잘못되었습니다.
  • 잘못된 HTREE 개수
  • 내부 노드 테이블의 HTREE 해시 값이 잘못되었습니다.
  • _INODE_UNINIT가 설정된 그룹에서 인덱스 노드를 찾습니다.
  • 그룹의 사용되지 않은 i-node 영역에서 i-node 찾기
  • i_blocks_hi는 0이어야 합니다.
  • /lost+found 찾을 수 없음
  • 연결되지 않은 길이가 0인 인덱스 노드
  • Inode 참조 카운트 오류
  • inode 비트맵 끝의 패딩이 설정되지 않았습니다.
  • 블록 비트맵 끝의 패딩이 설정되지 않았습니다.
  • 비트맵 차이 헤더 차단
  • 사용되지 않은 블록이지만 비트맵에 표시됨
  • 블록이 사용되었지만 비트맵에서는 사용된 것으로 표시되지 않았습니다.
  • 비트맵 차이 종료 차단
  • inode 비트맵 차이 헤더
  • 인덱스 노드는 사용되지 않지만 비트맵에 표시됩니다.
  • 인덱스 노드가 사용되었지만 비트맵에서 사용된 것으로 표시되지 않았습니다.
  • inode 비트맵 차이 끝
  • 그룹의 사용 가능한 inode 수가 잘못되었습니다.
  • 디렉터리 개수가 그룹 오류입니다.
  • 무료 inode 수 오류
  • 그룹의 무료 블록 수 오류
  • 무료 블록 수 오류
  • 블록 범위는 사용되지 않지만 비트맵에 표시됩니다.
  • 블록 범위가 사용되었지만 비트맵에서 사용된 것으로 표시되지 않았습니다.
  • inode 범위는 사용되지 않지만 비트맵에 표시되어 있습니다.
  • inode 범위가 사용되었지만 비트맵에서 사용됨으로 표시되지 않았습니다.
  • N개의 청크가 사용 중이지만 그룹은 BLOCK_UNINIT로 표시됩니다.
  • N개의 inode 그룹이 사용 중이지만 그룹이 INODE_UNINIT로 표시되어 있습니다.
  • E2F_FLAG_JOURNAL_INODE 플래그가 설정된 경우 저널을 다시 생성합니다.

-p이 플래그가 설정되어 있더라도 다음 오류 조건으로 인해 비대화형 fsck 프로세스가 종료될 수 있습니다.

  • 블록 비트맵이 그룹에 속하지 않습니다.
  • Inode 비트맵이 그룹에 속하지 않습니다.
  • 인덱스 노드 테이블이 그룹에 속하지 않습니다.
  • 파일 시스템 크기 오류
  • 슈퍼블록의 Inode 수가 올바르지 않습니다.
  • Hurd는 파일 형식 기능을 지원하지 않습니다.
  • 로그에 알 수 없는 슈퍼블록 유형이 있습니다.
  • 로그를 지워야 하는지 문의하세요.
  • 로그 슈퍼블록에 알 수 없는 읽기 전용 기능 플래그 세트가 있습니다.
  • 로그 슈퍼블록에 알 수 없는 호환되지 않는 기능 플래그가 설정되어 있습니다.
  • 저널 버전 번호는 지원되지 않습니다.
  • 저널을 게재해야 하는지 물어보세요.
  • resize_inode가 없는 예약된 블록
  • Resize_inode가 활성화되지 않았지만 inode 크기 조정이 0이 아닙니다.
  • inode 크기 조정은 효과가 없습니다.
  • 마지막 마운트 시간이 미래입니다.
  • 마지막으로 작성된 시간은 미래입니다.
  • 그룹 설명자 N 체크섬이 잘못되었습니다.
  • 루트 디렉터리가 inode가 아닙니다.
  • 블록 비트맵이 다른 fs 블록과 충돌합니다.
  • Inode 비트맵이 다른 fs 블록과 충돌합니다.
  • Inode 테이블이 다른 fs 블록과 충돌합니다.
  • 블록 비트맵이 불량 블록에 있습니다.
  • inode 비트맵이 불량 블록에 있습니다.
  • inode의 잘못된 블록 번호
  • 블록 번호가 fs 메타데이터와 겹칩니다.
  • inode에 잘못된 블록이 있습니다(래치 문제).
  • inode 불량 블록이 너무 많습니다.
  • 불량 블록 inode의 잘못된 블록 번호
  • 불량 블록 inode에 불법 블록이 있습니다(래치 문제)
  • 불량 블록이 불량 블록 간접 블록으로 사용됨
  • 불일치는 즉시 복구할 수 없습니다.
  • 메인 블록 오류 메시지
  • 메시지 프롬프트 비활성화
  • 파일 시스템이 지원하지 않는 경우 inode에 Imagic 플래그를 설정합니다.
  • 파일 시스템이 지원하지 않는 경우 inode에 압축 플래그를 설정합니다.
  • 고아 연결 목록의 일부인 인덱스 노드 처리
  • 손상된 고아 목록의 일부인 인덱스 노드 처리(래칭 문제)
  • 확장된 속성 블록을 읽는 중 오류가 발생했습니다.
  • 잘못된 확장 속성 블록
  • 확장 속성 참조 횟수가 잘못되었습니다.
  • 여러 EA 블록은 지원되지 않습니다.
  • 오류 EA 할당 충돌
  • 잘못된 확장 속성 이름
  • 잘못된 확장 속성 값
  • Inode가 너무 큼(래칭 문제)
  • 디렉토리가 너무 큼
  • 일반 파일이 너무 큼
  • 심볼릭 링크가 너무 큼
  • 불량 블록에는 파일 시스템 블록과 충돌하는 간접 블록이 있습니다.
  • inode 크기를 조정하지 못했습니다.
  • inode는 디렉토리인 것 같습니다.
  • 범위 트리를 읽는 중 오류가 발생했습니다.
  • 범위를 반복할 수 없습니다.
  • 범위 내 시작 블록 오류
  • 범위가 파일 시스템 범위를 초과합니다.
  • 비확장 파일 시스템에서 EXTENTS_FL 플래그 설정
  • inode에는 범위가 있고 수퍼블록에는 INCOMPAT_EXTENTS 기능이 없습니다.
  • Express 심볼릭 링크에는 EXTENTS_FL 세트가 있습니다.
  • 범위가 비정상적입니다.
  • Inode에 잘못된 범위 노드가 있습니다.
  • 중복/불량 블록을 복제하시겠습니까?
  • "."의 inode 번호가 잘못되었습니다.
  • 디렉토리 항목의 inode 번호가 잘못되었습니다.
  • 직접 항목은 "."에 연결됩니다.
  • inode를 가리키는 디렉토리 항목이 이제 잘못된 블록에 있습니다.
  • 디렉토리 항목에는 디렉토리에 대한 링크가 포함되어 있습니다.
  • 디렉토리 항목에는 루트 디렉토리에 대한 링크가 포함되어 있습니다.
  • 디렉토리 항목 이름에 잘못된 문자가 포함되어 있습니다.
  • 잃어버린'. '디렉토리 인덱스 노드에서
  • 디렉토리 inode에 ".."가 없습니다.
  • 디렉토리 inode의 첫 번째 항목에는 "."이 포함되어 있지 않습니다.
  • 디렉토리 inode의 두 번째 항목에는 ".."가 포함되어 있지 않습니다.
  • i_faddr은 0이어야 합니다.
  • i_file_acl은 0이어야 합니다.
  • i_dir_acl은 0이어야 합니다.
  • i_frag는 0이어야 합니다.
  • i_fsize는 0이어야 합니다.
  • inode 모드 오류
  • 디렉토리가 손상됨
  • 파일 이름이 너무 깁니다.
  • 디렉터리 inode 누락 블록(구멍)
  • '.'는 NULL로 끝나지 않습니다.
  • '..'은 NULL로 끝나지 않습니다.
  • 잘못된 문자 장치 인덱스 노드
  • 잘못된 블록 장치 inode
  • 복사'. '입구
  • 이중 입력
  • 최종 Rec_len 오류
  • 디렉터리 블록을 읽는 동안 오류가 발생했습니다.
  • 디렉터리 블록을 쓰는 중 오류가 발생했습니다.
  • "."에 대한 디렉토리 항목이 큽니다. 나뉘다?
  • 잘못된 FIFO 인덱스 노드
  • 잘못된 소켓 인덱스 노드
  • 카탈로그 파일 형식이 잘못되었습니다.
  • 디렉터리 파일 이름이 비어 있습니다.
  • 잘못된 심볼릭 링크
  • i_file_acl(확장 속성 블록)이 잘못되었습니다.
  • 파일 시스템에 대용량 파일이 포함되어 있지만 sb에는 해당 플래그가 없습니다.
  • 유효하지 않은 HTREE 디렉토리 지우기
  • htree 내부 노드의 불량 블록
  • 중복된 디렉터리 항목이 발견되었습니다.
  • 파일 이름이 고유하지 않은 것으로 확인되었습니다.
  • i_blocks_hi는 0이어야 합니다.
  • 예상치 못한 HTREE 블록
  • 루트 inode가 할당되지 않았습니다.
  • 분실물 보관소에는 자리가 없습니다
  • 연결되지 않은 디렉토리 inode
  • ..잘못된 입력
  • Lost + Found는 디렉터리가 아닙니다.
  • 연결되지 않은 inode
  • 슈퍼 블록 손상
  • 조각은 지원되지 않습니다.
  • 파일 시스템의 물리적 장치 크기를 확인하는 동안 오류가 발생했습니다.
  • 외부 로그에 (지원되지 않는) 여러 파일 시스템이 있습니다.
  • 외부 저널을 찾을 수 없습니다.
  • 외부 로그에 잘못된 슈퍼블록이 있습니다.
  • Superblock의 로그 UUID 오류
  • inode 비트맵을 할당하는 중 오류가 발생했습니다.
  • 블록 비트맵을 할당하는 중 오류가 발생했습니다.
  • icount 링크 정보를 할당하는 중 오류가 발생했습니다.
  • 디렉터리 블록 배열을 할당하는 중 오류가 발생했습니다.
  • inode를 스캔하는 중 오류가 발생했습니다.
  • 블록을 반복하는 중 오류가 발생했습니다.
  • inode 개수 정보를 저장하는 중 오류가 발생했습니다.
  • 디렉터리 블록 정보를 저장하는 중 오류가 발생했습니다.
  • inode를 읽는 동안 오류가 발생했습니다(삭제용).
  • 참조 계산 구조를 할당하는 중 오류가 발생했습니다.
  • 참조 카운팅 시 확장 속성 블록을 읽을 때 발생하는 오류 수정
  • 참조 카운팅 시 확장 속성 블록을 작성할 때 발생하는 오류 수정
  • EA 영역 할당 구조를 할당하는 중 오류가 발생했습니다.
  • inode를 스캔하는 중 오류가 발생했습니다.
  • inode 비트맵을 할당하는 중 오류가 발생했습니다.
  • 내부 오류: dir_info를 찾을 수 없습니다.
  • icount 구조를 할당하는 중 오류가 발생했습니다.
  • 디렉터리 블록을 순회하는 중 오류가 발생했습니다.
  • inode 할당을 취소하는 중 오류가 발생했습니다.
  • EA 참조 횟수를 조정하는 중 오류가 발생했습니다.
  • inode 비트맵을 할당하는 중 오류가 발생했습니다.
  • 루트 디렉터리를 생성하는 중 오류가 발생했습니다.
  • 루트 inode는 중단 디렉토리가 아닙니다.
  • 루트 inode가 없으면 계속 진행할 수 없습니다.
  • 내부 오류: dir_info를 찾을 수 없습니다.
  • 프로그래밍 오류: 비트맵 끝점 불일치
  • 내부 오류: 비트맵의 끝이 위조되었습니다.
  • 대체 inode 비트맵을 복사하는 중 오류가 발생했습니다.
  • 대체 블록 비트맵을 복사하는 중 오류가 발생했습니다.

관련 정보