Поиск по сайту:

Как создать и включить файл подкачки в командной строке Linux


Файл подкачки используется Linux, когда процессам не хватает памяти. Вместо сбоя процессу будет разрешено использовать часть диска, что значительно медленнее, но предотвращает непреднамеренные сбои из-за нехватки памяти, которые могут повредить доступности службы.

Что такое файл подкачки?

Начнем с риторического вопроса: что происходит, когда на вашем компьютере заканчивается память?

В Linux специальный процесс мониторинга — процесс мониторинга/уничтожения OOM — будет отслеживать, не заканчивается ли в системе память, если только средство уничтожения OOM не было отключено или настроено по-другому.

Когда это произойдет, этот процесс завершит один из процессов, запущенных в системе, чтобы освободить память. Это может привести к болезненным результатам, таким как повреждение данных или недоступность служб. Аббревиатура OOM означает «недостаточно памяти».

Одним из решений является покупка дополнительной памяти или сокращение количества программ или служб, одновременно работающих на компьютере или сервере. Но как насчет того, чтобы использовать часть нашего (обычно дешевого) дискового пространства в качестве «дополнительной памяти»?

Именно этим и занимается файл подкачки: специальный файл, созданный на вашем устройстве хранения, который затем становится частью основной памяти. Не напрямую, и есть накладные расходы на обработку, а косвенно и со значительным влиянием на скорость обработки.

Преимущества и недостатки файла подкачки

Основная память обычно сверхбыстрая по сравнению с более медленными дисками. Даже SSD (твердотельные накопители) почти всегда медленнее, чем высокоскоростные чипы оперативной памяти. Для жестких дисков (механических, вращающихся, традиционных жестких дисков) разница в скорости еще больше.

Поэтому в большинстве установок использование более медленного диска (SDD и особенно HDD) в качестве источника памяти является явным преимуществом. Задержка записи данных туда и обратно между основной памятью и диском (т. е. использование диска в качестве памяти) называется «свопингом» (обмен памяти с дисковым пространством).

Тем не менее, всегда полезно иметь в системе файл подкачки разумных сторон. Причина проста; скажем, нам требуется только 1 дополнительный гигабайт памяти на несколько минут, чтобы наша система не вызывала убийцу OOM и не завершала некоторые процессы. В этом случае лучше использовать файл подкачки, потому что даже если у процесса заканчивается доступная оперативная память, он не рухнет, а просто будет работать немного медленнее, пока не завершит свою задачу.

Однако, если система начнет сильно подкачиваться, она почти наверняка станет медленнее (читай: намного медленнее). Это будет очень заметно.

Таким образом, существует тонкое и тонкое равновесие, несколько произвольное и зависящее от множества различных факторов в данной ситуации; количество процессов, запущенных в системе, и их рабочие объемы памяти, общий объем используемой памяти, память, доступная в файле подкачки, конкретная конфигурация файла подкачки системы и т. д.

Некоторые соображения по поводу файла подкачки

Сегодня во многих установках Linux в мире есть раздел подкачки, назначенный на один из дисков в системе. Это специальная область, обычно (но не всегда; ее можно добавить позже) зарезервированная во время установки операционной системы Linux. Он имеет ту же целевую функциональность, что и файл подкачки. Чтобы проверить, включена ли в вашей системе какая-либо форма свопа, просто выполните в терминале следующее:

sudo apt -y install htop
htop

И найдите следующий вывод:

Обратите внимание, что в этой системе имеется 62,7 ГБ основной памяти и 11,0 ГБ пространства подкачки. Вы также можете увидеть, что в настоящее время используется лишь небольшое количество (23,5 млн). Если вы подозреваете, что ваша система переключается, проверьте, как выглядят эти два счетчика.

Если они оба почти заполнены, ваша система, скорее всего, сильно переключается и будет работать значительно медленнее. Причина в том, что теперь существует большая нагрузка, связанная с вводом-выводом (т. е. с привязкой к диску), постоянно заменяющая основную память памятью на основе диска.

Как правило, некоторые люди предпочитают использовать определенный процент системной памяти в качестве размера, выделяемого для файла подкачки. Лично я выбираю другой путь, а именно, учитываю, сколько дополнительной памяти мне может понадобиться. Если размер значителен, например, сервер с 8 ГБ, скорее всего, в конечном итоге будет использовать 14 ГБ для конкретного варианта использования, тогда гораздо разумнее увеличить объем памяти сервера с 8 ГБ до 16 ГБ.

Однако, если в системе 8 ГБ, а обычное использование составляет 6-7 ГБ со случайным всплеском, если я запускаю слишком много программ одновременно, я могу рассмотреть возможность дополнительного пространства подкачки на 8 ГБ или немного больше. Дисковое пространство обычно довольно дешевое, поэтому его небольшое увеличение, если у вас есть место, не повредит.

