fsck가 fsck를하지 않음 (수퍼 블록 플래그를 설정할 수 없음)


12

SD 카드 기반 장치를 깨끗하게 종료 한 후 SD 카드를 fsck루트 파일 시스템으로 가져 왔습니다. 이로 인해 다음과 같은 변형이 발생했습니다.

e2fsck 1.43.1 (08-Jun-2016)
/dev/sdc2: recovering journal
Superblock needs_recovery flag is clear, but journal has data.
Run journal anyway<y>? no
Clear journal<y>? no
e2fsck: unable to set superblock flags on /dev/sdc2

여기서 나는 "아니오"라고 두 번 대답했지만 동일한 결과를 즉시 이끌어 내지 않는 예 / 아니오의 순서는 없습니다.

파일 시스템을 마운트 할 수 있으며 일반 검사시 정상적으로 나타납니다. 그것은 또한 장치에서 잘 작동하며 루트 파일 시스템입니다 (실제로는 좋지 않습니다. 주석 참조; 복구 할 수없는 손상된 디렉토리).

나는 dd'그에있는 파일에 파티션 (8 GB), 그리고 노력으로 fsck를 거라고. 재미있게:

e2fsck 1.43.1 (08-Jun-2016)
plush.rootfs: recovering journal
Clearing orphaned inode 18290 (uid=0, gid=0, mode=0100644, size=34096)
Clearing orphaned inode 18270 (uid=0, gid=0, mode=0100644, size=38916)
Clearing orphaned inode 18250 (uid=0, gid=0, mode=0100644, size=1128076)
Clearing orphaned inode 11411 (uid=0, gid=0, mode=0100644, size=293108)
Setting free inodes count to 406127 (was 408580)
Setting free blocks count to 1305622 (was 1347486)
plush.rootfs: clean, 60209/466336 files, 604906/1910528 blocks (check after next mount)

이후에 fsck깨끗하게 통과하면 이미지를 마운트 할 수 있으며 fsck -f그 후에도 통과됩니다.

그러나 원시 블록 복사 이미지가 작성된 카드 systemd-fsck의 파일 시스템은 부팅시 발생하는 파일 시스템이 파일 시스템을 "깨끗한"것으로 기록 한다는 점을 제외하고는 여전히 동일한 문제점 을 가지고 있습니다. 그 후, 올바르게 종료하고 카드를 꺼내고 fsck다른 상자에서 다시 시도 하면 동일한 오류가 발생합니다.

원본이 다른 시스템에 마운트 될 때마다 syslog는 다음을 참고합니다.

kernel: EXT4-fs (sdc2): 4 orphan inodes deleted
kernel: EXT4-fs (sdc2): recovery complete

모두 백업 했으므로 여기서 시도해 볼 수 있습니다. 나는 이것을 잊어 버리고 분명히 수정 된 이미지에서 파티션을 다시 태울 수는 있지만 fsck가 사소한 문제를 해결하는 데 암호 적으로 실패했다고 가정하기 때문에 매우 만족스러운 해결책처럼 보이지 않습니다.

나는 이것이 recovery_flag (또는 "이것은 무엇을 의미 하는가?"라는 질문) 와 같은 것들에 관한 "공식 문서에 대한 요청"질문으로 바뀔 것으로 의심 되므로, 그 라인에 따른 제안은 높이 평가된다.


커널에 장치 오류에 대한 로그가 있습니까? SD 카드가 갑자기 읽기 전용이 된 것은 이번이 처음이 아닙니다.
Mark Plotnick

@MarkPlotnick 아니오, 쓰기 가능합니다. 문제가 발생하기 전의 마지막 로그 기록은 시스템을 다시 시작하는 것이 었습니다 (장치는 헤드리스이며 오랫동안 반응이 없었습니다 apt upgrade). 그 후 정상적인 부팅을 기록하고 systemd-fsck는 "clean"이라고 말하지만 (그것을 편집하겠습니다) 해당 컨텍스트 외부에서 fsck를 시도해도 여전히 실패합니다.
goldilocks

사본에서 fsck는 4 개의 inode를 제거했지만 2453 inode로 줄임으로써 무료 inode 수를 수정했습니다! 엄청나 다. 장치에 충분한 전원이 공급되고 있는지 확인하십시오.
meuh

