Как безопасно отключить своп навсегда и освободить место? (на Debian Джесси)

48

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

Мой текущий раздел диска выглядит так

Поскольку у меня есть 16 ГБ ОЗУ, я предполагаю, что мне не нужен обмен . Но так как у меня есть другие дисководы, я могу, например, создать файл подкачки на одном из других дисков.

Можете ли вы сказать мне, какие шаги я должен предпринять, чтобы правильно и навсегда удалить раздел подкачки, чтобы он не занимал дисковое пространство ? Я хочу удалить раздел подкачки, так как в настоящее время у меня только 128 ГБ SSD.

Вот что я пробовал и перезагружал каждый раз; каждый из этих шагов не был постоянным или ничего не делал :

  1. Используя swapoffутилиту:

    swapoff --all
    
  2. Использование утилиты GParted :

    Щелкните правой кнопкой мыши по разделу подкачки и выберите Swapoff.

  3. Закомментируем UUID раздела подкачки в следующем файле:

    /etc/fstab
    
  4. Закомментируем UUID раздела подкачки в следующем файле:

    /etc/initramfs-tools/conf.d/resume
    
  5. Выполнение этих команд в конце (как в этом, так и в обратном порядке):

    update-grub
    
    update-initramfs -u
    
LinuxSecurityFreak
источник
1
Swapoff отключает только своп для работающей в данный момент системы, чтобы сделать его постоянным, вы должны объединить его с удалением соответствующей записи /etc/fstab. Как только это будет сделано, своп должен быть отключен и не возвращаться при следующей загрузке. Теперь вам нужно изменить таблицу разделов и расширить основную файловую систему, если вы хотите освободить неиспользуемое пространство. Смотрите мой ответ для подробных инструкций.
Андре Бори
@ burian.vlastimil вы можете опубликовать все /etc/fstab?
Андре Бори
@ burian.vlastimil Пожалуйста, измените его в своем вопросе, поскольку комментарии не сохраняют разрывы строк. Сохраняются ли ваши изменения в fstab после перезагрузки или строка подкачки не комментируется?
Андре Бори
1
Если я могу задать этот вопрос, цель swap состоит в том, чтобы удалить неиспользуемые страницы и защитить систему от нехватки памяти. Таким образом, как предположил SnakeDoc, наличие 512 МБ подкачки всегда хорошо. Лично у меня есть SSD без раздела подкачки, а файл подкачки в моей директории /. Если вы решите сделать это, используйте этот учебник для создания файла. Что касается раздела подкачки, вы можете загрузить live usb и использовать gparted для удаления этого раздела. Обязательно обновите grub.
Сергей Колодяжный
4
@SnakeDoc - вы обычно не будете испытывать панику в ядре, обработчик OOM включит и убьет процесс (ы), чтобы освободить память (и, как правило, делает довольно хорошую работу, решая, какой из них убить, обычно давая предпочтение убивать более крупные и новые процессы). Я поддерживаю большое количество серверов без подкачки, которые настроены на панику в OOM вместо того, чтобы убивать процессы, потому что серверы настроены таким образом, что у них обычно никогда не кончается память, и если они это сделают, я хочу, чтобы они паниковали и перезагружались, а не подкачали и замедлиться (или пусть обработчик OOM решит, какие процессы убивать)
Джонни

Ответы:

47

Выполнить от имени пользователя root:

# swapoff -a

И чтобы сделать это изменение постоянным, отредактируйте /etc/fstabи удалите или закомментируйте запись подкачки.

