Linux에서 FAT12 fs에 긴 이름의 파일을 생성할 수 있는 이유는 무엇입니까?

Linux에서 FAT12 fs에 긴 이름의 파일을 생성할 수 있는 이유는 무엇입니까?

저는 운영 체제를 작성 중이며 FAT12 파일 시스템을 읽도록 노력하고 있습니다. 따라서 일부 파일이 포함된 FAT12 디스크 이미지를 읽어야 합니다.

FAT12 이미지를 만들기 위해 빈 .img 파일을 만든 다음 mkfs.fat -F12이를 사용하여 파일 시스템을 만들었습니다. 루프백 장치를 사용하여 마운트하면 lsblk --fsFSVER=FAT12인 vfat 파일 시스템임을 알려주므로 이는 효과가 있는 것 같습니다. 왜 vfat이라고 말하는지 잘 모르겠지만, 그렇지 않아야 하기 때문에 lsblk가 FAT12를 해당 버전으로 올바르게 제공하기 때문에 이것이 fat12에 대해 말하는 것이라고 가정합니다.

어쨌든, 내가 아는 바로는 FAT12 파일 시스템의 파일 이름은 이름에 8자 + 확장자에 3자여야 하므로 .img를 마운트한 후 FILE.TXT라는 파일을 생성해 보았는데 예상대로 작동합니다. 그런 다음 longfilename.longextension이라는 파일을 만들어 보았는데 놀랍게도 이 작업이 가능해졌습니다!

해당 파일 이름이 어떻게 저장되는지 살펴보기 위해 xxd에서 .img 파일을 열었습니다. 실제로는 그것이 가능하지 않다고 생각하지만 전체 긴 파일 이름을 저장하고 있습니다.

다음은 0이 아닌 모든 .img입니다.

00000000: eb3c 906d 6b66 732e 6661 7400 0210 1000  .<.mkfs.fat.....
00000010: 0200 0200 80f8 1000 2000 4000 0000 0000  ........ .@.....
00000020: 0000 0000 8000 29d7 c938 d44e 4f20 4e41  ......)..8.NO NA
00000030: 4d45 2020 2020 4641 5431 3220 2020 0e1f  ME    FAT12   ..
00000040: be5b 7cac 22c0 740b 56b4 0ebb 0700 cd10  .[|.".t.V.......
00000050: 5eeb f032 e4cd 16cd 19eb fe54 6869 7320  ^..2.......This 
00000060: 6973 206e 6f74 2061 2062 6f6f 7461 626c  is not a bootabl
00000070: 6520 6469 736b 2e20 2050 6c65 6173 6520  e disk.  Please 
00000080: 696e 7365 7274 2061 2062 6f6f 7461 626c  insert a bootabl
00000090: 6520 666c 6f70 7079 2061 6e64 0d0a 7072  e floppy and..pr
000000a0: 6573 7320 616e 7920 6b65 7920 746f 2074  ess any key to t
000000b0: 7279 2061 6761 696e 202e 2e2e 200d 0a00  ry again ... ...
000000c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
000001f0: 0000 0000 0000 0000 0000 0000 0000 55aa  ..............U.
00000200: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
00002000: f8ff ff00 f0ff ffff ffff ffff 0000 0000  ................
00002010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
00004000: f8ff ff00 f0ff ffff ffff ffff 0000 0000  ................
00004010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
00006000: 412e 0054 0072 0061 0073 000f 00e4 6800  A..T.r.a.s....h.
00006010: 2d00 3100 3000 3000 3000 0000 0000 ffff  -.1.0.0.0.......
00006020: 5452 4153 482d 7e31 2020 2010 0011 8c7d  TRASH-~1   ....}
00006030: 3952 3952 0000 8c7d 3952 0400 0000 0000  9R9R...}9R......
00006040: 4649 4c45 2020 2020 5458 5420 0071 aa7e  FILE    TXT .q.~
00006050: 3952 3952 0000 aa7e 3952 0300 0e00 0000  9R9R...~9R......
00006060: 426c 006f 006e 0067 0065 000f 00c8 7800  Bl.o.n.g.e....x.
00006070: 7400 6500 6e00 7300 6900 0000 6f00 6e00  t.e.n.s.i...o.n.
00006080: 016c 006f 006e 0067 0066 000f 00c8 6900  .l.o.n.g.f....i.
00006090: 6c00 6500 6e00 6100 6d00 0000 6500 2e00  l.e.n.a.m...e...
000060a0: 4c4f 4e47 4649 7e31 4c4f 4e20 0022 f47e  LONGFI~1LON .".~
000060b0: 3952 3952 0000 f47e 3952 0700 1400 0000  9R9R...~9R......
000060c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
0000c000: 4865 6c6c 6f2c 2077 6f72 6c64 210a 0000  Hello, world!...
0000c010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
0000e000: 2e20 2020 2020 2020 2020 2010 0011 8c7d  .          ....}
0000e010: 3952 3952 0000 8c7d 3952 0400 0000 0000  9R9R...}9R......
0000e020: 2e2e 2020 2020 2020 2020 2010 0011 8c7d  ..         ....}
0000e030: 3952 3952 0000 8c7d 3952 0000 0000 0000  9R9R...}9R......
0000e040: 4169 006e 0066 006f 0000 000f 00fb ffff  Ai.n.f.o........
0000e050: ffff ffff ffff ffff ffff 0000 ffff ffff  ................
0000e060: 494e 464f 2020 2020 2020 2010 0011 8c7d  INFO       ....}
0000e070: 3952 3952 0000 8c7d 3952 0500 0000 0000  9R9R...}9R......
0000e080: 4166 0069 006c 0065 0073 000f 0079 0000  Af.i.l.e.s...y..
0000e090: ffff ffff ffff ffff ffff 0000 ffff ffff  ................
0000e0a0: 4649 4c45 5320 2020 2020 2010 0011 8c7d  FILES      ....}
0000e0b0: 3952 3952 0000 8c7d 3952 0600 0000 0000  9R9R...}9R......
0000e0c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
00010000: 2e20 2020 2020 2020 2020 2010 0011 8c7d  .          ....}
00010010: 3952 3952 0000 8c7d 3952 0500 0000 0000  9R9R...}9R......
00010020: 2e2e 2020 2020 2020 2020 2010 0011 8c7d  ..         ....}
00010030: 3952 3952 0000 8c7d 3952 0400 0000 0000  9R9R...}9R......
00010040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
00012000: 2e20 2020 2020 2020 2020 2010 0011 8c7d  .          ....}
00012010: 3952 3952 0000 8c7d 3952 0600 0000 0000  9R9R...}9R......
00012020: 2e2e 2020 2020 2020 2020 2010 0011 8c7d  ..         ....}
00012030: 3952 3952 0000 8c7d 3952 0400 0000 0000  9R9R...}9R......
00012040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
00014000: 5468 6973 2069 7320 6120 6c6f 6e67 2066  This is a long f
00014010: 696c 650a 0000 0000 0000 0000 0000 0000  ile.............
00014020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
*
00fffff0: 0000 0000 0000 0000 0000 0000 0000 0000  ................

