Як створити файл підкачки в Linux

Збільште обсяг пам’яті підкачки на вашому комп’ютері Linux або додайте нову, не змінюючи структуру розділів. Ми продемонструємо простий метод налаштування пам’яті підкачки.

Файли підкачки та розділи підкачки: порівняння

Існує ряд ситуацій, коли виникає потреба розширити існуючу або додати нову область підкачки на комп’ютері під керуванням Linux.

Наприклад, ваша пам’ять підкачки може часто працювати на межі своїх можливостей. Під час інсталяційного процесу легко зробити помилку і випадково пропустити додавання swap у вашу систему. Можливо, раніше ви вважали, що великий об’єм оперативної пам’яті (ОЗП) усуває потребу в підкачці, але потім змінили свою думку. Іноді ви можете отримати у спадок систему без налаштованої підкачки, з причин, які вам навряд чи колись стануть відомі.

Просте рішення для всіх цих випадків – додати файл підкачки на ваш комп’ютер. Це спеціальний файл, який попередньо виділяється і резервується для використання як пам’ять підкачки. Файл підкачки буде функціонувати разом з будь-якою наявною підкачкою, чи то файл, чи то розділ підкачки.

Раніше використання файлу підкачки призводило до зниження продуктивності порівняно з розділом підкачки. Однак, це вже не актуально завдяки вдосконаленню продуктивності механічних (жорстких) дисків та підвищенню ефективності функцій підкачки в Linux. Фактично, деякі дистрибутиви Linux тепер за замовчуванням створюють файли підкачки, а не розділи.

Підкачка використовується не тільки для звільнення оперативної пам’яті, коли її не вистачає. Вона є важливим компонентом стабільної системи. Без будь-якої підкачки ядру стає складніше керувати пам’яттю. Давайте розглянемо простий спосіб додати пам’ять підкачки.

Перед початком: Btrfs та SSD

Є два важливі моменти, про які варто швидко згадати.

Файлова система Btrfs має певні обмеження щодо файлів підкачки. Раніше існував конфлікт між механізмом копіювання при записі Btrfs, і тим, як повинні працювати файли підкачки. Деякі функції, від яких залежать файли підкачки, не були реалізовані, а припущення щодо нумерації блоків у файлах підкачки не співпадали з Btrfs. Тому файли підкачки не підтримувалися.

Починаючи з ядра 5.0, ви можете використовувати файли підкачки в файлових системах Btrfs, якщо вони налаштовані з наступними вимогами:

Не використовувати копіювання при записі (NOCOW).
Вони не повинні бути стиснутими.
Вони не повинні розкидатися на різні жорсткі диски.

Більшість користувачів використовують файлову систему ext4 за замовчуванням, тому це їх не стосується.

Коли твердотілі накопичувачі (SSD) тільки з’явилися, виникали побоювання щодо їх використання у ситуаціях з частими записами. Людей застерігали від розміщення підкачки на SSD і навіть від ведення системних журналів на SSD.

Сьогодні це не викликає занепокоєння, і більшість сучасних SSD мають термін служби, який перевищує термін служби більшості ПК. Файл підкачки на SSD буде демонструвати набагато кращу продуктивність, ніж розділ підкачки на механічному жорсткому диску.

Перевірка наявної пам’яті підкачки

Спершу перевірте, а потім робіть. Давайте перевіримо, скільки пам’яті підкачки вже є на вашому комп’ютері. Це можна зробити двома способами, і ми скористаємося обома. Команда free виведе інформацію про використану та вільну пам’ять. Опція -h (human-readable) змусить команду free використовувати зрозумілі одиниці вимірювання при відображенні значень пам’яті.

free -h

Вихід команди free показує, що на цій машині не налаштовано пам’ять підкачки.

Обговорення підкачки завжди пов’язане з оперативною пам’яттю та її вільним об’ємом. Тому варто зазначити, що вільна оперативна пам’ять становить 237 МБ. Не плутайте це із загальною доступною пам’яттю для використання. Це значення відображається показником “доступно”, який становить 881 МБ.

Linux використовує вільну оперативну пам’ять для своїх потреб, таких як кешування файлів та буфери ядра. Обсяг оперативної пам’яті, призначений для цього, відображається як “бафф/кеш”, що становить 871 МБ. Але ця пам’ять все ще вважається “доступною”. Вміст “buf/cache” може бути миттєво вивільнений та використаний будь-якою програмою, яка потребує пам’яті.

