대용량 파일 지원
Large-file supportLFS(Large-File Support)는 32비트 파일 시스템에서 2GiB 또는 4GiB 이상의 파일을 생성할 수 있는 기능에 자주 적용되는 용어다.
세부 사항
전통적으로 많은 운영 체제와 그 기본 파일 시스템 구현은 파일 크기와 위치를 나타내기 위해 32비트 정수를 사용했다. 따라서, 어떤32 파일도 2 - 1바이트(4 GiB - 1)보다 클 수 없다. 많은 구현에서 크기를 서명된 숫자로 처리하여 문제를 악화시켰고, 이는 231 - 1바이트(2 GiB - 1)로 한도를 더욱 낮췄다. 32비트 운영 체제에서 처리할 수 없을 정도로 큰 파일은 대형 파일이라고 알려지게 되었다.
하드디스크가 작은 상황에서 한계는 상당히 수용 가능했지만, 특히 데이터베이스와 멀티미디어 파일의 경우 서버 및 데스크탑 파일 사용 증가와 함께 스토리지 용량의 일반적인 증가는 OS 벤더에게 이 한계를 극복해야 한다는 강한 압박으로 이어졌다.
1996년, 복수의 벤더는 POSIX(Windows NT가 이미 NTFS에서 대용량 파일을 지원했던 당시)에 대용량 파일을 지원하기 위해 LFS라는 분명한 역법인 Large File Summit으로 알려진 산업 이니셔티브를 형성하여 대응하였다. 서밋은 파일 크기를 나타내기 위해 64비트 숫자로 전환하는 표준화된 방법을 정의하는 임무를 맡았다.[1]
이 스위치는 전개 문제를 야기하고 설계 변경을 요구했으며, 그 결과는 여전히 확인할 수 있다.
- 64비트 파일 크기로 변경하기 위해서는 파일 시스템 레이아웃에 호환되지 않는 변경이 자주 필요했으며, 이는 대용량 파일 지원으로 인해 파일 시스템 변경이 필요한 경우도 있음을 의미했다. 예를 들어 FAT32 파일 시스템은 4GiB-1보다 큰 파일(2GiB-1 이전 애플리케이션도 있는 경우)을 지원하지 않는다. FAT32+는 더 큰 파일(최대 256GiB-1까지)을 지원하지만 (현재까지) 일부 버전의 DR-DOS에서만 지원되므로 Microsoft Windows 사용자는 대신 NTFS 또는 ExFAT를 사용해야 한다.[2][3]
- 이전 애플리케이션과의 이진 호환성을 지원하기 위해 운영 체제 인터페이스는 32비트 파일 크기를 유지해야 했고 새로운 인터페이스는 대용량 파일 지원을 위해 특별히 설계되어야 했다.
- 가능한 경우 LFS를 사용하는 휴대용 코드 작성을 지원하기 위해, C 표준 라이브러리 작성자는 전처리기 상수에 따라 64비트 대용량 파일 인식 장치에 기능을 투명하게 재정의하는 메커니즘을 고안했다.
- 많은 이전 인터페이스, 특히 C 기반 인터페이스는 64비트 유형으로 간단하거나 투명한 전환을 허용하지 않는 방식으로 인수 유형을 명시적으로 지정했다. 예를 들어, C 함수는
fseek그리고ftell파일 형태로 운영하다.long int는 일반적으로 32비트 플랫폼에서 32비트 폭이며, 역호환성을 희생하지 않고서는 더 크게 만들 수 없다. (이것은 새로운 기능을 도입함으로써 해결되었다.fseeko그리고ftello포식스에서[4] 윈도우즈 시스템의 Visual C++에서 기능_fseeki64그리고_ftelli64사용된다.)
입양
32비트 프로그램에서 대용량 파일 API의 사용은 오랫동안 불완전했다. 2002년에 분석 결과, 운영 체제의 많은 기본 라이브러리가 여전히 대용량 파일 지원 없이 배송되어 이를 사용하는 애플리케이션이 제한되었다.[5] 많이 사용되는 zlib 라이브러리는 2006년 이전이 아니라 32비트 플랫폼에서 64비트 대용량 파일을 지원하기 시작했다.[6]
문제는 PC와 워크스테이션이 64비트 컴퓨팅으로 완전히 이동하면서 서서히 사라졌다. 마이크로소프트 윈도우즈 서버 2008은 32비트로 제공되는 마지막 서버 버전이다.[7] Redhat Enterprise Linux 7은 2014년에 64비트 운영 체제로만 출판되었다.[8] 우분투 리눅스는 2019년 32비트 변종 배달을 중단했다.[9] 엔비디아는 2018년 32비트 드라이버 개발을 중단하고 2019년 1월 이후 업데이트를 전달한다.[10] 애플은 2018년 32비트 맥 OS 버전 개발을 중단해 64비트 운영체제(OS Mojave)로만 제공했다.[11] 데스크톱에서 Windows 10의 수명이 2025년으로 정해져 있는데, 이는 일부 시스템이 i386 아키텍처에 구축된 오래된 컴퓨터에서 실행되었기 때문에 2020년 1월 Windows 7 및 Windows 8과 같은 이전 시스템으로부터의 최신 업그레이드와 관련이 있다.[12] 그러나 윈도11은 2021년 첫 버전 이후 64비트 운영체제(OS)로만 출하된다.
모바일 영역에서도 비슷한 발전상을 볼 수 있다. 구글은 자사 앱스토어에서 2019년 8월까지 64비트 버전의 애플리케이션을 지원해야 하는데,[13] 이후 안드로이드에 대한 32비트 지원을 중단할 수 있게 됐다.[14] 64비트로의 전환은 2014년에 모든 새로운 프로세서가 64비트 아키텍처에 맞게 설계되고 안드로이드 5("롤리팝")가 그 해에 출판되면서 시작되었다.[15][14] 애플은 2013년까지 64비트 애플 A7을 생산하기 전에 그 해의 변화를 겪었다. 구글은 2015년까지 64비트로만 리눅스 개발 환경을 제공하기 시작했다.[16] 2019년 5월 안드로이드 버전 5 이하의 점유율은 10%로 떨어졌다.[17] 앱 개발자들이 단일 컴파일 변종에 집중하면서 2019년 중반까지 많은 제조사들이 안드로이드 5를 최소 버전으로 요구하기 시작했다. 예를 들면 나이앤틱 같은 것이다.[18] 그 후 32비트 버전은 구하기가 어려웠다.[19]
특수 프로그램이 설치된 임베디드 시스템을 제외하고, 2020년 이후 프로그램 코드에서 다양한 대용량 파일 지원에 대한 고려는 더 이상 필요 없게 된다.
관련 문제
2038년 문제는 32비트 플랫폼에서 32비트 "긴 길이"가 문제로 이어지는 또 다른 사례로 잘 알려져 있다. 대용량 파일 제한과 마찬가지로 시스템이 64비트로만 이동하면 더 이상 사용되지 않을 것이다. 그 사이에 64비트 타임스탬프가 도입되었다. Win32 API에서 그것은 이전의 "32" 접미사를 따라 "64" 접미사가 있는 함수에서 볼 수 있다. Win32 API에 대용량 파일 지원이 추가되었을 때, 이 기능은 추가 "i64" 접미사를 가지며, 때로는 4가지 조합을 만들어 낸다. (find32, findfirst64, findfirst32i64,[20] findfirst64i32) 이에 비해 UNIX98 API는 "_LARGEFILE64_SOURCE"를 사용할 때 "64" 접미사가 있는 기능을 도입한다.
대용량 파일 API와 관련하여 대용량 저장 매체에 대한 블록 번호의 제한이 있다. 데이터 블록당 512바이트의 공통 크기로 32비트 숫자로 인한 장벽이 나중에 발생했다. 하드 디스크 드라이브의 크기가 2테라바이트(2010년경)에 도달했을 때 마스터 부트 레코드를 LBA 번호(논리적 블록 주소)에 64비트를 사용하는 GUID 파티션 테이블로 교체해야 했다. Unix와 유사한 운영 체제에서는 일부 기능(stat64, setrlimit64)에서 사용되는 inode 숫자를 확대해야 했다. 리눅스 커널은 2001년 glibc가 그해 픽업한 버전 2.4로 이어졌다고 소개했다.[21] 대용량 파일 지원과 대용량 디스크 지원이 동시에 도입됨에 따라 GNU C 라이브러리는 프로그램 코드로 Unix LFS API가 활성화되는 동시에 32비트 아키텍처에 64비트 인노드 구조를 수출한다.[22]
커널이 64비트 inode로 이동했을 때 2001년까지 파일 시스템 ext3는 커널을 드라이버에서 내부적으로 사용했다. 그러나 스토리지 미디어 자체의 inode 형식은 32비트 숫자로 고착되었다.[21] 대용량 저장 장치가 블록당 4킬로바이트의 고급 포맷으로 이동함에 따라 해당 파일 시스템 포맷의 실제 한계는 8 또는 16 테라바이트가 된다.[21] 더 큰 디스크 파티션을 처리하려면 처음부터 엑사바이트 파일 및 파티션을 허용하는 64비트 인노드로 설계된 XFS와 같은 다른 파일 시스템을 사용해야 한다.[23][24] 최초의 16테라바이트 자기 디스크 드라이브는 2019년 중반까지 제공되었다. 데이터 센터용 32TiB 솔리드 스테이트 드라이브는 이르면 2016년 출시되었으며, 일부 제조업체는 2020년까지 100TiB SSD를 예상하였다.[25]
참고 항목
- 2GB 제한
- RF64 – BWF WAV 오디오 파일에 대한 64비트 지원
- 텍스트 편집기의 대용량 파일 지원 비교
- FAT32+
- 파일 크기
- 긴 파일 이름 지원(LFN)
- 2038년 문제
참조
- ^ Solaris OS group (March 1996). "Large Files in Solaris: A White Paper" (PDF). Sun Microsystems. Archived from the original (PDF) on 2007-02-28.
- ^ Kuhnt, Udo; Georgiev, Luchezar I.; Davis, Jeremy (2007). "FAT+ draft revision 2" (2 ed.). Archived from the original (FATPLUS.TXT) on 2015-02-19. Retrieved 2015-08-05.
- ^ Kuhnt, Udo (2011-07-21). "DR-DOS/OpenDOS Enhancement Project". Archived from the original on 2016-06-04. Retrieved 2015-04-20.
- ^ "Adding Large File Support to the Single UNIX Specification". X/Open Base Working Group. 1996-08-14. Retrieved 2006-09-10.
- ^ "Distro Makers". 2002-01-13.
- ^ https://www.zlib.net/ChangeLog.txt
- ^ Kolokythas, Panagiotis (2007-05-28). "Windows Server 2008: Microsofts letztes 32-Bit-Betriebssystem für Server" (in German). PC Welt.
- ^ "Are 32-bit applications supported in RHEL 7 or later releases?". Red Hat. February 2014.
- ^ Cooke, Will (2019-06-02). "Intel 32bit packages on Ubuntu from 19.10 onwards". Canonical.
- ^ Addams, Matthew (2018-04-12). "Nvidia discontinues support for 32-bit Windows platforms". Windows Report.
- ^ Silver, Steven (2018-06-05). "Mojave is Apple's last version of macOS to support 32-bit apps". Apple Insider.
- ^ "Der Support für Windows 7 endet am 14. Januar 2020" (in German). Microsoft. Retrieved 2020-02-09.
- ^ Sebayang, Andreas (2019-01-17). "Auf dem Weg zu reinen 64-Bit-Android-Apps" (in German). Golem.
- ^ a b mw (2019-01-17). "Google kündigt Ende von 32-Bit-Android-Apps per 2021 an" (in German). IT Magazin.
- ^ "64-Bit-Android: Diese Prozessoren gibt es, diese Veränderungen kommen" (in German). Android User. 2014-08-26.
- ^ "Platform-tools 23.1.0 Linux changed to 64-bit without notice". Android Public Tracker. 2015-12-11.
It turns out the android-sdk-linux/platform-tools content is 32-bit ELF in 23.0.1 but 64-bit ELF in 23.1_rc1 and 23.1.0. […] I set ANDROID_EMULATOR_FORCE_32BIT=true […] 23.0.1 is the last 32-bit Linux build.
- ^ Tenzer, F. (2019-11-14). "Anteile der verschiedenen Android-Versionen an allen Geräten mit Android OS weltweit im Zeitraum 01. bis 07. Mai 2019" (in German). Statista.
- ^ Del Favero, Elia (2019-06-10). "Ingress und Pokémon Go brauchen bald mindestens Android 5".
- ^ "Why is 32bit 0.159.0 version apk still not available?". TheSilphRoad/. Reddit. December 2019.
- ^ "C Run-time library (CRT) reference: findfirst". Microsoft. Retrieved 2020-02-17.
- ^ a b c Jaeger, Andreas (2015-02-15). "Large File Support in Linux". SuSE GmbH.
- ^ linux/bits/stat.h: /* stat64는 x86-64의 stat과 같은 모양을 가지고 있다는 점에 유의하십시오. */
- ^ Rutter, M. J. "The 64 bit inode problem". Retrieved 2020-02-10.
- ^ "Ext4 Howto". kernel.org. 2019-02-11.
Although very large fileystems are on ext4's feature list, current e2fsprogs currently still limits the filesystem size to 2^32 blocks (16TiB for a 4KiB block filesystem). Allowing filesystems larger than 16T is one of the very next high-priority features to complete for ext4.
- ^ Scherer, Thomas (2016-08-15). "Samsungs 32-TB-SSD: Der Anfang vom Ende der Festplatte" (in German). Elektor.
외부 링크
- Jaeger, Andreas (2005-02-15). "Large File Support in Linux". SuSE GmbH. Retrieved 2006-09-10.