Логотип

[Ошибка] Утилита Rust du сообщает о неправильном размере в Ubuntu 25.10

[Ошибка] Утилита Rust du сообщает о неправильном размере в Ubuntu 25.10

Команда du — это стандартный инструмент для проверки использования диска в системах Linux и Unix. Однако пользователи Ubuntu 25.10 заметили кое-что странное. При подсчёте размеров каталогов современный инструмент uutils du на базе Rust показывает неправильное использование диска, когда родительские и дочерние каталоги перекрываются в Ubuntu 25.10.

Пользователи сообщают, что команда uutils du неправильно подсчитывает размер каталогов из-за двойного учёта, и итоговые значения кажутся слишком большими по сравнению с классической версией GNU coreutils.

 

Ловушка двойного счета

Проект uutils coreutils направлен на переписывание стандартных утилит Linux с использованием языка программирования Rust . Его основная цель — стать полноценной заменой традиционных инструментов GNU . Следовательно, разработчики считают любые отличия в поведении от GNU ошибками.

Текущая проблема возникает, когда вы просите du проверить сразу два пересекающихся каталога.

Пользователь на форуме AskUbuntu сообщил, что новая команда du из Rust uutils выдаёт неверные данные о размере файлов в Ubuntu 25.10.

Он попытался проверить родительский каталог и один из его подкаталогов с помощью одной команды, например /var и /var/log. Версия GNU справилась с задачей и вывела правильный размер, но uutils не сработала.

 

Пример:

В соответствующей проблеме на GitHub тот же пользователь привёл простой тестовый пример, демонстрирующий каталог общим размером 15 МБ, в одном из подкаталогов которого содержится 5 МБ данных.

  • Правильное общее значение (GNU): Версия GNU правильно вычисляет общее использование как 15 MiB. Она учитывает файлы в подкаталоге только один раз.
  • Неправильное общее значение (uutils v0.2.2): Версия uutils сообщает об общем использовании как 20 MiB. По сути, она прибавляет размер подкаталога к размеру родительского каталога, считая эти внутренние файлы дважды.
Читать  Как удалить пустые строки в файле в Linux

 

Это несоответствие возникает из-за того, что uutils суммирует отдельные аргументы, не проверяя, учитывались ли эти данные ранее.

 

Проблема с порядком аргументов

Эта проблема в значительной степени связана с проблемой с порядком аргументов, которая возникает из-за того, как программа обрабатывает повторяющиеся данные.

При проверке нескольких каталогов традиционная команда GNU du и такие утилиты, как Busybox, фактически меняют вывод в зависимости от порядка перечисления каталогов. Тем не менее, даже если они меняют вывод для каждого каталога, GNU и Busybox сходятся в определении правильного итогового размера.

Интересно, что uutils du (версия 0.2.2) на основе Rust сохраняет согласованность независимо от порядка аргументов. Каждый раз он выдаёт один и тот же, но всё же неправильныйзавышенный общий размер.

Это говорит о том, что uutils не проверяет должным образом файлы и каталоги, которые уже были просуммированы.

Некоторые пользователи даже предположили, что утилита Rust может неправильно выполнять подсчёт ссылок, что может приводить к ошибкам при суммировании.

 

Стандарт POSIX поддерживает исправление

Другой пользователь в той же ветке AskUbuntu поделился другим мнением по этому вопросу.

В течение многих лет стандарты файловых систем содержали противоречивые рекомендации по этому вопросу.

  • В более ранней версии стандарта POSIX 2018 года отмечалось, что подсчёт файлов, находящихся в нескольких каталогах, зависит от реализации. Разные инструменты могут вести себя по-разному.
  • Но в новой версии стандарта POSIX 2024 года эта путаница устранена. Теперь стандарт требует, чтобы файл учитывался и отображался только в одной записи. Это означает, что поведение GNU, при котором содержимое учитывается только один раз, теперь является обязательным стандартом.
Читать  Команда Chroot в Linux с примерами

 

Поскольку uutils явно нацелен на точное соответствие выводам GNU, такое двойное подсчитывание считается настоящей ошибкой, связанной с несовместимостью.

 

Текущий статус: ошибка открыта!

Разработчики признают, что эта проблема с двойным подсчётом является ошибкой, связанной с несовместимостью. Она определённо противоречит основной цели проекта: точному соответствию выводам GNU.

  • Статус: Это открытая проблема.
  • Отслеживание: В настоящее время ошибка отслеживается на GitHub как проблема № 9202.
  • Ход решения: На момент написания этого поста не было ни веток, ни запросов на вытягивание, связанных с проблемой № 9202. Поэтому я думаю, что прямое решение всё ещё разрабатывается.

 

Временное решение проблемы

Если вы используете версию du на основе uutils coreutils (например, версию 0.2.2 или аналогичную в новых выпусках Ubuntu), вам следует избегать использования перекрывающихся каталогов при одном вызове du .

Чтобы узнать точный общий размер родительского каталога, просто выполните команду для родительского каталога. Например, чтобы проверить размер /var, просто введите:

du -smc /var

 

Это гарантирует, что вы получите правильное представление о полном размере /var, соответствующее тому, что предоставляет версия GNU.

Следите за нашими обновлениями, так как команда Rust uutils усердно работает над тем, чтобы их coreutils стала идеальной заменой, которая нужна всем нам.

Редактор: AndreyEx

Рейтинг: 5 (1 голос)
Если статья понравилась, то поделитесь ей в социальных сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Загрузка...

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала