Apa cara paling aman untuk membersihkan / mem-boot partisi?

274

Saya memiliki 200 MB untuk /bootpartisi. Setiap kali saya mencoba memperbarui kernel, saya menerima pesan kesalahan yang pada dasarnya menyatakan /bootpenuh.

Apa yang bisa saya lakukan untuk membersihkan /bootdan menghapus / mencadangkan kernel yang lebih lama?

koba101
sumber
1
Lihat Komunitas Ubuntu Wiki
jarno
Jika / boot penuh, lihat askubuntu.com/questions/263363/…
nslntmnx

Jawaban:

335

Metode baris perintah:

Pertama periksa versi kernel Anda, sehingga Anda tidak akan menghapus gambar kernel yang digunakan, menjalankan:

uname -r

Sekarang jalankan perintah ini untuk daftar kernel yang diinstal:

dpkg --list 'linux-image*' | grep ^ii

dan hapus kernel yang tidak Anda inginkan / butuhkan lagi dengan menjalankan ini:

sudo apt-get remove linux-image-VERSION

Ganti VERSION dengan versi kernel yang ingin Anda hapus.

Setelah selesai menghapus kernel lama, Anda bisa menjalankan ini untuk menghapus paket yang tidak Anda perlukan lagi:

sudo apt-get autoremove

Dan akhirnya Anda dapat menjalankan ini untuk memperbarui daftar kernel grub:

sudo update-grub
PeppeDAlterio
sumber
34
sudo dpkg --list 'linux-image*' | grep ^iimembuatnya sedikit lebih mudah untuk melihat kernel yang diinstal saja. Juga saya pikir update-grubitu tidak berbahaya tetapi tidak sepenuhnya diperlukan, yang dijalankan secara otomatis ketika Anda menghapus kernel.
Nelson
9
Gunakan sudo dpkg --list 'linux-image*' | grep ^ii | awk '{print $2}' | sort | egrep "[0-9]-generic" | head -n -3 | tr '\n' ' '; echo ""untuk mendapatkan daftar nama paket yang akan digunakan sudo apt-get remove. head -n -3digunakan untuk menyimpan 3 kernel terbaru dalam sistem.
Sithsu
2
satu liner sederhana saya:apt-get remove `dpkg --list 'linux-image*' |grep ^ii | awk '{print $2}'\ | grep -v \`uname -r\``
gcb
27
sudo apt-get autoremoveharus mencukupi (biasanya meninggalkan Anda dengan 3 kernel terakhir)
mbx
6
Ini adalah jawaban yang baik, tapi saya ragu ini bisa bekerja di sebagian besar (jika tidak semua) kasus: masalahnya /bootsudah penuh, jadi apt-getakan gagal dengan beberapa kode kesalahan atau lainnya. Jawabannya di bawah ini sedikit "hackier" (Saya harus mengakui saya harus menguatkan diri untuk mengeluarkan yang rm -rfdi /boot) tetapi satu-satunya yang mungkin untuk bekerja dalam situasi ini.
Marco
284

CATATAN: ini hanya jika Anda tidak dapat menggunakan apt untuk membersihkan karena 100% penuh / boot

Jika apt-get tidak berfungsi karena / boot Anda 100%, Anda harus membersihkan / boot terlebih dahulu. Kemungkinan ini telah menangkap upgrade kernel dalam pemasangan parsial yang berarti apt telah membeku sepenuhnya dan akan terus menyuruh Anda untuk menjalankannya apt-get -f installmeskipun perintah itu terus gagal.

Dapatkan daftar gambar kernel dan tentukan apa yang dapat Anda lakukan tanpa. Perintah ini akan menampilkan kernel yang diinstal kecuali yang sedang berjalan sudo dpkg --list 'linux-image*'|awk '{ if ($1=="ii") print $2}'|grep -v `uname -r`. Perhatikan dua versi terbaru dalam daftar. Anda tidak perlu khawatir tentang yang sedang berjalan karena tidak tercantum di sini. Anda dapat memeriksanya dengan uname -r.

