Swap: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
Строка 15: Строка 15:


Все дальнейшие операции необходимо выполнять с правами суперпользователя:
Все дальнейшие операции необходимо выполнять с правами суперпользователя:
su-
<syntaxhighlight lang="bash">
$ su-
</syntaxhighlight>


Удостовериться, что swap отсутствует:
Удостовериться, что swap отсутствует:
  swapon --show
<syntaxhighlight lang="bash">
  # swapon --show
</syntaxhighlight>
Вывод должен быть пустой.
Вывод должен быть пустой.


Начиная с ядра Linux 5.7, согласно документации ''mkswap'', для достижения "монолитности" заполнения пространства файла в файловой системе, swap-файл следует создавать с помощь утилиты ''dd'':
Начиная с ядра Linux 5.7, согласно документации ''mkswap'', для достижения "монолитности" заполнения пространства файла в файловой системе, swap-файл следует создавать с помощь утилиты ''dd'':
  dd if=/dev/zero of=/swapfile bs=4M count=1024 status=progress
<syntaxhighlight lang="bash">
  # dd if=/dev/zero of=/swapfile bs=4M count=1024 status=progress
</syntaxhighlight>


Пояснения:
Пояснения:
Строка 32: Строка 38:


В целях безопасности необходимо ограничить права, чтобы другие пользователи не могли взаимодействовать с файлом:
В целях безопасности необходимо ограничить права, чтобы другие пользователи не могли взаимодействовать с файлом:
  chmod 600 /swapfile
<syntaxhighlight lang="bash">
  # chmod 600 /swapfile
</syntaxhighlight>
Тем самым право на чтение и запись будет только у суперпользователя, а всем остальным — запрещено всё:
Тем самым право на чтение и запись будет только у суперпользователя, а всем остальным — запрещено всё:
  ls -l /swapfile
<syntaxhighlight lang="bash">
  $ ls -l /swapfile
</syntaxhighlight>
Вывод:
Вывод:
<syntaxhighlight lang="bash">
  -rw------- 1 root root 4294963200 июл  6  2020 /swapfile
  -rw------- 1 root root 4294963200 июл  6  2020 /swapfile
 
</syntaxhighlight>
Вместо нулей создать внутри swap-файла специальную файловую систему ''swap'':
Вместо нулей создать внутри swap-файла специальную файловую систему ''swap'':
  mkswap /swapfile
<syntaxhighlight lang="bash">
 
  # mkswap /swapfile
</syntaxhighlight>
Вывод:
Вывод:
<syntaxhighlight lang="bash">
  Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
  Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
  без метки, UUID=2dd19e70-e9aa-4226-aa04-41e1206ede28
  без метки, UUID=2dd19e70-e9aa-4226-aa04-41e1206ede28
</syntaxhighlight>


Остаётся активировать подготовленный swap-файл:
Остаётся активировать подготовленный swap-файл:
  swapon /swapfile
<syntaxhighlight lang="bash">
  # swapon /swapfile
</syntaxhighlight>


После активации swap-файла мы можем проверить его наличие командой:
После активации swap-файла мы можем проверить его наличие командой:
  swapon --show
<syntaxhighlight lang="bash">
  # swapon --show
</syntaxhighlight>


[[Файл:Swap file3.png]]
[[Файл:Swap file3.png]]


С тем учётом, что созданный swap включен вручную в рамках активной сессии, он будет работать только до перезапуска сессии (перезагрузки системы). Для постоянной работы необходимо прописать автоматическое монтирование в ''/etc/fstab'':
С тем учётом, что созданный swap включен вручную в рамках активной сессии, он будет работать только до перезапуска сессии (перезагрузки системы). Для постоянной работы необходимо прописать автоматическое монтирование в ''/etc/fstab'':
  echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab
<syntaxhighlight lang="bash">
Пояслнения:
  # echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab
</syntaxhighlight>
 
Пояснения:
* tee -a /etc/fstab — добавить запись в конец файла без перезаписывания существующих записей.
* tee -a /etc/fstab — добавить запись в конец файла без перезаписывания существующих записей.


Проверить правильность заполнения ''fstab'':
Проверить правильность заполнения ''fstab'':
  findmnt --verify
<syntaxhighlight lang="bash">
  # findmnt --verify
</syntaxhighlight>
 
В выводе не должно быть ошибок, кроме предупреждения, что файл используется напрямую без привязки (bind):
В выводе не должно быть ошибок, кроме предупреждения, что файл используется напрямую без привязки (bind):
<syntaxhighlight lang="bash">
  none
  none
     [W] non-bind mount source /swapfile is a directory or regular file
     [W] non-bind mount source /swapfile is a directory or regular file
  0 parse errors, 0 errors, 1 warning
  0 parse errors, 0 errors, 1 warning
</syntaxhighlight>


=== Удаление файла подкачки ===
=== Удаление файла подкачки ===


