Почему временные метки в /var/cache/yum не изменяются после yum makecache?

Вопрос или проблема

Операционная среда: CentOS 7.6.1810 + yum-3.4.3-161.el7.centos.noarch

Мы обнаружили некоторые странные явления с временными метками подкаталогов/файлов в /var/cachec/yum на одной из наших систем CentOS. То есть, после выполнения yum makecache subcmd временные метки подкаталога 7 (cachedir) и файлов timedhosts(.txt) не обновлялись.

Замечания: на всех остальных обычных системах в большинстве случаев только временная метка файла timedhosts.txt не обновлялась после выполнения yum makecache subcmd.
Также содержимое всех подкаталога/файлов (включая метаданные репозитория) не изменялось, только их временные метки обновлялись.

# yum makecache fast
Загруженные плагины: fastestmirror, langpacks, priorities
Загрузка скоростей зеркал из кэшированного файла хоста
centos                                                                                                                                                                                                               | 3.0 kB  00:00:00     
epel                                                                                                                                                                                                                 | 5.3 kB  00:00:00     
zabbix                                                                                                                                                                                                               | 2.9 kB  00:00:00     
Кэш метаданных создан
# 
# ls -ltr /var/cache/yum/x86_64/
всего 0
drwxr-xr-x 5 root root 86 May 26  2020 7 
# 
# ls -ltr /var/cache/yum/x86_64/7
всего 16
-rw-r--r-- 1 root root   87 May 26  2020 timedhosts
-rw-r--r-- 1 root root    0 Jun  9 18:25 timedhosts.txt
drwxr-xr-x 4 root root 4096 Jun 26 22:08 zabbix
drwxr-xr-x 4 root root 4096 Jun 26 22:08 epel
drwxr-xr-x 4 root root 4096 Jun 26 22:08 centos
# 

Замечания: здесь вышеуказанные выводы на тот момент были просто Jun 26 22:08 2024

Итак, мои вопросы:

  1. Какие факторы могут привести к таким аномальным явлениям (временные метки этих специальных подкаталогов/файлов не обновляются через yum makecache)?

  2. Какой механизм обновления временных меток этих специальных подкаталогов/файлов с или без подкоманды yum makecache?

    Замечания: потому что мы иногда обнаруживали, что иногда файлы timedhosts(.txt) автоматически обновляют свои временные метки.

1. Какие факторы могут привести к тому, что временные метки не обновляются при использовании yum makecache?

  1. Попадание в кэш: Если метаданные репозитория на удаленных зеркалах не изменились с момента последнего обновления кэша, yum может не нуждаться в загрузке новых файлов метаданных. В таких случаях yum может пропустить обновление некоторых файлов или каталогов кэша, и временные метки не изменятся. yum makecache обычно обновляет только в том случае, если обнаруживаются новые метаданные. Это применимо к вашему случаю только если вы очищаете свой кэш.
  2. Поведение файловой системы (жесткие ссылки или атрибуты): Иногда определенные атрибуты файлов (например, неизменяемый или noatime) могут помешать файлам обновлять свои временные метки, как ожидалось. Использование lsattr на этих файлах может выявить такие атрибуты. Я бы предположил, что если скорости вашего зеркала не изменятся, yum будет продолжать создавать жесткую ссылку на тот же сектор диска с файлом, чтобы предотвратить повторное кэширование идентичного содержимого. Проверьте ваш /proc/mounts.
  3. Некоторые плагины yum или пользовательские скрипты: Определенные плагины yum (такие как fastestmirror, langpacks или priorities) могут влиять на поведение кэширования, изменяя обработку кэшированных метаданных. Кроме того, пользовательские скрипты или конфигурации, специфичные для системы, которые запускаются до или после команд yum, могут изменять или сбрасывать временные метки.

2. Как работает механизм обновления временных меток для этих файлов и каталогов?

При выполнении yum makecache yum проходит общий процесс обновления кэша и временных меток, который включает в себя:

  1. Проверка локального кэша и удаленных метаданных: yum сначала проверяет, являются ли локальные кэшированные метаданные актуальными. Если нет, то он загружает последние метаданные. Это действие обновляет временные метки на скачанных файлах или каталогах (/var/cache/yum/ и подкаталоги для конкретных репозиториев).
  2. Обновление файлов timedhosts: Файлы timedhosts и timedhosts.txt отслеживают времена зеркал для выбора самых быстрых зеркал. Файл timedhosts.txt обновляется ТОЛЬКО если самое быстрое зеркало изменяется или если оно явно обновляется с помощью yum makecache. Этот файл может быть пропущен для обновления, если изменения во времени зеркала не произошло, что может объяснить, почему его временная метка иногда обновляется, а иногда нет. В паре с жесткими ссылками это позволит yum пропустить новые I/O, если идентичный файл уже был записан.

