Large File Support
Large File Support (englisch für „Unterstützung großer Dateien“) ist eine Eigenschaft von Betriebssystemen oder Dateisystemen, sehr große Dateien öffnen und bearbeiten zu können. Häufig gibt das verwendete System diesen Grenzwert vor, bei einigen (älteren) Linux-Versionen sind dies z. B. 2 GiB oder bei FAT32 4 GiB. Große Datenbanken auf Servern, Bildbearbeitung oder Videoschnitt benötigen aber häufig große Dateien (engl. Large Files), die deutlich umfangreicher sind, so dass eine solche Anwendung von einer kleinen Größenbeschränkung für Dateien nicht betroffen sein darf.
Beschreibung
Das Problem liegt bei den über Jahrzehnte sehr verbreiteten 32-Bit-Betriebssystemen in der Größenbeschränkung von Integer-Zahlen. Eine 32-Bit-Integer-Zahl kann nur Werte bis 2 GiB (mit Vorzeichen) oder 4 GiB (ohne Vorzeichen) darstellen. Zur Unterstützung sehr großer Dateien muss daher in 32-Bit-Programmen ein neuer Datentyp und zugehörige Betriebssystemfunktionen eingeführt werden, was ein Umschreiben alter Programme erforderlich macht. Ältere Versionen und insbesondere nicht mehr gewartete Programme können daher selbst bei Existenz eines Large File Support nur Dateien mit einer maximalen Größe von 2 oder 4 GiB verarbeiten.
Die Entwicklung einer API mit 64-Bit Eigenschaften kam durch die Entwicklung der Festplatten zustande, die Anfang der 1990er Jahre die Gigabyte-Grenze durchbrachen. Anschließend entwickelte Dateisysteme stellten sich darauf ein – darunter das FreeBSD UFS2, das Linux ext2 (1993) und Windows NTFS (1993). Die Funktionalität des Betriebssystemkerns wurde dabei in verschiedener Art an die Applikationen durchgereicht, bis man sich im Unix-Umfeld beim herstellerübergreifenden „Large File Summit“ von 1996 auf eine gemeinsame API einigte.[1] Diese wurde mit Single UNIX Specification Version 2 (UNIX 98) festgeschrieben.
Die Arithmetik in den zugehörigen C Compilern wurde als neuer 64-Bit "long long" Datentyp in C mit der Standardisierung für C99 (ab 1995) hinzugefügt. Dies folgte aus der Entwicklung der Betriebssysteme für 32-Bit-Architekturen zur Nutzung eines ILP32-Programmiermodells, bei der die traditionellen Datentypen "int", "long", "pointer" jeweils 32-Bit lang sind. Die traditionellen Funktionen "ftell" und "fseek" waren damit auf 32 Bit beschränkt. Für Posix "ftello" / "fseeko" sowie Windows "_ftelli64" / "_fseeki64" führten die Hersteller einen 64-Bit-Datentyp ein – anfangs mit unterschiedlicher Benennung.
Umsetzung
Die Übernahme der LFS API in 32-Bit Programme blieb lange unvollständig. Eine Untersuchung aus dem Jahre 2002 zeigte, dass auch Basisbibliotheken des Betriebssystems noch ohne LFS Unterstützung ausgeliefert wurden, und damit indirekt zahlreiche Anwendungen beschränkten.[2] Die vielgenutzte zlib Bibliothek unterstützte den 64-Bit Zusatz auf 32-Bit Plattformen erst ab 2006.[3]
Im Bereich der PC/Workstations erledigte sich das Problem letztlich dadurch, dass nur noch 64-Bit-Architekturen eingesetzt wurden. Microsoft Windows Server 2008 war die letzte Server-Version, die in 32 Bit ausgeliefert wurde.[4] Redhat Enterprise Linux 7 wurde bei der Erstveröffentlichung 2014 nur noch als 64-Bit Betriebssystem bereitgestellt.[5] Das Ubuntu Linux stoppte 2019 die Auslieferung als 32-Bit Betriebssystem.[6] Nvidia stoppte die Entwicklung von 32-Bit Treibern 2018 und liefert seit Januar 2019 auch keine Updates mehr.[7] Mac OS von Apple stoppte 2018 die Entwicklung von 32-Bit, sodass macOS Mojave nur noch als 64-Bit Betriebssystem zur Verfügung steht.[8] Mit Microsoft Windows 10 wird die 32-Bit Unterstützung auf dem Desktop noch bis 2025 gepflegt, da es Anfang 2020 überhaupt erst die letzten Altversionen (Windows-7, Windows-8) ersetzt hat, die teils noch auf i386 Architekturen eingesetzt wurden.[9] Microsoft Windows 11 wird jedoch seit der Erstveröffentlichung 2021 nur als 64-Bit Betriebssystem bereitgestellt.[10]
Im Bereich der mobilen Geräte fordert Google die native Unterstützung von 64-Bit durch Applikationen seit August 2019,[11] sodass eine Abkündigung der 32-Bit Unterstützung in Android vorbereitet wird.[12] Die Umstellung auf 64-Bit begann 2014, als alle neueren Prozessoren nur noch in 64-Bit angekündigt wurden, und mit Android 5 ("Lollipop") ein passendes Betriebssystem in diesem Jahr bereitgestellt wurde.[13][12] Apple hatte die Umstellung schon vorher mit dem 64-Bit Apple A7 begonnen, der 2013 vorgestellt wurde. Google lieferte den Entwicklerarbeitsplatz unter Linux dann ab 2015 nur noch für 64-Bit aus.[14] Im Mai 2019 lag die Verbreitung von Android-Versionen unterhalb 5 noch bei etwa zehn Prozent.[15] Für den Google Play App Store wurde verfügt, dass ab August 2019 immer auch 64-Bit Versionen der Apps bereitgestellt werden müssen, ausgenommen davon waren Spiele, für die diese Anforderung ab August 2021 gilt.[16] Da App-Entwickler sich auf ein Kompilat konzentrieren, haben viele Hersteller ab Mitte 2019 die Version 5 als Mindestversion angesetzt, beispielsweise Niantic.[17] Eine 32-Bit Version war anschließend nur noch schwer erhältlich.[18] Die Vorabversionen von Android 12 ab 2020 boten keinen 32-bit Emulator für Entwickler mehr an.[19] Android 12 wurde im Oktober 2021 veröffentlicht, der Marktanteil von Android-Versionen bis Version 4 war bis April 2021 auf unter 2 % gefallen.[20]
Außer für Embedded-Plattformen mit ihren spezialisierten Programmen, schwindet die Beachtung des Large File Support im Programmcode damit ab 2020.
Verwandte Probleme
Insbesondere das Jahr-2038-Problem zeigt auf, dass die traditionelle Darstellung von Zeitstempeln als 32-Bit "long" zu Problemen führen kann. Diese werden sich mit dem Übergang zu reinen 64-Bit Systemen ebenfalls überholen. Zwischenzeitlich wurde begonnen, auch auf 32-Bit Systemen einen 64-Bit Zeitstempel verfügbar zu machen. In der Win32 API führte das dazu, dass neue Funktionen mit 64-Bit Zeitstempel das Suffix "64" bekamen, und entsprechend die 64-Bit Dateilängen durch ein angehängtes Suffix "i64" markiert wurden – durchaus auch in allen vier Kombinationen (findfirst32, findfirst64, findfirst32i64, findfirst64i32).[21] Die UNIX98 API dagegen führt mit "_LARGEFILE64_SOURCE" zusätzliche Funktionen mit dem Suffix "64" ein.
Mit der large-file API verwandt sind Blockzähler für Massenspeicher, die durch eine übliche Größe der Datenblöcke von 512 Bytes erst später an die Begrenzung der 32-Bit Zahlen führte. Als Festplatten die Größe von 2 Terabyte erreichten (um 2010) musste daher der Master Boot Record als Partitionstabelle durch die GUID Partition Table ersetzt werden, der für die LBA (linear block address) dann 64-Bit Zähler definierte. Die in unixoiden System verwendeten inode-Zähler mussten ebenfalls aufgeweitet werden, ebenso wie andere Dateizähler (beispielsweise mit den Funktionen stat64 / setrlimit64). Die Überarbeitung des Linux Kernels erfolgte um 2001 zur Version 2.4, zusammen mit der Einführung der LFS Unterstützung, die dann von der glibc übernommen wurde.[22] Da die Umstellung zeitgleich erfolgte, werden bei der GNU-C-Bibliothek für Linux mit der Aktivierung von 64-Bit LFS in 32-Bit-Architekturen auch die inode-Blockzähler und verwandte Funktionen auf 64-Bit umgestellt.[23]
Das Dateisystem ext3 von 2001 übernahm dann im Treiber einige 64-Bit Werte, blieb aber auf dem Massenspeicher weiter auf 32-Bit Blockzähler begrenzt.[22] Da man hier meist im Advanced Format von 4 Kilobyte Blöcken arbeitet, liegt das Maximum hier typisch bei 8 oder 16 Terabyte.[22] Größere Massenspeicher im Bereich dutzender Terabyte mussten dann mit XFS formatiert werden, die 64-Bit inodes auch im Datenformat unterstützen, und somit bis in den Exabyte-Bereich vordringen.[24][25] Die ersten 16 Terabyte Festplatten wurden ab Mitte 2019 ausgeliefert. Als Solid-State-Drive gab es Massenspeicher mit 32 TiB schon ab 2016, und für 2020 wurden diese jenseits 100 TiB angekündigt.[26]
Siehe auch
- RF64 als 64-bit Erweiterung von RIFF WAVE Audiodateien
- FAT32+ als rückwärtskompatible Erweiterung des FAT Dateisystems (bis 256 GiB)
- ext4 als 48-bit Erweiterung des ext3 Dateisystems (>16 TiB ab e2fsprogs Version 1.42)[25]
Weblinks
Einzelnachweise
- ↑ Adding Large File Support to the Single UNIX® Specification. The Open Group. 14. August 1996.
- ↑ http://ac-archive.sourceforge.net/largefile/distros.html
- ↑ https://www.zlib.net/ChangeLog.txt
- ↑ Panagiotis Kolokythas: Windows Server 2008: Microsofts letztes 32-Bit-Betriebssystem für Server. PC Welt. 28. Mai 2007.
- ↑ Are 32-bit applications supported in RHEL 7 or later releases?. Red Hat. Februar 2014.
- ↑ Will Cooke: Intel 32bit packages on Ubuntu from 19.10 onwards. Canonical. 2. Juni 2019.
- ↑ Matthew Addams: Nvidia discontinues support for 32-bit Windows platforms. Windows Report. 12. April 2018.
- ↑ Steven Silver: Mojave is Apple's last version of macOS to support 32-bit apps. Apple Insider. 5. Juni 2018.
- ↑ Der Support für Windows 7 endet am 14. Januar 2020. Microsoft. Abgerufen am 9. Februar 2020.
- ↑ Florian Müssig: Systemvoraussetzungen für Windows 11: Wann läuft es, woran kann es scheitern. Heise. 25. Juni 2021.
- ↑ Andreas Sebayang: Auf dem Weg zu reinen 64-Bit-Android-Apps. Golem. 17. Januar 2019.
- ↑ a b mw: Google kündigt Ende von 32-Bit-Android-Apps per 2021 an. IT Magazin. 17. Januar 2019.
- ↑ 64-Bit-Android: Diese Prozessoren gibt es, diese Veränderungen kommen. Android User. 26. August 2014.
- ↑ Platform-tools 23.1.0 Linux changed to 64-bit without notice.. Android Public Tracker. 11. Dezember 2015.: „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.“
- ↑ F. Tenzer: Anteile der verschiedenen Android-Versionen an allen Geräten mit Android OS weltweit im Zeitraum 01. bis 07. Mai 2019. Statista. 14. November 2019.
- ↑ Google kündigt Ende von 32-Bit-Android-Apps per 2021 an. IT Magazine. 17. Januar 2019.
- ↑ Elia Del Favero: Ingress und Pokémon Go brauchen bald mindestens Android 5. 10. Juni 2019.
- ↑ Why is 32bit 0.159.0 version apk still not available?. Reddit TheSilphRoad/. Dezember 2019.
- ↑ Get Android 12. Google.: „Note that 32-bit Android emulator system images are not supported in Android 12.“
- ↑ Anteile der verschiedenen Android-Versionen an der Internetnutzung von Geräten mit Android OS weltweit im April 2021. Statista. 3. Mai 2021.
- ↑ CTF Funktionsreferenz findfirst. Microsoft. Abgerufen im 20200210.
- ↑ a b c Andreas Jaeger: Large File Support in Linux. SUSE GmbH. 15. Februar 2015.
- ↑ linux/bits/stat.h: /* Note stat64 has the same shape as stat for x86-64. */
- ↑ MJ Rutter: The 64 bit inode problem. Abgerufen am 10. Februar 2020.
- ↑ a b Ext4 Howto. kernel.org. 11. Februar 2019.: „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.“
- ↑ Thomas Scherer: Samsungs 32-TB-SSD: Der Anfang vom Ende der Festplatte. Elektor. 15. August 2016.