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

Материал из ALT Linux Wiki
Нет описания правки
мНет описания правки
 
(не показана 21 промежуточная версия 4 участников)
Строка 1: Строка 1:
=== Создание, активирование и удаление Swap-файла ===
{{Note|Данная инструкция подходит для накопителей с файловой системой ext2/3/4 и с ограничениями для btrfs (поддержка реализована в ядре 5.0 и расширена в 6.1).}}
{{Attention|Для btrfs следует ознакомиться с [https://btrfs.readthedocs.io/en/latest/Swapfile.html дополнительными ограничениями].}}
__TOC__
'''swap''' — это специальная системная область, предварительно выделенная на накопителе (жёстком диске) и используемая операционной системой с целью резервирования свободного пространства, которое может быть задействовано при нехватке ОЗУ.


Файл подкачки (swap-файл) - это специальный системный файл, который создается операционной системой на жестком диске компьютера с целью резервирования свободного пространства для дальнейшего его использования при необходимости.
В Linux используется два варианта области подкачки:
* В виде раздела на накопителе.
* В виде файла.
В современных условиях предпочтительнее использовать swap в виде файла.


== Создание swap-файла ==
Особенности swap-файла:
* Можно легко изменять размер или полностью удалить, что затруднительно для варианта в виде раздела.
* Можно разместить на '''зашифрованном разделе'''.
* В сравнении со swap-разделом есть незначительное снижение производительности.
* Для использования [[Гибернация|гибернации]] требуется дополнительная подготовка (получение UUID и смещения заголовка) и пересоздание загрузочного образа ''initrd''.


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


Чтобы посмотреть сколько занято файлом подкачки:
1. '''Отключить использование файла подкачки''' согласно [[Swap#Удаление файла подкачки | инструкции]], удалить swap-файл и запись о нем в {{path|/etc/fstab}}:
su -
swapoff /swap
rm /swap
mcedit /etc/fstab
Удалить строку:
/swap swap swap defaults  0  0
Сохранить файл <code>F2</code> и закрыть текстовый редактор <code>F10</code>.


free -h


Если в операционной системе отсутсвует файл подкачки, в разделе /swapfile вы увидите нули.
2. '''Загрузиться с LiveCD'''. С помощью программы {{prg|GParted}} при необходимости '''уменьшить размер имеющегося раздела диска''':
 
  su-
Для примера, мы будем создавать файл подкачки на 4ГБ. Нам необходимо зайти в терминал под супер пользователем и ввести команду:
  gparted
   
[[Файл:GParted - уменьшить раздел.png|600px|мини|без|альт=GParted - уменьшить раздел|GParted - уменьшить раздел]]
  fallocate -l 4G /swapfile


[[Файл:Файл подкачки.png|center]]


* Красная стрелка указывает на значение (в нашем случае 4ГБ) которое можно изменить, в зависимости от того, сколько гигабайт Вам необохдимо.
В программе {{prg|GParted}} '''создать раздел подкачки''':
[[Файл:GParted - создать раздел подкачки.png|600px|мини|без|альт=GParted - создать раздел подкачки|GParted - создать раздел подкачки]]


Далее, нам необходимо установить на него права:
chmod 600 /swapfile


[[Файл:Chmod swap.png|center]]
Затем в {{prg|GParted}} нажать '''Применить все операции''':
[[Файл:GParted - применить все операции.png|600px|мини|без|альт=GParted - применить все операции|GParted - применить все операции]]


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


  mkswap /swapfile
3. '''Перезагрузить компьютер'''. Раздел подкачки может подключиться автоматически. Нужно добавить запись о разделе подкачки в файл {{path|/etc/fstab}}:
su -
blkid | grep swap
Найти запись о разделе подкачки ('''идентификатор в Вашем случае будет другой'''):
  /dev/sda3: '''UUID="b7fed2ff-45a7-41f1-a7a1-d24fa85bf5b1"''' TYPE="swap" PARTUUID="a1fbc912-01"
Добавить запись о разделе подкачки:
mcedit /etc/fstab
Добавить строку ('''с найденным выше идентификатором'''):
'''UUID=b7fed2ff-45a7-41f1-a7a1-d24fa85bf5b1''' swap swap defaults 0 0
Сохранить файл <code>F2</code> и закрыть текстовый редактор <code>F10</code>.


* Результат должен выглядеть как на скриншоте внизу:


[[Файл:Swap file2.png|center]]
4. '''Проверить файл {{path|/etc/fstab}}''' на наличие ошибок:
 
findmnt --verify
Теперь нам необходимо включить swap командой:
'''Отключить и подключить заново swap''':
swapoff -a
swapon -a
'''Проверить состояние swap''':
swapon --show
Процедура завершена в случае появления подобного вывода:
NAME      TYPE      SIZE USED PRIO
/dev/sda3 partition 5,1G  0B  -2
   
   
swapon /swapfile
После активации swap-файла мы можем проверить его наличие командой:
swapon --show
[[Файл:Swap file3.png|center]]
* Чтобы наш файл подкачки не устранился после перезагрузки операционной системы, нам необходимо дать команду:
echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab
== Удаление файла подкачки ==
Для того, чтобы удалить файл подкачки, нам нужно дать команду:
swapoff /swapfile
И
rm /swapfile
[[Файл:Swap file remove.png|center]]
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}}

Текущая версия от 15:38, 28 октября 2024

Примечание: Данная инструкция подходит для накопителей с файловой системой ext2/3/4 и с ограничениями для btrfs (поддержка реализована в ядре 5.0 и расширена в 6.1).
Внимание! Для btrfs следует ознакомиться с дополнительными ограничениями.

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

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

  1. Перед удалением сначала необходимо отключить использование swap:
    # swapoff /swapfile
    
    Swapfile-delete-2.png
  2. После можно удалить файл:
    # rm /swapfile
    
    Swapfile-delete-3.png
  3. Так же необходимо отключить автоматическое монтирование.
    Для этого от суперпользователя в текстовом редакторе открываем /etc/fstab...
    # mcedit /etc/fstab
    
    Swapfile-delete-4.png
  4. И удаляем строчку о монтировании swap-файла.
    Swapfile-delete-5.png
     /swapfile none swap sw 0 0
    
    Swapfile-delete-6.png
  5. Сохраняем изменения клавишей F2, выходим F10 и проверяем fstab:
     # findmnt --verify
    
    В выводе не должно быть ошибок:
     Success, no errors or warnings detected
    
    Swapfile-delete-7.png

Создание раздела подкачки (swap)

Внимание! Операции с разделами жесткого диска могут привести к потере Ваших данных и невозможности загрузки операционной системы. Перед работой сделайте резервную копию данных на внешний носитель!

Иногда может понадобиться создать раздел подкачки (swap) вместо файла подкачки, например, для настройки перехода компьютера в спящий режим (подробнее см. Гибернация). Для этого можно выполнить следующее:

1. Отключить использование файла подкачки согласно инструкции, удалить swap-файл и запись о нем в /etc/fstab:

su -
swapoff /swap
rm /swap
mcedit /etc/fstab

Удалить строку:

/swap swap swap defaults  0  0

Сохранить файл F2 и закрыть текстовый редактор F10.


2. Загрузиться с LiveCD. С помощью программы GParted при необходимости уменьшить размер имеющегося раздела диска:

su-
gparted
GParted - уменьшить раздел
GParted - уменьшить раздел


В программе GParted создать раздел подкачки:

GParted - создать раздел подкачки
GParted - создать раздел подкачки


Затем в GParted нажать Применить все операции:

GParted - применить все операции
GParted - применить все операции


3. Перезагрузить компьютер. Раздел подкачки может подключиться автоматически. Нужно добавить запись о разделе подкачки в файл /etc/fstab:

su -
blkid | grep swap

Найти запись о разделе подкачки (идентификатор в Вашем случае будет другой):

/dev/sda3: UUID="b7fed2ff-45a7-41f1-a7a1-d24fa85bf5b1" TYPE="swap" PARTUUID="a1fbc912-01"

Добавить запись о разделе подкачки:

mcedit /etc/fstab

Добавить строку (с найденным выше идентификатором):

UUID=b7fed2ff-45a7-41f1-a7a1-d24fa85bf5b1 swap swap defaults 0 0

Сохранить файл F2 и закрыть текстовый редактор F10.


4. Проверить файл /etc/fstab на наличие ошибок:

findmnt --verify

Отключить и подключить заново swap:

swapoff -a
swapon -a

Проверить состояние swap:

swapon --show

Процедура завершена в случае появления подобного вывода:

NAME      TYPE      SIZE USED PRIO
/dev/sda3 partition 5,1G   0B   -2