FAT32에 당하다

양동찬 서버 백업을 내 외장하드에 테스트해서 풀던 중 특정한 파일에서 오류가 났다. LANG=ko_KR.EUCKR 이라는 환경 변수를 줘 보아도 파일 이름이 깨지는 것은 계속 일어났다. 그 파일들은 UTF-8 시스템에 비정상적으로 업로드된 인코딩이 EUC-KR인 파일들이었고, 그게 외장하드에서 문제가 되었다. FAT32 파일 시스템의 문자 범위 제한 때문인지 모르겠지만 계속 파일을 열 수 없다는 오류 덕분에 복구가 힘든 줄 알았다.

그런데 scp를 통해서 백업 파일들을 서버에 복사한 다음 서버에서 tar xvf를 시도해 보았다. 멀쩡하게 잘 풀린다? 그 다음 convmv 시켜서 인코딩을 원위치시킨 다음 처리를 끝냈다. 태터툴즈 DB는 가상 서버 안에서 sql을 복사해 오는 것으로 끝났다. 좀 일이 어이없이 돌아가는 것 같았다. 그게 무슨 일인지 궁금해서 좀 뒤져 보았다.

예상대로 위키백과가 답을 주었다. 일부 ASCII 문자열들이 FAT에서는 제어 문자로 사용되고 있었고 파일 이름 문자로 사용될 수 없었다. 아마 비정상적인 UTF-8 시퀀스를 처리하면서 이런 문자를 쓰려고 시도를 했고, 그 결과 읽을 수 없는 파일 이름이 나온 것 같다. 정상적인 UTF-8 시퀀스라면 이런 일이 없을 것 같은데 말이다. 서버의 파일 시스템은 XFS였고, XFS에는 특별히 이런 제어 문자 제한이 없었던 것 같다. 그 덕분에 정상적으로 파일 압축을 풀 수 있었다.

뭐 결론은 convmv를 통해서 끝냈다. 하여간 꽤나 재미있는 삽질이었다.

2 thoughts on “FAT32에 당하다

  1. nidev

    reiserfs에 윈도우를 쓸 수 있으면 참 좋겠다는 생각이;
    여하튼…
    ntfs-3g + fuse 패키지가 나온후로, 윈도우쪽 파티션은
    무조건 ntfs입니다. 🙂

    1. peremen

      전번에는 저희 학교에 누군가 외장하드가 인식이 안 된다길래 살펴보니 NTFS 저널 이상. OTL. 하여간 ntfs-3g가 더 안정화되기 전까지는 윈도와의 공용 파티션은 FAT를 유지할 것입니다.

      과연 다음 포맷 때는 /home을 ReiserFS로 해야 할까나… 아니면 XFS로 해야 할까나…

Comments are closed.