Вопрос Мой / загрузочный раздел ударил 100%, и теперь я не могу его обновить. Не удается удалить старые ядра, чтобы освободить место


Моя первая проблема была, когда я попытался apt-get update или apt-get upgrade, При обновлении я получаю следующую ошибку:

You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
linux-image-server : Depends: linux-image-3.2.0-27-generic but it is not installed
E: Unmet dependencies. Try using -f.

Я попытался запустить apt-get install -f, и это был результат (после того, как вы сказали «да»)

(Reading database ... 186183 files and directories currently installed.)
Unpacking linux-image-3.2.0-27-generic (from .../linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb) ...
Done.
dpkg: error processing /var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb (--unpack):
 failed in write on buffer copy for backend dpkg-deb during `./boot/System.map-3.2.0-27-generic': No space left on device
 No apport report written because the error message indicates a disk full error
                                                                          dpkg-deb:    error: subprocess paste was killed by signal (Broken pipe)
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.2.0-27-generic   /boot/vmlinuz-3.2.0-27-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.2.0-27-generic /boot/vmlinuz-3.2.0-27-generic
Errors were encountered while processing:
/var/cache/apt/archives/linux-image-3.2.0-27-generic_3.2.0-27.43_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Я попытался запустить apt-get autoremove и это дает мне ту же ошибку, что и apt-get upgrade,

Когда я бегу df, Я получаю это за /boot:

/dev/sda1                    233191     230297         0 100% /boot

Итак, я читал в другом месте, что я должен попытаться очистить старые ядра. Я проверил, какие ядра у меня были:

$ dpkg -l linux-image-\* | grep ^ii
ii  linux-image-2.6.38-13-server  2.6.38-13.52  Linux kernel image for version 2.6.38 on x86_64
ii  linux-image-3.0.0-13-server   3.0.0-13.22   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-14-server   3.0.0-14.23   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-15-server   3.0.0-15.26   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-16-server   3.0.0-16.29   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.0.0-17-server   3.0.0-17.30   Linux kernel image for version 3.0.0  on x86_64
ii  linux-image-3.2.0-24-generic  3.2.0-24.39   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-25-generic  3.2.0-25.40   Linux kernel image for version 3.2.0  on 64 bit x86 SMP
ii  linux-image-3.2.0-26-generic  3.2.0-26.41   Linux kernel image for version 3.2.0  on 64 bit x86 SMP

Когда я пытаюсь удалить старое с этим:

$ sudo apt-get purge linux-image-2.6.38-13-server
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-image-server : Depends: linux-image-3.2.0-27-generic but it is not going to be     installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Как я могу освободить или расширить загрузку, не испортив мою установку?


138
2017-08-02 15:17


происхождения


Я думаю, что ответ @ mreiter может быть лучшим: он использует диспетчер пакетов, и он работал, когда команды другого менеджера пакетов не удались, по крайней мере для меня: askubuntu.com/a/205776/247661 - Aaron Hall
Я создал сценарий, который выполняет эту работу. Я опубликую его после достижения моей цели: bountysource.com/issues/... - jarno
help.ubuntu.com/community/RemoveOldKernels - dskrvk
@dskrvk Да! Почему Remove-Unused-Dependencies а не по умолчанию? - Steven R. Loomis


ответы:


Освобождение пространства на корневой файловой системе

Чтобы освободить место в корневой файловой системе, вы можете попробовать выполнить apt-get clean,

Если это не сработает, вы можете перейти к /var/cache/apt/archives и вручную удалите несколько файлов из кеша, чтобы получить некоторое пространство назад, например:

sudo rm linux-headers-*

Не удастся удалить все .deb файлы здесь, если вам нужно - вот что apt-get clean делает. Они будут автоматически перезагружены apt если они нужны снова.

Освобождение пространства в файловой системе / boot

Оригинальный плакат имеет отдельный /boot раздел, и это то, что является полным и apt система от работы. Ему необходимо будет освободить место.

Если там почти достаточно места, перейдите к /boot и удалите файл конфигурации или два:

sudo rm config-3.2.0-19-generic-pae

например, но используя имя одной из версий ядра, которую вы собираетесь удалить в любом случае. Это освободит небольшое пространство (около 144K за штуку).

Если вам нужно больше места, индивидуально удалите старые vmlinuz, initrd, abi а также System.map до тех пор, пока у вас не будет достаточно места (около 22 М для одной версии моего ядра i386).

Что бы ты не делал, не удаляйте их все, Вы должны, по крайней мере, хранить последние две подходящие версии каждого типа файлов для каждого используемого ядра.

Затем приступайте к выполнению команд apt-get install. Как упоминалось выше, им может потребоваться перезагрузить некоторые из удаленных вами deb, но если это произойдет автоматически. Когда вы снова работаете, очистите, используя apt-get, чтобы удалить пакеты, соответствующие удаленным вами файлам, - так что все соответствует.


Конфигурационный файл в /boot это конфигурация ядра, которая был использован командой ядра строить ядро с тем же именем. Он должен быть безвредным для удаления, если вы не хотите его для справки или помочь вам в создании собственных ядер.

Наконец, вы вручную удаляете старый пакет ядра или два из /boot чтобы сделать еще больше места для нового.


116
2017-08-02 15:54



Я попытался удалить почти все конфиги. Кажется, у него все еще недостаточно места. Какие другие файлы можно будет удалить? Моя корневая файловая система нигде не заполнена, поэтому я не беспокоюсь об этом. - Strifey16
Я обновил свой ответ с дальнейшими файлами для удаления вручную. Мне кажется, что удаление наборов 3.0.0.13 и 3.0.0.14 (пять файлов для набора, включая файл abi) будет достаточным. - John S Gruber
Это фиксировало это. Я понял, что, возможно, это приведет к удалению файлов вручную, но я всегда смущаюсь делать это с помощью чего-либо, установленного apt, поэтому я подумал, что сначала попрошу. - Strifey16
Не используй sudo rm для удаления из / boot. Вместо этого используйте sudo dpkg --purge для удаления старого пакета linux-image. После этого использование sudo apt-get -f install для исправления неисправности. - jarno
Хотя иногда система может быть настолько полной, что даже dpkg не может работать. Но rm может быть использован тогда. - jarno


В моем случае apt команд и dpkg команда не может завершить и не может удалить. Автоучет не удался при установке 2.6.32-56-server,

Мой первый шаг состоял в том, чтобы определить пространство, которое будет использоваться,

cd /boot
du -sk *|sort -n

У меня было около 30 ядер и поддерживающих файлов.

Я сделал uname -a чтобы получить запущенное ядро, Я обнаружил, что я на Linux чередуюсь 2.6.32-43-serverи сделал tar из 6 версий, которые не были запущены, и были старыми.

tar -cvf ~username/boot.tar *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

Затем я сделал rm -rf от того, что я сделал резервную копию:

rm -rf *2.6.32-44-server *2.6.32-45-server *2.6.32-46-server *2.6.32-47-server *2.6.32-48-server *2.6.32-49-server

Я показываю эти команды в качестве примеров, вам нужно будет решить, с чем вы будете работать в своей ситуации.

Теперь, когда у меня было место /boot, Я смог запустить

apt-get -f install 

Чтобы очистить неудачную установку 2.6.32-56-server,

Затем я сделал

apt-get remove linux-headers-2.6.32-38 linux-headers-2.6.32-38-server linux-image-2.6.32-38-server
apt-get remove linux-headers-2.6.32-39 linux-headers-2.6.32-39-server linux-image-2.6.32-39-server

Это дало мне возможность вернуть обратно то, что я поддержал.

tar -xf ~username/boot.tar
rm  ~username/boot.tar    

Чтобы очистить, я мог бы запустить:

apt-get autoremove

Я перезагрузился, и теперь я использую 4% /boot,


60
2018-02-20 16:48



Это было самым полезным для меня из всех предложений. Большое спасибо! - Joshua F. Rountree
удаление файлов из / boot просто ужасно ломает apt и dpkg, так как их сценарии установки и удаления не работают HARD, когда файлы отсутствуют. Я не понимаю, как вы это сделали. - FizxMike


Вы можете использовать dpkg вместо apt-get для удаления старых ядер:

sudo dpkg -r linux-image-3.2.0-29-generic

19
2018-04-08 14:38



Может быть, есть плюсы для использования этого, но предложение @ mreiter работало для меня, когда этого не было (этот был предложен на канале поддержки IRC ubuntu). - Aaron Hall
@AaronHall Этот ответ просто содержит ключевую часть ответ mreiter (последняя строка), и она намного короче, поскольку она не охватывает очистку заголовков (что не помогает в случае раздельного /boot раздел). - Melebius


Я заметил, что в каталоге загрузки остались файлы старых версий:

$ ls /boot
vmcoreinfo-2.6.31-17-server

И менеджер пакетов перечислил бы старые версии:

dpkg -l | grep linux-image

Поэтому я использовал эту команду (autoremove также удалят более свежие изображения, которые я не хочу удалять)

sudo apt-get purge linux-image-2.6.31-17-server

У меня остались некоторые заголовки:

dpkg -l | grep linux-headers

Поэтому я сделал это:

sudo apt-get purge linux-headers-2.6.32-34

Наконец, остался один пакет, который я не смог удалить с помощью apt-get purge:

$ dpkg -l | grep linux-image
rc  linux-image-2.6.28-11-server

Источник: Удалите пакет, помеченный как rc dpkg

sudo dpkg --purge linux-image-2.6.28-11-server

9
2017-10-24 13:56





Это то, что я использовал:

sudo apt-get autoremove linux-image-xxxx

Сделайте это для всех старых ядер и сохраните только последние два.

Если вы хотите автоматически удалить старые ядра и обновить GRUB видеть это: Документация Ubuntu


2
2017-11-22 17:33



Это должен быть принятый ответ. Если вы не против очистки всего, вам даже не нужно указывать образ Linux. - CyberEd


Вы не можете действовать по пакетам, но вы Можно воздействовать на другие файлы. Сначала пройдите через домашнюю папку и посмотрите, есть ли что-нибудь вы можете удалить. Если нет, попробуйте переместить большое количество файлов на другой раздел (или флешку), а затем попробуйте sudo apt-get install -f для очистки проблем с зависимостью пакета (скорее всего, вы установили файл .deb через dpkg), а затем продуть все старые ядра. Как только вы благополучно будете иметь не менее 10 МБ, попробуйте очистить ненужное программное обеспечение или файлы.


2
2017-08-02 15:20



В домашней папке нет / boot - Thorbjørn Ravn Andersen


Используйте диспетчер пакетов Synaptic. Просто выберите пакет, который хотите удалить, и он попросит вас также удалить пакеты, зависящие от него. По моему опыту, пакеты ядра всегда входят в группы из двух (или более, в зависимости от того, как вы считаете), которые являются взаимозависимыми. Обычно вы можете быстро найти старые, используя «локальный / устаревший» фильтр.


1
2017-08-03 02:39



Например. на сервере (только для текста) отсутствует Synaptic. На самом деле это не очень выгодное решение для серверов. - nerdoc


Просто бег sudo apt-get -f autoremove разрешил мою проблему.


1
2018-04-26 08:26



У вас было 100% дисковое пространство / загрузка? - ubashu
Не смотря на мою историю мониторинга, этого не произошло. PS: Я нахожусь в Vagrant xenial, и моя загрузочная файловая система /dev/sda1 монтируется на / - forzagreen