Як безпечно вимкнути своп постійно і повернути простір? (на Дебіана Джессі)


48

Я встановив Debian Jessie з розділенням за замовчуванням на своєму SSD-диску. Мій поточний розділ диска виглядає приблизно так:

Мій поточний розділ диска виглядає приблизно так

Оскільки у мене є 16 Гб оперативної пам’яті, я вважаю, що мені не потрібна заміна . Але оскільки у мене є інші дисководи, я можу створити, наприклад, swapfile на одному з інших дисків.

Чи можете ви сказати мені, які дії я повинен зробити, щоб правильно та назавжди видалити розділ swap, щоб він не займав місце на диску ? Я хочу видалити розділ swap, оскільки на даний момент у мене є лише 128 ГБ SSD.

Ось що я намагався і перезавантажував кожного разу; кожен з цих кроків не є постійним або нічого не робив :

  1. Використання swapoffутиліти:

    swapoff --all
    
  2. Використання утиліти GParted :

    Клацніть правою кнопкою миші розділ swap та натисніть кнопку Swapoff.

  3. Коментуючи UUID розділу swap у наступному файлі:

    /etc/fstab
    
  4. Коментуючи UUID розділу swap у наступному файлі:

    /etc/initramfs-tools/conf.d/resume
    
  5. Запуск цих команд у підсумку (і в цьому, і в протилежному порядку):

    update-grub
    
    update-initramfs -u
    

1
Swapoff вимикає лише заміну для поточно працюючої системи, щоб зробити її постійною, слід поєднувати її з видаленням відповідного запису /etc/fstab. Як тільки це буде зроблено, swap слід відключити і не повертатися до наступного завантаження. Тепер вам слід змінити таблицю розділів і розширити вашу основну файлову систему, якщо ви хочете повернути невикористаний простір. Дивіться мою відповідь для отримання детальних інструкцій.
Андре Борі

@ burian.vlastimil Ви можете опублікувати весь /etc/fstab?
Андре Борі

@ burian.vlastimil Будь ласка, відредагуйте це у своєму запитанні, оскільки коментарі не зберігають розривів рядків. Чи зберігаються зміни у fstab після перезавантаження або лінія swap не коментується?
Андре Борі

1
Якщо я можу замислитися над цим питанням, метою swap є видалення невикористаних сторінок та захист системи від втрати пам’яті. Таким чином, як запропонував SnakeDoc, мати своп 512MB завжди добре. Особисто я маю SSD без розділу swap, а файлу своп у моєму / директорії. Якщо ви вирішили це зробити, використовуйте цей підручник для створення файлу. Що стосується swap-розділу, ви можете завантажити живий usb та використовувати gparted для видалення цього розділу. Не забудьте оновити grub.
Сергій Колодяжний

4
@SnakeDoc - у вас зазвичай не буде паніки з ядром, обробник OOM запускає і вбиває процес (і), щоб звільнити пам'ять (і зазвичай це робить досить непогану роботу, вирішуючи, кого з них вбити, як правило, надаючи перевагу до вбивства більших і нових процесів). Я підтримую велику кількість серверів без свопів, які налаштовані на паніку на OOM замість того, щоб вбивати процеси, тому що сервери налаштовані таким чином, що в них зазвичай ніколи не буде вичерпано пам'яті, і якщо вони є, я хочу, щоб вони панікували і перезавантажувались, а не мінялися місцями. і сповільнювати (або нехай обробник OOM вирішує, які процеси вбити)
Johnny

Відповіді:


46

Виконати як корінь:

# swapoff -a

І щоб зробити цю зміну постійною, відредагуйте /etc/fstabта видаліть або прокоментуйте запис своп.


@ burian.vlastimil, що ти маєш на увазі із заблокованим? Ви можете переконатись, що жоден пристрій підкачки не використовується, переглянувши перший рядок вгорі - він повинен повідомляти про "KiB Swap: 0 total". Ви також можете cat /proc/swaps- який повинен просто повідомити рядок заголовка. Якщо це так, то так, ви можете сміливо видалити розділ swap - і збільшити інший розділ - щоб відновити цей простір - якщо це те, що ви хочете.
maxschlepzig

@ burian.vlastimil, своп може бути включений вашими програмами initramfs, можливо, вам доведеться видалити параметр resumeядра (який посилається на UUID вашого свопу), тобто оновити grub та відновити initramfs (в основному, виконайте протилежні деякі кроки в SwapFaq ).
maxschlepzig

@ burian.vlastimil, ви також можете скопіювати свою конфігурацію grub (under /boot) для цього uuid, і ви можете розпакувати свої initramsfs та видалити вміст, щоб дістати до першопричини цього. Переконайтесь, що ви робите нечутливий до справи греп.
maxschlepzig

2
просто покласти swapoff -aв /etc/rc.local. замінити на кілька мілісекунд при завантаженні не проблема. з 16 ГБ оперативної пам’яті довгий час там нічого не буде записано. просто залиште там місце для заміни (простір на диску дешевий) і не змінюйтесь /etc/fstab .
Скаперен

зробіть тимчасовий файл swap, тоді ви можете відновити простір, видаливши файл, коли ви вимкнете своп
Skaperen

