Файл/раздел подкачки (он же SWAP файл) используется для помощи оперативной памяти. В него отправляется та информация, которая по каким-то прчинам не попала в ОЗУ, хотя должна была обрабатываться именно там. В этой статье расскажу как создать и удалить файл подкачки.
Очевидно, что SWAP файл - это вынужденная мера. К примеру, если весь объём ОЗУ уже занят, а информация продолжает поступать. В таком случае будет подключен SWAP и информация будет писаться на диск. Но диски не рассчитаны на такую интенсивность и периодичность чтения/записи. Поэтому если компенсировать небольшое количество ОЗУ с помощью SWAP, то можно легко протереть дырку в диске. А из-за медлительности диска можно ещё и сильно потерять в производительности.
Создание SWAP файла
К счастью, в Linux можно сделать несколько SWAP файлов. Поэтому если не создали никакого SWAP раздела при установке системы, то компенсируйте это подключаемым файлом. Для быстрого создания SWAP файла нам потребуется утилита "fallocate". Возможно, она уже у вас есть. Поэтому заходите в консоль из-под суперпользователи (выполните "su" и введите пароль) и пишите:
fallocate -l 8G /swapfile
С помощью этой команды будет зарезервировано место под файл размером 8 Гигабайт (размер файла задаётся ключом "-l") по адресу "/swapfile". Теперь присвойте права этому файлу для чтения/изменения только администратору (пользователю "root"):
chmod 600 /swapfile
Остаётся только создать структуру данных для SWAP файла. Для этого выполните команду
mkswap /swapfile
Готово! Теперь система знает, что этот файл можно использовать в качестве файла подкачки. Остаётся только вовремя подключить его. К примеру, давайте поставим подключение этого файла на автозагрузку. Для этого откройте файл автозагрузки разделов "/etc/fstab". И в самый конец, новой строкой, допишите:
/swapfile none swap sw,nofail 0 0
Теперь ваш SWAP файл будет подключаться автоматически при старте системы. Но хотите включить SWAP файл здесь и сейчас, то выполните команду:
swapon -v /swapfile
Затем чтобы проверить статус SWAP выполните:
swapon --show
Удаление SWAP файла
Сначала отключаем SWAP файл:
swapoff -v /swapfile
Удаляем строчку из файла автозагрузки /etc/fstab
/swapfile swap swap defaults 0 0
Удаляем сам файл:
rm /swapfile
P.S.
Подключать SWAP файл нужно только тогда, когда это необходимо. Потому что за вероятность попадания в него информации отвечает значение vm.swappiness. Оно выражается в процентах и не ставится на ноль или сто. Поэтому невозможно штатными средствами запретить использовать SWAP "до крайней необходимости". Выход из положения описан в статье "Linux. Динамическое подключение SWAP".
Однажды у хостинг провайдера DigitalOcean перестало работать программно определяемое хранилище (сделанное на CEPH). Отключилась дублирующая 1/3 часть (все данные в хранилище дублируются в 3 экземплярах). В результате чего данные на этой 1/3 оказались недействительны. Это штатный случай потери дублированных данных, которые легко можно восстановить. Достаточно включить серверы обратно, и начнётся синхронизация. Пройдёт несколько дней, и данные будут синхронизированы.
Проблема оказалась в том, что при синхронизации такого объёма данных серверы начинают потреблять ОЗУ в огромных объёмах. Установленных планок ОЗУ хватало для штатной работы системы, а как только настал момент восстановления, то упало уже абсолютно всё.
В этот момент инженеры DigitalOcean проверили состояние серверов, увидели что вся система встала из-за полностью забитого ОЗУ на всех серверах и... побежали вставлять планки ОЗУ в серверы! Это заняло у них 48 часов. В течение которых система вяло синхронизировалась из-за малого количества ОЗУ.
После устранения всех проблем и успешного завершения синхронизации, было начато расследование. Оказалось, что всё можно было бы исправить намного быстрее и дешевле, если бы были созданы обычные SWAP файлы на период синхронизации. На серверах с SSD накопителями файлы читаются почти с той же скоростью и задержками, что и из оперативной памяти. Разве что износ дисков бы увеличился. Но время эксплуатации SWAP файлов составило бы несколько часов, что не сильно ударит по времени жизни дисков.
Если при монтировании swap через:
swapon -v /swapfile
Возникнет ошибка:
swapon: /swapfile: swapon failed: Недопустимый аргумент
То создание файла надо делать не через команду:
fallocate -l 8G /swapfile
А через:
dd if=/dev/zero of=/swapfile bs=1MB count=8000