Bagaimana cara mematikan swap secara aman dan mendapatkan kembali ruang tersebut? (di Debian Jessie)

48

Saya menginstal Debian Jessie dengan partisi standar pada drive SSD saya. Partisi disk saya saat ini terlihat seperti ini:

Partisi disk saya saat ini terlihat seperti ini

Karena saya memiliki 16GB RAM, saya berasumsi saya tidak perlu swap . Tetapi karena saya memiliki drive disk lain saya dapat membuat swapfile misalnya, pada salah satu drive lain sebagai gantinya.

Bisakah Anda memberi tahu saya langkah apa yang harus saya ambil untuk menghapus partisi swap dengan benar dan secara permanen agar tidak menempati ruang disk ? Saya ingin menghapus partisi swap karena saat ini saya hanya memiliki 128GB SSD.

Inilah yang saya coba dan reboot setiap kali; masing-masing langkah ini tidak permanen , atau tidak melakukan apa-apa :

  1. Menggunakan swapoffutilitas:

    swapoff --all
    
  2. Menggunakan utilitas GParted :

    Mengklik kanan partisi swap dan mengklik Swapoff.

  3. Mengomentari UUID partisi swap dalam file berikut:

    /etc/fstab
    
  4. Mengomentari UUID partisi swap dalam file berikut:

    /etc/initramfs-tools/conf.d/resume
    
  5. Menjalankan perintah ini pada akhirnya (baik dalam urutan ini maupun sebaliknya):

    update-grub
    
    update-initramfs -u
    
LinuxSecurityFreak
sumber
1
Swapoff hanya menonaktifkan swap untuk sistem yang sedang berjalan, untuk membuatnya permanen Anda harus menggabungkannya dengan menghapus entri yang relevan dari /etc/fstab. Setelah selesai, swap harus dinonaktifkan dan tidak kembali pada boot berikutnya. Sekarang Anda harus memodifikasi tabel partisi dan memperluas sistem file utama Anda jika Anda ingin merebut kembali ruang yang tidak digunakan. Lihat jawaban saya untuk instruksi terperinci.
André Borie
@ burian.vlastimil dapatkah Anda memposting keseluruhan /etc/fstab?
André Borie
@ burian.vlastimil Harap edit dalam pertanyaan Anda karena komentar tidak mempertahankan jeda baris. Apakah perubahan Anda di fstab bertahan setelah reboot atau apakah garis swap dihapus?
André Borie
1
Jika saya dapat menyinggung pertanyaan ini, tujuan swap adalah untuk menghapus halaman yang tidak digunakan dan melindungi sistem dari kehabisan memori. Jadi, seperti yang disarankan SnakeDoc, memiliki swap sebesar 512MB selalu baik. Secara pribadi, saya memiliki SSD tanpa partisi swap melainkan file swap di direktori / saya. Jika Anda memilih untuk melakukannya, gunakan tutorial ini untuk membuat file. Sedangkan untuk partisi swap, Anda dapat mem-boot langsung usb dan menggunakan gparted untuk menghapus partisi itu. Pastikan untuk memperbarui grub.
Sergiy Kolodyazhnyy
4
@SnakeDoc - Anda biasanya tidak akan mendapatkan kepanikan kernel, penangan OOM akan menendang dan mematikan proses untuk membebaskan memori (dan biasanya melakukan pekerjaan yang cukup baik untuk memutuskan yang mana yang akan dimatikan, umumnya memberikan preferensi untuk membunuh proses yang lebih besar dan lebih baru). Saya memelihara sejumlah besar server tanpa swap yang ditetapkan untuk panik pada OOM alih-alih membunuh proses karena server dikonfigurasi sehingga mereka biasanya tidak akan kehabisan memori dan jika ya, saya ingin mereka panik dan reboot daripada swap dan memperlambat (atau biarkan pawang OOM memutuskan proses untuk membunuh apa)
Johnny

Jawaban:

47

Jalankan sebagai root:

