Linux. Область подкачки
20.09.2023
Теги: CLI • Linux • БлочноеУстройство • Команда • Файл • ФайловаяСистема
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 • подкачка • файл • память