Как включить файл подкачки

Готовы добавить файл подкачки? Это можно сделать на лету. Этот метод будет работать как в системах на основе Debian (Ubuntu, Mint, …), так и в системах на базе RedHat (RedHat, Centos, …).

В этом примере мы создадим файл подкачки размером 1 гигабайт, или 1000 мегабайт, или 1024000 блоков (рассчитывается как количество мегабайт x 1024).

Мы назовем его swapfile123, расположенный в корневом (/) каталоге, и мы дали ему это имя, чтобы избежать перезаписи любого файла, который у вас уже может быть. Если вы уверены, что у вас нет файла с именем /swapfile, вы можете использовать его, если хотите, позаботившись о правильном изменении имени файла во всех местах.

Будьте внимательны при вводе любых команд, особенно команды dd, чтобы не перезаписать какие-либо данные в вашей системе. Мы используем sudo su для входа в режим суперпользователя (su) через sudo. Это почти то же самое, что и выполнение каждой команды с помощью sudo, хотя проще не вводить префикс каждой команды sudo, используя этот способ.

sudo su
if [ -r /swapfile123 ]; then echo "Stop please! /swapfile123 already exists!"; fi
dd if=/dev/zero of=/swapfile123 bs=1024 count=1024000
chmod 0600 /swapfile123
mkswap /swapfile123
swapon /swapfile123

Вы должны увидеть вывод, подобный следующему:

Если это так, поздравляем! Вы только что активировали свой первый файл подкачки динамически (на лету) в командной строке Linux!

Сначала мы использовали инструмент dd для создания нашего пространства подкачки, используя устройство /dev/zero (виртуальное устройство, которое просто выводит нули при вызове с помощью dd или любой другой инструмент). Затем мы устанавливаем некоторые соответствующие привилегии безопасности.

Затем мы указали операционной системе, что файл нужно сделать файлом подкачки, используя команду mkswap. Наконец, мы включили пространство подкачки динамически в командной строке, без перезагрузки нашей системы.

Мы также можем легко проверить, стало ли наше пространство подкачки больше, используя free -m:

Отлично, вы можете видеть, как мы перешли от 12215M к 11215M (-1000M, как и ожидалось), когда деактивировали только что созданный файл подкачки. Вы также можете увидеть, как мы использовали swapoff для динамического отключения подкачки в командной строке.

Приятно знать, что если мы когда-нибудь увидим, что наша система испытывает проблемы с памятью, и мы можем печатать достаточно быстро, мы можем выделить ей дополнительную память на лету :) На практике лучше сделать это заранее, прежде чем возникнут проблемы. .

Теперь у нас есть только одна небольшая проблема, которую нужно решить. Если бы мы перезагрузились в это время, пока наш файл подкачки оставался бы на диске, система не использовала бы его. До сих пор не было внесено никаких изменений в настройки, которые гарантируют, что пространство подкачки перезагружается при перезагрузке системы.

Включение нашего нового свопа во время загрузки

Чтобы включить новое пространство подкачки во время загрузки, просто добавьте следующую строку (как строку) в /etc/fstab:

/swapfile123  swap  swap  defaults  0  0

Вы можете сделать это, все еще находясь в режиме sudo su (на что указывает начальный #), запустив редактор nano для /etc/fstab:

nano /etc/fstab
cat /etc/fstab

Затем просто добавьте указанную выше строку в конец файла и сохраните (CTRL+X > Y > Enter). Не изменяйте и не удаляйте какие-либо другие строки, так как это может привести к тому, что ваша система больше не будет загружаться правильно. Также не забудьте дважды проверить содержимое вашего файла /etc/fstab перед перезапуском, выполнив cat /etc/fstab выше.

Теперь вы можете перезагрузить систему и убедиться, что дополнительное пространство подкачки все еще доступно, снова используя free -m.

Удаление нашего нового пространства подкачки

Если вы хотите удалить новое пространство подкачки или, возможно, создать пространство несколько большего размера, вы можете сделать это, сначала снова отредактировав файл /etc/fstab и удалив строку, которая полностью загружает файл подкачки. Не изменяйте и не удаляйте какие-либо другие строки, так как это может привести к тому, что ваша система больше не будет загружаться правильно! Затем вы можете выполнить:

sudo swapoff /swapfile123
rm /swapfile123

Все сделано! Перезагружаться также не нужно, так как это изменение было сделано динамически. При следующей перезагрузке файл подкачки больше не будет активирован, так как мы удалили соответствующую строку из файла /etc/fstab.

Наслаждайтесь файлами подкачки!