Створення, редагування та видалення swap в linux

Оперативної пам'яті багато не буває. Віртуальна пам'ять призначена для раціонального розподілу оперативної пам'яті між призначеними для користувача і системними процесами. Простіше кажучи, щоб не витрачати оперативну пам'ять на зберігання статичної інформації, виділяють деяку область жорсткого диска для її розміщення.

1. Загальна інформація

В системі Лінукс для розміщення віртуальної пам'яті можна виділити окремий розділ жорсткого диска або використовувати звичайний файл. Лінукс дозволяє комбінувати ці два способи. За замовчуванням в Unix системах застосовується SWAP розділ. Продуктивність окремого SWAP розділу жорсткого диска вище, ніж продуктивність віртуальної пам'яті розміщеної у файлі. Єдиним мінусом SWAP розділу є складність його редагування.

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

Система Linux дозволяє одночасно використовувати кілька SWAP розділів і SWAP файлів. Це дозволяє більш гнучко підійти до питання розширення віртуальної пам'яті в разі нестачі розміру SWAP області на сервері. Найчастіше, на виробничих серверах з існуючим SWAP розділом з'ясовується, що поточного розміру віртуальної пам'яті вже не вистачає. Доцільніше додати тестовий файл підкачки для визначення навантаження на SWAP область, а вже після збільшити розмір розділу.

Для будь-якої операційної системи, якщо використовується сплячий режим (Hebernation), розмір віртуальної пам'яті слід робити не менше обсягу оперативної пам'яті. У загальних випадках найбільш ефективно використовувати розмір віртуальної пам'яті кратний 4 (1024 Мб, 2048 Мб і т.д.), так як ядро ​​системи виробляє обмін сторінками з пам'яттю по 4 КБ в кожній. Розмір віртуальної пам'яті легше порахувати від обсягу оперативної пам'яті * 2, * 3. Область підкачки варто розміщувати на найшвидшому жорсткому диску ближче до початку.

Хочу звернути Вашу внимани, що наведені нижче інструкції стосується тільки зміни розміру ФАЙЛА ВІРТУАЛЬНОЇ ПАМ'ЯТІ, а не зміна розміру окремої директорії SWAP.

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

2. Створення SWAP файлу

  1. Створюємо файл необхідного розміру для swap області, де / home / swap-tmp - це ім'я і шлях до файлу, а count = 1024K його размерв, в даному випадку - 1024 Мб):

# Sudo dd if = / dev / zero of = / home / swap-tmp bs = 1024 count = 1024K

На екрані отримаємо:

