Как настроить swap в виде файла в ОС Linux? Такой вопрос может возникнуть в том случае, если к разделам у вас доступа нет, а своп все же нужен. Например, когда я запускал сервис Youtrack на VDS, оперативной памяти, которой там 2 GB, мне хватало впритык, и сервис не хотел нормально стартовать. Выделение дополнительного swap-файла решило эту проблему.
Что такое swap?
SWAP – один из механизмов виртуальной памяти, при котором отдельные фрагменты памяти (обычно неактивные) перемещаются из ОЗУ во вторичное хранилище (отдельный раздел или файл), освобождая ОЗУ для загрузки других активных фрагментов памяти. (с) Ubuntu Help
Или, говоря простым языком, это такое место на жестком диске (или SSD, смотря, что у вас установлено), куда ОС будет складывать неиспользуемые в текущий момент кусочки оперативной памяти, освобождая ее для тех программ, которым ее не хватает.
Обычно под swap выделяют отдельный раздел на жестком диске, монтируя его при загрузке системы как swap, в таком случае его еще можно использовать для гибернации (туда будет складываться слепок текущего состояния ОЗУ для последующего «пробуждения» (загрузки)). Отсюда следует одно правило: размер swap раздела должен быть как минимум не меньше, а лучше в два раза больше объема оперативной памяти. Изначально это шло из-за ограничений по ОЗУ на машинах (когда 2Гб памяти явно не хватало), но со временем такое требование ушло в небытие, так как объемы оперативной памяти стали неуклонно расти, и сейчас машиной с 64 Гб ОЗУ уже никого не удивишь.
Итак, для начала нужно проверить, подключен ли swap. Для этого введите следующую команду:
sudo swapon -s
Команда вводится от root-пользователя, либо под sudo. В результате будет показана таблица с текущими подключенными swap разделами или файлами.
Filename Type Size Used Priority
Как видно из примера выше, сейчас у меня swap не подключен. Для начала нужно создать файл, который будет выполнять роль swap.
sudo fallocate -l 1G /swapfile
Эта команда создает в корне системного раздела файл swapfile размером 1 Гб. Далее нужно выделить ему соответствующие права:
sudo chmod 600 /swapfile
Права 600 означают, что права на запись и чтение файла будет иметь только владелец, в данном случае root, так как команда выполняется от него. Создаем swap в этом файле:
sudo mkswap /swapfile
Далее нужно созданный swap активировать:
sudo swapon /swapfile
Если теперь проверить наличие swap, то можно увидеть примерно следующее:
Filename Type Size Used Priority
/swapfile file 4194300 552192 -2
На этом еще не все. Мы создали и подключили swap-файл, но он еще не подключается автоматически при загрузке системы, то есть при первой же перезагрузке системы своп работать не будет. Для этого нам нужено исправить файл монтирования файловых систем /etc/fstab. Откройте его любым привычным редактором, например
sudo nano /etc/fstab
и добавьте в конец следующую строчку:
/swapfile none swap sw 0 0
Обратите внимание, что после последней строки должен быть обязательный переход на следующую строку.
На этом все, при перезагрузках swap-файл будет автоматически монтироваться в систему.
зачем добавлять лишнею слой(файловая система) между памятью и swap ?
Бывают случаи, когда это единственный способ достаточно безболезненно «расширить» оперативку. Например, на VDS, где «физически» разбить выделенный объем диска не представляется возможным, а выделяемой оперативки мало для нормальной работы софта. Покупать более «жирный» по оперативке тариф — дороже чуть ли не в три раза, поэтому такой способ вполне годен. Тем более, что на SSD скорость работы со своп-файлом не будет сильно критична.
VDS он такой