Pertanyaan Bagaimana cara membebaskan lebih banyak ruang di / boot?


Saya /boot partisi hampir penuh dan saya mendapat peringatan setiap kali saya me-reboot sistem saya. Saya sudah menghapus paket kernel lama (linux-headers ...), sebenarnya saya melakukan itu untuk menginstal versi kernel yang lebih baru yang datang dengan pembaruan otomatis.

Setelah menginstal versi baru itu, partisi hampir penuh lagi. Jadi apa lagi yang bisa saya hapus? Apakah ada file lain yang terkait dengan imej kernel lama?

Berikut ini daftar file yang ada di saya /boot partisi:

:~$ ls /boot/
abi-2.6.31-21-generic         lost+found
abi-2.6.32-25-generic         memtest86+.bin
abi-2.6.38-10-generic         memtest86+_multiboot.bin
abi-2.6.38-11-generic         System.map-2.6.31-21-generic
abi-2.6.38-12-generic         System.map-2.6.32-25-generic
abi-2.6.38-8-generic          System.map-2.6.38-10-generic
abi-3.0.0-12-generic          System.map-2.6.38-11-generic
abi-3.0.0-13-generic          System.map-2.6.38-12-generic
abi-3.0.0-14-generic          System.map-2.6.38-8-generic
boot                          System.map-3.0.0-12-generic
config-2.6.31-21-generic      System.map-3.0.0-13-generic
config-2.6.32-25-generic      System.map-3.0.0-14-generic
config-2.6.38-10-generic      vmcoreinfo-2.6.31-21-generic
config-2.6.38-11-generic      vmcoreinfo-2.6.32-25-generic
config-2.6.38-12-generic      vmcoreinfo-2.6.38-10-generic
config-2.6.38-8-generic       vmcoreinfo-2.6.38-11-generic
config-3.0.0-12-generic       vmcoreinfo-2.6.38-12-generic
config-3.0.0-13-generic       vmcoreinfo-2.6.38-8-generic
config-3.0.0-14-generic       vmcoreinfo-3.0.0-12-generic
extlinux                      vmcoreinfo-3.0.0-13-generic
grub                          vmcoreinfo-3.0.0-14-generic
initrd.img-2.6.31-21-generic  vmlinuz-2.6.31-21-generic
initrd.img-2.6.32-25-generic  vmlinuz-2.6.32-25-generic
initrd.img-2.6.38-10-generic  vmlinuz-2.6.38-10-generic
initrd.img-2.6.38-11-generic  vmlinuz-2.6.38-11-generic
initrd.img-2.6.38-12-generic  vmlinuz-2.6.38-12-generic
initrd.img-2.6.38-8-generic   vmlinuz-2.6.38-8-generic
initrd.img-3.0.0-12-generic   vmlinuz-3.0.0-12-generic
initrd.img-3.0.0-13-generic   vmlinuz-3.0.0-13-generic
initrd.img-3.0.0-14-generic   vmlinuz-3.0.0-14-generic

Saat ini, saya menggunakan 3.0.0-14-generic inti.


524
2017-12-22 10:06


asal


Perlu disebutkan bahwa tidak semua instalasi Ubuntu memiliki partisi / boot terpisah - seringkali hanya akan menjadi satu partisi besar. Jawaban ini berlaku bagi mereka yang memiliki partisi / boot terpisah. Mereka yang menggunakan LVM atau "full disk" membutuhkan enkripsi terpisah / boot, selain itu mungkin opsional. - thomasrutter
Jika ada orang lain yang memiliki masalah yang sama dengan saya: setelah / boot tidak memiliki ruang yang tersisa "apt-get upgrade" akan gagal ketika menghasilkan kembali file initrd untuk kernel yang diinstal atau bahwa skrip percaya pembaruan-initramfs diinstal dengan memeriksa isi dari / var / lib / initramfs-tools. Dalam situasi ini orang tidak dapat menghapus kernel lama menggunakan apt-get karena partisi fscking / boot tidak memiliki ruang tersisa di perangkat. Orang dapat melakukan ini menggunakan "dpkg -P" diikuti dengan membersihkan entri yang sesuai di / boot (ke ruang kosong) dan / var / lib / initramfs-tools (gambar initrd tidak akan dihasilkan). - wojci
Kunci utama untuk jawaban yang benar adalah bahwa mereka meminta Anda untuk menghapus paket mengandung versi kernel yang lebih lama. Banyak halaman web yang membahas masalah ini menyarankan untuk menghapus secara langsung file di partisi / boot; yang dapat berfungsi untuk sementara waktu, tetapi Anda mungkin akhirnya memperbarui paket yang membuat ulang file yang hilang untuk versi kernel yang memiliki paket, sehingga Anda kehabisan ruang. - kgrittn
help.ubuntu.com/community/RemoveOldKernels - jarno


