Bagaimana cara 'tepat' memutuskan berapa banyak kernel lama yang akan disimpan?

23

Saya mengelola beberapa server untuk layanan inti (NTP, DNS, dll) dan baru saja saya sadar bahwa salah satu server tampaknya menyimpan 3 kernel terbaru, bukannya 2 pada yang lain:

nul@quark:~$ sudo apt-get autoremove --purge
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
nul@quark:~$ dpkg -l |grep linux-image
ii  linux-image-3.13.0-51-generic       3.13.0-51.84                     amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-3.13.0-52-generic       3.13.0-52.85                     amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-3.16.0-37-generic       3.16.0-37.49~14.04.1             amd64        Linux kernel image for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-51-generic 3.13.0-51.84                     amd64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-52-generic 3.13.0-52.85                     amd64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.16.0-37-generic 3.16.0-37.49~14.04.1             amd64        Linux kernel extra modules for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-generic                 3.13.0.52.59                     amd64        Generic Linux kernel image
ii  linux-image-generic-lts-utopic      3.16.0.37.29                     amd64        Generic Linux kernel image

...

nul@dwarf:~$ sudo apt-get autoremove --purge
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
nul@dwarf:~$ dpkg -l |grep linux-image
ii  linux-image-3.13.0-52-generic       3.13.0-52.85                     amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-3.16.0-37-generic       3.16.0-37.49~14.04.1             amd64        Linux kernel image for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-52-generic 3.13.0-52.85                     amd64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.16.0-37-generic 3.16.0-37.49~14.04.1             amd64        Linux kernel extra modules for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-generic                 3.13.0.52.59                     amd64        Generic Linux kernel image
ii  linux-image-generic-lts-utopic      3.16.0.37.29                     amd64        Generic Linux kernel image

Semua server dikelola secara identik, tidak tahu apa yang bisa saya lakukan, harus menjadi parameter di suatu tempat tetapi tidak dapat menemukannya!

Tolong beri makan rasa ingin tahu saya! Terima kasih

ionreflex
sumber

Jawaban:

32

Ada file yang dibuat secara otomatis yang memberi apt-gettahu kernel apa yang harus di-autoremove dan mana yang harus disimpan.
File yang memberitahukan apt-getkernel mana mereka/etc/apt/apt.conf.d/01autoremove-kernels berasal /etc/kernel/postinst.d/apt-auto-removal.

Biasanya apa yang terjadi adalah bahwa ketika Anda menerima update kernel, ketika versi kernel perubahan, mengatakan dari 3.13ke 3.16, /etc/apt/apt.conf.d/01autoremove-kernelskemudian diperbarui untuk menjaga 3.16*kernel dan kemudian diatur untuk menghapus semua3.13 kernel kecuali ditentukan oleh script pembangkit tidak dihapus.

Dari apt-auto-removal skrip:

# Penulis: Steve Langasek 
#
# Tandai sebagai tidak-untuk-autoremoval paket-paket kernel yang:
# - versi yang saat ini di-boot
# - versi kernel yang kami panggil
# - versi kernel terbaru (ditentukan menggunakan aturan yang disalin dari grub
# paket untuk menentukan kernel mana yang akan di-boot)
# - versi kernel terbaru kedua, jika versi kernel yang dibooting adalah
# sudah terbaru dan skrip ini dipanggil untuk versi yang sama, #
# untuk memastikan fallback tetap tersedia dalam hal yang baru diinstal
# kernel pada ABI ini gagal untuk boot
# Dalam kasus umum, ini menghasilkan tepat dua kernel yang disimpan, tetapi bisa
# menghasilkan tiga kernel yang disimpan. Lebih baik berbuat salah di samping
# menyimpan terlalu banyak kernel daripada menyimpan terlalu sedikit.
#
# Kami membuat daftar ini dan menyimpannya di /etc/apt/apt.conf.d alih-alih menandai
# paket dalam database karena ini berjalan dari skrip postinst, dan apt
# akan menimpa db ketika keluar.

Namun, ini kadang-kadang tidak akan menandai mereka untuk dihapus secara otomatis karena beberapa pengkodean telah berubah atas versi untuk mencegah hal ini terjadi.

Jika Anda ingin menandai kernel sebelumnya autoremovekecuali untuk kernel yang dibutuhkan berdasarkan pada skrip, jalankan perintah berikut dari jendela terminal:

sudo apt-mark auto ^linux-image-

Kemudian, ketika Anda menjalankan apt-get autoremoveperintah hanya yang sudah tua dan tidak lagi diperlukan dapat dihapus. Saya telah memberikan contoh di bawah ini:

Yang pertama ini menunjukkan semua kernel pada sistem dikurangi kernel yang berjalan saat ini.

