- Вопрос или проблема
- 1. Какие факторы могут привести к тому, что временные метки не обновляются при использовании yum makecache?
- 2. Как работает механизм обновления временных меток для этих файлов и каталогов?
- 3. Почему файлы timedhosts(.txt) иногда могут автоматически обновлять свои временные метки?
- Вам может быть интересно проверить:
- Ответ или решение
- 1. Факторы, приводящие к отсутствию обновления временных меток
- 2. Механизм обновления временных меток
- 3. Причины, по которым timestamps файлов timedhosts.txt могут обновляться
- Заключение
Вопрос или проблема
Операционная среда: 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
Итак, мои вопросы:
-
Какие факторы могут привести к таким аномальным явлениям (временные метки этих специальных подкаталогов/файлов не обновляются через
yum makecache
)? -
Какой механизм обновления временных меток этих специальных подкаталогов/файлов с или без подкоманды
yum makecache
?Замечания: потому что мы иногда обнаруживали, что иногда файлы timedhosts(.txt) автоматически обновляют свои временные метки.
1. Какие факторы могут привести к тому, что временные метки не обновляются при использовании yum makecache?
- Попадание в кэш: Если метаданные репозитория на удаленных зеркалах не изменились с момента последнего обновления кэша,
yum
может не нуждаться в загрузке новых файлов метаданных. В таких случаяхyum
может пропустить обновление некоторых файлов или каталогов кэша, и временные метки не изменятся.yum makecache
обычно обновляет только в том случае, если обнаруживаются новые метаданные. Это применимо к вашему случаю только если вы очищаете свой кэш. - Поведение файловой системы (жесткие ссылки или атрибуты): Иногда определенные атрибуты файлов (например, неизменяемый или noatime) могут помешать файлам обновлять свои временные метки, как ожидалось. Использование
lsattr
на этих файлах может выявить такие атрибуты. Я бы предположил, что если скорости вашего зеркала не изменятся, yum будет продолжать создавать жесткую ссылку на тот же сектор диска с файлом, чтобы предотвратить повторное кэширование идентичного содержимого. Проверьте ваш/proc/mounts
. - Некоторые плагины
yum
или пользовательские скрипты: Определенные плагиныyum
(такие как fastestmirror, langpacks или priorities) могут влиять на поведение кэширования, изменяя обработку кэшированных метаданных. Кроме того, пользовательские скрипты или конфигурации, специфичные для системы, которые запускаются до или после командyum
, могут изменять или сбрасывать временные метки.
2. Как работает механизм обновления временных меток для этих файлов и каталогов?
При выполнении yum makecache
yum
проходит общий процесс обновления кэша и временных меток, который включает в себя:
- Проверка локального кэша и удаленных метаданных:
yum
сначала проверяет, являются ли локальные кэшированные метаданные актуальными. Если нет, то он загружает последние метаданные. Это действие обновляет временные метки на скачанных файлах или каталогах (/var/cache/yum/
и подкаталоги для конкретных репозиториев). - Обновление файлов
timedhosts
: Файлыtimedhosts
иtimedhosts.txt
отслеживают времена зеркал для выбора самых быстрых зеркал. Файлtimedhosts.txt
обновляется ТОЛЬКО если самое быстрое зеркало изменяется или если оно явно обновляется с помощью yum makecache. Этот файл может быть пропущен для обновления, если изменения во времени зеркала не произошло, что может объяснить, почему его временная метка иногда обновляется, а иногда нет. В паре с жесткими ссылками это позволитyum
пропустить новые I/O, если идентичный файл уже был записан.
3. Почему файлы timedhosts(.txt) иногда могут автоматически обновлять свои временные метки?
Файл timedhosts.txt
обновляется при определенных условиях:
- Переоценка скорости зеркал: Файл
timedhosts.txt
обновляется, когда yum переоценивает скорости зеркал (например, после того, как плагинfastestmirror
повторно проверяет и находит другие оптимальные зеркала). - Автоматические или периодические обновления
yum
:yum
на CentOS имеет встроенный таймер для проверки репозиториев, поэтому, если этот таймер достигнут, он может обновитьtimedhosts.txt
. - Ручное или сценарное очищение кэша: Скрипты могут очищать `/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. Факторы, приводящие к отсутствию обновления временных меток
-
Кэш с совпадением: Если метаданные репозитория на удалённых зеркалах не изменились с момента последнего обновления кэша,
yum
может не загружать новые файлы метаданных. В таком случае командаyum makecache
может пропустить обновление определенных файлов или каталогов, следовательно, временные метки не изменятся. Это объясняет, почему вы наблюдаете отсутствие обновления для некоторых файлов, если метаданные остаются неизменными. Обратите внимание, что это применимо в случае, если вы не очищали кэш. -
Поведение файловой системы: Определённые атрибуты файлов, такие как
immutable
или настройки монтированияnoatime
, могут препятствовать изменению временных меток. Вы можете использовать командуlsattr
, чтобы проверить наличие таких атрибутов для файлов. Еслиyum
создаёт жёсткие ссылки для оптимизации записи на диск, это может также объяснять, почему временные метки не обновляются. -
Плагины yum и пользовательские скрипты: Некоторые плагины, такие как
fastestmirror
илиlangpacks
, могут влиять на поведение кэширования. Убедитесь, что нет настроек или скриптов, которые могли бы сбрасывать или модифицировать временные метки после выполнения командyum
.
2. Механизм обновления временных меток
Команда yum makecache
выполняет следующие действия для обновления кэша и временных меток:
-
Проверка локального кэша и удалённых метаданных: Сначала
yum
проверяет, актуальны ли локально сохранённые метаданные. Если локальные данные устарели,yum
загружает последние метаданные, что приводит к обновлению временных меток загруженных файлов. -
Обновление файлов timedhosts: Файлы
timedhosts
иtimedhosts.txt
ведут учёт времени отклика зеркал для выбора оптимальных. Файлtimedhosts.txt
обновляется только в случае изменения скорости зеркал или если он явно обновляется командойyum makecache
. Если скорость зеркал не изменилась,yum
может пропустить обновление данного файла.
3. Причины, по которым timestamps файлов timedhosts.txt могут обновляться
Файл timedhosts.txt
может обновляться при определённых условиях:
-
Переоценка скорости зеркал: Файл обновляется, когда
yum
переоценивает скорость зеркал (например, после работы плагинаfastestmirror
). -
Автоматические или периодические обновления yum: Есть встроенный таймер
yum
, который может обновлять репозитории через определённые промежутки времени, что тоже может повлиять на обновление временных меток. -
Очистка кэша: Скрипты могут чистить каталог
/var/cache/yum/
, принуждаяyum
снова обновить кэш при следующем запуске, что приведёт к обновлению временных меток.
Заключение
Если вы испытываете проблемы с обновлением временных меток в каталоге /var/cache/yum
, рекомендуем вам проверить атрибуты файлов, запустить yum
в режиме отладки (yum -d 10 makecache
) и просмотреть результат выполнения команды. Таким образом, вы сможете получить более подробную информацию о поведении кэша и возможных причинах, влияющих на изменения временных меток.
Это поможет вам лучше понимать механизмы работы yum
и обеспечит более эффективное управление кэшем в вашей системе CentOS.