파일 시스템 /home/user/me
의 메타데이터 에 하드 드라이브 불량 섹터가 발생하면 ext4
모든 하위 디렉터리 데이터가 손실된다는 의미입니까?
배경:
나는 ext4 파일 시스템에 만족하고 데이터 손실 위험이 증가한다고 주장하면서 "최근" 개발된 대안(예: BTRFS)으로 변경할 의향조차 없는 많은 사용자를 알고 있습니다. 실제로 ext4의 코드가 오늘날 쯤에 있다는 점을 고려하면 몇 가지 결과를 찾을 수 있습니다.곤충 이야기.
이 소개를 통해 내 질문은 다음과 같습니다.
ext4
블록 장치의 불량 섹터에 대한 파일 시스템의 저항력은 얼마나 됩니까? 불량 섹터는 4K 바이트를 소모할 수 있으며, /home/user/me
해당 4K가 디렉토리 구조(예: 디렉토리)에서 더 높은 위치에 있는 일부 디렉토리 정보를 먹어치우면 "대혼란"을 일으킬 것 같습니다.
나는 슈퍼블록에 대해 알고 있습니다(보다 기본적인 정보 소스는 ext4에 중복 형식으로 유지되므로 불량 블록이 그곳에서 복구될 수 있다고 상상하지만 자동으로 감지될지는 확실하지 않습니다)
그래서 내 질문은 다음과 같습니다ext4는 메타데이터에서 불량 블록 누락을 방지합니까?
나는 데이터/파일 콘텐츠의 불량 블록이 항상 해당 512/4K 섹터의 손실을 의미한다는 것을 알고 있습니다(그러나 나는 해결책으로 parchive를 사용합니다).
답변1
해당 문제에 대해 약간의 조사를 거친 후" ext4
블록 장치의 읽기 오류를 처리할 수 있는 경우"내 초기 결론은 다음과 같습니다.ext4에는 부분 중복만 존재합니다.
다음은 내가 "조사"한 ext4
"보안 기능"에서 발견한 몇 가지 사항 입니다.Ext4 위키그리고
"EXT4 파일 시스템의 Inode 구조")
- 몇 가지 예외를 제외하고는 다음과 같습니다.인라인 데이터또는인라인 데이터
ext4
파일 콘텐츠 "데이터 블록"과 파일 시스템 "메타데이터 블록"을 각각 저장합니다. 내가 아는 한,ext4
후자에만 약간의 수리/중복이 필요합니다. - 메타데이터 수정/중복은 a) 2010년에 도입/추가된 새로운 항목에 의존합니다.체크섬 기능b) 여분의 사본을 가지고주요 메타데이터
- 그런"주요 메타데이터"(블록 장치의 다른 부분이라는 의미에서) 그렇습니다.
ext4
슈퍼블록- 정보
block group descriptors
.
- 체크섬슈퍼블록, 다중 마운트 보호, 확장된 속성, 디렉터리 항목, HTREE 노드, 확장, inode 및 그룹 설명자를 보호합니다. 범위가 지정된(따라서 보호되는) 새
ext4
기능은 기존 IBA(간접 블록 주소 지정)를 부분적으로 대체하지만 아래 설명과 같이 기존 IBA 블록은 보호되지 않습니다.[IBA] 블록이 쓰레기로 가득 차 있지 않다는 어떤 수준의 신뢰도를 제공하는 매직 넘버나 체크섬도 없다는 점에 유의하십시오.
읽을 수 없는 디스크 섹터(512/4K)에서 ext4가 복구할 수 있는 것
- 손실슈퍼블록그리고블록 그룹 설명자, 중복 복사본은 전체/또는 일부 특정 블록 그룹의 디스크에 저장됩니다.
- 읽을 수 없는 섹터로 인해 디렉터리 항목이 손실된다는 것은 액세스가 불가능하다는 의미는 아니지만 디렉터리에 저장된 파일의 내용이 손실된다는 의미이기도 합니다(파일 이름만 손실됨). 이러한 파일(하위 디렉터리 포함)은 해당 파일
filespec
<inode-number>
을 통해 계속 액세스할 수 있습니다debuge2fs
. - 부품이 없습니다
inode table
. 각 항목인덱스 노드 테이블ext4
( 디스크 레이아웃을 구성하는 블록 그룹 으로 분할되어 기록되는 테이블 부분 )은 256바이트(패딩)를 차지합니다. 따라서 읽을 수 없는 섹터가 하나 있다는 것은 2~16개의 파일만 손실된다는 의미입니다. 게다가,체크섬기능적 inode 테이블의 모든 손상은 수정 가능해야 하지만 반드시 수정할 수는 없지만 무시해서는 안 됩니다.
ext4
예방이 불가능해 보이는 불량 섹터로 인해 발생하는 문제는 무엇입니까 ?
- inode, 디렉터리 항목, 범위 등 중요하지 않은 메타데이터는 IBA로 보호되지 않습니다.
- 인덱스 노드: 앞서 언급했듯이 inode는 256바이트를 차지하며 파일 데이터를 구성하는 블록에 대한 핵심 핸들입니다. 즉, 2~16개의 파일에 대한 액세스가 손실됩니다(주로 파일 크기와 무관).
- 디렉토리 항목:불량 섹터로 인해 누락된 경우 내부의 모든 파일의 파일 경로에서 파일 이름 부분이 누락되었음을 의미합니다. 한편, 불량 섹터의 크기는 512 또는 4K 바이트이며 디렉터리 해싱 기능이 차지하는 파일 이름과 공간이 손실 정도에 영향을 미칩니다. 또한 내가 이해한 바에 따르면 디렉터리 해싱은 본질적으로 중복성을 제공합니다(그러나 이를 보장할 수는 없습니다).
- 범위: inode 자체의 손실과 같은 범위 트리의 일부 정보 손실은 파일 내용을 구성하는 데이터 블록에 대한 액세스에 영향을 미치므로 약 1개의 파일이 손실됩니다.
- IBA 블록: (범위 참조) + 언급한 바와 같이 부분적 손상에 대한 취약성도 증가합니다(그러나 이것이 질문의 주요 초점은 아닙니다).
또 다른 사용 방법
불량 섹터에 대한 저항과 관련하여 디스크 레이아웃의 열거된 과제 중 일부를 테스트하고 시연하려면 ext4
다음 도구가 유용합니다.
debugfs <blockdev>
filespec(문제가 있는 경우 파일 경로 또는 inode 번호< >
) 을 통해 파일에 액세스할 수 있습니다.truncate
,dd
,losetup
,mount
그리고 사용할 파일 시스템을mkfs.ext4
생성합니다 .ext4
dumpe2fs
,tune2fs
정보를 제공하다dm-setup
다음과 같이 읽기 오류를 시뮬레이션하는 가상 블록 장치를 조립합니다.$> dmsetup 생성 badsectordevice << EOF 0 2902 선형/개발/루프1 0 2902 2 오류 2904 17576 선형/개발/루프1 2904 EOF
이 예에서는 블록 장치 섹터가 512이고ext4
블록 크기가 1024이므로 LBA 섹터 2902, 2903을 읽을 수 없음을 보여줍니다.