Перед удалением сначала необходимо отключить использование swap:
Перед удалением сначала необходимо отключить использование swap:
swapoff /swapfile
<syntaxhighlight lang="bash">
 
# swapoff /swapfile
</syntaxhighlight>
После можно удалить файл:
После можно удалить файл:
rm /swapfile
<syntaxhighlight lang="bash">
# rm /swapfile
</syntaxhighlight>


[[Файл:Swap file remove.png]]
[[Файл:Swap file remove.png]]


Так же необходимо отключить автоматическое монтирование. Открыть ''/etc/fstab'' и удалить ранее внесённую строку:
Так же необходимо отключить автоматическое монтирование. Открыть ''/etc/fstab'' и удалить ранее внесённую строку:
<syntaxhighlight lang="bash">
  /swapfile none swap sw 0 0
  /swapfile none swap sw 0 0
</syntaxhighlight>
Сохранить изменения и проверить ''fstab'':
Сохранить изменения и проверить ''fstab'':
  findmnt --verify
<syntaxhighlight lang="bash">
  # findmnt --verify
</syntaxhighlight>
В выводе не должно быть ошибок:
В выводе не должно быть ошибок:
<syntaxhighlight lang="bash">
  Success, no errors or warnings detected
  Success, no errors or warnings detected
 
</syntaxhighlight>
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}}

Версия от 15:19, 7 ноября 2023

Примечание: Данная инструкция подходит только для дисков с файловой системой ext2/3/4

swap — это специальная системная область, предварительно выделенная на накопителе (жёстком диске) и используемая операционной системой с целью резервирования свободного пространства, которое может быть задействовано при нехватке ОЗУ.

В Linux используется два варианта области подкачки:

  • В виде раздела на накопителе.
  • В виде файла.

В современных условиях предпочтительнее использовать swap в виде файла.

Особенности swap-файла:

  • Можно легко изменять размер или полностью удалить, что затруднительно для варианта в виде раздела.
  • В сравнении со swap-разделом есть незначительное снижение производительности.
  • Для использования гибернации требуется дополнительная подготовка (получение UUID и смещения заголовка) и пересоздание загрузочного образа initrd.

Создание swap-файла

Все дальнейшие операции необходимо выполнять с правами суперпользователя:

$ su-

Удостовериться, что swap отсутствует:

 # swapon --show

Вывод должен быть пустой.

Начиная с ядра Linux 5.7, согласно документации mkswap, для достижения "монолитности" заполнения пространства файла в файловой системе, swap-файл следует создавать с помощь утилиты dd:

 # dd if=/dev/zero of=/swapfile bs=4M count=1024 status=progress

Пояснения:

  • if=/dev/zero — это виртуальное устройство, генерирующее нулевые байты. Из него будет браться поток нулей и записываться в файл.
  • of=/swapfile — создаваемый и наполняемый нулями swap-файл.
  • bs=4M — размер порции данных в мегабайтах.
  • count=1024 — число порций данных, которые будут записаны в указанный файл. В виду того, что требуется записать 4096 МБ данных, то при размере порции 4 МБ необходимо 1024 порции.
  • status=progress — показывать ход прогресса операции.

В целях безопасности необходимо ограничить права, чтобы другие пользователи не могли взаимодействовать с файлом:

 # chmod 600 /swapfile

Тем самым право на чтение и запись будет только у суперпользователя, а всем остальным — запрещено всё:

 $ ls -l /swapfile

Вывод:

 -rw------- 1 root root 4294963200 июл  6  2020 /swapfile

Вместо нулей создать внутри swap-файла специальную файловую систему swap:

 # mkswap /swapfile

Вывод:

 Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
 без метки, UUID=2dd19e70-e9aa-4226-aa04-41e1206ede28

Остаётся активировать подготовленный swap-файл:

 # swapon /swapfile

После активации swap-файла мы можем проверить его наличие командой:

 # swapon --show

Swap file3.png

С тем учётом, что созданный swap включен вручную в рамках активной сессии, он будет работать только до перезапуска сессии (перезагрузки системы). Для постоянной работы необходимо прописать автоматическое монтирование в /etc/fstab:

 # echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab

Пояснения:

  • tee -a /etc/fstab — добавить запись в конец файла без перезаписывания существующих записей.

Проверить правильность заполнения fstab:

 # findmnt --verify

В выводе не должно быть ошибок, кроме предупреждения, что файл используется напрямую без привязки (bind):

 none
    [W] non-bind mount source /swapfile is a directory or regular file
 0 parse errors, 0 errors, 1 warning

Удаление файла подкачки

Перед удалением сначала необходимо отключить использование swap:

# swapoff /swapfile

После можно удалить файл:

# rm /swapfile

Swap file remove.png

Так же необходимо отключить автоматическое монтирование. Открыть /etc/fstab и удалить ранее внесённую строку:

 /swapfile none swap sw 0 0

Сохранить изменения и проверить fstab:

 # findmnt --verify

В выводе не должно быть ошибок:

 Success, no errors or warnings detected