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

142

Моя первая проблема заключалась в том, что я пытался использовать 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).

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

задан Strifey16 02.08.2012 в 15:17
источник

11 ответов

117

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

Чтобы освободить место в корневой файловой системе, вы можете попробовать выполнить 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

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

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

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

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

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

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

    
ответ дан John S Gruber 02.08.2012 в 15:54
источник
61

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

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

cd /boot
du -sk *|sort -n

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

Я сделал uname -a , чтобы получить запущенное ядро, Я определил, что я был на Linux alternate 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 .

    
ответ дан A.G. Russell 20.02.2014 в 16:48
19

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

sudo dpkg -r linux-image-3.2.0-29-generic
    
ответ дан psusi 08.04.2014 в 14:38
9

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

$ 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
    
ответ дан mreiter 24.10.2012 в 13:56
2

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

    
ответ дан hexafraction 02.08.2012 в 15:20
2

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

sudo apt-get autoremove linux-image-xxxx

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

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

    
ответ дан Samer 22.11.2015 в 17:33
1

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

    
ответ дан forzagreen 26.04.2018 в 08:26
1

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

    
ответ дан Wegko 03.08.2012 в 02:39
1

Запустите это:

sudo apt-get autoremove
sudo apt-get --purge remove && sudo apt-get autoclean
sudo apt-get -f install
sudo dpkg-reconfigure -a

Источник: Я получаю эту ошибку после обновления. пожалуйста, помогите

    
ответ дан Ardi Nusawan 15.02.2017 в 18:41
1

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

sudo aptitude

Затем, когда он открывается, он обычно говорит что-то о неудовлетворительных зависимостях внизу. Вы можете нажать письмо g , чтобы продолжить предлагаемое удаление. Он перенесет вас на страницу, где будет указано, что произойдет.

Рядом со сломанными ядрами должен быть минус - . Нажмите g снова, и он удалит сломанные ядра. Нажмите q , чтобы выйти. Затем вы сможете использовать sudo apt-get autoremove , чтобы избавиться от старых ядер и освободить место.

    
ответ дан Matthew Swanson 03.04.2017 в 23:29
1

Проверьте использование /var/tmp с du -sh /var/tmp/ . Все файлы в этой папке можно удалить, чтобы освободить место.

Затем вы можете запустить следующее, чтобы удалить старые ядра:

sudo apt-get clean
sudo apt install byobu
sudo purge-old-kernels
sudo apt autoremove
sudo update-grub
    
ответ дан Tertius 06.11.2017 в 09:29