Як можна збільшити розмір swapfile, не видаляючи його в терміналі?


59

Чи є спосіб збільшити мій існуючий "swapfile" без того, щоб знищувати та створювати його знову? Я хотів би збільшити свій обмінний простір з 1 ГБ до 2 ГБ. В даний час він налаштований як такий:

$ sudo swapon -s
Filename                Type        Size    Used    Priority
/swapfile               file        1048572 736640  -1
$ ls -lh /swapfile
-rw------- 1 root root 1.0G Nov  9  2016 /swapfile

Я використовую Ubuntu 14.04.


Скільки у вас оперативної пам’яті? Чи достатньо 2G? Я думаю, що вам доведеться swapoffстворити новий / swapfile mkswap, іswapon -a
heynnema

1
Додайте новий файл свопу, дотримуйтесь інструкцій із вищезазначеного питання. у вас може бути 2 файла свопу;)
Ravexina

1
@Ravexina, питання для новачків, можливо, але чому я хотів би додати новий файл swap, а не збільшувати розмір існуючого? Або неможливо збільшити існуючий файл swap?
Дейв

@Dave Це теж можливо, як ви можете знати, ми можемо swapoffтоді ddі mkswapнарешті swapon. Я думав, ти не хочеш торкатися свого файлу.
Ravexina

2
Повідомлення @Ravexina, що як відповідь
Сергій Колодяжний

Відповіді:


66

Спочатку вимкніть файл swap:

sudo swapoff /swapfile

Тепер давайте збільшимо розмір файлу swap:

sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 oflag=append conv=notrunc

Наведена вище команда додасть 1GiB нульових байтів у кінці файлу своп.

Установіть файл як "файл підкачки":

sudo mkswap /swapfile

включити заміну:

sudo swapon /swapfile

3
sudo fallocate -l 2G /swapfileнапевно, безпечніше, ніж dd (хоча він не зберігає оригінальний свопфайл), і він також потребує sudo chmod 600 /swapfile.
heynnema

7
@heynnema Не fallocateстворює розріджених файлів? На сторінці swaponвказується, що розріджені файли заміни є проблематичними (зокрема згадуючи fallocate).
муру

3
@heynnema ні, на сторінці відображається mkswapтакож, що у файлах не повинно бути жодних отворів.
муру

1
@muru здогадуюсь, я помиляюся :-) Кожного разу, коли я читав, як створити / swapfile з початком 17.04, вони використовували помилку. Я здогадуюсь, що нам просто доведеться використовувати "знищувач дисків"!
heynnema

1
@heynnema: Що можна зробити, це скористатися fallocateдля попереднього виділення місця на диску, а потім ddдля заповнення дірок нулями.
Девід Фоерстер

39

Вам слід додати новий swapfile замість зміни розміру існуючого, оскільки це нічого не коштує . Щоб змінити розмір swapfile, спершу слід його відключити, що виводить вміст підкачки до оперативної пам'яті, що збільшує тиск на оперативну пам’ять і навіть може викликати вбивцю OOM (не кажучи вже про те, що ви, можливо, могли би обробляти диски протягом декількох хвилин). Кілька файлів підкачки не є проблемою, налаштовувати ще один файл підкачки тривіально просто. Немає користі від зміни розміру файлу swap над додаванням іншого.

dd if=/dev/zero of=/some/file count=1K bs=1M
mkswap /some/file
sudo chown root:root /some/file
sudo chmod 600 /some/file
sudo swapon /some/file

Чи є sudo chmod 600 /some/fileпотрібна, чи ні?
heynnema

1
І чи count=1Kдає файл 1G? кількість в розмірі блоку, так? А це може бути 512/4096? Або моя математика неправильна?
heynnema

3
+1 Цей підхід також дозволяє легко відключити один із файлів свопінгу, якщо згодом ви вирішите, що вам потрібно повернути дисковий простір.
joeytwiddle

2
Це дійсно потрібно позначити як правильну відповідь. Нічого собі, браво!
Бешой Гіргіс

1
@muru це, мабуть, є постійним рішенням? Я виконував ці команди 30 квітня, але десь у травні місяця другого свопфайла вже не було. Я не видаляв, але його не було
Крістофер Ручінський

13

Ви можете створити інший файл свопу, як і я:

  1. sudo fallocate -l 4G /swapfile
  2. sudo chmod 600 /swapfile
  3. sudo mkswap /swapfile
  4. sudo swapon /swapfile
  5. Перевірте, чи працює він, sudo swapon --show
    щоб зробити його постійним, додайте файл до fstabфайлу:
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Зверніть увагу, що fallocateслід створити файл, оскільки він створює окремий файл. див.man mkswap
Чарльз Грін

@CharlesGreen це працювало у мене, як я писав, тож він повинен працювати для кого-небудь майже.
борекон

Я хотів би прочитати man mkswap, особливо останній фрагмент перед "Навколишнім середовищем"
Чарльз Грін

1
працював над NanoPi Neo з Armbian v 5.65
BiTinerary

5

Я маю гарні результати на моєму Ubuntu 17.04 за рекомендаціями Аріана Акости з блогу . Тут можна замінити 4G sudo fallocate -l 4G /swapfileбудь-якою кількістю гігабайт, яку ви хочете. Наприклад sudo fallocate -l 2G /swapfileдля TS.

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

Я створив простий скрипт bash, який збільшує файл swap до 4 Гб і тестує його на Ubuntu 16.04.

Це можна запустити по черзі або bash-скрипт, але я використовую його для створення безголових установок.

#!/bin/bash
echo "====== Current Swap ======"
sudo swapon -s
echo "====== Turning Off Swap ======"
sudo swapoff /swapfile
echo "====== Allocating 4GB Swap ======"
sudo fallocate -l 4G /swapfile
echo "====== Making Swap ======"
sudo mkswap /swapfile
echo "====== Setting Permissions to Root Only  ======"
sudo chmod 600 /swapfile
echo "====== Turning On Swap ======"
sudo swapon /swapfile
echo "====== Current Swap ======"
sudo swapon -s
echo "====== Done! ======"

3
Вам слід було додати аргумент до сценарію, який є кількість SWAP, який потрібно додати, і нарешті додати його до fstab. Але все одно мені подобається це
LnxSlck

0

Загальна відповідь для "як змінити розмір файлу swap":

Від Богдана Корняну тут: https://bogdancornianu.com/change-swap-size-in-ubuntu/

[ЦІТА (ВЖЕ ВЕРБАТИМ, лише кілька моїх доповнень до коментарів) START]

У наступному прикладі ми розширимо простір підкачки, доступний у / swapfile, від 4 GiB до 8 GiB.

  1. Вимкніть всі процеси заміни

    sudo swapoff -a
    
  2. Змініть розмір свопу

    sudo dd if=/dev/zero of=/swapfile bs=1G count=8
    

    if= вхідний файл
    of= вихідний файл
    bs= розмір блоку; тут, 1Gварто за 1 Gibibyte або гинув, який, згідно з man ddє G = 1024 * 1024 * 1024 байт
    count= мультиплікатор блоків

  3. Зробіть файл корисним як своп

    sudo mkswap /swapfile
    
  4. Активуйте файл свопу

    sudo swapon /swapfile
    
  5. Перевірте кількість наявного свопу

    grep SwapTotal /proc/meminfo
    

[QUOTE END]

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