# swapoff -a

Dan untuk membuat perubahan itu permanen, edit /etc/fstabdan hapus atau komentar-out entri swap.

maxschlepzig
sumber
@ burian.vlastimil, apa maksudmu dengan terkunci? Anda dapat memverifikasi bahwa tidak ada perangkat swap yang digunakan melalui melihat baris pertama di atas - itu harus melaporkan 'KiB Swap: 0 total'. Anda juga dapat cat /proc/swaps- yang seharusnya melaporkan baris tajuk. Jika itu masalahnya, maka ya, Anda dapat dengan aman menghapus partisi swap - dan memperbesar partisi lain - untuk mendapatkan kembali ruang itu - jika itu yang Anda inginkan.
maxschlepzig
@ burian.vlastimil, swap mungkin diaktifkan oleh initramfs Anda, Anda mungkin harus menghapus resumeopsi kernel (yang merujuk UUID dari swap Anda), yaitu memperbarui grub dan membuat ulang initramfs (pada dasarnya melakukan kebalikan dari beberapa langkah di SwapFaq ).
maxschlepzig
@ burian.vlastimil, Anda juga dapat grep konfigurasi grub Anda (bawah /boot) untuk uuid itu dan Anda dapat membongkar initramsfs Anda dan grep isinya untuk sampai ke akar penyebab ini. Pastikan Anda melakukan grep yang tidak peka terhadap huruf besar-kecil.
maxschlepzig
2
hanya menempatkan swapoff -adi /etc/rc.local. memiliki swap pada selama beberapa milidetik ketika anda boot up adalah tidak ada masalah. dengan 16GB RAM tidak ada yang akan ditulis di sana untuk waktu yang lama. tinggalkan saja ruang swap di sana (ruang disk murah) dan jangan berubah /etc/fstab .
Skaperen
buat file swap sementara , maka Anda dapat memulihkan ruang dengan menghapus file begitu Anda mematikan swap
Skaperen
40
  1. Jika Anda telah membuka GPART , tutuplah. Fitur Swapoff-nya tampaknya tidak permanen.

  2. Buka terminal dan menjadi root( su); jika Anda telah sudomengaktifkan, Anda juga dapat melakukannya misalnya sudo -i; lihat man sudountuk semua opsi):

    sudo -i
    
  3. Matikan partisi swap tertentu dan / atau semua swap itu:

    swapoff --all
    
  4. Pastikan 100% partisi partisi swap tertentu tidak aktif:

    cat /proc/swaps
    
  5. Buka editor teks yang Anda miliki dengan file ini, misalnya nanojika tidak yakin:

    nano /etc/fstab
    
  6. Mengomentari / menghapus UUID partisi swap , misalnya:

    # UUID=1d3c29bb-d730-4ad0-a659-45b25f60c37d    none    swap    sw    0    0
    
  7. Buka editor teks yang Anda miliki dengan file ini, misalnya nanojika tidak yakin:

    nano /etc/initramfs-tools/conf.d/resume
    
  8. Mengomentari / menghapus UUID partisi swap yang diidentifikasi sebelumnya , misalnya:

    # RESUME=UUID=1d3c29bb-d730-4ad0-a659-45b25f60c37d
    
  9. Jangan tutup terminal karena Anda akan memerlukannya nanti.

Catatan: Langkah-langkah selanjutnya berbeda tergantung pada, apakah Anda mengandalkan CLI atau GUI .


