목표: microSD 카드 포맷...
- 최고의 쓰기 성능을 위해
- 임베디드 Linux에서만 사용 가능
- 신뢰성 향상(무작위 정전이 발생할 수 있음)
- 64kB 클러스터 크기 사용
저는 임베디드 Linux/ARM 장치 내부의 데이터 저장을 위해 8GB microSD 카드를 사용하고 있습니다. SD 카드는 분리할 수 없습니다. 저는 사전 설치된 FAT32 대신 ext3을 사용해 왔습니다. 쓰기 중 무작위 정전을 더 잘 처리하는 것 같기 때문입니다. 그러나 저는 Kingston의 사전 설치된 FAT32를 사용할 때 쓰기 성능이 항상 최고라는 사실을 계속해서 확인했습니다. FAT32로 카드를 다시 포맷해도 성능은 여전히 저하됩니다. Wikipedia를 검색한 후 일부 카드가 특정 클러스터 크기에 최적화되어 있다는 다음 설명을 우연히 발견했습니다. 제 경우에는 Kingston이 64kB 클러스터 크기로 사전 포맷되어 제공됩니다.
다른 파일 시스템으로 또는 동일한 시스템으로 SD 카드를 다시 포맷하면 카드 속도가 느려지거나 수명이 단축될 수 있습니다. 일부 카드는 자주 수정되는 블록이 서로 다른 시간에 메모리의 다른 부분에 매핑되는 마모 평준화를 사용하며 일부 마모 평준화 알고리즘은 FAT16 또는 FAT32 장치의 파일 할당 테이블에 일반적인 액세스 패턴을 위해 설계되었습니다.[60] 또한 사전 포맷된 파일 시스템은 카드에 있는 물리적 메모리의 삭제 영역과 일치하는 클러스터 크기를 사용할 수 있습니다. 다시 포맷하면 클러스터 크기가 변경되어 쓰기 효율성이 떨어질 수 있습니다.
답변1
시중에 나와 있는 대부분의 SD 카드(및 USB 드라이브)는 FAT32와 함께 사용하도록 최적화되어 있습니다. 다른 FS와 함께 사용하면 성능이 저하될 수 있습니다.
자세한 내용은 다음을 참조하세요.LWN.
답변2
참고:SD 카드 연결 포맷 도구당신을 위해 다음을 수행합니다.
아직 모든 기기에 대한 완전한 답변은 없습니다. 그러나 FAT32를 사용하는 8GiB 카드에 대한 답변은 다음과 같습니다.
FAT32 파티션이 디스크 시작 부분에서 4MiB인 섹터 8,192에서 시작하도록 카드를 파티션합니다. 다음으로 FAT32 파티션을 32kiB 클러스터로 포맷하고 FAT32 파티션의 데이터 영역인 클러스터 2가 논리 섹터 8,192(또는 디스크 시작에서 8MiB(처음부터 4MiB))에서 시작하도록 "예약된 섹터" 수를 설정합니다. 파티션의).
Use 32kiB clusters
| 4MiB | 4MiB | remainder of disk |
| ------- | --------------------------------- | ------------------ |
| MBR | First Partition Header + FAT tables | First Partition Data |
요약 추론: SD 카드 협회는 이러한 4MiB 경계를 최적화된 영역으로 권장하고 FAT32를 이러한 크기의 카드에 대한 파일 시스템으로 권장합니다. 카드의 컨트롤러 칩은 두 번째 4MiB 영역의 작은 읽기/쓰기에 최적화되어 있습니다.
그보다 더 많은 것이 있지만 이것이 빠르고 더러운 대답입니다. 위 방법은 32kiB 클러스터의 경우 16GiB 미만, 64kiB 클러스터의 경우 32GiB 미만의 디스크에만 작동합니다. 디스크 크기가 커지면 데이터 영역이 논리적 8MiB로 푸시되는 것 같지만 사용할 8GiB보다 큰 디스크가 없습니다.