Інший спосіб перевірити, чи є пам’ять підкачки, – скористатися командою swapon. Опція –show не змінює конфігурацію підкачки на вашому комп’ютері. Вона лише надає статистику.

swapon --show

Якщо ця команда нічого не виводить, це означає, що підкачка не налаштована.

Якщо ці команди виявили, що деяка пам’ять підкачки вже налаштована, необхідно врахувати розмір цієї підкачки, приймаючи рішення щодо розміру файлу підкачки, який ви збираєтеся створити.

Скільки пам’яті підкачки мені потрібно?

Традиційною відповіддю було “вдвічі більше оперативної пам’яті”. Але це правило було сформульовано за часів, коли комп’ютери мали дуже обмежений об’єм оперативної пам’яті. Зі здешевленням оперативної пам’яті та зростанням вимог програм та ігор до об’єму пам’яті, характеристики ПК були відповідно скориговані. Домашні комп’ютери з 32 ГБ оперативної пам’яті сьогодні не є рідкістю. І ви навряд чи захочете виділяти 64 ГБ на жорсткому диску для підкачки, маючи 32 ГБ оперативної пам’яті. Це явно надмірно.

Обсяг підкачки, який вам потрібен, – це дискусійна тема, подібна до обговорення “який редактор найкращий”. Одну з найрозумніших дискусій з цього приводу можна знайти в Розділі поширених питань про підкачку Ubuntu. Там пропонується короткий і розумний підхід (хоча, як і багато хто, вони мають неправильне уявлення про те, як працює підкачка в Linux). Там є корисна таблиця, де наведено рекомендований обсяг підкачки для певного обсягу оперативної пам’яті у вашій системі, а також залежно від того, чи комп’ютер переходить у сплячий режим, чи ні.

І гарна новина полягає в тому, що насправді не має значення, яке значення ви оберете. Ви завжди можете видалити файл підкачки та замінити його на більший або, навіть, менший. Або ви можете просто додати ще один файл підкачки.

Виберіть розмір файлу підкачки з таблиці і попрацюйте з ним деякий час. Слідкуйте за тим, як ваша система використовує пам’ять підкачки. Якщо потрібно внести корективи, це легко зробити. З файлами підкачки це займає дві хвилини. Порівняйте це з налаштуванням розділів на працюючому комп’ютері з Linux.

Створення файлу підкачки

Не слід використовувати команду fallocate для створення файлу підкачки. Ось що сказано на сторінці man для swapon:

Реалізація файлу підкачки в ядрі очікує можливості запису у файл безпосередньо, без допомоги файлової системи.

Це проблема для файлів із "дірками" або для файлів з копіюванням при записі у файлових системах, таких як Btrfs. Команди, як cp(1) або truncate(1), створюють файли з "дірками". Такі файли будуть відхилені swapon.

Попередньо розподілені файли, створені fallocate(1), також можуть розглядатися як файли з "дірками" залежно від файлової системи. Попередньо розподілені файли підкачки підтримуються в XFS починаючи з Linux 4.18.

Найбільш універсальним способом створення файлу підкачки є використання dd(1) та /dev/zero.

Отже, хоча fallocate є швидшою, ми використаємо dd для створення файлу підкачки. Машина, використана для дослідження в цій статті, має 2 ГБ оперативної пам’яті. Ми збираємось створити файл підкачки об’ємом 1 ГБ.

Параметри:

if: вхідний файл. У цьому прикладі ми використовуємо /dev/zero, який створить потік нульових байтів.
of: вихідний файл. Ми збираємось створити файл у кореневому каталозі з назвою swapfile.
bs: розмір блоку в байтах. Це вказує, скільки байтів зчитувати з вхідного файлу та записувати у вихідний файл за один раз.
count: скільки блоків читати та записувати. Помножте це число на значення bs, щоб отримати розмір файлу.

sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

Під час створення файлу надається деяка статистика.

Ми бачимо кількість блоків (записів), які були записані у файл, розмір файлу, час створення файлу та ефективну швидкість передачі даних.

Скористайтеся командою ls, щоб переглянути файл у кореневому каталозі:

ls /

Підготовка файлу підкачки

Нам потрібно підготувати файл підкачки за допомогою команди mkswap, перш ніж його можна буде використовувати. Нам не потрібно надавати жодних параметрів mkswap, крім шляху та імені файлу:

sudo mkswap /swapfile