Jawaban:


Anda memiliki banyak kernel yang tidak terpakai. Hapus semua kecuali kernel terakhir dengan:

sudo apt-get purge linux-image-{3.0.0-12,2.6.3{1-21,2-25,8-{1[012],8}}}

Ini adalah singkatan untuk:

sudo apt-get purge linux-image-3.0.0-12 linux-image-2.6.31-21 linux-image-2.6.32-25 linux-image-2.6.38-10 linux-image-2.6.38-11 linux-image-2.6.38-12 linux-image-2.6.38-8

Menghapus linux-image-x.x.x-x paket juga akan dihapus linux-image-x.x.x-x-generic.

Header dipasang /usr/src dan digunakan saat membangun modul kernel di luar pohon (seperti driver nvidia dan virtualbox proprietary). Sebagian besar pengguna harus menghapus paket header ini jika paket kernel yang cocok (linux-image-*) tidak terpasang.

Untuk mendaftar semua kernel yang diinstal, jalankan:

dpkg -l linux-image-\* | grep ^ii

Satu perintah untuk menampilkan semua kernel dan header yang dapat dihapus, tidak termasuk arus menjalankan kernel:

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

Ini memilih semua paket bernama dimulai dengan linux-headers-<some number> atau linux-image-<some number>, cetak nama paket untuk paket yang diinstal dan kemudian kecualikan kernel saat ini dimuat / berjalan (belum tentu terbaru inti!). Ini cocok dengan rekomendasi untuk menguji kernel yang lebih baru sebelum menghapus kernel yang lebih lama dan dikenal-untuk-bekerja.

Jadi, setelah meningkatkan kernel dan me-reboot untuk mengujinya, Anda dapat menghapus semua kernel lain dengan:

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

600
2017-12-24 14:34



Jawaban yang fantastis. Satu informasi lebih lanjut akan membantu: Bagaimana Anda bisa tahu (pasti) yang mana dari kernel yang Anda gunakan? Mungkin Anda tidak bisa menganggap itu yang terakhir ... Edit: Dan itu terlihat seperti jawabannya uname -a. Mungkin yang terbaik untuk memastikan Anda tidak memiliki kernel restart-to-install-new-pending tertunda (seperti yang saya lakukan; tapi saya mencatat ketidakcocokan antara uname -a dan kernel "terbaru"). - T.J. Crowder
@freddyb Selesai. Perhatikan bahwa perintah mencetak / menghapus kernel selain yang dimuat / di-boot. - Lekensteyn
Jika apt-get purge gagal karena dependensi yang tidak terpenuhi, maka Anda dapat mengikuti saran di askubuntu.com/questions/171209/… - svandragt
Jawaban yang sangat menyeluruh dan masih berfungsi ... dan masih diperlukan pada tahun 2014. Agak konyol bahwa itu masih belum secara otomatis dilakukan oleh alat GUI. - allprog
@ byf-ferdy Kernel adalah bagian penting dari OS, jika versi terbaru entah bagaimana tidak sepenuhnya bekerja dengan perangkat keras Anda, maka Anda masih dapat memilih yang berbeda untuk boot dari. Fitur yang bagus mungkin akan menjadi sesuatu yang menghapus semua kernel yang diinstal secara otomatis lebih lama dari sebulan (kecuali untuk dua yang terbaru). - Lekensteyn


Partisi boot Anda sudah penuh. Karena ini adalah pembaruan kernel, file-file ini akan disalin ke partisi boot sehingga Anda perlu membersihkannya. Ini dia posting blog yang akan menunjukkan kepada Anda cara menghapus gambar kernel lama dengan satu perintah. Saya akan memberikan sinopsis dasar dari metode ini. Gunakan perintah ini untuk mencetak versi kernel Anda saat ini:

