Jump to content

Поддержка больших файлов

Поддержка больших файлов ( 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]

См. также

[ редактировать ]
  1. ^ Группа ОС Solaris (март 1996 г.). «Большие файлы в Solaris: технический документ» (PDF) . Сан Микросистемс . Архивировано из оригинала (PDF) 28 февраля 2007 г.
  2. ^ Кунт, Удо; Георгиев Лучезар И.; Дэвис, Джереми (2007). «ФАТ+ черновая редакция 2» (2-е изд.). Архивировано из оригинала (FATPLUS.TXT) 19 февраля 2015 г. Проверено 5 августа 2015 г.
  3. ^ Кунт, Удо (21 июля 2011 г.). «Проект улучшения DR-DOS/OpenDOS» . Архивировано из оригинала 4 июня 2016 г. Проверено 20 апреля 2015 г.
  4. ^ «Добавление поддержки больших файлов в единую спецификацию UNIX» . Рабочая группа X/Open Base. 14 августа 1996 г. Проверено 10 сентября 2006 г.
  5. ^ «Создатели дистрибутивов» . 13 января 2002 г.
  6. ^ https://www.zlib.net/ChangeLog.txt [ текстовый файл с пустым URL-адресом ]
  7. ^ Колокитас, Панайотис (28 мая 2007 г.). «Windows Server 2008: последняя 32-разрядная серверная операционная система Microsoft» (на немецком языке). Мир ПК .
  8. ^ «Поддерживаются ли 32-разрядные приложения в RHEL 7 или более поздних версиях?» . Красная шляпа . Февраль 2014.
  9. ^ Кук, Уилл (2 июня 2019 г.). «32-битные пакеты Intel в Ubuntu начиная с 19.10» . Канонический.
  10. ^ Аддамс, Мэтью (12 апреля 2018 г.). «Nvidia прекращает поддержку 32-битных платформ Windows» . Отчет Windows.
  11. ^ Сильвер, Стивен (5 июня 2018 г.). «Mojave — последняя версия macOS от Apple, поддерживающая 32-битные приложения» . Apple Инсайдер .
  12. ^ «Поддержка Windows 7 прекращается 14 января 2020 г.» (на немецком языке). Майкрософт . Проверено 9 февраля 2020 г.
  13. ^ Себаян, Андреас (17 января 2019 г.). «На пути к чистым 64-битным приложениям для Android» (на немецком языке). Голем.
  14. ^ Перейти обратно: а б МВ (17 января 2019 г.). «Google объявляет о прекращении поддержки 32-битных приложений для Android в 2021 году» (на немецком языке). Журнал ИТ.
  15. ^ «64-битный Android: эти процессоры существуют, эти изменения грядут» (на немецком языке). Пользователи Андроид. 26 августа 2014 г.
  16. ^ «Инструменты платформы 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.
  17. ^ Тензер, Ф. (14 ноября 2019 г.). «Доли различных версий Android всех устройств с ОС Android по всему миру в период с 1 по 7 мая 2019 г.» (на немецком языке). Статистика.
  18. ^ Дель Фаверо, Элия (10 июня 2019 г.). «Скоро для Ingress и Pokémon Go потребуется Android как минимум 5» .
  19. ^ «Почему 32-битная версия APK 0.159.0 до сих пор недоступна?» . Сильф-Дорога/ . Реддит. Декабрь 2019.
  20. ^ «Справочник по библиотеке времени выполнения C (CRT): findfirst» . Майкрософт . Проверено 17 февраля 2020 г.
  21. ^ Перейти обратно: а б с Йегер, Андреас (15 февраля 2015 г.). «Поддержка больших файлов в Linux» . SuSE GmbH .
  22. ^ linux/bits/stat.h: /* Обратите внимание, что stat64 имеет ту же форму, что и stat для x86-64. */
  23. ^ Раттер, М.Дж. «Проблема 64-битного индексного дескриптора» . Проверено 10 февраля 2020 г.
  24. ^ «Инструкции по Ext4» . ядро.орг . 11.02.2019. Хотя очень большие файловые системы включены в список функций ext4, текущие e2fsprogs в настоящее время по-прежнему ограничивают размер файловой системы до 2 ^ 32 блоков (16 ТиБ для блочной файловой системы размером 4 КБ). Разрешение файловых систем размером более 16 Тбайт — одна из следующих высокоприоритетных функций, которые необходимо завершить для ext4.
  25. ^ Шерер, Томас (15 августа 2016 г.). «SSD Samsung емкостью 32 ТБ: начало конца жесткого диска» (на немецком языке). Курфюрст .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 96918c5519e7e98fef8803080ae6b755__1712212500
URL1:https://arc.ask3.ru/arc/aa/96/55/96918c5519e7e98fef8803080ae6b755.html
Заголовок, (Title) документа по адресу, URL1:
Large-file support - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)