Linux OS에서 SD 카드를 포맷하고 모든 문제를 마술처럼 해결하는 방법은 무엇입니까?
FreeRTOS 및 FAT-FS를 실행하는 STM32가 있습니다.
내 SD 카드가 손상되어 FAT-FS가 이에 대해 아무 조치도 취할 수 없을 때 Linux를 통해 SD 카드를 포맷하자 모든 것이 다시 작동하기 시작했습니다.
Linux에서 SD 카드를 포맷하는 방법은 무엇입니까?
FAT-FS는 물리적 오류(드라이버 수준 오류이므로 기본적으로 SD 내부의 uC가 예상대로 응답하지 않음)가 있음을 의미합니다.
답변1
나는 오래된 휴대폰을 가지고 있다. SD 카드에 쓰도록 놔두면 배드 섹터가 기록되는 경우가 있습니다. 배터리가 부족하고 휴대폰이 SD 카드의 표준 전기 요구 사항을 충족할 수 없기 때문에 이런 일이 발생하는 것으로 의심됩니다.
최신 블록 장치에서는 잘못된 논리 블록이 반복적으로 읽히지 않을 수 있지만(체크섬 불일치) 새 콘텐츠가 성공적으로 기록되면 "수정"됩니다. 휴대폰에서 SD 카드가 손상되었을 때 제가 해야 할 일은 카드를 다시 포맷하는 것뿐이었습니다. 모든 블록을 다시 작성할 필요도 없습니다("전체 포맷"이라고도 함). 다시 포맷하는 동안과 후에 파일 시스템은 아직 기록되지 않은 블록을 읽지 않습니다(그렇게 할 이유가 전혀 없습니다).
이 접근 방식에는 몇 가지 위험이 있습니다. 장치가 실제로 영구적으로 손상될 수 있으며 포맷 후 일정 시간이 지나면 문제가 다시 발생합니다. 이것이 문제인 경우 가장 안전한 방법은 장치나 파티션을 포맷하기 전에 어떤 방식으로든 테스트하는 것입니다. (역사적으로는 이를 사용해야 badblocks
하지만 지금은 얼마나 좋은지 잘 모르겠습니다.)
파일 블록이 손상된 경우 파일을 삭제하거나 덮어써서 복구할 수 있습니다. 문제는 파일 시스템의 내부 구조에 불량 블록이 있는 경우입니다. 일반적으로 파일 시스템에는 기본 초기 상태로 재설정하는 코드가 포함되어 있지 않습니다. 데이터가 자동으로 손실될 위험이 너무 높습니다. 따라서 오류가 지속됩니다. 일부 파일 시스템 검사기는 불량 블록을 재설정할지 묻는 메시지를 표시할 수 있습니다.
(참고: 특히 Linux에서 파일 시스템을 삭제하고 특정 유형의 복구를 구현하지 않았다고 말한 fsck.vfat
파일 시스템이 몇 개 있었습니다 . Windows 버전의 파일 시스템이 좀 더 포괄적인 것으로 생각됩니다.)
일부 파일 시스템은 특정 구조를 재설정하지 않고도 복원하기 위해 중복 복사본 사용을 지원할 수 있습니다. FAT 파일 시스템은 예를 들어 Linux에서 복구에 사용할 수 있는 두 개의 중복 FAT로 실행되는 경향이 있습니다 fsck.vfat
. Ext4는 중복된 "수퍼블록"을 많이 유지하는 경향이 있습니다.
나는 btrfs 및 ZFS와 같은 파일 시스템이 다른 장치에 있는 모든 메타데이터의 중복 복사본을 유지하고 실행 중인 동안 복구하도록 구성할 수 있다는 것을 이해합니다.
[이 댓글에서 확장됨:커널 추적을 통해 오류가 발생한 SD 카드의 상태를 정의하시겠습니까?]