uname -r

Kemudian gunakan perintah ini untuk mencetak semua kernel yang telah Anda instal yang bukan kernel terbaru Anda:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Pastikan kernel Anda saat ini tidak ada dalam daftar itu. Perhatikan bagaimana ini adalah mayoritas dari perintah terakhir (di bawah). Untuk menghapus dan menghapus kernel lama ini, Anda perlu menyalurkan argumen ini ke:

sudo apt-get -y purge

Sekarang kita dapat melakukan semua yang kita inginkan dengan menggabungkan dua perintah terakhir ini ke dalam kekacauan yang tidak suci ini:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]' | xargs sudo apt-get -y purge

Dan satu perintah itu akan mengurus segalanya untuk Anda. Saya akan mengonfirmasi bahwa ini bekerja dengan sempurna tetapi tidak pernah mempercayai siapa pun di internet. :) Untuk info lebih lanjut, posting blog memberikan penjelasan yang sangat bagus tentang apa yang dilakukan oleh setiap bagian dari perintah sehingga Anda merasa puas bahwa ia melakukan apa yang Anda inginkan.


200
2018-02-21 03:38



Ini berhasil, terima kasih. - Michael Durrant
ini juga cocok dengan linux-libc-dev: amd64 - Frederick Nord
apa yang akan dihapus dari "linux-libc-dev: amd64" penyebab tidak disengaja? - ConfusedStack
@FrederickNord terima kasih atas kepala. Memperbaiki ini. Itu akan menyebabkan beberapa kesulitan menyusun program-program c. - dward
Perintah kedengarannya bagus, tetapi ketika saya menjalankannya saya mendapatkan kesalahan yang sama yang saya dapatkan ketika saya ingin menginstal sesuatu dan itu tidak dapat melakukannya karena boot penuh: --------------- ----------- Paket berikut memiliki dependensi yang tidak terpenuhi: linux-image-extra-4.2.0-27-generic: Tergantung: linux-image-4.2.0-27-generic tetapi tidak akan untuk dipasang linux-image-extra-4.2.0-30-generic: Tergantung: linux-image-4.2.0-30-generic tetapi tidak akan diinstal - Alex


sudo apt-get autoremove

Perintah ini melakukan pekerjaan secara otomatis.


94
2017-11-05 05:58



Seperti namanya, apt-get AUTOremove adalah operasi otomatis di mana sistem mengambil "tebakan terbaik" apa yang Anda coba capai. Itu tidak boleh digunakan sebagai pengganti administrasi sistem akal sehat. Masalah dengan pendekatan ini: Jika Anda (atau pembaruan) menghapus paket yang merupakan bagian dari daftar ketergantungan ini fungsi penghapusan otomatis ingin menghapus semua paket lain dalam daftar ketergantungan, meninggalkan Anda dengan sistem tanpa desktop yang berfungsi (dan kadang-kadang bahkan dengan sistem yang benar-benar rusak). - Rinzwind
Referensi: 1 dari banyak sumber untuk komentar ini di atas: linuxquestions.org/questions/debian-26/… - Rinzwind
jika linux-image-generic diinstal dan kernel baru tidak diinstal secara eksplisit, ini akan menghapus kernel lama. Akal sehat adalah tidak menerima perubahan pada sistem tanpa membacanya terlebih dahulu. Jika akal sehat telah digunakan sebelum menggunakan perintah ini maka tidak akan ada masalah. - mchid
@Rinzwind - Perintah ini mengosongkan 250 mb ruang disk saya dengan menghapus 'linux header' lama - Chinmaya B
autoremove berfungsi jika digunakan sebelum kondisi di luar ruang ada. Namun, setelah apt kehabisan ruang dan membatalkan (dan pengguna akhirnya melihat masalah), sudah terlambat untuk menjalankan autremove atau solusi berbasis apt lainnya. Jika itu yang terjadi untuk Anda, cobalah salah satu solusi berbasis dpkg. - user535733


