Чтобы каждый раз не задрачивать жёсткий диск операциями чтения и записи, ядро Linux обычно сохраняет некоторую часть данных в памяти.

Представим ситуацию: у тебя на кухне гудит сервак, ты запускаешь на нём apt update, и внезапно отключают свет. Через минуту свет включают, ты запускаешь вновь apt update, а оно тебе орёт:

The package cache file is corrupted

Что это за покемон? Почему оно сломалось?

Потому что во время операции apt update часть данных была сохранена в памяти и данные просто не успели записаться на диск. Соответственно, целостность файла с кешем была похерена.

Давай посмотрим:

free -h

Смотрим столбец buff/cache, в нём видим что-то вроде 383 MiB.

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

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
В 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. Можешь потыкать на досуге.

Пользуйтесь!