40
  1. Якщо ви відкрили GParted , закрийте його. Його функція Swapoff, здається, не є постійною.

  2. Відкрити термінал і стати root( su); якщо ви sudoввімкнули, ви можете зробити це, наприклад sudo -i; див. man sudoдля всіх варіантів):

    sudo -i
    
  3. Вимкніть конкретний розділ swap та / або всі swap s:

    swapoff --all
    
  4. Переконайтесь, що на 100% впевнений, що конкретний розділ підкачки розділений:

    cat /proc/swaps
    
  5. Відкрийте текстовий редактор, для якого ви вмієте використовувати цей файл, наприклад, nanoякщо ви не впевнені:

    nano /etc/fstab
    
  6. Прокоментуйте / видаліть UUID розділу swap , наприклад:

    # UUID=1d3c29bb-d730-4ad0-a659-45b25f60c37d    none    swap    sw    0    0
    
  7. Відкрийте текстовий редактор, для якого ви вмієте використовувати цей файл, наприклад, nanoякщо ви не впевнені:

    nano /etc/initramfs-tools/conf.d/resume
    
  8. Прокоментуйте / видаліть попередньо ідентифікований UUID розділ swap , наприклад:

    # RESUME=UUID=1d3c29bb-d730-4ad0-a659-45b25f60c37d
    
  9. Не закривайте термінал, як вам це знадобиться пізніше.

Примітка . Наступні кроки відрізняються залежно від того, покладаєтесь ви на CLI або GUI .


GUI :

  1. Відкрийте GParted або з меню, або зручніше з відкритого нами терміналу:

    gparted
    
  2. Якщо у вас його не встановлено, ви можете це зробити; після цього запустіть попередню команду ще раз:

    apt-get install gparted
    
  3. Виберіть диск у верхньому правому меню.

  4. Оскільки GParted повторно активізує розділ swap після запуску, вам доведеться клацнути правою кнопкою миші певний розділ swap та натиснути Swapoff -> Це буде застосовано негайно.

  5. Видаліть розділ swap правою кнопкою миші -> Delete. Ви повинні застосувати зміну зараз.

  6. Змініть розмір основного / іншого розділу правою кнопкою миші -> Змінити розмір / Перемістити. Ви повинні застосувати зміну зараз.

  7. Повернувшись до терміналу, давайте відтворимо завантажувальні зображення :

    update-initramfs -u -k all
    
  8. Оновити GRUB :

    update-grub
    
  9. Ви можете перезавантажити зараз, якщо хочете перевірити, що машина завантажується.


CLI :

Я перевірю в VM s, чи працює моє рішення, тоді я поділюсь ним. Тим часом дивіться цю відповідь .


1
найбільш повно, добре пояснено.
benzkji

Якщо після цього у вас виникає повільне завантаження з повідомленням gave up waiting for suspend/resume device: У файлі /etc/initramfs-tools/conf.d/resumeне просто відключайте рядок, замініть його на RESUME=none. ( джерело )
tanius

17

Прокоментуйте / видаліть відповідний запис у, /etc/fstabщоб запобігти його повторному включенню при наступному завантаженні, а потім перезавантажте або запустіть, swapoff -aщоб відключити використання розділу swap для поточно запущеної системи.

Тепер видаліть розділ swap, розгорніть системний розділ на цей невикористаний простір і розгорніть фактичну файлову систему. Я не знаю, чи може це зробити ваш менеджер графічних розділів, але якщо це не вдається, тут можна зробити дистриб'юторський спосіб, використовуючи fdiskта resize2fs:

# fdisk /dev/sdX

# Display current partition table, copy/paste this output somewhere to be able to go back in case you screw up

Command (m for help): p
Device       Boot  Start    End Sectors Size Id Type
/dev/sda1        2048  22527   20480  10M ef EFI (FAT-12/16/32)
/dev/sda2       22528 186367  163840  80M 83 Linux
/dev/sda3      186368 204799   18432   9M 82 Linux swap / Solaris

# Delete the swap partition

Command (m for help): d
Partition number (1-3, default 3): 3
Partition 3 has been deleted.

# Delete the system partition

Command (m for help): d
Partition number (1,2, default 2): 2
Partition 2 has been deleted.

# Create a new system partition starting the same as the old one but ending a bit farther, at the end of the (now deleted) swap partition

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (2-4, default 2): 
# Enter the same start sector as the old part.
First sector (22528-204799, default 22528): 22528
# Enter the end sector of the old swap partition
Last sector, +sectors or +size{K,M,G,T,P} (22528-204799, default 204799): 204799

Created a new partition 2 of type 'Linux' and of size 89 MiB.

# Save the changes
Command (m for help): w
The partition table has been altered.

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

# resize2fs /dev/sda2

Тепер ви успішно відключили своп і повернули невикористаний простір, навіть не перезавантажившись.

Зауважте, що процедура для Debian дещо інша і вимагає редагування ще декількох файлів. Ознайомтеся з цією відповіддю для отримання додаткової інформації.


Це не працює для мене. У мене було 3 перегородки. один для / завантаження, один для / та swap. Коли я намагаюся створити новий розділ, я можу зробити лише
футовий

Додавання, принаймні, для дистрибутивів на основі Debian 9: потрібно запустити partprobeперед resize2fsкомандою, інакше ядро ​​не знає про нову таблицю розділів і нічого не буде змінено.
таніус

2

Клацніть правою кнопкою миші на розділі swap у GParted та натисніть Swapoff. Потім видаліть свій розділ swap, видаліть його /etc/fstabта відновіть свій initramfsта grub(можливо, непотрібний).

Розділ підкачки не повинен бути доданий до initramfsпо initramfsсценарієм поновлення , якщо розділ підкачки не існує.

Відповідно до цієї публікації , наступним є правильний спосіб відновлення initramfsта grub:

update-initramfs -c -k <kernel>

update-grub

-2

Ви можете клацнути правою кнопкою миші на розділі swap у Gparted та вибрати варіант swapoff . Це швидкий спосіб здійснити те саме, що ви просили.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.