Buat perintah untuk menghapus semua file di / boot untuk kernel yang tidak masalah bagi Anda menggunakan ekspansi brace untuk membuat Anda tetap waras. Ingatlah untuk mengecualikan gambar kernel terbaru dan terbaru. Contoh: sudo rm -rf /boot/*-3.2.0-{23,45,49,51,52,53,54,55}-*. Anda juga dapat menggunakan rentang dengan sintaks {80..84}.

sudo apt-get -f install untuk membersihkan apa yang membuat agak kesal tentang instalasi parsial.

Jika Anda mengalami kesalahan yang menyertakan baris seperti "Kesalahan Internal: Tidak dapat menemukan gambar (/ boot / vmlinuz-3.2.0-56-generik)", kemudian jalankan perintah sudo apt-get purge linux-image-3.2.0-56-generic(dengan versi yang sesuai Anda).

Terakhir, sudo apt-get autoremoveuntuk menghapus paket-paket kernel image lama yang telah yatim oleh boot manual.

Saran, jalankan sudo apt-get updatedan sudo apt-get upgradeuntuk mengurus setiap upgrade yang mungkin telah dicadangkan sambil menunggu Anda menemukan partisi penuh / boot.

Suggestion2, Tinjau https://help.ubuntu.com/community/AutomaticSecurityUpdates dan pertimbangkan pengaturan Unattended-Upgrade :: Remove-Unused-Dependencies menjadi true di /etc/apt/apt.conf.d/50unattended-upgrades. Ini akan sama dengan menjalankan autoremove setelah setiap pembaruan keamanan untuk memastikan Anda membersihkan kernel yang tidak digunakan tetapi juga akan menghapus hal-hal lain yang menurutnya tidak digunakan menyelamatkan Anda dari masalah ini di masa depan.

flickerfly
sumber
3
Dengan cara ini saya memiliki yang terbaru untuk reboot berikutnya dan yang sebelumnya untuk berjaga-jaga kalau-kalau ada sesuatu yang rusak di sana. Biasanya saya memiliki banyak ruang sehingga tidak ada salahnya untuk memiliki beberapa dan itu memuaskan paranoia saya karena tidak memiliki opsi cadangan yang cukup dalam setiap skenario yang diberikan.
flickerfly
1
Saya tidak pernah memiliki masalah yang disebabkan oleh peningkatan tanpa pengawasan. Saya bisa membayangkan skenario di mana ini bisa menjadi masalah sebagian besar di sekitar dependensi hilang pada instalasi paket non-debat. Katakan Anda menginstal php, memutuskan untuk menghapus dan menginstal versi yang lebih baru dari sumber. Versi ini memiliki dependensi yang disediakan oleh instalasi sebelumnya, tetapi apt tidak menyadari bahwa itu masih diperlukan. Lain kali Anda menjalankan penghapusan otomatis dependensi itu akan hilang. Jika otomatis, ini bisa sedikit membingungkan. Jika Anda tidak menginstal di luar repositori, saya yakin itu sepenuhnya aman.
flickerfly
3
Setelah melihat ini di beberapa server virtual vsphere (di mana kernel secara otomatis ditingkatkan tetapi tidak dihapus sesudahnya), saya menulis skrip python untuk mengotomatiskannya. Saya ingin memiliki lebih banyak mata untuk itu
EvanK
2
Jika Anda menggunakan dpkg --purgepada boot penuh Anda akan mendapatkan yang berikut $ sudo dpkg --purge linux-image-3.13.0-65-generic dpkg: dependency problems prevent removal of linux-image-3.13.0-65-generic: linux-image-extra-3.13.0-65-generic depends on linux-image-3.13.0-65-generic. dpkg: error processing package linux-image-3.13.0-65-generic (--purge): dependency problems - not removing Errors were encountered while processing: linux-image-3.13.0-65-generic
flickerfly
1
Setelah membersihkan / boot, apt-get install -f masih tidak berfungsi. Menggunakan df -isaya menemukan bahwa saya juga kehabisan inode pada /karena sejumlah besar file untuk kode sumber kernel yang lebih tua di/usr/src
Kristofer
51

Ada dokumentasi tentang ini di https://help.ubuntu.com/community/RemoveOldKernels

Singkatnya: Gunakan

sudo apt-get autoremove --purge
# and/or:
sudo purge-old-kernels

The purge-old-kernelsalat dapat diinstal melalui sudo apt install byobu. Berikut ini deskripsi dari halaman manualnya:

Program ini akan menghapus paket-paket kernel dan header lama dari sistem, membebaskan ruang disk. Itu tidak akan pernah menghapus kernel yang sedang berjalan. Secara default, itu akan menyimpan setidaknya 2 kernel terbaru, tetapi pengguna dapat menimpa nilai itu menggunakan --keep parameter.

Jika Anda menginginkan solusi salin-tempel, ReSearchIT Eng menyarankan yang berikut:

sudo apt install -y byobu
sudo purge-old-kernels -y --keep 1
sudo apt-get -y autoremove --purge
peq
sumber
3
Dalam kasus saya apt tidak berfungsi karena kernel yang tertunda dan perbaikan yang disarankan adalah catch-22:
James Bowery
Saya harus memperbaiki paket yang rusak terlebih dahulu dengan askubuntu.com/a/304388/284313 Setelah itu solusi Anda berhasil.
James Bowery
3
Saya pikir ini harus menjadi solusi yang diterima sampai sekarang.
Fran Marzoa
3
ini jauh lebih aman daripada jawaban yang diterima. saya pikir apt-get autoremove --purgeharus cukup.
Woodrow Barlow
7

Saya menemukan bahwa jauh lebih mudah untuk meninggalkan partisi kecil dan pindah /bootke root. Ini juga mencegah masalah ruang di luar di masa depan.

Pertama-tama pindahkan data Anda dari partisi boot ke root (jalankan sebagai sudo -s):

cp -a /boot /boot2
umount /boot
rmdir /boot
mv /boot2 /boot

Hapus (atau komentar) /bootentri di /etc/fstab:

vim /etc/fstab

Perbarui grub dan pastikan semuanya benar:

update-grub

apt seharusnya sekarang dapat meningkatkan tanpa masalah.

Ini menyisakan partisi 200MB yang tidak digunakan (yang bisa Anda gunakan untuk hal lain jika Anda merasa sepadan dengan masalahnya).

laktak
sumber
5
Ini adalah ide yang bagus, tetapi tidak berfungsi jika Anda ingin memiliki enkripsi disk penuh untuk partisi root Anda.
Paŭlo Ebermann
Ya ada kasus di mana / boot harus menjadi partisi yang terpisah. Contoh lain adalah bahwa Grub sebelumnya tidak dapat memuat dari partisi LVM.
Bastion
4

Menghapus kernel lama (untuk mengosongkan ruang / boot) lihat: http://askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-boot

sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")

Lalu lari

sudo apt-get update
Amos Folarin
sumber
1
ini adalah satu-satunya yang berhasil .... solusi hebat
John
Jawaban Terbaik! Ini adalah satu-satunya solusi yang berhasil untuk saya; Autoremove itu bodoh; ia mencoba menginstal ulang kernel dengan dependensi yang belum terpenuhi sebelum secara resmi menghapusnya. Saya berputar-putar kehabisan ruang berulang-ulang. Jawaban ini adalah emas.
Lonnie Best
3

sudo apt-get autoremove

Ini menghilangkan semua kecuali 2 kernel terakhir. Diuji pada Ubuntu 16,04 LTS ketika /bootberada pada kapasitas 100% dan apt-get upgradegagal itu upgrade kernel terakhir. Kernel autoremove bersifat iteratif, jadi jika Anda memiliki beberapa kernel, kernel tersebut akan dihapus satu per satu. Jadi bersabarlah.

DeepSpace101
sumber
1

Mengapa melakukannya dengan tangan ketika Anda bisa melakukannya dengan alat? Anda tahu Anda akan membutuhkannya lagi dalam 30 detik, karena dibutuhkan 30 detik bagi mereka untuk mendorong pembaruan kernal baru hari ini = P

Saya sarankan menggunakan alat ini, bootnukem

git clone https://github.com/erichs/bootnukem.git
cd bootnukem
sudo ./install.sh

Kemudian

sudo bootnukem --dry-run

Hapus --dry-runsetelah Anda mengonfirmasi itu terlihat aman

Jonathan
sumber