3. Почему файлы timedhosts(.txt) иногда могут автоматически обновлять свои временные метки?

Файл timedhosts.txt обновляется при определенных условиях:

  1. Переоценка скорости зеркал: Файл timedhosts.txt обновляется, когда yum переоценивает скорости зеркал (например, после того, как плагин fastestmirror повторно проверяет и находит другие оптимальные зеркала).
  2. Автоматические или периодические обновления yum: yum на CentOS имеет встроенный таймер для проверки репозиториев, поэтому, если этот таймер достигнут, он может обновить timedhosts.txt.
  3. Ручное или сценарное очищение кэша: Скрипты могут очищать `/var/cache/yum/`, принуждая YUM обновить кэш при следующем запуске, что обновит временные метки на всех соответствующих файлах.

Вам может быть интересно проверить:

Проверьте атрибуты файла: Используйте lsattr на timedhosts, timedhosts.txt и других файлах, чтобы убедиться, что они не помечены необычными атрибутами (например, i для неизменяемых).

Проверьте в режиме отладки: Выполнение yum -v makecache для подробного вывода или yum -d 10 makecache для отладочного вывода может предоставить более подробную информацию о процессе кэширования и о том, почему он может или не может обновлять конкретные файлы.

Проверьте атрибуты вашей файловой системы. Различные флаги, такие как cow и noatime, могут повлиять на то, обновляются ли временные метки файла даже после получения идентичного содержимого.

Ответ или решение

Тimestamps файлов в каталоге /var/cache/yum при выполнении команды yum makecache могут не изменяться по нескольким причинам. В данном ответе мы рассмотрим факторы, которые могут повлиять на это поведение, механизмы обновления временных меток и возможные причины автоматического обновления некоторых файлов, таких как timedhosts.txt.

1. Факторы, приводящие к отсутствию обновления временных меток

  1. Кэш с совпадением: Если метаданные репозитория на удалённых зеркалах не изменились с момента последнего обновления кэша, yum может не загружать новые файлы метаданных. В таком случае команда yum makecache может пропустить обновление определенных файлов или каталогов, следовательно, временные метки не изменятся. Это объясняет, почему вы наблюдаете отсутствие обновления для некоторых файлов, если метаданные остаются неизменными. Обратите внимание, что это применимо в случае, если вы не очищали кэш.

  2. Поведение файловой системы: Определённые атрибуты файлов, такие как immutable или настройки монтирования noatime, могут препятствовать изменению временных меток. Вы можете использовать команду lsattr, чтобы проверить наличие таких атрибутов для файлов. Если yum создаёт жёсткие ссылки для оптимизации записи на диск, это может также объяснять, почему временные метки не обновляются.

  3. Плагины yum и пользовательские скрипты: Некоторые плагины, такие как fastestmirror или langpacks, могут влиять на поведение кэширования. Убедитесь, что нет настроек или скриптов, которые могли бы сбрасывать или модифицировать временные метки после выполнения команд yum.

2. Механизм обновления временных меток

Команда yum makecache выполняет следующие действия для обновления кэша и временных меток:

  1. Проверка локального кэша и удалённых метаданных: Сначала yum проверяет, актуальны ли локально сохранённые метаданные. Если локальные данные устарели, yum загружает последние метаданные, что приводит к обновлению временных меток загруженных файлов.

  2. Обновление файлов timedhosts: Файлы timedhosts и timedhosts.txt ведут учёт времени отклика зеркал для выбора оптимальных. Файл timedhosts.txt обновляется только в случае изменения скорости зеркал или если он явно обновляется командой yum makecache. Если скорость зеркал не изменилась, yum может пропустить обновление данного файла.

3. Причины, по которым timestamps файлов timedhosts.txt могут обновляться

Файл timedhosts.txt может обновляться при определённых условиях:

  1. Переоценка скорости зеркал: Файл обновляется, когда yum переоценивает скорость зеркал (например, после работы плагина fastestmirror).

  2. Автоматические или периодические обновления yum: Есть встроенный таймер yum, который может обновлять репозитории через определённые промежутки времени, что тоже может повлиять на обновление временных меток.

  3. Очистка кэша: Скрипты могут чистить каталог /var/cache/yum/, принуждая yum снова обновить кэш при следующем запуске, что приведёт к обновлению временных меток.

Заключение

Если вы испытываете проблемы с обновлением временных меток в каталоге /var/cache/yum, рекомендуем вам проверить атрибуты файлов, запустить yum в режиме отладки (yum -d 10 makecache) и просмотреть результат выполнения команды. Таким образом, вы сможете получить более подробную информацию о поведении кэша и возможных причинах, влияющих на изменения временных меток.

Это поможет вам лучше понимать механизмы работы yum и обеспечит более эффективное управление кэшем в вашей системе CentOS.

Оцените материал
Добавить комментарий

Капча загружается...