Swap: различия между версиями
Нет описания правки |
Илья Н. (обсуждение | вклад) мНет описания правки |
||
(не показано 10 промежуточных версий 4 участников) | |||
Строка 1: | Строка 1: | ||
{{Note|Данная инструкция подходит | {{Note|Данная инструкция подходит для накопителей с файловой системой ext2/3/4 и с ограничениями для btrfs (поддержка реализована в ядре 5.0 и расширена в 6.1).}} | ||
{{Attention|Для btrfs следует ознакомиться с [https://btrfs.readthedocs.io/en/latest/Swapfile.html дополнительными ограничениями].}} | |||
__TOC__ | |||
'''swap''' — это специальная системная область, предварительно выделенная на накопителе (жёстком диске) и используемая операционной системой с целью резервирования свободного пространства, которое может быть задействовано при нехватке ОЗУ. | '''swap''' — это специальная системная область, предварительно выделенная на накопителе (жёстком диске) и используемая операционной системой с целью резервирования свободного пространства, которое может быть задействовано при нехватке ОЗУ. | ||
Строка 9: | Строка 11: | ||
Особенности swap-файла: | Особенности swap-файла: | ||
* Можно легко изменять размер или полностью удалить, что затруднительно для варианта в виде раздела. | * Можно легко изменять размер или полностью удалить, что затруднительно для варианта в виде раздела. | ||
* Можно разместить на '''зашифрованном разделе'''. | |||
* В сравнении со swap-разделом есть незначительное снижение производительности. | * В сравнении со swap-разделом есть незначительное снижение производительности. | ||
* Для использования [[Гибернация|гибернации]] требуется дополнительная подготовка (получение UUID и смещения заголовка) и пересоздание загрузочного образа ''initrd''. | * Для использования [[Гибернация|гибернации]] требуется дополнительная подготовка (получение UUID и смещения заголовка) и пересоздание загрузочного образа ''initrd''. | ||
=== Создание swap-файла === | === Создание swap-файла === | ||
#Все дальнейшие операции необходимо выполнять с правами суперпользователя: | |||
Все дальнейшие операции необходимо выполнять с правами суперпользователя: | #:<syntaxhighlight lang="bash"> | ||
<syntaxhighlight lang="bash"> | |||
$ su - | $ su - | ||
</syntaxhighlight> | </syntaxhighlight> | ||
#:[[Файл:Swapfile-create-1.png]] | |||
#Удостоверьтесь, что 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> | ||
Вместо нулей | #:[[Файл: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 включен вручную в рамках активной сессии, он будет работать только до перезапуска сессии (перезагрузки системы). Для постоянной работы необходимо прописать автоматическое монтирование в ''/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]] | |||
=== Удаление файла подкачки === | === Удаление файла подкачки === | ||
#Перед удалением сначала необходимо отключить использование swap: | |||
Перед удалением сначала необходимо отключить использование swap: | #:<syntaxhighlight lang="bash"> | ||
<syntaxhighlight lang="bash"> | |||
# swapoff /swapfile | # swapoff /swapfile | ||
</syntaxhighlight> | </syntaxhighlight> | ||
После можно удалить файл: | #:[[Файл:Swapfile-delete-2.png]] | ||
<syntaxhighlight lang="bash"> | #После можно удалить файл: | ||
#:<syntaxhighlight lang="bash"> | |||
# rm /swapfile | # rm /swapfile | ||
</syntaxhighlight> | </syntaxhighlight> | ||
#:[[Файл:Swapfile-delete-3.png]] | |||
[[Файл: | #Так же необходимо отключить автоматическое монтирование. | ||
#:Для этого от суперпользователя в текстовом редакторе открываем ''/etc/fstab''... | |||
Так же необходимо отключить автоматическое монтирование. | #:<syntaxhighlight lang="bash"> | ||
<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 | /swapfile none swap sw 0 0 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
#:[[Файл:Swapfile-delete-6.png]] | |||
<syntaxhighlight lang="bash"> | #Сохраняем изменения клавишей {{button|F2}}, выходим {{button|F10}} и проверяем ''fstab'': | ||
#:<syntaxhighlight lang="bash"> | |||
# findmnt --verify | # findmnt --verify | ||
</syntaxhighlight> | </syntaxhighlight> | ||
В выводе не должно быть ошибок: | #:В выводе не должно быть ошибок: | ||
<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
Success, no errors or warnings detected | Success, no errors or warnings detected | ||
</syntaxhighlight> | </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>. | |||
2. '''Загрузиться с LiveCD'''. С помощью программы {{prg|GParted}} при необходимости '''уменьшить размер имеющегося раздела диска''': | |||
su- | |||
gparted | |||
[[Файл:GParted - уменьшить раздел.png|600px|мини|без|альт=GParted - уменьшить раздел|GParted - уменьшить раздел]] | |||
В программе {{prg|GParted}} '''создать раздел подкачки''': | |||
[[Файл:GParted - создать раздел подкачки.png|600px|мини|без|альт=GParted - создать раздел подкачки|GParted - создать раздел подкачки]] | |||
Затем в {{prg|GParted}} нажать '''Применить все операции''': | |||
[[Файл:GParted - применить все операции.png|600px|мини|без|альт=GParted - применить все операции|GParted - применить все операции]] | |||
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>. | |||
4. '''Проверить файл {{path|/etc/fstab}}''' на наличие ошибок: | |||
findmnt --verify | |||
'''Отключить и подключить заново swap''': | |||
swapoff -a | |||
swapon -a | |||
'''Проверить состояние swap''': | |||
swapon --show | |||
Процедура завершена в случае появления подобного вывода: | |||
NAME TYPE SIZE USED PRIO | |||
/dev/sda3 partition 5,1G 0B -2 | |||
{{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=HOWTO|category=HOWTO|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 15:38, 28 октября 2024
swap — это специальная системная область, предварительно выделенная на накопителе (жёстком диске) и используемая операционной системой с целью резервирования свободного пространства, которое может быть задействовано при нехватке ОЗУ.
В Linux используется два варианта области подкачки:
- В виде раздела на накопителе.
- В виде файла.
В современных условиях предпочтительнее использовать swap в виде файла.
Особенности swap-файла:
- Можно легко изменять размер или полностью удалить, что затруднительно для варианта в виде раздела.
- Можно разместить на зашифрованном разделе.
- В сравнении со swap-разделом есть незначительное снижение производительности.
- Для использования гибернации требуется дополнительная подготовка (получение UUID и смещения заголовка) и пересоздание загрузочного образа initrd.
Создание swap-файла
- Все дальнейшие операции необходимо выполнять с правами суперпользователя:
- Удостоверьтесь, что swap отсутствует:
- Начиная с ядра 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 — показывать ход прогресса операции.
- В целях безопасности необходимо ограничить права, чтобы другие пользователи не могли взаимодействовать с файлом:
- Вместо нулей внутри swap-файла нужно создать специальную файловую систему swap:
- Остаётся активировать подготовленный swap-файл:
- С тем учётом, что созданный swap включен вручную в рамках активной сессии, он будет работать только до перезапуска сессии (перезагрузки системы). Для постоянной работы необходимо прописать автоматическое монтирование в /etc/fstab:
- Проверить правильность заполнения fstab:
Удаление файла подкачки
- Перед удалением сначала необходимо отключить использование swap:
- После можно удалить файл:
- Так же необходимо отключить автоматическое монтирование.
- И удаляем строчку о монтировании swap-файла.
- Сохраняем изменения клавишей F2, выходим F10 и проверяем fstab:
Создание раздела подкачки (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 нажать Применить все операции:
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