root @ terrance-Linux: / home / share # dpkg -l 'linux- *' | sed '/ ^ ii /! d; /' "$ (uname -r | sed" s /\(.*#)-\([^ 0-9] \ + \) / \ 1 / ")" '/ d; s / ^ [^] * [^] * \ ([^] * \). * / \ 1 /; / [0-9] /! d '
linux-header-3.16.0-34
linux-header-3.16.0-34-generik
linux-header-3.16.0-36
linux-header-3.16.0-36-generik
linux-header-3.16.0-37
linux-header-3.16.0-37-generik
linux-header-4.0.0-040000
linux-header-4.0.0-040000-generik
linux-image-3.16.0-34-generic
linux-image-3.16.0-36-generic
linux-image-3.16.0-37-generic
linux-image-4.0.0-040000-generik
linux-image-extra-3.16.0-34-generic
linux-image-extra-3.16.0-36-generic
linux-image-extra-3.16.0-37-generic

Yang ini menunjukkan kernel yang sedang berjalan.

terrance @ terrance-Linux: ~ $ uname -r
4.0.1-040001-generik
terrance @ terrance-Linux: ~ $ sudo apt-get autoremove
[sudo] kata sandi untuk terrance: 
Membaca daftar paket ... Selesai
Membangun pohon ketergantungan       
Membaca informasi keadaan ... Selesai
0 ditingkatkan, 0 baru dipasang, 0 untuk dihapus dan 0 tidak ditingkatkan.
terrance @ terrance-Linux: ~ $ sudo apt-mark auto ^ linux-image-
linux-image-extra-3.16.0-33-generic tidak dapat ditandai karena tidak diinstal.
linux-image-extra-3.13.0-27-generic tidak dapat ditandai karena tidak diinstal.
linux-image-3.13.0-44-lowlatency tidak dapat ditandai karena tidak diinstal.
linux-image-3.13.0-27-generic tidak dapat ditandai karena tidak diinstal.
linux-image-3.16.0-31-lowlatency tidak dapat ditandai karena tidak diinstal.
linux-image-3.16.0-36-generic diatur untuk diinstal secara otomatis.
linux-image-lowlatency-lts-utopic tidak dapat ditandai karena tidak diinstal.
linux-image-extra-3.13.0-36-generic tidak dapat ditandai karena tidak diinstal.
linux-image-3.13.0-36-generic tidak dapat ditandai karena tidak diinstal.
linux-image-4.0.0-040000-generic diatur untuk diinstal secara otomatis.
linux-image-extra-3.13.0-45-generic tidak dapat ditandai karena tidak diinstal.
linux-image-3.16.0-25-generic tidak dapat ditandai karena tidak diinstal.

CATATAN: Yang di atas terlalu panjang untuk dicantumkan, jadi saya memotong sedikit.

terrance @ terrance-Linux: ~ $ sudo apt-get autoremove
Membaca daftar paket ... Selesai
Membangun pohon ketergantungan       
Membaca informasi keadaan ... Selesai
Paket-paket berikut akan DIHAPUS:
  linux-image-3.16.0-34-generic linux-image-3.16.0-36-generic
  linux-image-4.0.0-040000-generic linux-image-extra-3.16.0-34-generic
  linux-image-extra-3.16.0-36-generic
0 ditingkatkan, 0 baru dipasang, 5 untuk dihapus dan 0 tidak ditingkatkan.
Setelah operasi ini, ruang disk 613 MB akan dibebaskan.
Apakah Anda ingin melanjutkan? [Y / n]

Jadi, setelah menjalankan perintah-perintah itu, Anda dapat melihat bahwa saya sekarang dapat menghapus secara otomatis semua yang lama tetapi kernel saat ini (4.0.1-040001-generic) dan yang terbaru berikutnya (3.16.0-37-generic).

Semoga ini bisa membantu.

Terrance
sumber
Ubuntu tidak melakukan penghapusan otomatis secara default, kan ?. Kami memang memiliki opsi tetapi itu (masih) dianggap tidak mungkin untuk memutuskan apa kernel "yang tidak diinginkan" (pada sistem operasi lain "yang tidak diinginkan" sama dengan "tidak digunakan").
Rinzwind
Baik. Saya salah membaca posting Anda pada bit itu ;-)
Rinzwind
1
@Terrance Saya mencoba lulus sudo apt-mark auto ^linux-image-diikuti sudo apt-get autoremove --purgetetapi tidak berhasil; Namun, sedikit dist-upgradedimodifikasi 2 kernel (3.13.0-52 dan 3.16.0.37) dan berikut ini autoremovemenyingkirkan 3.13.0-51 ...
ionreflex
1
@ionreflex Senang Anda menemukan itu. Tidak setiap jawaban sempurna, dan mungkin tidak bekerja untuk semua orang. Tetapi saya merasa senang bahwa orang-orang seperti Anda dapat melakukan sedikit pemecahan masalah dan mencari cara untuk menghapusnya. Saya berpikir bahwa dist-upgradeAnda berlari menendang /etc/kernel/postinst.d/apt-auto-removalyang kemudian memodifikasi /etc/apt/apt.conf.d/01autoremove-kernelskemudian mengatakan mana yang harus disimpan.
Terrance
1
@Terrance Cukup yakin saya lakukan dist-upgradesebelumnya, tapi mungkin fakta bahwa kernel dapat ditingkatkan pagi ini melakukan trik ... pokoknya, tepuk tangan, dan terima kasih atas jawaban Anda, saya telah belajar banyak melaluinya!
ionreflex