/ bootがいっぱいのときに古いカーネルを削除したり、新しいカーネルをインストールしたりするにはどうすればよいですか?


31

この質問は以前にも何度も尋ねられることを知っていますが、私とは少し違うと思います。

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       224G  5.2G  208G   3% /
udev            1.9G  4.0K  1.9G   1% /dev
tmpfs           777M  260K  777M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            1.9G     0  1.9G   0% /run/shm
/dev/sda2        90M   88M     0 100% /boot
/dev/sda6       1.9G  514M  1.3G  29% /tmp

ブートパーティションがいっぱいです。

現在のカーネル:

# uname -r
3.2.0-35-generic

すべてのカーネル:

# dpkg --list | grep linux-image
ii  linux-image-3.2.0-32-generic    3.2.0-32.51                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-34-generic    3.2.0-34.53                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
ii  linux-image-3.2.0-35-generic    3.2.0-35.55                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-37-generic    3.2.0-37.58                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iF  linux-image-3.2.0-38-generic    3.2.0-38.60                         Linux kernel image for version 3.2.0 on 64 bit x86 SMP
iU  linux-image-generic             3.2.0.37.45                         Generic Linux kernel image

だから私は3.2.0.32ジェネリックカーネルを削除することを考えました:

# sudo apt-get purge linux-image-3.2.0-32-generic
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 linux-generic : Depends: linux-headers-generic (= 3.2.0.37.45) but 3.2.0.38.46 is to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

失敗。

私が試しapt-get -f installても失敗します:

# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  linux-headers-3.2.0-34 linux-headers-3.2.0-35 linux-headers-3.2.0-34-generic linux-headers-3.2.0-35-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  linux-generic linux-image-generic
The following packages will be upgraded:
  linux-generic linux-image-generic
2 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
5 not fully installed or removed.
Need to get 0 B/4,334 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
Setting up initramfs-tools (0.99ubuntu13.1) ...
update-initramfs: deferring update (trigger activated)
Setting up linux-image-3.2.0-37-generic (3.2.0-37.58) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-38-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-37-generic /boot/vmlinuz-3.2.0-37-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-37-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-37-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-37-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-37-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
Setting up linux-image-3.2.0-38-generic (3.2.0-38.60) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
The link /initrd.img is a dangling linkto /boot/initrd.img-3.2.0-37-generic
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.2.0-38-generic /boot/vmlinuz-3.2.0-38-generic
update-initramfs: Generating /boot/initrd.img-3.2.0-38-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-38-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
Failed to process /etc/kernel/postinst.d at /var/lib/dpkg/info/linux-image-3.2.0-38-generic.postinst line 1010.
dpkg: error processing linux-image-3.2.0-38-generic (--configure):
 subprocess installed post-installation script returned error exit status 2
dpkg: dependency problems prevent configuration of linux-image-generic:
 linux-image-generic depends on linux-image-3.2.0-37-generic; however:
  Package linux-image-3.2.0-37-generic is not configured yet.
