Поддержка больших файлов
этой статьи Начальный раздел может быть слишком коротким, чтобы адекватно суммировать ключевые моменты . ( февраль 2020 г. ) |
Поддержка больших файлов ( LFS ) — это термин, который часто применяется к возможности создавать файлы размером более 2 или 4 ГиБ в 32-битных файловых системах .
Подробности
[ редактировать ]Традиционно многие операционные системы и их базовые реализации файловых систем использовали 32-битные целые числа для представления размеров и позиций файлов . Следовательно, ни один файл не может быть больше 2 32 − 1 байт (4 ГиБ − 1). Во многих реализациях проблема усугублялась тем, что размеры рассматривались как числа со знаком , что еще больше снижало предел до 2. 31 − 1 байт (2 ГиБ − 1). Файлы, которые были слишком велики для обработки 32-битными операционными системами, стали называть большими файлами .
Хотя это ограничение было вполне приемлемым в то время, когда жесткие диски были меньше, общее увеличение емкости хранилища в сочетании с увеличением использования файлов на серверах и настольных компьютерах, особенно для файлов баз данных и мультимедийных файлов, привело к сильному давлению на поставщиков ОС с целью преодолеть это ограничение.
В 1996 году несколько поставщиков отреагировали на это, сформировав отраслевую инициативу, известную как Саммит больших файлов , для поддержки больших файлов в POSIX (в то время Windows NT уже поддерживала большие файлы в NTFS), что является очевидным обратным названием «LFS». На саммите было поручено определить стандартизированный способ перехода на 64-битные числа для представления размеров файлов. [1]
Этот переключатель вызвал проблемы с развертыванием и потребовал внесения изменений в конструкцию, последствия которых можно увидеть до сих пор:
- Переход к 64-битным размерам файлов часто требовал несовместимых изменений в структуре файловой системы, а это означало, что поддержка больших файлов иногда требовала изменения файловой системы. Например, файловая система FAT32 не поддерживает файлы размером более 4 ГиБ-1 (в старых приложениях даже только 2 ГиБ-1); вариант FAT32+ поддерживает файлы большего размера (до 256 ГиБ-1), но (пока) поддерживается только в некоторых версиях DR-DOS , [2] [3] поэтому пользователям Microsoft Windows вместо этого приходится использовать NTFS или exFAT .
- Для поддержки двоичной совместимости со старыми приложениями операционной системы интерфейсы должны были сохранить использование 32-битных размеров файлов, а новые интерфейсы должны были быть разработаны специально для поддержки файлов большого размера.
- Для поддержки написания переносимого кода, использующего LFS там, где это возможно, авторы стандартной библиотеки C разработали механизмы, которые, в зависимости от констант препроцессора , прозрачно переопределяют функции на функции, поддерживающие работу с большими файлами в 64-битных файлах.
- Многие старые интерфейсы, особенно основанные на языке C , явно указывали типы аргументов таким образом, что это не позволяло осуществлять прямой или прозрачный переход к 64-битным типам. Например, функции C
fseek
иftell
работать с позициями файлов типаlong int
, который обычно имеет ширину 32 бита на 32-битных платформах и не может быть увеличен без ущерба для обратной совместимости. (Это было решено путем введения новых функцийfseeko
иftello
в POSIX . [4] На машинах Windows в Visual C++ функции_fseeki64
и_ftelli64
используются.)
Принятие
[ редактировать ]Использование API больших файлов в 32-битных программах долгое время оставалось незавершенным. Анализ, проведенный в 2002 году, действительно показал, что многие базовые библиотеки операционных систем по-прежнему поставляются без поддержки файлов большого размера, что ограничивает их использование приложениями. [5] Широко используемая библиотека zlib начала поддерживать 64-битные большие файлы на 32-битной платформе не ранее 2006 года. [6]
Проблема постепенно исчезла, когда ПК и рабочие станции полностью перешли на 64-битные вычисления . Microsoft Windows Server 2008 была последней версией сервера, поставляемой в 32-разрядном виде. [7] Redhat Enterprise Linux 7 была опубликована в 2014 году только как 64-битная операционная система. [8] Ubuntu Linux прекратил выпуск 32-битного варианта в 2019 году. [9] Nvidia прекратила разработку 32-битных драйверов в 2018 году и выпускала обновления после января 2019 года. [10] Apple прекратила разработку 32-битных версий Mac OS в 2018 году, предоставляя macOS Mojave только как 64-битную операционную систему. [11] Окончание срока службы Windows 10 на настольных компьютерах назначено на 2025 год, что связано с последними обновлениями старых систем, таких как Windows 7 и Windows 8, в январе 2020 года, поскольку некоторые из этих систем работали на старых компьютерах, построенных на архитектуре i386. . [12] Однако Windows 11 будет поставляться только как 64-битная операционная система с момента ее первой версии в 2021 году.
Аналогичное развитие можно увидеть и в мобильной сфере. Google обязала поддерживать 64-битные версии приложений в своем магазине приложений к августу 2019 года. [13] что позволит позже прекратить поддержку 32-битной версии Android . [14] Переход к 64-битной версии начался в 2014 году, когда все новые процессоры были разработаны для 64-битной архитектуры, и в том же году был опубликован Android 5 («Lollipop»), обеспечивающий подходящий 64-битный вариант операционной системы. [15] [14] Apple внесла изменения за год до того, как к 2013 году начала производить 64-битную версию Apple A7. К 2015 году Google начала предоставлять среду разработки для Linux только в 64-битной версии. [16] В мае 2019 года доля версий Android ниже 5 упала до десяти процентов. [17] Поскольку разработчики приложений концентрируются на одном варианте компиляции , к середине 2019 года многие производители начали требовать Android 5 в качестве минимальной версии, например Niantic. [18] Впоследствии 32-битные версии было трудно достать. [19]
За исключением встроенных систем с их специальными программами, рассмотрение различной поддержки больших файлов станет устаревшим в программном коде после 2020 года.
Связанные проблемы
[ редактировать ]Проблема 2038 года хорошо известна еще одним случаем, когда 32-битная «длина» на 32-битных платформах приводит к проблемам. Как и ограничение на большие файлы, оно устареет, когда системы перейдут только на 64-разрядные версии. Тем временем была введена 64-битная метка времени. В Win32 API это видно в функциях, имеющих суффикс «64» наряду с более ранним суффиксом «32». Когда в Win32 API была добавлена поддержка больших файлов, это привело к тому, что функции получили дополнительный суффикс «i64», который иногда дает четыре комбинации (findfirst32, findfirst64, findfirst32i64, findfirst64i32). [20] Для сравнения, API UNIX98 вводит функции с суффиксом «64», когда используется «_LARGEFILE64_SOURCE».
Что касается API больших файлов, существует ограничение на количество блоков для носителей информации. При обычном размере блока данных в 512 байтов барьер, возникающий из-за 32-битных чисел, возник позже. Когда жестких дисков размер достиг 2 терабайта (около 2010 года), главную загрузочную запись пришлось заменить таблицей разделов GUID , которая использует 64-битные номера LBA ( адрес логического блока ). В Unix-подобных операционных системах также потребовалось увеличить номера индексных дескрипторов , которые используются в некоторых функциях (stat64, setrlimit64). Ядро Linux представило это в 2001 году, что привело к появлению версии 2.4, которую в том же году подхватил glibc. [21] Поскольку поддержка больших файлов и поддержка больших дисков была введена одновременно, библиотека GNU C экспортирует 64-битные структуры индексных дескрипторов в 32-битные архитектуры одновременно с активацией Unix LFS API в программном коде. [22]
Когда ядро перешло на 64-битные индексные дескрипторы, файловая система ext3 к 2001 году использовала их внутри драйвера. Однако формат индексных дескрипторов на самом носителе застрял на 32-битных числах. [21] Поскольку устройства массовой памяти перешли на расширенный формат 4 килобайта на блок, фактический предел этого формата файловой системы составляет 8 или 16 терабайт. [21] Для обработки разделов диска большего размера требуется использование другой файловой системы, например XFS , которая с самого начала была разработана с 64-битными индексными дескрипторами, что позволяло использовать эксабайтные файлы и разделы. [23] [24] Первые магнитные диски емкостью 16 терабайт были поставлены к середине 2019 года. Твердотельные накопители емкостью 32 ТиБ для центров обработки данных были доступны еще в 2016 году, при этом некоторые производители прогнозируют твердотельные накопители емкостью 100 ТиБ к 2020 году. [25]
См. также
[ редактировать ]- лимит 2 ГБ
- RF64 — 64-битная поддержка BWF WAV. аудиофайлов
- Сравнение поддержки больших файлов в текстовых редакторах
- FAT32+
- Размер файла
- Поддержка длинных имен файлов (LFN)
- Проблема 2038 года
Ссылки
[ редактировать ]- ^ Группа ОС Solaris (март 1996 г.). «Большие файлы в Solaris: технический документ» (PDF) . Сан Микросистемс . Архивировано из оригинала (PDF) 28 февраля 2007 г.
- ^ Кунт, Удо; Георгиев Лучезар И.; Дэвис, Джереми (2007). «ФАТ+ черновая редакция 2» (2-е изд.). Архивировано из оригинала (FATPLUS.TXT) 19 февраля 2015 г. Проверено 5 августа 2015 г.
- ^ Кунт, Удо (21 июля 2011 г.). «Проект улучшения DR-DOS/OpenDOS» . Архивировано из оригинала 4 июня 2016 г. Проверено 20 апреля 2015 г.
- ^ «Добавление поддержки больших файлов в единую спецификацию UNIX» . Рабочая группа X/Open Base. 14 августа 1996 г. Проверено 10 сентября 2006 г.
- ^ «Создатели дистрибутивов» . 13 января 2002 г.
- ^ https://www.zlib.net/ChangeLog.txt [ текстовый файл с пустым URL-адресом ]
- ^ Колокитас, Панайотис (28 мая 2007 г.). «Windows Server 2008: последняя 32-разрядная серверная операционная система Microsoft» (на немецком языке). Мир ПК .
- ^ «Поддерживаются ли 32-разрядные приложения в RHEL 7 или более поздних версиях?» . Красная шляпа . Февраль 2014.
- ^ Кук, Уилл (2 июня 2019 г.). «32-битные пакеты Intel в Ubuntu начиная с 19.10» . Канонический.
- ^ Аддамс, Мэтью (12 апреля 2018 г.). «Nvidia прекращает поддержку 32-битных платформ Windows» . Отчет Windows.
- ^ Сильвер, Стивен (5 июня 2018 г.). «Mojave — последняя версия macOS от Apple, поддерживающая 32-битные приложения» . Apple Инсайдер .
- ^ «Поддержка Windows 7 прекращается 14 января 2020 г.» (на немецком языке). Майкрософт . Проверено 9 февраля 2020 г.
- ^ Себаян, Андреас (17 января 2019 г.). «На пути к чистым 64-битным приложениям для Android» (на немецком языке). Голем.
- ^ Перейти обратно: а б МВ (17 января 2019 г.). «Google объявляет о прекращении поддержки 32-битных приложений для Android в 2021 году» (на немецком языке). Журнал ИТ.
- ^ «64-битный Android: эти процессоры существуют, эти изменения грядут» (на немецком языке). Пользователи Андроид. 26 августа 2014 г.
- ^ «Инструменты платформы 23.1.0 Linux изменены на 64-разрядную версию без предварительного уведомления» . Публичный трекер Android. 11 декабря 2015 г.
Оказывается, содержимое android-sdk-linux/platform-tools представляет собой 32-битный ELF в 23.0.1 и 64-битный ELF в 23.1_rc1 и 23.1.0. […] Я установил ANDROID_EMULATOR_FORCE_32BIT=true […] 23.0.1 — последняя 32-битная сборка Linux.
- ^ Тензер, Ф. (14 ноября 2019 г.). «Доли различных версий Android всех устройств с ОС Android по всему миру в период с 1 по 7 мая 2019 г.» (на немецком языке). Статистика.
- ^ Дель Фаверо, Элия (10 июня 2019 г.). «Скоро для Ingress и Pokémon Go потребуется Android как минимум 5» .
- ^ «Почему 32-битная версия APK 0.159.0 до сих пор недоступна?» . Сильф-Дорога/ . Реддит. Декабрь 2019.
- ^ «Справочник по библиотеке времени выполнения C (CRT): findfirst» . Майкрософт . Проверено 17 февраля 2020 г.
- ^ Перейти обратно: а б с Йегер, Андреас (15 февраля 2015 г.). «Поддержка больших файлов в Linux» . SuSE GmbH .
- ^ linux/bits/stat.h: /* Обратите внимание, что stat64 имеет ту же форму, что и stat для x86-64. */
- ^ Раттер, М.Дж. «Проблема 64-битного индексного дескриптора» . Проверено 10 февраля 2020 г.
- ^ «Инструкции по Ext4» . ядро.орг . 11.02.2019.
Хотя очень большие файловые системы включены в список функций ext4, текущие e2fsprogs в настоящее время по-прежнему ограничивают размер файловой системы до 2 ^ 32 блоков (16 ТиБ для блочной файловой системы размером 4 КБ). Разрешение файловых систем размером более 16 Тбайт — одна из следующих высокоприоритетных функций, которые необходимо завершить для ext4.
- ^ Шерер, Томас (15 августа 2016 г.). «SSD Samsung емкостью 32 ТБ: начало конца жесткого диска» (на немецком языке). Курфюрст .
Внешние ссылки
[ редактировать ]- Йегер, Андреас (15 февраля 2005 г.). «Поддержка больших файлов в Linux» . SuSE GmbH . Проверено 10 сентября 2006 г.