2024년 6월 7일 금요일

긴파일명(LFN) 사용 시 주의 사항

오리지널 MSX 유저라면 아마 나이가 40대 후반에서 50대,60대 정도일겁니다.


최근에 MSX를 접하신 30대 분들이라면, 아마 태어나셨을 때 MSX가 단종되었을거에요.

아마 처음 접하신 PC도 윈95가 설치된 PC가 아닐까 싶으네요.


이제 MSX-DOS, MS-DOS에서 사용되는 디렉토리, 파일명에 대한 얘기를 한번 꺼낼 시기가 된 것 같습니다.


.

.

.


MSX-DOS, MS-DOS를 쓰다가 윈95를 처음 쓸 때 기억하시나요? ㅎ.ㅎ

기존 FAT에 긴파일명(LFN)을 쓸 수 있게 되었는데, VFAT이라고 불렀습니다.


디렉토리 엔트리는 32바이트의 파일 또는 서브 디렉토리로 구성됩니다.

기존 FAT에서는 파일/서브 디렉토리는 하나의 엔트리였지만,

VFAT에서는 긴파일명(LFN) 표시를 위해 여러개의 엔트리를 사용하여 표시합니다.

파일명이 길수록 더 많은 엔트리를 소모하는 식이죠.


VFAT을 지원 못하는 OS에서는 LFN 엔트리가 보이지않고 기존 8.3 짧은 파일명으로 인식됩니다.

따라서 8.3 파일명으로 데이터를 읽는데에는 아무런 문제가 없습니다.

그냥 볼륨+시스템+히든 속성의 이상한(?) 파일들이 잔뜩 있는 것으로 인식되는 것 뿐이욤 ㅎ.ㅎ


근데, 여기서 주의해야될 부분이 한가지 있는데요.

VFAT을 지원하는 OS에서는 LFN으로 저장된 파일을 삭제, 이동 등의 작업 시 연결된 엔트리들이 함께 처리됩니다.

만약 VFAT을 지원하지 않는 프로그램 또는 OS에서 디스크작업을 하게 되면. 연결된 LFN 엔트리가 손상되어 쓰레기로 남습니다.

결국, MSX-DOS/DOS2 및 구버전 MS-DOS에서 쓰이던 디스크관련 프로그램을 쓰면 안된다는 얘기죠.



음...

LFN 얘기를 처음 들으셨으면, '그럼 파일명을 8.3 포맷으로 짧게 해주면 되겠네'라고 생각하실 수도 있는데요.

원래 FAT에서는 파일명이 항상 대문자로 저장됩니다. 따라서 파일명에 소문자가 섞여있으면 무조건 LFN으로 바뀌게 됩니다요.



그럼, MSX용 디스크에 LFN 파일을 넣고 MSX-DOS2에서 파일 삭제를 하면 어떤 결과가 나오는지 한번 테스트해보겠습니다~


아래처럼 문자수는 8.3 포맷으로 짧게 보이지만, 소문자가 섞여있는 LFN 파일 2개를 MSX 디스크에 복사합니다.




M 파일매니저에서는 아래처럼 긴파일명으로 인식이 되는 것을 볼 수 있어요.




그럼, 파티션을 덤프해서 실제 디렉토리 엔트리가 어떻게 저장이 되는지 봅시다.

일반 파일들은 32바이트 엔트리로 저장되는데, 해당 LFN 파일은 각각 64바이트로 저장된 것을 확인할 수 있어요.

LFN은 빨간색으로 표시했습니다.




그럼, Ys3(k).DSK 및 Ys3(k).USR 두개 파일을 삭제해봅시다. 물론 MSX에서 삭제해야겠죠?

파일이 삭제되면 각 엔트리의 첫 바이트가 E5H로 변경이 됩니다.

근데 아래 스샷에서 여전히 원래값 41H로 시작하는 엔트리가 보이시죠?

MSX-DOS2는 저 엔트리가 연결된 하나의 파일이라고 인식을 못하기 때문에 그냥 둔거에요.




이 손상된 드라이브는 윈도에서 CHKDSK /F 명령으로 쉽게 수정을 할 수 있습니다.




수정 후 덤프해보면 아래처럼 모두 삭제된 엔트리를 볼 수 있어요.




.

.

.


그리고, 보너스입니다.


윈도10 이후에서는 모든 드라이브에 'System Volume Information'이라는 긴이름의 폴더가 생성됩니다.

이동식 드라이브도 마찬가지구요.


만약 MSX에서 쓰이는 디스크를 윈도에 연결(마운트)하게 되면, 해당 LFN 폴더가 생성이 됩니다.

이 폴더를 지우지않고 MSX에서 그대로 사용하면, 이 폴더가 MSX-DOS2에서는 볼륨명으로 인식이 됩니다요~ ㅎ.ㅎ


원래 LFN 엔트리는 속성(Attribute) 값이 0FH가 되는데, 기존 FAT에서는 이런 파일이 없습니다.

그래서 Volume label + System + Hidden + Read-only 모든 속성을 켜서 LFN 인식으로 쓰는 꼼수를 쓴거죠.

그리고 LFN 엔트리들은 별도의 연결 리스트를 사용하지 않습니다. 단지 여러개 엔트리가 연속으로 설정되도록 되어있어요.


암튼 MSX-DOS2에서 이 엔트리를 볼륨명으로 인식하게 되면서, "B "로 볼륨명이 표시되는 현상이 있습니다.

아래 덤프된 엔트리를 보시면 왜 그런지 이해되시죠?

96바이트의 LFN 엔트리의 첫 부분이  42H, 20H, 00H 값으로 시작됩니다. Volume label 속성이니 이걸 걍 볼륨명으로 인식한거죠.




제가 만든 M 파일매니저에서는 볼륨명을 읽을 때 LFN은 무시하도록 되어있어서 이런 현상은 나오지않습니다. 참고하셔요.


그럼, 이만...


댓글 없음:

댓글 쓰기