Linux. Область подкачки

20.09.2023

Теги: CLILinuxБлочноеУстройствоКомандаФайлФайловаяСистема

Linux делит свою физическую оперативную память (RAM) на кусочки (чанки, chucks), называемые страницами (pages). Подкачка — это процесс, при котором страница памяти копируется в определенное место на жестком диске, называемое областью подкачки, чтобы освободить эту страницу в физической памяти. Общий объем физической памяти и пространств подкачки называется виртуальной памятью.

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

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

Прежде чем приступить к процессу добавления, настройки или удаление файла подкачки, необходимо проверить его наличие.

$ free -h
               total        used        free      shared  buff/cache   available
Память:        1,9Gi       154Mi       874Mi       0,0Ki       935Mi       1,6Gi
Подкачка:      1,9Gi          0B       1,9Gi
Есть 2 Гбайт оперативной памяти и 2 Гбайт области подкачки. Если области подкачки нет, во второй строке будут нули.

$ free -h
               total        used        free      shared  buff/cache   available
Память:        1,9Gi       154Mi       874Mi       0,0Ki       935Mi       1,6Gi
Подкачка:         0B          0B          0B

Однако, по выводу команды free непонятно — это файл или раздел подкачки. Поэтому используем другую команду.

$ swapon --show
NAME      TYPE SIZE USED PRIO
/swap.img file 1,9G   0B   -2

Теперь понятно, что область подкачки — это файл swap.img в корневой файловой системе размером 2 Гбайт.

Давайте создадим еще один файл подкачки swapfile размером 1 Гбайт — тоже в корневой файловой системе.

$ sudo fallocate -l 1G /swapfile

Теперь нужно выставить права на файл и сделать внутри него область подкачки с помощью команды mkswap.

$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
без метки, UUID=ba5210ee-3ba8-4a21-99b2-8be8d64bdaea

Осталось только включить файл подкачки в работу с помощью команды swapon.

$ sudo swapon /swapfile

Давайте проверим, что теперь у нас в системе два файла подкачки общим размером 3 Гбайт.

$ swapon --show
NAME      TYPE  SIZE USED PRIO
/swap.img file  1,9G   0B   -2
/swapfile file 1024M   0B   -3

Так как swap-файл содержит внутри себя файловую систему — его можно добавить в файл /etc/fstab для подключения при загрузке системы.

$ sudo nano /etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/swap.img       none            swap    sw              0       0
/swapfile       none            swap    sw              0       0

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

$ swapon --show
NAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -2
/swap.img file  1,9G   0B   -3

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

Добавил еще один виртуальный диск /dev/sdc для виртуальной машины — давайте создадим на нем раздел подкачки размером 1 Гбайт. Для этого используем команду fdisk — создаем таблицу разделов GPT (команда g), создаем раздел (команда n), указываем тип раздела (команда t), записываем изменения (команда w).

$ sudo fdisk /dev/sdc
Добро пожаловать в fdisk (util-linux 2.37.2).
Изменения останутся только в памяти до тех пор, пока вы не решите записать их.
Будьте внимательны, используя команду write.

Устройство не содержит стандартной таблицы разделов.
Создана новая метка DOS с идентификатором 0xe6b7b0da.

Команда (m для справки): g
Создана новая метка диска GPT (GUID: FF476FF5-5406-AD47-842D-10C7C9527280).

Команда (m для справки): n
Номер раздела (1-128, по умолчанию 1): Enter
Первый сектор (2048-4194270, по умолчанию 2048): Enter
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-4194270, по умолчанию 4194270): +1G

Создан новый раздел 1 с типом 'Linux filesystem' и размером 1 GiB.

Команда (m для справки): t
Выбранный раздел 1
Partition type or alias (type L to list all): swap
Тип раздела 'Linux filesystem' изменен на 'Linux swap'.

Команда (m для справки): w
Таблица разделов была изменена.
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.

Посмотрим, что получилось

$ sudo fdisk -l /dev/sdc
Диск /dev/sdc: 2 GiB, 2147483648 байт, 4194304 секторов
Disk model: VBOX HARDDISK
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: FF476FF5-5406-AD47-842D-10C7C9527280

Устр-во    начало   Конец Секторы Размер Тип
/dev/sdc1    2048 2099199 2097152     1G Linux своп

Создаем область подкачки внутри раздела

$ sudo mkswap /dev/sdc1
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
без метки, UUID=c22b716a-2912-4a7b-8a3a-cf5df3d6efac

Осталось только включить раздел подкачки

$ sudo swapon /dev/sdc1

Давайте проверим, какие области подкачки существуют сейчас

$ swapon --show
NAME      TYPE       SIZE USED PRIO
/swap.img file       1,9G   0B   -2
/swapfile file      1024M   0B   -3
/dev/sdc1 partition 1024M   0B   -4

Добавим запись в файл /etc/fstab для подключения раздела подкачки при загрузке.

$ blkid
..........
/dev/sdc1: UUID="c22b716a-2912-4a7b-8a3a-cf5df3d6efac" TYPE="swap" PARTUUID="18015836-0303-b94b-b5db-4cb5f0e1974c"
$ sudo nano /etc/fstab
# <file system>                            <mount point>   <type>  <options>  <dump>  <pass>
/swap.img                                  none            swap    sw         0       0
/swapfile                                  none            swap    sw         0       0
UUID=c22b716a-2912-4a7b-8a3a-cf5df3d6efac  none            swap    sw         0       0

Приоритет области подкачки

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

$ sudo swapoff /dev/sdc1
$ sudo swapon --priority 1 /dev/sdc1
$ sudo swapon --show
NAME      TYPE       SIZE USED PRIO
/swap.img file       1,9G   0B   -2
/swapfile file      1024M   0B   -3
/dev/sdc1 partition 1024M   0B    1

Приоритет можно задавать с помощью числа от 0 до 32767, чем больше число — тем выше приоритет. Для нескольких областей подкачки с одинаковым приоритетом будет использоваться чередование. Если приоритет не задан, то он имеет отрицательное значение.

$ sudo nano /etc/fstab
# <file system>                            <mount point>   <type>  <options>  <dump>  <pass>
/swap.img                                  none            swap    sw,pri=0   0       0
/swapfile                                  none            swap    sw,pri=0   0       0
UUID=c22b716a-2912-4a7b-8a3a-cf5df3d6efac  none            swap    sw,pri=1   0       0

Параметр ядра swappiness

Параметр swappiness определяет, насколько активно будет использоваться область подкачки, может принимать значения от 0 до 100. Нулевое значение не рекомендуется использовать, 1 — минимальное значение, которое предписывает системе использовать swap только в крайнем случае.

$ sudo nano /etc/sysctl.conf
vm.swappiness = 1
$ sudo sysctl -p

Деактивация области подкачки

Для этого предназначена команда swapoff.

$ sudo swapoff /dev/sdc1
$ sudo swapon --show
NAME      TYPE  SIZE USED PRIO
/swap.img file  1,9G   0B    0
/swapfile file 1024M   0B    0

Поиск: CLI • Linux • Команда • swap • подкачка • файл • память

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.