Synaptic Package Manager dapat digunakan untuk dengan mudah memilih dan menghapus gambar kernel lama. Screenshot of Synaptic Package Manager

Jika Anda belum menginstal Synaptic:

sudo apt-get install synaptic

Mulai aplikasi dan pilih opsi yang ditampilkan.

Anda harus dapat menyorot semua paket "linux-" dengan versi "2.6.x" di mana x adalah antara 31 hingga 38 sesuai dengan file di folder / boot Anda.

Klik kanan masing-masing paket linux tersebut dan pilih opsi "Tandai untuk Penghapusan Lengkap". Terakhir, klik tombol terapkan. Ini akan menghapus semua file dan file yang terkait. Anda /boot folder sekarang harus sedikit lebih rapi.


38
2017-12-24 14:34



Saya pada 14.04. Saya telah menangani situasi ini di masa lalu melalui baris perintah, tetapi saya memutuskan untuk mencoba metode ini hari ini ... bagi saya, gambar linux saya berada di bawah terinstal (manual), tidak diinstal (lokal atau usang) - Ryan
Oh tidak. Saya tidak dapat menginstal Synaptic karena tidak ada ruang /boot! - John McGehee
@JohnMcGehee fsck dan berpisah harus menyelesaikan masalah itu untuk Anda. - FlipMcF


Terima kasih atas posting rinci Anda masalah Anda, ini membuat saya pergi ke arah yang benar. Meskipun berguna untuk menyimpan file kernel sebelumnya, Anda dapat menghapus semuanya sekaligus, periksa posting ini:
Bagaimana Menghilangkan Semua Header, Gambar, dan Modul Kernel Linux yang Tidak Terpakai

Dilakukan melalui baris perintah. Jika Anda melakukan ini melalui penggunaan jarak jauh, sesuatu seperti WINSCP untuk membuka sesi terminal dan hanya menempelkannya, bekerja dengan sangat baik.

Di sini disalin dari tautan artikel, saya sarankan Anda membaca artikel lengkapnya:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

24
2018-06-01 12:53





Ini adalah jawaban baru untuk pertanyaan lama, tetapi cara mudah untuk membersihkan hal ini (dan lainnya) adalah menginstal Ubuntu Tweak. Untuk menginstalnya:

sudo add-apt-repository ppa:tualatrix/ppa
sudo apt-get update
sudo apt-get install ubuntu-tweak

maka Anda dapat menjalankan Ubuntu Tweak, Pergi ke tab "petugas kebersihan", dan dari sini ini hanya masalah tiga klik:

Ubuntu tweak janitor for old kernels

Lebih baik meninggalkan kernel terakhir (Anda tidak pernah tahu) atau kernel kerja yang terkenal untuk keamanan; tapi itu mudah disesuaikan.

Anda dapat menggunakan alat yang sama untuk membersihkan banyak hal --- ingatlah bahwa jika Anda membersihkan cache thumbnail atau cache TB, maka sistem harus membangunnya kembali jika diperlukan.


22
2017-11-25 13:11



Saya mencoba menginstal tweak Ubuntu dan juga pergi ke situs web repositori. Ia mengatakan itu hanya untuk 13.10 dan sebelumnya. Apakah Anda memiliki versi terbaru untuk 15.04? - JayCouture.com
@ JayCouture.com Versi di situs ini untuk 14.04 ("untuk 13.10 dan sebelumnya" adalah tautan ke rilis yang lebih lama). Saya mengabaikan jika ada versi untuk 14.10 atau 15.04. - Rmano


Saya bisa memperbaiki masalah dengan menggunakan dpkg untuk menghapus paket secara langsung. Meskipun paket masih terdaftar dpkg -l, file dihapus dari /boot, membebaskan ruang.

phrogz@planar:/boot$ sudo dpkg --remove linux-image-2.6.32-30-server
(Reading database ... 145199 files and directories currently installed.)
Removing linux-image-2.6.32-30-server ...
Running postrm hook script /usr/sbin/update-grub.
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-35-server
Found linux image: /boot/vmlinuz-2.6.32-34-server
Found initrd image: /boot/initrd.img-2.6.32-34-server
Found linux image: /boot/vmlinuz-2.6.32-33-server
Found initrd image: /boot/initrd.img-2.6.32-33-server
Found linux image: /boot/vmlinuz-2.6.32-32-server
Found initrd image: /boot/initrd.img-2.6.32-32-server
Found linux image: /boot/vmlinuz-2.6.32-31-server
Found initrd image: /boot/initrd.img-2.6.32-31-server
Found memtest86+ image: /memtest86+.bin
done