GUI :

  1. Buka GParted , baik dari menu, atau lebih nyaman dari terminal yang telah kami buka:

    gparted
    
  2. Jika Anda belum menginstalnya, Anda dapat melakukannya; setelah itu jalankan kembali perintah sebelumnya:

    apt-get install gparted
    
  3. Pilih drive Anda dari menu kanan atas.

  4. Ketika GParted mengaktifkan kembali partisi swap saat diluncurkan, Anda harus mengklik kanan partisi swap tertentu dan mengklik Swapoff -> Ini akan segera diterapkan.

  5. Hapus partisi swap dengan klik kanan -> Hapus. Anda harus menerapkan perubahan sekarang.

  6. Ubah ukuran partisi utama / lainnya dengan klik kanan -> Ubah Ukuran / Pindahkan. Anda harus menerapkan perubahan sekarang.

  7. Kembali ke terminal, mari kita buat ulang gambar boot :

    update-initramfs -u -k all
    
  8. Perbarui GRUB :

    update-grub
    
  9. Anda dapat reboot sekarang jika Anda ingin menguji apakah mesin boot.


CLI :

Saya akan memeriksa VM jika solusi saya berfungsi, maka saya akan membagikannya. Sementara itu, lihat jawaban ini .

LinuxSecurityFreak
sumber
1
paling lengkap, dijelaskan dengan baik.
benzkji
Jika Anda mengalami boot lambat setelahnya dengan pesan gave up waiting for suspend/resume device: Dalam file /etc/initramfs-tools/conf.d/resume, jangan hanya menonaktifkan baris, ganti dengan RESUME=none. ( sumber )
tanius
17

Komentari / hapus entri yang relevan di /etc/fstabuntuk mencegah agar tidak diaktifkan kembali pada boot berikutnya, kemudian reboot atau jalankan swapoff -auntuk menonaktifkan penggunaan partisi swap untuk sistem yang sedang berjalan.

Sekarang hapus partisi swap, perpanjang partisi sistem Anda di atas ruang yang tidak terpakai dan perpanjang sistem file yang sebenarnya. Saya tidak tahu apakah manajer partisi grafis Anda dapat melakukan semua itu, tetapi jika tidak dapat, inilah cara distro-agnostik untuk melakukan ini menggunakan fdiskdan 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.

Akhirnya kami memperluas filesystem saat ini untuk menggunakan ruang kosong yang baru (sampai sekarang filesystem yang sebenarnya tidak sadar bahwa kami menambahkan lebih banyak ruang ke partisi yang mendasarinya). Secara default, resize2fsgunakan seluruh partisi kecuali ukuran tetap diberikan, jadi kami tidak perlu menentukan apa pun selain perangkat blok partisi. Menumbuhkan sistem file (sebagai lawan menyusut) dapat dilakukan secara online dengan partisi yang dipasang:

# resize2fs /dev/sda2

Sekarang Anda telah berhasil menonaktifkan swap dan mendapatkan kembali ruang yang tidak digunakan tanpa perlu me-reboot.

Perhatikan bahwa prosedur untuk Debian sedikit berbeda dan memerlukan pengeditan beberapa file lagi. Lihatlah jawaban ini untuk info lebih lanjut.

André Borie
sumber
Ini tidak berhasil untuk saya. Saya memiliki 3 partisi. satu untuk / boot, satu untuk / dan swap. Ketika saya mencoba membuat partisi baru, saya hanya dapat membuat partisi
16GB
Selain itu, setidaknya untuk distro berbasis Debian 9: perlu dijalankan partprobesebelum resize2fsperintah, jika tidak kernel tidak tahu tentang tabel partisi baru dan tidak ada yang akan diubah ukurannya.
tanius
2

Klik kanan pada partisi swap di GParted, dan klik Swapoff. Kemudian hapus partisi swap Anda, hapus dari /etc/fstab, dan buat kembali partisi Anda initramfsdan grub(mungkin tidak perlu).

Partisi swap tidak boleh ditambahkan ke initramfsoleh initramfsskrip pembaruan jika partisi swap tidak ada.

Menurut posting ini , berikut ini adalah cara yang benar untuk membuat ulang initramfsdan grub:

update-initramfs -c -k <kernel>

update-grub
BenjiWiebe
sumber
-2

Anda dapat mengklik kanan pada partisi swap di Gparted dan memilih opsi swapoff . Itu cara cepat untuk mencapai hal yang sama yang Anda minta.

Charlie
sumber