Что означает ошибка «Файл слишком велик для конечной файловой системы» и что делать сначала

Ошибка появляется, когда размер записываемого файла превышает лимит текущей файловой системы или когда раздел/образ не допускает такой файл (также возможен полный диск или исчерпание inode). Первые действия — проверить место и тип ФС: df -h, df -i, stat -f /путь.

Почему возникает ошибка

  • Лимиты ФС. Например, FAT32 не пропускает файлы >4 ГБ; ext4 при разных размерах блока ограничен (~2 ТБ при маленьком блоке, до 16 ТБ при стандартном 4K). XFS и Btrfs поддерживают намного большие файлы.
  • Малый раздел/образ. Loop-файлы, контейнерные диски и образа Docker часто имеют фиксированный размер (4–10–50 ГБ) и не расширяются автоматически.
  • Полный диск или исчерпание inode. При 100% использования места или inode запись не проходит.
  • Огрaничения монтирования/права. Некоторые FUSE‑провайдеры или сетевые ФС могут иметь свои лимиты.

Не путать с "Argument list too long" — это про слишком много аргументов в команде, а не про размер одного файла.

Как быстро диагностировать (команды и что смотреть)

Выполните в терминале — это прояснит большинство причин:

  • Проверка места и типов:
    • df -h /path — свободное место
    • df -i /path — inode
    • df -T /path — тип ФС (Linux)
    • stat -f -c "%T %S" /path — тип и размер блока (альтернатива)
  • Информация о ext4:
    • dumpe2fs /dev/sdX | grep -i 'block size'
    • tune2fs -l /dev/sdX | grep 'Block size'
  • Для контейнеров/образов:
    • docker info | grep -i 'Docker Root Dir'
    • docker system df
    • losetup -a и mount — ищите loop‑устройства
  • Дополнительно:
    • lsblk — структура дисков/разделов
    • du -sh * | sort -h — где «жрёт» место Интерпретация: если df показывает 100% — чистим/удаляем; если inode 100% — удаляем много мелких файлов; если тип ФС — FAT32/образ со 4 ГБ — нужно менять образ/ФС или разбивать файл.

Способы исправить в зависимости от причины

  1. Освободить место / inode
  • Удалите ненужные файлы, очистите /var/log, временные данные.
  • Поиск больших файлов: ncdu /path или du -sh /path/* | sort -h.
  • Удаление старых журналов: journalctl --vacuum-size=200M.
  1. Расширить раздел или ФС
  • Для LVM: lvextend -L +10G /dev/mapper/vg-name && resize2fs /dev/mapper/vg-name
  • Для ext4 на разделе: resize2fs /dev/sdX (предварительно расширив раздел через fdisk/parted). Внимание: всегда делайте бэкап перед операциями с разделами.
  1. Пересоздать ФС с большим размером блока или сменить тип
  • mkfs.ext4 -b 4096 /dev/sdX — повысит лимит отдельного файла (требует форматирования и бэкапа).
  • Если часто нужны огромные файлы, рассмотрите XFS или Btrfs:
    • mkfs.xfs -f /dev/sdX XFS/Btrfs поддерживают терабайты и экзабайты, лучше для больших файлов.
  1. В Docker/виртуальных образах
  • Пересоздать образ/контейнерное хранилище с большим базовым размером (в зависимости от драйвера storage): для daemon.json указать storage-opts или при создании образа установить size.
  • Для loop‑образов — создать новый образ нужного размера и перенести данные.
  1. Разбить файл / сжать
  • split -b 2G большой_файл part_
  • tar -czf archive.tar.gz dir/
  • rsync --partial для передачи большого файла на удалённый хост Это быстрое обходное решение, если изменить ФС невозможно.
  1. Для теста
  • fallocate -l 10G test.file — проверка, позволит ли система создать файл указанного размера.

Частые ошибки

  • Пытаются расширить ext4 без изменения размера раздела.
  • Форматирование нового раздела без бэкапа данных.
  • Игнорирование inode: при множестве мелких файлов место есть, но записи не пройдут.
  • Смена ФС в контейнере без пересмотра storage-driver.

FAQ

  • В: Почему FAT32 сообщает ошибку при попытке записать 5 ГБ?
    О: FAT32 ограничен 4 ГБ на файл — используйте NTFS/XFS/ext4/Btrfs или разбейте файл.

  • В: Можно ли увеличить максимальный размер файла на ext4 без форматирования?
    О: Нет — лимит зависит от размера блока и метаданных, изменить его можно только пересоздав ФС с нужными параметрами или перейдя на другую ФС.

  • В: Как быстро понять — проблема в Docker или в хосте?
    О: Проверьте путь целевого файла через mount/df — если путь указывает на Docker Root Dir или loop‑устройство, проблема в образе/контейнере.

Если после диагностики не ясно, что ограничивает запись, опишите выводы df -h, df -i, stat -f и info о разделе — по ним можно дать точный шаг.