@meuh 큰 상자에 마운트 될 때마다 syslog는 4 개의 inode (위에서 편집)를 나타냅니다. fs의 일부 내용이 엉망이 된 것으로 판명되었습니다 (커널 모듈 업데이트! \ O /). 새로운 카드를 태 웠고 더 많은 것을 알아볼 수있는 경우를 대비하여 이전 카드에 매달릴 것입니다. 그것은 완전히 새로운 것이 아닙니다. 브랜딩되지 않은 바겐 세일 클래스 10 카드는 몇 년 동안 연중 무휴로 사용되므로 SD 카드가 결정적으로 손상되지 않았 음을 확인할 방법이 없다고 생각합니다 그러나 그럴 수 있다고 생각합니다. 전원은 정상이지만 특정 조건에서는 문제가 없을 수 있습니다.
goldilocks

2
문제를 해결해야 할 도구가 문제의 본질 때문에 작동하지 않을 때 정말 짜증나 지 않습니까? 결론 : 도구가 잘못되어 수정해야합니다.
Marc.2377

답변:


11

나는이 같은 문제에 부딪쳤다. e2fsck관리자 와의 문제를 디버깅 한 후 SD 카드가 손상되었음을 알았습니다. 오류없이 쓰기를 수락했지만 실제로 데이터를 카드에 쓰는 것은 아닙니다. SD 카드는 실제로 읽기 전용입니다.

카드가 데이터를 읽을 수는 있지만 쓸 수없는 일종의 비상 안전 모드로 전환 된 것 같습니다.

e2fsck메시지 unable to set superblock flags는 오류없이 발생한 저널을 처리 된 것으로 표시하기 위해 수퍼 블록에 쓰려고 시도했지만 다시 수퍼 블록을 다시 읽었을 때 저널을 재생해야한다는 것을 나타냅니다. 즉, 수퍼 블록에 기록 된 변경 내용은 저장 매체에 저장되지 않았습니다.

내가 사용하는 카드 에이 문제가있는 것은 Samsung Evo 16GB microSD입니다.이 카드에 일반적인 문제 일 경우를 언급합니다.

나는 블록 0에서 카드에 dd4096 바이트를 쓰는 데 사용하여 이것을 테스트 할 수 있었고 /dev/zero, 카드에서 다시 읽었으며, 필요한대로 0을 얻는 대신 원래의 변경되지 않은 ext4 수퍼 블록을 얻었습니다.

데이터를 새 카드로 옮긴 다음 SD 카드에 대해 10 년 보증을 제공하는 삼성으로부터 교체품을 구입할 수 있는지 확인하는 중입니다.

업데이트 : 삼성은 동일한 Evo 시리즈에서 16GB 카드를 32GB 카드로 교체 했으므로 너무 불평 할 수 없다고 생각합니다!


"데이터는 여전히 읽을 수 있지만 아무것도 기록되지 않았습니다" -> fs는 쓰기 가능했습니다.
goldilocks

@goldilocks : fs 수퍼 블록과 같은 소리는 쓰기 가능하지 않을 수 있습니다. 또한 캐싱 덕분에 fs가 쓰기 가능한 것처럼 보였습니다. 마운트를 해제 한 후 다시 마운트 한 후에 만 ​​변경 사항이 손실되었습니다.
Malvineous

캐싱으로 인한 환상은 아닙니다.
goldilocks

7

나는 이것이 오래된 스레드라는 것을 알고 있지만 통찰력을 제공 할 것이라고 생각했습니다.

이것은 sd 카드가 자연스럽게 죽는 방식 인 것 같습니다. sd 카드가 견딜 수있는 읽기 / 쓰기주기 수는 '읽기 / 쓰기'로 간주되는 대부분의 다른 매체보다 상당히 적습니다. 그것이 소진되면 카드는 읽기 전용 모드로 들어가지만 그러한 정보는 알려주지 않습니다. OS 캐싱 등 덕분에 많은 것들이 카드에 쓰고 있다고 생각하지만 아무것도 붙어 있지 않습니다.

sd 카드를 죽이는 가장 좋은 방법은 스왑 파티션 또는 매우 읽기 / 쓰기가 많은 무언가로 마운트하는 것입니다. 그렇게 빨리 카드를 죽일 수 있다는 사실에 놀랄 것입니다. sd 카드 또는 USB 썸 드라이브에서 knoppix를 실행하면 카드의 품질과 knoppix 사용법의 강도에 따라 한 달 또는 두 달만 지속됩니다. (그 후 몇 년 동안 지속 된 USB SSD 드라이브에서 knoppix를 실행하도록 전환했습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.