dpkg: error processing linux-image-generic (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Package linux-image-generic is not configured yet.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
Processing triggers for initramfs-tools ...
No apport report written because the error message indicates its a followup error from a previous failure.
No apport report written because MaxReports is reached already
  update-initramfs: Generating /boot/initrd.img-3.2.0-35-generic

gzip: stdout: No space left on device
E: mkinitramfs failure cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-3.2.0-35-generic with 1.
dpkg: error processing initramfs-tools (--configure):
 subprocess installed post-installation script returned error exit status 1
No apport report written because MaxReports is reached already
Errors were encountered while processing:
 linux-image-3.2.0-37-generic
 linux-image-3.2.0-38-generic
 linux-image-generic
 linux-generic
 initramfs-tools
E: Sub-process /usr/bin/dpkg returned an error code (1)

どんな助けでも本当に感謝されます。

更新:しました:

sudo rm /boot/*-3.2.0-32-generic /boot/*-3.2.0-34-generic

その後、次の問題が発生しapt-get -f installます。

root@localhost:/# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following extra packages will be installed:
  linux-generic
The following packages will be upgraded:
  linux-generic
1 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
1 not fully installed or removed.
Need to get 0 B/1,722 B of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue [Y/n]? y
dpkg: dependency problems prevent configuration of linux-generic:
 linux-generic depends on linux-image-generic (= 3.2.0.37.45); however:
  Version of linux-image-generic on system is 3.2.0.38.46.
 linux-generic depends on linux-headers-generic (= 3.2.0.37.45); however:
  Version of linux-headers-generic on system is 3.2.0.38.46.
dpkg: error processing linux-generic (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error     from a previous failure.
                      Errors were encountered while processing:
 linux-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)


スペースが足りないために自動削除が機能しない場合については、私の回答をご覧ください。
nslntmnx

回答:


22

カーネルが古い場合、apt-getを使用できません。

cd /boot
sudo rm *-2.6.35-6.9-generic
sudo rm *-3.16.0-23-generic

lsフォルダー内の内容を確認するために使用し、最も古い1つまたは2つを削除してから

sudo apt-get -f install

次に、apt-get purgeのいずれかを

sudo apt-get purge linux-image-3.2.0-32-generic linux-image-3.2.0-34-generic

または、rmを続行します。

あなたsudo update-grubがfinsihedされたときにもする必要があります


installコマンドは多くの古いカーネルを再インストールしたため、ブートディスクがいっぱいになりました。パージコマンドはこれを解決しました。
SPRBRN

私はこの回答に従ってを実行しsudo apt-get -f install、その後再起動してすべてが正常であることを確認apt autoremoveし、前のコマンド出力で提案されているように残りを削除しました。
バートC

10

どうやら、これは動作します:

sudo apt-get autoremove 

apt-getマンページによると:

autoremoveは、他のパッケージの依存関係を満たすために自動的にインストールされ、現在は不要になったパッケージを削除するために使用されます。

3.16.0-39はインストールしようとしましたが、/ bootがいっぱいだったため失敗しました。3.16.0-38は私の現在のバージョンです。-38がスキップされたことがわかります。

server:~$ uname -r
3.16.0-38-generic
server:~$ sudo apt-get autoremove 
[sudo] password for mikeb: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  linux-headers-3.16.0-30 linux-headers-3.16.0-30-generic
  linux-headers-3.16.0-31 linux-headers-3.16.0-31-generic
  linux-headers-3.16.0-33 linux-headers-3.16.0-33-generic
  linux-headers-3.16.0-34 linux-headers-3.16.0-34-generic
  linux-headers-3.16.0-36 linux-headers-3.16.0-36-generic
  linux-headers-3.16.0-39 linux-headers-3.16.0-39-generic
  linux-image-3.16.0-30-generic linux-image-3.16.0-31-generic
  linux-image-3.16.0-33-generic linux-image-3.16.0-34-generic
  linux-image-3.16.0-36-generic linux-image-3.16.0-39-generic
  linux-image-extra-3.16.0-30-generic linux-image-extra-3.16.0-31-generic
  linux-image-extra-3.16.0-33-generic linux-image-extra-3.16.0-34-generic
  linux-image-extra-3.16.0-36-generic linux-image-extra-3.16.0-39-generic
0 upgraded, 0 newly installed, 24 to remove and 0 not upgraded.

私はこの答えが好きですが、それが何のためであるかを正確に知るautoremoveためのマニュアルを見逃しています。
s3m3n

1
自動削除は、以前にキューに入れられたaptアクションが適切に完了した場合にのみ機能します。「デバイスに空き容量がありません」というエラーがすでに表示されている場合、自動削除は機能しません。以前にキューに入れられたアクションは失敗し、自動削除は実行されません。言い換えれば、自動削除は機能します...機能しないまでです。
user535733

@ user535733あなたは正しいです。スペースが足りないために自動削除が機能しない場合については、私の回答をご覧ください。
nslntmnx

7

ターミナルで、次のコマンドを実行します。

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

このコマンドは、現在インストールされているすべてのLinuxカーネルをリストし、現在使用されていないカーネルをすべて選択して削除します。


2
おそらく、このコマンドが何をするのかを正確に説明したいと思うでしょう。それはかなり複雑に見えます。一般的に、人々が理解していないこのようなコマンドを実行することは避けてください-特にシステムに不可欠なものを使用する場合。
mtdevans 14年

@mtdevans:上記のコマンドは、現在インストールされているすべてのLinuxカーネルをリストし、現在使用されていないカーネルをすべて選択し、現在使用されていないカーネルをすべて削除することを追加しました。
クリスチャン14年

4
このコマンドは便利です。最初に「| xargs」の前の部分を実行して、削除するものを確認します。また、| grep -vは、最新のカーネルを保存するために必要な場合があります。これはまだ使用されていない可能性がありますが、必要です。
ローマンスーシ

4
AMD64:それはまたのlinux-libcの-devの一致したとして、これは危険です
フレデリックノール

2
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

「sudo apt-get -y purge」なしで上記のコマンドを実行してlinux-libc-dev:amd64と一致する場合、正規表現にセミコロンを追加してそれを含めないようにすることができます。

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」を追加します


1

Ubuntu 12.04の場合はこれを試してください sudo apt-get purge linux-image-[kernel version]

これにより、すべてのカーネルバージョンが削除されます。ブートフォルダーに多数のカーネルがある場合は、grubの更新とシステムの再起動を忘れないでください

例 sudo apt-get purge linux-image-3.11.6 *


2
問題は、先のように依存関係の問題がある点がある場合、これがもう機能しないことです。
パエロエベルマン

これは私のために働く!
ダニエル

0

多くの回答は「apt autoremove」を使用するように言っていますが、/ bootがいっぱいの場合、aptは削除する前にカーネルを追加しようとするため、動作しない場合があります。

次に、apt autoremoveは/etc/apt/apt.conf.d/01autoremove-kernelsに記載されているカーネルを削除しないため、修正する必要があります。

ここに私のために働いたプロセスがあります。

不要なカーネル構成ファイルを削除します。

sudo dpkg --purge $(COLUMNS = 200 dpkg -l | grep "linux-image-extra" | grep "^ rc" | tr -s '' | cut -d '' -f 2)

次を実行して/etc/apt/apt.conf.d/01autoremove-kernelsを更新します...

sudo /etc/kernel/postinst.d/apt-auto-removal

うまくいけば、適切な自動削除が機能します。

sudo apt autoremove --purge

そうでない場合は、非常に古く未使用のカーネルを/ bootから手動で削除できるはずです。

まず、実行しているカーネルを見つけます。

うなめ-r

現在のカーネルまたは以前のカーネルを削除しないでください。

sudo rm /boot/initrd.img-V.XX.Y-ZZ-generic

これで、aptの自動削除を再試行するのに十分なスペースが必要です。そうでない場合は、別の非常に古いカーネルを削除します。もちろん、現在および次に古いものを保持します。


-2

これが役立つことを願っています:

私は通常、ubuntu-tweak janitor、素敵なGUI、簡単を使用して古いカーネルを削除します:)

「システム」をクリックすると、古いカーネルのリストが表示されるので、それをクリックしてクリーンアップします


1
それはubuntuサーバーであり、私はパテを通して接続しています。(ただし、サーバー上のWebminの可用性もあります)
マルセル

このubuntu-tweak用務員をインストールするにはどうすればいいですか?
ジェニーオライリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.