Файл підготовлений для використання як файл підкачки. Зверніть увагу на попередження про права доступу до файлів. Нам потрібно змінити їх, щоб тільки користувач root мав права читати та записувати файл підкачки.

Використання файлу підкачки

Дозволи за замовчуванням є занадто ліберальними, нам потрібно обмежити їх, щоб тільки root міг використовувати файл підкачки. Скористайтеся командою chmod, щоб змінити права доступу до файлу:

sudo chmod 600 /swapfile

Це видалить всі дозволи для членів групи файлів та інших, але дозволить власнику файлу, root, читати та записувати файл.

Нам потрібно скористатися командою swapon, щоб повідомити Linux про наявність нового файлу підкачки. Нам потрібно лише вказати шлях та ім’я файлу:

sudo swapon /swapfile

Файл підкачки тепер активний.

Додавання файлу підкачки до fstab

Щоб переконатися, що ваш файл підкачки буде доступний після перезавантаження, додайте його до файлу /etc/fstab. Ви можете використовувати будь-який текстовий редактор, який вам подобається, але ми покажемо процес за допомогою графічного текстового редактора Gedit.

sudo gedit /etc/fstab

Рядок, який нам потрібно додати в нижню частину файлу:

/swapfile    none    swap    sw    0    0

Поля:

Файлова система: шлях та ім’я файлу підкачки.
Точка монтування: файл не монтується як файлова система, тому запис “none”.
Тип: це “swap”.
Параметри: під час завантаження буде викликано swapon -a (запустити всі пристрої, позначені як swap) з одного зі сценаріїв завантаження. Ця опція наказує Linux розглядати цей запис як ресурс підкачки, який повинен бути під контролем цієї команди swapon -a. Зазвичай тут використовуються “defaults”, оскільки деякі користувачі Linux помилково вважають, що це поле ігнорується. Як ми побачимо, це не так. Тому має сенс використовувати правильний параметр.
Дамп: це можна встановити на нуль. У цьому випадку це не має значення.
Pass: це можна встановити на нуль. У цьому випадку це не має значення.

Збережіть зміни та закрийте редактор.

Перевірка використання підкачки

Щоб перевірити, чи використовується ваша пам’ять підкачки, скористайтеся командою swapon з параметром –show:

swapon --show

Стовпці:

Ім’я: ім’я розділу підкачки або файлу підкачки.
Тип: тип пристрою підкачки.
Розмір: розмір ресурсу підкачки.
Використано: обсяг використаної пам’яті підкачки.
Prio: пріоритет цієї пам’яті підкачки.

Пріоритет пам’яті підкачки

Кожній пам’яті підкачки призначається пріоритет. Якщо ви не вкажете його, він буде призначений автоматично. Автоматично призначені пріоритети завжди від’ємні. Діапазон пріоритетів, які можна призначити вручну, становить від 0 до 32767. Спочатку використовуються ресурси підкачки з вищими пріоритетами.

Якщо кілька пам’ятей підкачки мають однаковий пріоритет, вони використовуються по черзі, поки обидві не будуть заповнені, потім система шукає пам’ять підкачки з наступним найменшим пріоритетом. Якщо у вас лише одна пам’ять підкачки, то пріоритет, звичайно, не має значення. Але ми змінимо пріоритет створеного нами файлу підкачки, щоб продемонструвати, як це зробити.

Щоб встановити пріоритет, додайте параметр pri= (пріоритет) до запису /etc/fstab. Відредагуйте рядок, який ви додали до /etc/fstab, щоб він виглядав так:

/swapfile    none    swap    sw,pri=10    0    0

Тобто додайте pri=10 до поля параметрів, відокремивши його від “sw” комою. Не залишайте пробілів між “sw”, комою та “pri=10”. Перезавантажте комп’ютер і скористайтеся командою swapon –show:

swapon --show

Пріоритет цієї пам’яті підкачки було підвищено до 10. Це доводить, що поле параметрів у записі /etc/fstab не ігнорується.

Зміна пам’яті підкачки: просто

Підсумувавши все вищесказане, ми можемо створити новий файл підкачки так легко і швидко:

sudo dd if=/dev/zero of=/swapfile2 bs=1024 count=1048576
sudo mkswap /swapfile2
sudo chmod 600 /swapfile2
sudo swapon /swapfile2

І давайте перевіримо, чи це спрацювало:

swapon --show

Якщо ви хочете зробити це постійним, додайте цей файл до /etc/fstab.

Готово.