Представим ситуацию — у тебя на кухне гудит сервак, ты запускаешь на нем
apt update и внезапно отключают свет. Через минуту свет включают, ты запускаешь вновь apt update, а оно тебе орет:The package cache file is corrupted
Что это за покемон? Почему оно сломалось?
Потому что во время операции
apt update, часть данных была сохранена в памяти и данные просто не успели записаться на диск. Соответственно целостность файла с кешем была похерена.Давай посмотрим:
free -h
Смотрим столбец buff/cache, в нем видим что-то вроде: 383Mi.
Это и есть те данные которые еще не успели записаться на диск и находятся в пограничном состоянии. Если сейчас выключат свет, все эти данные в памяти похерятся.
В Linux есть команда
sync, которая позволяет насильно записать все данные из памяти на диск.Но если после
sync повторно запустить free -h, изменений ты не увидишь, потому что sync ничего не зачищает, а только записывает.Зачистить можно так:
sync; echo 1 > /proc/sys/vm/drop_caches
sync; echo 2 > /proc/sys/vm/drop_caches
sync; echo 3 > /proc/sys/vm/drop_caches
Хуячим командами в ядро и зачищаем buff/cache, теперь можно снова запустить
free -h и лицезреть меньший размер.⚪Очищает кэш страниц (page cache), который используется для кэширования содержимого файлов и каталогов.
⚪Очищает только кэш объектов inode и dentry (данные о файловой системе, такие как пути и метаданные файлов).
⚪ Очищает как кэш страниц, так и кэш объектов inode и dentry.
Где применять?
1. Перед отключением устройства (umount)
2. Перед очисткой кэшей памяти (drop_caches)
3. После крупных файловых операций
4. В bash скриптах для безопасного завершения
А для анализа всех этих кешей, памяти, буферов и т.п. есть несколько утилит:
vmtouch, bpfcc-tools, dstat. Можешь потыкать на досуге.Пользуйтесь!
tags: #linux
—
🔔 @bashdays➡️ @gitgate