- SWAP — как создать, подключить, очистить и отключить файл подкачки в Linux
- Что такое SWAP
- Когда может понадобиться своп
- Преимущества SWAP
- Недостатки SWAP
- Как создать и подключить файл подкачки SWAP
- Проверка наличия свопа в системе
- Проверка наличия свободного места на диске
- Какого размера создать swap
- Создание файла SWAP
- Как подключить SWAP файл
- Добавление свопа в автозагрузку
- Дополнительные вопросы
- Как очистить SWAP в Linux
- Файл и раздел подкачки в Linux. Разница между swapping и paging
- Swapping vs. Paging
- Типы памяти подкачки
- Преимущества использования памяти подкачки
- Раздел подкачки
- Добавление раздела подкачки
- Удаление раздела подкачки
- Файл подкачки
- Добавление файла подкачки
- Удаление файла подкачки
- Насколько большим должно быть пространство подкачки?
- Настройка частоты использования пространства подкачки
- Заключение
SWAP — как создать, подключить, очистить и отключить файл подкачки в Linux
Что такое SWAP
SWAP (своп) — это механизм виртуальной памяти, при котором часть данных из оперативной памяти (ОЗУ) перемещается на хранение на HDD (жёсткий диск), SSD (твёрдотельный накопитель), флеш-накопитель или иное вторичное хранилище. Как правило, swapping (свопинг) происходит, когда оперативная память переполнена, и ей для работы требуется дополнительное пространство.
Когда может понадобиться своп
Зачастую, от недостатка свободной памяти первой страдает база данных. Вы можете сталкиваться с проблемами типа:
- Постоянное падение сайта: Ошибка соединения с базой данных — означает, например, что MySQL упал;
- При внимательном изучении логов /var/log/mysql.log обнаруживается ошибка InnoDB: Fatal error: cannot allocate memory for the buffer pool . Она свидетельствует о том, что базе данных не хватает выделенной ей оперативной памяти для создания буфера.
При подобных симптомах и ошибках может помочь своппинг.
Преимущества SWAP
Сравнение стоимости оперативной памяти и SSD | ||
(цены актуальны на 7 июля 2017 года) | IHOR | FirstVDS |
Оперативная память, в среднем за 1 гигабайт | 100 рублей в месяц | 170 рублей в месяц |
SSD, в среднем за 1 гигабайт | 10 рублей в месяц | 13 рублей в месяц |
Как видно из таблицы, экономия выйдет примерно в 10 раз.
Недостатки SWAP
SWAP — это не замена оперативной памяти, а всего лишь его поддержка.
Как создать и подключить файл подкачки SWAP
Далее, в работе используется командная строка SSH.
Инструментарий: Far Manager или Putty.
Для примера приводятся команды из под root . Если Вы работаете не под root , перед командами задавайте префикс sudo
Проверка наличия свопа в системе
Для начала, нужно убедиться, что своп ещё не подключен:
Если команда выдала пустой результат или что-то навроде:
— значит, своп, скорее всего отсутствует.
Дополнительно проверим командой:
Если в таблице в строке swap стоит 0, значит своп отсутствует.
Проверка наличия свободного места на диске
Теперь, надо проверить, сколько свободного места есть на диске:
В результате, мы увидим что-то подобное:
Как мы видим, доступно 9 гигабайт дискового пространства — вполне достаточно, чтобы создать своп-файл.
Какого размера создать swap
Исходите из принципа — сколько может понадобиться, столько и выделяйте. Как правило, можно начинать с размера объёма оперативной памяти, либо его удвоенного количества. Например, если у вас в системе 2 гигабайта оперативки, своп можно сделать размером 2-4 гигабайта, как правило, этого должно хватать. Но, Вы можете скорректировать его размер под себя.
Создание файла SWAP
Допустим, мы хотим создать swap-файл размером 4 гигабайта.
Далее, здесь существует 2 подхода, традиционный медленный и новый быстрый:
Быстрый способ Используем fallocate :
Результатом будет пустая строка, это нормально.
В отличие от dd , результат будет получен почти сразу, и я рекомендую именно его. Традиционный, медленный способ Или используем команду:
Синтаксис команды простой:
- dd — команда предназначена для того, чтобы что-то куда-то копировать побайтово;
- if=/dev/zero — указывает на источник, т.е. на то, откуда копируем, в данном случае из /dev/zero — это специальный файл в UNIX-подобных системах, представляющий собой источник нулевых байтов;
- of=/swapfile — указывает путь назначения, куда копируем данные;
- bs=1G — количество байт, которые будут записаны за раз. В нашем случае, 1 гигабайт. Обозначения: G — гигабайт, M — мегабайт, K — килобайт, и так далее;
- count=4 — сколько блоков размером с bs будет создано, в нашем случае 4.
Будьте очень внимательны с синтаксисом команды, потому что если, например, ошибиться с определением пути для of= (куда сохранять файл), можно повредить данные на диске.
Теперь, когда файл создан, проверим результат:
В результате увидим:
-rw-r—r— 1 root root 4.0G Jul 07 16:16 /swapfile
Как видим, файл создался верно и с нужным объёмом.
Как подключить SWAP файл
Для начала, ограничим права доступа к вновь созданному файлу.
Предоставление другим пользователям возможности читать или писать в этот файл будет представлять собой огромный риск для безопасности, поэтому ограничение командой ниже строго обязательно:
В результате, мы должны увидеть подобное:
-rw——- 1 root root 4.0G Jul 07 16:16 /swapfile
Права прописаны верно.
Теперь нужно сделать из swapfile файл подкачки:
В результате, увидим примерно следующее:
Setting up swapspace version 1, size = 4193300 KiB
no label, UUID=e5f3e9cf-c1a9-4ed4-b8ab-711b6a7d6544
Теперь, файл готов в роли свопа. Подключим его к системе:
Если на данном этапе выходит похожая ошибка, значит, скорее всего, своп запрещено подключать в систему. Такое ограничение часто ставят на VDS с виртуализацией OpenVZ. Рекомендую использовать IHOR, сервера от 100 рублей в месяц и виртуализация KVM позволяют включать SWAP.
Всё, теперь своп подключен и работает. Осталось проверить правильность работы самой первой командой:
Своп также будет виден в стандартных командах:
Всё, теперь точно, своп в системе готов и будет использоваться при необходимости.
Добавление свопа в автозагрузку
Чтобы при перезагрузке сервера своп автоматически подтягивался в систему, нужно прописать его в /etc/fstab :
Теперь система знает, где и как при перезагрузке искать и подключать своп.
Проверить, подключен ли своп в автозагрузке, можно с помощью редактора:
Дополнительные вопросы
Как очистить SWAP в Linux
Вообще, это делается с помощью отключения и включения свопа.
Однако, я не рекомендую прибегать к этому способу, так как swap просто очищается, а не переносится в ОЗУ, и, в случае наличия данных системных процессов, система может стать недоступна.
Источник
Файл и раздел подкачки в Linux. Разница между swapping и paging
Обновл. 23 Июн 2021 |
Каждая операционная система имеет в своем распоряжении некоторый выделенный объем оперативной памяти, с помощью которого она производит обработку различных программ. Однако этот объем ограничен и не может вместить в себя слишком большое количество данных. В связи с этим у системы появляется потребность в дополнительном резерве памяти, к которому можно было бы обратиться всякий раз, когда исчерпывается оперативная память.
Данная концепция применима как к операционной системе Windows, так и к Linux-системам. В ОС Windows, если возникает ситуация, когда для хранения процесса не хватает оперативной памяти, то система занимает некоторый объем памяти (т.н. «виртуальной памяти») из вторичного хранилища. Аналогичным образом поступают и Linux-системы.
Таким образом, оперативная память всегда обладает достаточным объемом памяти для сохранения в ней любого вновь запускаемого процесса. Заимствованное пространство жесткого диска называется памятью подкачки (англ. «swap memory»). И в этой статье мы подробно рассмотрим механизм памяти подкачки, его свойства и работу с ним в Linux.
Swapping vs. Paging
Paging — это процесс, при котором Linux делит свою физическую оперативную память на куски фиксированного размера (4 КБ), называемые страницами (англ. «pages»).
Swapping (или «подкачка памяти») — это процесс, при котором страница памяти копируется в специальное пространство на жестком диске, называемое пространством подкачки (англ. «swap space»), освобождая занимаемый ею объем оперативной памяти. В Linux для этого существует специальная программа — менеджер памяти. Каждый раз, когда системе требуется больше памяти, чем ей физически доступно в данный момент, менеджер памяти ищет все редко используемые страницы памяти и вытесняет их на жесткий диск, предоставляя освободившуюся память другому приложению (процессу).
Часто случается так, что приложение в момент своего старта задействует существенное количество страниц памяти, которые в дальнейшем ему больше не потребуются. В таких случаях операционная система также может произвести вытеснение подобных страниц памяти на диск, освободив тем самым память для других приложений (или даже для дискового кэша).
Рассмотрим основные различия между Swapping и Paging:
Swapping | Paging |
Процедура копирования памяти всего процесса. | Метод выделения памяти. |
Возникает тогда, когда память всего процесса переносится на диск. | Возникает тогда, когда какая-то часть процесса переносится на диск. |
Происходит временное вытеснение данных из основной памяти во вторичную. | Непрерывный фрагмент памяти разбивается на несколько отдельных блоков фиксированного размера, называемых фреймами (frames) или страницами (pages). |
Может выполняться без какого-либо управления памятью. | Управляется менеджером памяти. |
Выполняется над неактивными процессами. | Выполняется только с участием активных процессов. |
Типы памяти подкачки
Как правило, существует два различных типа памяти подкачки:
Раздел подкачки (англ. «swap partition») — тип памяти подкачки по умолчанию. Представляет собой раздел жесткого диска, используемый исключительно для подкачки памяти; никакие другие файлы не могут находиться там.
Файл подкачки (англ. «swap file») — специальный файл, который находится среди остальных файлов вашей файловой системы.
Чтобы узнать, каким объемом памяти подкачки вы владеете, используйте следующую команду:
Каждая перечисленная строка на вышеприведенном скриншоте (у нас всего 1 строка) обозначает имеющиеся у нас пространства подкачки. Рассмотрим детально пункты вывода:
Filename — указывает на расположение пространства подкачки (мы видим, что наш раздел подкачки находится в /dev/sda5).
Type — указывает, что пространство подкачки является разделом (partition), а не файлом (file).
Size — размер пространства подкачки в килобайтах.
Used — указывает на использованное количество килобайт памяти подкачки.
Priority — определяет, какое пространство подкачки использовать в первую очередь.
Одна из замечательных особенностей подсистемы подкачки Linux заключается в том, что если вы смонтируете два (или более) пространства подкачки (на двух разных устройствах) с одинаковым приоритетом, то Linux будет чередовать активность подкачки между ними, что может значительно повысить производительность системы подкачки.
Примечание: Монтирование в Linux — это подключение диска в основную файловую систему.
Преимущества использования памяти подкачки
Изучая работу памяти подкачки, мы можем легко понять преимущества её использования, основные из которых перечислены ниже:
Память подкачки может легко удерживать те неактивные блоки оперативной памяти, которые задействовались всего один или два раза, после чего к ним больше не было никаких обращений. Освобожденная таким образом оперативная память может быть отдана в работу программам с более высоким приоритетом.
Память подкачки предотвращает нехватку места в оперативной памяти, позволяя запускать «тяжелые» приложения, требующие большого объема оперативной памяти.
Память подкачки действует как резервная копия для увеличения фактического пространства оперативной памяти.
В процессе гибернации всё содержимое оперативной памяти записывается на диск в память подкачки.
Повышает общую производительность вашей системы.
Раздел подкачки
Раздел подкачки (англ. «swap partition») — это раздел жесткого диска, используемый исключительно для подкачки памяти; является типом памяти подкачки по умолчанию.
Добавление раздела подкачки
Чтобы добавить дополнительный раздел подкачки в вашу систему, вам сначала нужно выполнить его подготовку. На первом шаге требуется убедиться, что раздел жесткого диска помечен как swap. На втором — создать файловую систему swap. Чтобы проверить, что раздел помечен как swap, запустите команду:
$ sudo fdisk -l /dev/sda
Примечание: Замените /dev/sda на путь к диску в вашей системе с разделом подкачки на нем.
Вы должны увидеть примерно следующее:
Если раздел не помечен как swap, то вам нужно изменить его, запустив команду fdisk с параметром t . Будьте осторожны при работе с разделами, т.к. информация раздела подкачки будет полностью удалена, поэтому дважды перепроверяйте каждое выполняемое вами изменение.
Как только ваш раздел пометится как swap, его необходимо будет подготовить с помощью команды mkswap (сокр. от «make swap«):
$ sudo mkswap /dev/sda5
Если при этом не было получено никаких ошибок, то ваш раздел подкачки готов к использованию. Для его активации введите команду:
$ sudo swapon /dev/sda5
Вы можете убедиться, что данный раздел теперь задействован системой, выполнив команду swapon -s . Чтобы автоматически смонтировать раздел подкачки во время загрузки системы, необходимо добавить соответствующую запись в файл /etc/fstab, содержащий список файловых систем и пространств подкачки:
/dev/sda5 swap swap defaults 0 0
/dev/sda5 — путь к разделу подкачки;
swap — означает, что раздел будет смонтирован как раздел подкачки;
swap — тип раздела;
defaults — означает использовать настройки по умолчанию;
0 (последние два параметра) означает, что данные параметры не используются.
Чтобы без перезагрузки проверить, что ваш раздел подкачки монтируется автоматически, вы можете запустить команду swapoff -a (которая отключает все пространства подкачки), а затем swapon -a (которая монтирует все пространства подкачки, перечисленные в файле /etc/fstab), а затем проверить статус вашего раздела подкачки с помощью swapon -s .
Удаление раздела подкачки
Чтобы удалить раздел подкачки, нужно выполнить следующие шаги:
Шаг №1: Отключаем раздел подкачки следующей командой:
$ sudo swappoff /dev/sda5
Или можно отключить вообще все разделы подкачки, используя:
$ sudo swappoff -a
Шаг №2: Поскольку раздел подкачки управляется подсистемой инициализации systemd, то при следующем запуске системы он будет снова активирован. Чтобы навсегда отключить автоматическую активацию обнаруженного раздела подкачки, необходимо найти ответственный за подкачку swap-юнит:
$ sudo systemctl —all —type swap
UNIT (dev–sda5.swap) — это название swap-юнита, соответствующего разделу подкачки.
LOAD (loaded) — означает, что наш swap-юнит успешно загружен.
ACTIVE (inactive) — обобщенный статус юнита. Может принимать значения:
active — юнит запущен;
inactive — юнит остановлен.
SUB (dead) — более низкоуровневый статус юнита. В зависимости от типа юнита, может принимать значения:
exited — успешно завершил выполнение;
failed — ошибка при выполнении;
dead — не запущен;
DESCRIPTION (/dev/sda5) — указывает на путь к swap-юниту (разделу подкачки).
Шаг №3: Отключаем дальнейшие запуски выбранного юнита с помощью команды mask :
$ sudo systemctl mask dev-sda5.swap
Шаг №4: Перезагружаем систему.
Примечание: Если вы хотите немедленного (без перезагрузки) исполнения команды mask , то достаточно добавить к ней ключ —now , например:
$ sudo systemctl mask dev-sda5.swap —now
Вышеописанные действия отключают использование раздела подкачки системой и не приводят к его физическому удалению. В этом можно убедиться, просмотрев список всех разделов системы с помощью следующей команды:
Или с помощью графической утилиты управления дисками GParted:
Примечание: Если в вашей системе отсутствует GParted, то вы можете установить её с помощью следующей команды:
sudo apt-get install gparted
Для полного удаления раздела подкачки через GParted, необходимо кликнуть по нему ПКМ и выбрать пункт «Удалить» :
Или же воспользоваться следующей командой в терминале:
$ sudo fdisk /dev/sda
Затем вам нужно будет нажать d (сокр. от англ. «delete»), чтобы попасть в режим удаления раздела. После чего вас попросят указать номер удаляемого раздела (у меня это — sda5, поэтому я указал номер 5 ). Далее нажмите w (сокр. от англ. «write»), чтобы записать внесенные изменения в таблицу разделов диска и выйти из fdisk :
Также необходимо проверить, что у вас закомментированы (символом # ) все упоминания раздела подкачки в файлах конфигурации /etc/fstab и /etc/initramfs-tools/conf.d/resume.
В завершении, чтобы в момент старта система знала, что такого раздела больше нет, нужно выполнить следующую команду:
$ sudo update-initramfs -u
Готово! Раздел подкачки удален!
Файл подкачки
Файл подкачки (англ. «swap file») — это специальный файл, который создается вручную, для подкачки в него неактивного содержимого ОЗУ, когда на жестком диске недостаточно места для создания полноценного раздела подкачки. Файл подкачки можно создавать и монтировать аналогично разделу подкачки. Преимущество файлов подкачки заключается в том, что вам не нужно искать пустой раздел или переделывать диск, чтобы добавить дополнительное пространство подкачки.
Добавление файла подкачки
Чтобы добавить в систему файл подкачки, нужно выполнить следующие шаги:
Шаг №1: Создаем файл, который будет использоваться в качестве файла подкачки:
$ sudo fallocate -l 1G /swapfile
Если утилита fallocate отсутствует или вы получили сообщение об ошибке типа failed: Operation not supported , то можете использовать следующую команду для создания файла подкачки:
$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576
Часть /swapfile — это имя файла подкачки, а count=1048576 — размер файла подкачки в килобайтах (1048576 КБ ≈ 1.05 ГБ).
Шаг №2: Только root-пользователь должен иметь возможность записывать и читать файл подкачки. Для этого необходимо задать правильный тип разрешений:
$ sudo chmod 600 /swapfile
Шаг №3: Нужно подготовить файл подкачки с помощью команды mkswap так же, как мы это делали в случае с разделом, но на этот раз используем имя файла подкачки:
$ sudo mkswap /swapfile
Шаг №4: И точно так же монтируем файл подкачки с помощью команды swapon :
$ sudo swapon /swapfile
Затем нужно добавить запись в файл /etc/fstab для файла подкачки:
/swapfile swap swap defaults 0 0
Шаг №5: Чтобы убедиться, что мы активировали файл подкачки, используем команду swapon :
$ sudo swapon —show
Или команду free :
$ sudo cat /proc/swaps
Удаление файла подкачки
Если по какой-либо причине вы хотите отключить и удалить файл подкачки, выполните следующие шаги:
Шаг №1: Отключаем подкачку памяти с помощью следующей команды:
$ sudo swapoff -v /swapfile
Шаг №2: Удаляем запись о файле подкачки из файла /etc/fstab:
/swapfile swap swap defaults 0 0
Шаг №3: Удаляем непосредственно сам файл подкачки с помощью команды rm :
$ sudo rm /swapfile
Насколько большим должно быть пространство подкачки?
Можно запустить Linux-систему и без пространства подкачки, система будет замечательно работать, если у вас достаточно большой объем оперативной памяти. Но если она у вас закончится, то в вашей системе может произойти критический сбой, поэтому все же желательно иметь пространство подкачки, тем более что дисковое пространство относительно дешево.
Ключевой вопрос: «Сколько нужно пространства подкачки?». Более старые версии операционных систем типа Unix требовали пространства подкачки в два-три раза больше физической памяти. Современные Linux-системы применяют эмпирическое правило, смысл которого заключается в следующем:
Для настольной системы используйте пространство подкачки в два раза больше размера оперативной памяти, так как это позволит вам запускать большое количество приложений (многие из которых могут быть простаивающими и легко заменяемыми).
Для сервера имейте меньший объем доступной подкачки (например, половину от физической памяти), чтобы у вас была некоторая гибкость для подкачки, когда это необходимо, но контролируйте объем используемого пространства подкачки и обновляйте свою оперативную память, в случае надобности.
Для старых настольных компьютеров (имеющих, например, только 128 МБ оперативной памяти) по возможности выделяйте от 1 ГБ пространства и больше.
Настройка частоты использования пространства подкачки
В ядро Linux 2.6 был добавлен новый параметр под названием swappiness, определяющий как часто система будет использовать пространство подкачки. Он может иметь значения от 0 до 100 . Маленькое значение заставит ядро стараться избегать операций подкачки, когда это возможно, в то время как более высокое значение заставит ядро использовать пространство подкачки «более агрессивно».
Значение по умолчанию для swappiness равно 60 . Вы можете временно изменить его (до следующей перезагрузки), введя команду:
$ sudo echo 50 > /proc/sys/vm/swappiness
Или, например, чтобы установить значение swappiness равным 10 через sysctl, нужно выполнить следующую команду:
$ sudo sysctl vm.swappiness=10
Если вы хотите перманентно изменить данное значение, то вам необходимо определить параметр vm.swappiness в файле /etc/sysctl.conf.
Оптимальное значение подкачки зависит от рабочей нагрузки вашей системы и того, как используется память. Регулируйте этот параметр небольшими шагами, чтобы найти оптимальное значение.
Заключение
В этой статье мы рассмотрели использование и работу памяти подкачки, а также её многочисленные преимущества. Память подкачки служит резервным вариантом для оперативной памяти, когда у последней не остается свободного места. Однако мы все знаем, что у нас не может быть бесконечного объема оперативной памяти, но у нас должно быть достаточное её количество, чтобы избежать сбоя наших приложений.
Кроме того, есть затраты, связанные с (физическим) добавлением большего объема оперативной памяти, в то время как нет затрат на использование памяти подкачки. Кроме того, не всегда представляется возможным добавить несколько планок оперативной памяти в ваш компьютер. Следовательно, единственный вариант, который у нас остается, — это использовать память подкачки, которая может заставить нашу систему работать эффективнее без каких-либо затрат.
Источник