[User @ localhost user] #sudo dd if = / dev / zero of = / home / swap-tmp bs = 1024 count = 1024K
1048576 + 0 записів лічено
1048576 + 0 записів написано
скопійовано 1073741824 байта (1,1 GB), 137,509 c, 7,8 MB / c

  • Далі виробляємо запис в початок файлу системну інформацію, яка буде використовується ядром системи для роботи з файлом підкачки:

    # Sudo mkswap / home / swap-tmp

    Після закінчення операції на екрані з'явиться:

    [User @ localhost user] # sudo mkswap / home / swap-tmp
    Встановлюється простір для свопінгу версії 1, розмір = 1073737 кБ
    без мітки, UUID = 54c60583-e61a-483a-a15c-2f1be966db85

  • Наступним кроком активуємо щойно створений SWAP файл:

    # Sudo swapon / home / swap-tmp

  • Після перезавантаження системи SWAP файл необхідно активувати знову або додати рядок для автоматичного завантаження в файл fstab.

    Редагувати файл fstab можна самостійно або командою, яка додає в кінець файлу fstab рядок / home / swap-tmp swap swap defaults 0 0:

    # Echo "/ home / swap-tmp swap swap defaults 0 0" | sudo tee -a / etc / fstab

    Теж саме діяння але добовлением через UUID, який присвоюється в пункті 2:

    # Echo "UUID = 54c60583-e61a-483a-a15c-2f1be966db85 swap swap defaults 0 0" | sudo tee -a / etc / fstab

    3. Видалення SWAP файлу

    1. Переглядаємо всі об'єкти, які використовуються для розміщення віртуальної пам'яті
    Вибираємо непотрібний.
  • Деактивувавши, для прикладу, створений вище SWAP файл:

    # Sudo swapoff / home / swap-tmp

  • Видаляємо SWAP файл:

    # Sudo rm / home / swap-tmp

    Якщо Ви раніше додавали рядок в fstab, для автоматичного завантаження SWAP файлу при старті операційної системи, то слід її видалити. Виводимо файл / etc / fstab для редагування на екран:

    # Sudo gedit / etc / fstab

    У ньому видаляємо рядок монтування SWAP файлу.

    4. Редагування розміру SWAP файлу

    Дії по редагування обсягу SWAP файлу зводяться до видалення вже створеного файлу SWAP і створення нового файлу необхідного розміру. Тобто потрібно спочатку зробити пункт 3, а після пункт 2.

    Випадкові 7 статей:

    А що щодо окремих розділів? З ними як бути?
    Або теж досить видалити розділ і стерти його з fstab?

    З розділами все так же, тільки стежте, щоб SWAP все ж залишився в якомусь вигляді. Я не знаю як буде працювати Linux без SWAP. не дарма, при установці ОС, об'язательно розділи: / і своп

    Лінукс без SWAP працює нормально, якщо є близько 2 Гб Ram і комп використовується як десктоп. Сам тільки що створив розділ свопа тільки заради ресурсоемкого додатки.

    Amiro: Лінукс без SWAP працює нормально, якщо є близько 2 Гб Ram і комп використовується як десктоп. Сам тільки що створив розділ свопа тільки заради ресурсоемкого додатки.

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

    P.S. У вашому випадку я б створив скрипт, який створює swap і запускає ресурсномістке додаток. Після завершення роботи цього додаток видаляється swap файл. І повісив би його на кнопку запуску програми.

    Mut @ NT
    P.S. У вашому випадку я б створив скрипт, який створює swap і запускає ресурсномістке додаток. Після завершення роботи цього додаток видаляється swap файл. І повісив би його на кнопку запуску програми.
    ---
    Файл Свапи на машині з 2-ма гігамі оператіви розмірами в 4 гіга близько двох хвилин создаеться, втомишся чекати завантаження свого додатка

    Spec: Файл Свапи на машині з 2-ма гігамі оператіви розмірами в 4 гіга близько двох хвилин создаеться, втомишся чекати завантаження свого додатка

    Тут немає золотої середини. Завжди доводиться чимось жертвувати або швидкістю, або швидкістю))

    Mut @ NT: P.S. У вашому випадку я б створив скрипт, який створює swap і запускає ресурсномістке додаток. Після завершення роботи цього додаток видаляється swap файл. І повісив би його на кнопку запуску програми.

    Ось тільки ніякої гарантії що це буде завжди працювати ні.

    Може знайтися така програма (не ваше ресурсоємних додаток, а інша). яка при нестачі пам'яті скидає дані на диск (якщо malloc повертає NULL), а якщо пам'ять є, то зберігає їх в пам'яті. в результаті після відпрацювання вашої програми для якого створювався своп, в ньому може виявитися купа даних інших додатків які просто не влізуть в пам'ять при витісненні їх з свопу. Що почне після цього відбуватиметься з системою - тема для окремої розмови. Якщо своп у вас є, то його можна тільки нарощувати, але ніяк не зменшувати. щоб це було безпечно

    Ви маєте рацію. У статті висвітлено лише те, що це в Linux можливо

    Купа помилок в тексті.
    > Або додати рядок для автоматичної
    або додати рядок для автоматичної

    > Яка буде використовується ядром
    яка буде використовуватися ядром

    Прошу вибачення за можливо дилетантське висловлювання, просто я краще знаю Solaris. З питання продуктивності і обсягу SWAP. у мене досвід такої. SWAP хочуть користуватися деякими програмами, наприклад Oracle, в той же час підкачка це завжди вузьке місце (якщо тільки відтворити диск SSD). За цим якщо є можливість взагалі без підкачки, то продуктивність максимальна, з іншого боку з досвіду і рекомендацій вендорів при ОЗУ до 2 Гб розмір SWAP = ОЗУ, до 4 Гб 50% ОЗУ, до 1Тб де то від 16 до 32Гб, понад терабайта можна давати 64Гб . Знову ж залежить від програми, наприклад SAP вимагає щоб при 32Гб пам'яті SWAP був не менше 20Гб.

    Значок # увазі що sudo не потрібно, помилка в # sudo dd if = / dev / zero of = / home / swap-tmp bs = 1024 count = 1024K; правильно: # dd if = / dev / zero of = / home / swap-tmp bs = 1024K count = 1024