maxschlepzig
источник
@ burian.vlastimil, что ты имеешь в виду под заблокированным? Вы можете проверить, что ни одно устройство подкачки не используется, посмотрев на первую строку сверху - оно должно сообщить «KiB Swap: 0 total». Вы также можете cat /proc/swaps- который должен просто сообщить строку заголовка. Если это так, то да, вы можете безопасно удалить раздел подкачки - и увеличить другой раздел - чтобы освободить это пространство - если это то, что вы хотите.
maxschlepzig
@ burian.vlastimil, подкачка может быть включена вашими initramfs, вам, возможно, придется удалить resumeопцию ядра (которая ссылается на UUID вашего свопа), то есть обновить grub и сгенерировать initramfs (в основном, выполнить некоторые из шагов, описанных в SwapFaq ).
maxschlepzig
@ burian.vlastimil, вы также можете использовать grep-конфигурацию grub (под /boot) для этого uuid и распаковать initramsfs и grep-содержимое, чтобы выяснить причину этого. Убедитесь, что вы делаете GEP без учета регистра.
maxschlepzig
2
просто положить swapoff -aв /etc/rc.local. замена на несколько миллисекунд при загрузке не проблема. с 16ГБ ОЗУ там долго ничего не будет написано. просто оставьте место подкачки там (место на диске дешево) и не меняйте /etc/fstab .
Skaperen
сделайте временный файл подкачки, затем вы сможете восстановить пространство, удалив файл после выключения свопа
Skaperen
40
  1. Если вы открыли GParted , закройте его. Его функция Swapoff не является постоянной.

  2. Откройте терминал и станьте root( su); если вы sudoвключили, вы также можете сделать, например sudo -i; см. man sudoвсе варианты):

    sudo -i
    
  3. Отключите определенный раздел подкачки и / или все разделы подкачки :

    swapoff --all
    
  4. Убедитесь на 100%, что определенный раздел подкачки отключен:

    cat /proc/swaps
    
  5. Откройте текстовый редактор, в котором вы разбираетесь с этим файлом, например, nanoесли не уверены:

    nano /etc/fstab
    
  6. Закомментируйте / удалите UUID раздела подкачки , например:

    # UUID=1d3c29bb-d730-4ad0-a659-45b25f60c37d    none    swap    sw    0    0
    
  7. Откройте текстовый редактор, в котором вы разбираетесь с этим файлом, например, nanoесли не уверены:

    nano /etc/initramfs-tools/conf.d/resume
    
  8. Закомментируйте / удалите ранее идентифицированный UUID раздела подкачки , например:

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

Примечание: следующие шаги различаются в зависимости от того, используете ли вы CLI или GUI .


GUI :

  1. Откройте GParted , либо из меню, либо удобнее из терминала, который мы открыли:

    gparted
    
  2. Если он не установлен, вы можете сделать это; затем повторите предыдущую команду:

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

  4. Поскольку GParted повторно активирует раздел подкачки при запуске, вам нужно будет щелкнуть правой кнопкой мыши конкретный раздел подкачки и щелкнуть Swapoff -> Это будет применено немедленно.

  5. Удалите раздел подкачки, щелкнув правой кнопкой мыши -> Удалить. Вы должны применить изменения сейчас.

  6. Измените размер вашего основного / другого раздела, щелкнув правой кнопкой мыши -> Изменить размер / Переместить. Вы должны применить изменения сейчас.

  7. Вернемся к терминалу, давайте воссоздадим загрузочные образы :

    update-initramfs -u -k all
    
  8. Обновление GRUB :

    update-grub
    
  9. Вы можете перезагрузиться сейчас, если хотите проверить, загружается ли машина.


CLI :

Я проверю в ВМ с, если мое решение работает, тогда я поделюсь им. А пока смотрите этот ответ .

LinuxSecurityFreak
источник
1
наиболее полно, хорошо объяснил.
benzkji
Если после этого появляется медленная загрузка с сообщением gave up waiting for suspend/resume device: В файле /etc/initramfs-tools/conf.d/resumeне просто отключите строку, замените ее на RESUME=none. ( источник )
tanius
17

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

Теперь удалите раздел подкачки, увеличьте системный раздел над этим неиспользуемым пространством и расширьте действительную файловую систему. Я не знаю, сможет ли ваш графический менеджер разделов сделать все это, но если он не может, вот дистро-независимый способ сделать это, используя 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 раздела. один для / boot, один для / и подкачки. Когда я пытаюсь создать новый раздел, я могу создать только
гигабайтный
Кроме того, по крайней мере для дистрибутивов на основе Debian 9: необходимо выполнить partprobeперед resize2fsкомандой, иначе ядро ​​не знает о новой таблице разделов и ничего не изменится.
Танус
2

Щелкните правой кнопкой мыши по разделу подкачки в GParted и выберите Swapoff. Затем удалите раздел подкачки, удалить его из /etc/fstab, и восстановить ваши initramfsи grub(возможно , нет необходимости).

Раздел подкачки не должен быть добавлен к initramfsпо initramfsсценарию обновления , если раздел подкачки не существует.

Согласно этому сообщению , следующий правильный способ регенерации initramfsи grub:

update-initramfs -c -k <kernel>

update-grub
BenjiWiebe
источник
-2

Вы можете щелкнуть правой кнопкой мыши по разделу подкачки в Gparted и выбрать опцию подкачки . Это быстрый способ выполнить то же, что вы просили.

Чарли
источник