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

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


=== Создание swap-файла ===
=== Создание swap-файла ===
 
#Все дальнейшие операции необходимо выполнять с правами суперпользователя:
Все дальнейшие операции необходимо выполнять с правами суперпользователя:
#:<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
$ su -
$ su -
</syntaxhighlight>
</syntaxhighlight>
 
#:[[Файл:Swapfile-create-1.png]]
Удостовериться, что swap отсутствует:
#Удостоверьтесь, что swap отсутствует:
<syntaxhighlight lang="bash">
#:<syntaxhighlight lang="bash">
  # swapon --show
  # swapon --show
</syntaxhighlight>
</syntaxhighlight>
Вывод должен быть пустой.
#:Вывод должен быть пустой.
 
#:[[Файл:Swapfile-create-2.png]]
Начиная с ядра Linux 5.7, согласно документации ''mkswap'', для достижения "монолитности" заполнения пространства файла в файловой системе, swap-файл следует создавать с помощь утилиты ''dd'':
#Начиная с ядра Linux 5.7, согласно документации ''mkswap'', для достижения "монолитности" заполнения пространства файла в файловой системе, swap-файл следует создавать с помощь утилиты ''dd'':
<syntaxhighlight lang="bash">
#:<syntaxhighlight lang="bash">
  # dd if=/dev/zero of=/swapfile bs=4M count=1024 status=progress
  # dd if=/dev/zero of=/swapfile bs=4M count=1024 status=progress
</syntaxhighlight>
</syntaxhighlight>
 
#:[[Файл:Swapfile-create-4.png]]
Пояснения:
#:Пояснения:
* ''if=/dev/zero'' — это виртуальное устройство, генерирующее нулевые байты. Из него будет браться поток нулей и записываться в файл.
#:* ''if=/dev/zero'' — это виртуальное устройство, генерирующее нулевые байты. Из него будет браться поток нулей и записываться в файл.
* ''of=/swapfile'' — создаваемый и наполняемый нулями swap-файл.
#:* ''of=/swapfile'' — создаваемый и наполняемый нулями swap-файл.
* ''bs=4M'' — размер порции данных в мегабайтах.
#:* ''bs=4M'' — размер порции данных в мегабайтах.
* ''count=1024'' — число порций данных, которые будут записаны в указанный файл. В виду того, что требуется записать 4096 МБ данных, то при размере порции 4 МБ необходимо 1024 порции.
#:* ''count=1024'' — число порций данных, которые будут записаны в указанный файл. В виду того, что требуется записать 4096 МБ данных, то при размере порции 4 МБ необходимо 1024 порции.
* ''status=progress'' — показывать ход прогресса операции.
#:* ''status=progress'' — показывать ход прогресса операции.
 
#В целях безопасности необходимо ограничить права, чтобы другие пользователи не могли взаимодействовать с файлом:
В целях безопасности необходимо ограничить права, чтобы другие пользователи не могли взаимодействовать с файлом:
#:<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
  # chmod 600 /swapfile
  # chmod 600 /swapfile
</syntaxhighlight>
</syntaxhighlight>
Тем самым право на чтение и запись будет только у суперпользователя, а всем остальным — запрещено всё:
#:Тем самым право на чтение и запись будет только у суперпользователя, а всем остальным — запрещено всё:
<syntaxhighlight lang="bash">
#:<syntaxhighlight lang="bash">
  $ ls -l /swapfile
  $ ls -l /swapfile
</syntaxhighlight>
</syntaxhighlight>
Вывод:
#:Вывод:
<syntaxhighlight lang="bash">
#:<syntaxhighlight lang="bash">
  -rw------- 1 root root 4294963200 июл  6  2020 /swapfile
  -rw------- 1 root root 4294963200 июл  6  2020 /swapfile
</syntaxhighlight>
</syntaxhighlight>
Вместо нулей создать внутри swap-файла специальную файловую систему ''swap'':
#:[[Файл:Swapfile-create-5.png]]
<syntaxhighlight lang="bash">
#Вместо нулей создать внутри swap-файла специальную файловую систему ''swap'':
#:<syntaxhighlight lang="bash">
  # mkswap /swapfile
  # mkswap /swapfile
</syntaxhighlight>
</syntaxhighlight>
Вывод:
#:Вывод:
<syntaxhighlight lang="bash">
#:<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>
</syntaxhighlight>
 
#:[[Файл:Swapfile-create-6.png]]
Остаётся активировать подготовленный swap-файл:
#Остаётся активировать подготовленный swap-файл:
<syntaxhighlight lang="bash">
#:<syntaxhighlight lang="bash">
  # swapon /swapfile
  # swapon /swapfile
</syntaxhighlight>
</syntaxhighlight>
 