# Repeat for kernels -31 and -32 and -33, up to (but not including)
# the version listed by `uname -a`

Sesudah ini, apt-get -f install memperbaiki masalah ketergantungan saya, dan semuanya baik-baik saja dengan dunia.

Saya tidak akan menerima jawaban saya ini, karena saya masih perlu tahu apakah saya harus meningkatkan kemampuan saya /boot ukuran atau melakukan sesuatu yang lain.


17
2017-12-03 18:47



Anda seharusnya tidak memiliki partisi / boot terpisah di tempat pertama, atau Anda harus memperbesar ukurannya karena 100mb terlalu kecil. - psusi
Terima kasih, saya menghapus melalui: sudo dpkg --remove linux-headers-3.5.0-28* - TiloBunt
dan sudo dpkg --remove linux-image-3.5.0-28* untuk gambar, periksa via df -h - TiloBunt


Anda dapat berhenti menggunakan partisi / boot terpisah, maka Anda tidak akan memiliki ruang terbatas di sana. Untuk melakukan ini, unmount partisi, lalu mount di tempat lain dan salin semua file di sana ke direktori / boot di partisi root Anda, kemudian hapus entri dari / etc / fstab dan instal ulang grub. Misalnya (Anda perlu menggunakan partisi yang benar):

sudo -s
umount /boot
mount /dev/sda2 /mnt
cp -a /mnt/* /boot/
umount /mnt
gedit /etc/fstab
grub-install /dev/sda

Anda kemudian dapat menggunakan gparted untuk menghapus partisi lama / boot, dan mungkin memperluas partisi root untuk menggunakan ruang itu. Untuk memperpanjang partisi root, Anda perlu melakukan boot dari livecd, dan ruang kosong perlu segera ke kanan. Jika partisi / boot saat ini berada di sebelah kiri partisi root, maka Anda harus terlebih dahulu memindahkan partisi root ke kiri, lalu memperpanjangnya, tetapi ini bisa memakan waktu sangat lama, jadi mungkin tidak sepadan dengan kesulitan.


11
2017-12-22 16:38



Memindahkan / boot ke partisi utama saya bukanlah solusi bagi saya karena semuanya kecuali / boot dienkripsi. Anda tidak bisa tahu itu dari pertanyaan saya, maaf. - user6722
Ini adalah solusi yang baik jika solusi di atas tidak berfungsi karena tidak memiliki ruang sama sekali pada volume boot, atau jika Anda berulang kali memiliki masalah "di luar ruang". Silakan baca dulu mengapa kadang-kadang diperlukan untuk memiliki / boot partisi meskipun: (help.ubuntu.com/community/DiskSpace) - svandragt
@svandragt, pada dasarnya tidak ada alasan tersisa untuk membutuhkan partisi / boot akhir-akhir ini. Satu-satunya yang tersisa adalah jika bios Anda rusak dan tidak dapat melihat seluruh disk, dan mesin apa pun yang dibuat dalam dekade terakhir tidak memiliki batasan seperti itu. Kasus warisan lainnya seperti menggunakan raid atau LVM sekarang ditangani dengan benar oleh grub2. - psusi
Ada beberapa alasan untuk memiliki partisi boot terpisah. Tapi saya tidak yakin manfaatnya sebanding dengan peningkatan pengaturan kompleksitas. 1. OS dapat memanfaatkan boot lebih cepat melalui ext2. 2. Keamanan dapat ditingkatkan dengan memasang / boot sebagai RO. (rootkit, dll.), atau bahkan tetap tidak di-mount pada os runtime. 3. grub (1) telah (memiliki) beberapa masalah dengan ext4 masih. 4. Diperlukan untuk menjalankan lvm (grubv1). Meskipun ini tidak berlaku untuk pengaturan ubuntu default. - David Cahill
lsblk dapat digunakan untuk menentukan partisi apa - Mr Purple