Назад | Перейти на главную страницу

Как я могу уменьшить использование inode в файловой системе ext4?

Резюме моей потребности

Мы помещаем большое количество файлов в файловую систему для последующего анализа. Мы не можем контролировать, сколько файлов у нас будет, и этому одному ящику нужен доступ ко всем из них.

Неизменные ограничения

  1. Я не могу изменить лимит inode. Это ext4, по умолчанию 4 миллиарда
  2. Файлов всегда будет много. Вопрос не в том, как уменьшить количество файлов; это как обойти ограничение в 4Bn inode.
  3. Я не могу использовать сетевое хранилище. Этот ящик находится в центре обработки данных, и из-за ошеломляющей пропускной способности существующей передачи данных сетевое хранилище не подходит.

Мои идеи

  1. Я мог бы смонтировать файл как устройство обратной связи в том месте, где мы размещаем эти файлы.
    • Pro: Просто реализовать
    • Против: Еще один уровень сложности, но довольно тонкий.
  2. XFS. Нет ограничения inode.
    • Pro: Очевидно, это просто стирает проблему.
    • Против: Не уверен, насколько гибко я внесу это изменение в производственную систему.

Мой вопрос

Какие еще способы обойти это жесткое ограничение? Есть ли другие преимущества / недостатки упомянутых мной подходов?

Информация, которую нам не хватает ...

  • Распространение и версия Linux.
  • Схема дисков (отсеки для дисков, RAID-контроллер и т. Д.).

Похоже, ext4 не делает то, что вы хотите. Так что не используйте это ...

XFS должен хорошо справиться с вашей ситуацией. Он находится в ядре Linux, но его развертывание сильно зависит от гибкости вашего диска. Есть также некоторые Настраиваемые XFS это поможет с вашей нагрузкой ... Из коробки он не будет работать особенно хорошо. Вам понадобится правильная файловая система варианты создания и монтирования. Остальное зависит от вашего дистрибутива, используете ли вы контролер, и ваша конкретная рабочая нагрузка.

Я бы посоветовал вам использовать сетевой сервер с файловой системой, рассчитанной на то, что вам нужно. Первое, что приходит в голову, это что-то, что поддерживает zfs (freenas и nexenta, хотя бесплатная версия последнего имеет некоторые ограничения) или, если вы можете себе это позволить, вы можете купить что-то вроде netapp.

Я менее знаком с UFS, доступным на freebsd и т. Д., Но слышал, что это тоже сработает.

Дополнительные опции:

  • Создавайте файловые системы по запросу, когда они вам нужны. Разбиение на разделы с помощью LVM вместо присоединения файловых систем непосредственно к MBR. Вы можете смонтировать файловую систему в любом месте вашего дерева, чтобы вы могли добавлять новую файловую систему в любое время и в любом месте. Кроме того, LVM может охватывать части нескольких дисков, если вы хотите, что означает, что границы физического носителя менее значимы.

  • Петлевые ФС не являются ужасный идея, но почему бы вам вместо этого не использовать LVM? Все преимущества, никаких недостатков.

  • Если вы просто архивируете файлы (то есть не с произвольным доступом), тогда сохранение их непосредственно в файл .tar.gz - неплохая идея. Я также видел системы, в которых файлы временно «помещаются» на SSD, пока строится структура, а затем выгружаются в tar.gz на вращающемся диске для длительного хранения.

  • XFS - неплохой вариант, хотя и в нем есть свои сложности. Например, это не совсем так, как прощение нечистых отключений. Не то, чтобы вы ожидали потери данных, но иногда это требует более практического вмешательства.

Из всего этого мне больше всего нравится автоматическая загрузка файлов в архивы .tar.gz. Это экономит место и inodes, и просто аккуратно. Большое количество небольших файлов снижает производительность файловых систем, чем ожидалось.

Думаю, вы сами ответили на свой вопрос, вариант XFS кажется лучшим (я думаю, вы даже получите прирост производительности). Более сложная часть должна заключаться в том, как преобразовать EXT3 / 4 в XFS?

Если ваше хранилище не является уникальным физическим RAID VD (и вы не сделали fs напрямую на BlockDevice - mkfs.ext4 / dev / sdb), то я мог бы предложить вам разбить дерево fs на более мелкие блоки и соответственно смонтировать их, настройте программное обеспечение для одновременной записи в оба места и, если возможно, разделите записи. Ex.

  • / alotofsmallfiles / часть1 -> / dev / ext4fs1
  • / alotofsmallfiles / часть 2 -> / dev / ext4fs2

Если разделение записей невозможно из приложения, вы можете создать cron, который перемещает файлы из раздела ext4 в новый XFS каждые п минут