따라서 vfat 파일 시스템 사양의 긴 파일 이름과 유사한 형식으로 파일 이름을 저장하는 것처럼 보입니다.

왜 그런지 아시나요?

편집하다: 다음 명령을 실행했습니다.

 $ dosfsck test.img -l
fsck.fat 4.1 (2017-01-24)
Checking file /.Trash-1000 (TRASH-~1)
Checking file /FILE.TXT
Checking file /longfilename.longextension (LONGFI~1.LON)
Checking file /.Trash-1000/.
Checking file /.Trash-1000/..
Checking file /.Trash-1000/info (INFO)
Checking file /.Trash-1000/files (FILES)
Checking file /.Trash-1000/info/.
Checking file /.Trash-1000/info/..
Checking file /.Trash-1000/files/.
Checking file /.Trash-1000/files/..
test.img: 5 files, 5/2043 clusters

그리고 longfilename 파일을 보면 그 뒤에 실제로 이름이 LONGFI~1.LON이라고 나와 있는데, 이는 제가 예상했던 것과 더 가깝습니다. 그런데 내가 실제로 이름을 longfilename.longextension으로 지정했다는 것을 어떻게 알 수 있나요? 또한 이 모든 쓰레기 파일이 어디서 왔는지 잘 모르겠습니다. 이것이 이름을 저장하는 것입니까?

답변1

FAT12, FAT16 및 FAT32는 파일 할당 테이블의 크기를 나타내므로 디스크의 최대 할당 블록 수와 디스크 자체의 크기를 나타냅니다.

실제내용물디렉토리 구조의 일부는 파일 시스템 드라이버에 의해 작성되며 FAT에 저장되지 않습니다. 긴 파일 이름은 파일 시스템 디렉토리 구조에 이미 존재하는 "숨겨진" 구조에 저장됩니다. 디렉토리는 실제 파일과 유사한 할당 블록을 사용하며 본질적으로 다른 파일을 색인화하고 특정 구조를 갖는 특별한 종류의 파일입니다.

VFAT는 FAT의 확장입니다. 이론적으로 "순수한" DOS 프로그램은 긴 파일 이름을 볼 수 없으므로 긴 파일 이름을 갖는 것은 문제가 되지 않습니다.

위키피디아에서긴 파일 이름

Microsoft는 더 긴 이름을 저장하기 위해 볼륨 레이블 유형의 숨겨진 디렉터리 항목을 사용하여 FAT 파일 시스템에서 LFN에 대한 지원을 구현했습니다. 이 체계는 VFAT로 알려져 있으며 일반적으로 프로그램과 운영 체제(OS) 구성 요소에서 볼륨 레이블을 무시하므로 호환성을 위해 선택되었습니다. 이전 OS에서 실행되는 프로그램은 여전히 ​​파일의 짧은 이름에 액세스할 수 있는 반면, 최신 LFN 인식 OS 및 프로그램은 더 긴 이름을 사용할 수 있습니다.

Wikipedia에서 더 많은 내용을 읽을 수 있습니다.FAT 파일 시스템 설계: VFAT이는 디렉터리 구조에서 파일 이름이 구현되는 기간을 보여줍니다.

관련 정보