#:После активации swap-файла мы можем проверить его наличие командой:
После активации swap-файла мы можем проверить его наличие командой:
#:<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
  # swapon --show
  # swapon --show
</syntaxhighlight>
</syntaxhighlight>
 
#:[[Файл:Swapfile-create-7.png]]
[[Файл:Swap file3.png]]
#С тем учётом, что созданный swap включен вручную в рамках активной сессии, он будет работать только до перезапуска сессии (перезагрузки системы). Для постоянной работы необходимо прописать автоматическое монтирование в ''/etc/fstab'':
 
#:<syntaxhighlight lang="bash">
С тем учётом, что созданный swap включен вручную в рамках активной сессии, он будет работать только до перезапуска сессии (перезагрузки системы). Для постоянной работы необходимо прописать автоматическое монтирование в ''/etc/fstab'':
<syntaxhighlight lang="bash">
  # echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab
  # echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab
</syntaxhighlight>
</syntaxhighlight>
 
#:Пояснения:
Пояснения:
#:* tee -a /etc/fstab — добавить запись в конец файла без перезаписывания существующих записей.
* tee -a /etc/fstab — добавить запись в конец файла без перезаписывания существующих записей.
#:[[Файл:Swapfile-create-8.png]]
 
#Проверить правильность заполнения ''fstab'':
Проверить правильность заполнения ''fstab'':
#:<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
  # findmnt --verify
  # findmnt --verify
</syntaxhighlight>
</syntaxhighlight>
 
#:В выводе не должно быть ошибок, кроме предупреждения, что файл используется напрямую без привязки (bind):
В выводе не должно быть ошибок, кроме предупреждения, что файл используется напрямую без привязки (bind):
#:<syntaxhighlight lang="bash">
<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>
</syntaxhighlight>
 
#:[[Файл:Swapfile-create-9.png]]
=== Удаление файла подкачки ===
=== Удаление файла подкачки ===



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

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

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

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

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

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

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

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

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

  1. Все дальнейшие операции необходимо выполнять с правами суперпользователя:
    $ su -
    
    Swapfile-create-1.png
  2. Удостоверьтесь, что swap отсутствует:
     # swapon --show
    
    Вывод должен быть пустой.
    Swapfile-create-2.png
  3. Начиная с ядра Linux 5.7, согласно документации mkswap, для достижения "монолитности" заполнения пространства файла в файловой системе, swap-файл следует создавать с помощь утилиты dd:
     # dd if=/dev/zero of=/swapfile bs=4M count=1024 status=progress
    
    Swapfile-create-4.png
    Пояснения:
    • if=/dev/zero — это виртуальное устройство, генерирующее нулевые байты. Из него будет браться поток нулей и записываться в файл.
    • of=/swapfile — создаваемый и наполняемый нулями swap-файл.
    • bs=4M — размер порции данных в мегабайтах.
    • count=1024 — число порций данных, которые будут записаны в указанный файл. В виду того, что требуется записать 4096 МБ данных, то при размере порции 4 МБ необходимо 1024 порции.
    • status=progress — показывать ход прогресса операции.
  4. В целях безопасности необходимо ограничить права, чтобы другие пользователи не могли взаимодействовать с файлом:
     # chmod 600 /swapfile
    
    Тем самым право на чтение и запись будет только у суперпользователя, а всем остальным — запрещено всё:
     $ ls -l /swapfile
    
    Вывод:
     -rw------- 1 root root 4294963200 июл  6  2020 /swapfile
    
    Swapfile-create-5.png
  5. Вместо нулей создать внутри swap-файла специальную файловую систему swap:
     # mkswap /swapfile
    
    Вывод:
     Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
     без метки, UUID=2dd19e70-e9aa-4226-aa04-41e1206ede28
    
    Swapfile-create-6.png
  6. Остаётся активировать подготовленный swap-файл:
     # swapon /swapfile
    
    После активации swap-файла мы можем проверить его наличие командой:
     # swapon --show
    
    Swapfile-create-7.png
  7. С тем учётом, что созданный swap включен вручную в рамках активной сессии, он будет работать только до перезапуска сессии (перезагрузки системы). Для постоянной работы необходимо прописать автоматическое монтирование в /etc/fstab:
     # echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab
    
    Пояснения:
    • tee -a /etc/fstab — добавить запись в конец файла без перезаписывания существующих записей.
    Swapfile-create-8.png
  8. Проверить правильность заполнения fstab:
     # findmnt --verify
    
    В выводе не должно быть ошибок, кроме предупреждения, что файл используется напрямую без привязки (bind):
     none
        [W] non-bind mount source /swapfile is a directory or regular file
     0 parse errors, 0 errors, 1 warning
    
    Swapfile-create-9.png

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

Перед удалением сначала необходимо отключить использование 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