Вопрос или проблема
Ошибка apt в Pop!_OS из-за “Нет места на устройстве” для /boot/efi.
С утра я в основном не могу использовать apt
, так как все вызовы приводят к ошибке: kernelstub.Installer : ERROR Не удалось скопировать initrd на ESP!
. Я использую Pop!_OS на основе Ubuntu 20.04.2 LTS x86_64. Судя по трассировке стека, проблема следующая:
OSError: [Errno 28] На устройстве нет места: '/boot/initrd.img-5.11.0-7614-generic' -> '/boot/efi/EFI/Ubuntu-22666039-42da-4b29-8575-b464fa505439/initrd.img'
Я попытался удалить старые ядра, используя sudo apt-get autoremove linux-image-5.11.0-7612-generic
, как было предложено здесь, и sudo apt --purge autoremove
, как было предложено здесь. В обоих случаях попытка обновления заканчивается неудачей.
Вот полный вызов:
update-initramfs: Генерация /boot/initrd.img-5.11.0-7614-generic
cryptsetup: WARNING: Цель восстановления cryptswap использует ключевой файл
kernelstub.Config : INFO Ищем конфигурацию...
kernelstub : INFO Система информации:
ОС:..................Ubuntu 20.04
Корневая раздел:....../dev/nvme0n1p3
UUID корневой FS:........22666039-42da-4b29-8575-b464fa505439
Путь к ESP:............/boot/efi
Раздел ESP:......./dev/nvme0n1p1
Номер раздела ESP:.....1
Номер записи NVRAM:.......-1
Номер переменной загрузки:.....0000
Опции загрузки ядра:.quiet loglevel=0 systemd.show_status=false splash
Путь к образу ядра:.../boot/vmlinuz-5.11.0-7614-generic
Путь к образу Initrd:.../boot/initrd.img-5.11.0-7614-generic
Принудительное перезапись:.....False
kernelstub.Installer : INFO Копирование ядра в ESP
kernelstub.Installer : INFO Копирование initrd.img в ESP
kernelstub.Installer : ERROR Не удалось скопировать initrd на ESP!
Это критическая ошибка, и мы не можем продолжать. Проверьте свои настройки на наличие опечаток. В противном случае проверьте разрешения и попробуйте снова.
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/kernelstub/installer.py", line 247, in copy_files
shutil.copy(src, dest)
File "/usr/lib/python3.8/shutil.py", line 415, in copy
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "/usr/lib/python3.8/shutil.py", line 272, in copyfile
_fastcopy_sendfile(fsrc, fdst)
File "/usr/lib/python3.8/shutil.py", line 163, in _fastcopy_sendfile
raise err from None
File "/usr/lib/python3.8/shutil.py", line 149, in _fastcopy_sendfile
sent = os.sendfile(outfd, infd, offset, blocksize)
OSError: [Errno 28] На устройстве нет места: '/boot/initrd.img-5.11.0-7614-generic' -> '/boot/efi/EFI/Ubuntu-22666039-42da-4b29-8575-b464fa505439/initrd.img'
Вот вывод df -H
:
Файловая система Размер Использовано Доступно Использ % Смонтировано на
udev 17G 0 17G 0% /dev
tmpfs 3.4G 4.2M 3.4G 1% /run
/dev/nvme0n1p3 483G 226G 233G 50% /
tmpfs 17G 128M 17G 1% /dev/shm
tmpfs 5.3M 0 5.3M 0% /run/lock
tmpfs 17G 0 17G 0% /sys/fs/cgroup
/dev/loop0 34M 34M 0 100% /snap/snapd/11402
/dev/loop2 34M 34M 0 100% /snap/snapd/11588
/dev/loop1 59M 59M 0 100% /snap/core18/1988
/dev/loop3 59M 59M 0 100% /snap/core18/1997
/dev/nvme0n1p2 4.3G 2.6G 1.8G 60% /recovery
/dev/nvme0n1p1 522M 522M 0 100% /boot/efi
/dev/sda1 984G 910G 25G 98% /mnt/data
tmpfs 3.4G 25k 3.4G 1% /run/user/1000
А вот ядра:
sudo dpkg --list | egrep -i --color 'linux-image|linux-headers'
ii linux-headers-5.11.0-7612 5.11.0-7612.13~1617215757~20.04~97a8d1a all Загрузочные файлы, относящиеся к версии ядра Linux 5.11.0
ii linux-headers-5.11.0-7612-generic 5.11.0-7612.13~1617215757~20.04~97a8d1a amd64 Заголовки ядра Linux для версии 5.11.0 на 64-разрядной x86 SMP
ii linux-headers-5.11.0-7614 5.11.0-7614.15~1618626693~20.04~ecb25cd all Загрузочные файлы, относящиеся к версии ядра Linux 5.11.0
ii linux-headers-5.11.0-7614-generic 5.11.0-7614.15~1618626693~20.04~ecb25cd amd64 Заголовки ядра Linux для версии 5.11.0 на 64-разрядной x86 SMP
ii linux-headers-5.8.0-7642 5.8.0-7642.47~1614007149~20.04~82fb226 all Загрузочные файлы, относящиеся к версии ядра Linux 5.8.0
ii linux-headers-5.8.0-7642-generic 5.8.0-7642.47~1614007149~20.04~82fb226 amd64 Заголовки ядра Linux для версии 5.8.0 на 64-разрядной x86 SMP
ii linux-headers-generic 5.11.0.7614.15~1618626693~20.04~ecb25cd amd64 Заголовки общего ядра Linux
rc linux-image-5.11.0-7612-generic 5.11.0-7612.13~1617215757~20.04~97a8d1a amd64 Образ ядра Linux для версии 5.11.0 на 64-разрядной x86 SMP
ii linux-image-5.11.0-7614-generic 5.11.0-7614.15~1618626693~20.04~ecb25cd amd64 Образ ядра Linux для версии 5.11.0 на 64-разрядной x86 SMP
rc linux-image-5.4.0-7642-generic 5.4.0-7642.46~1598628707~20.04~040157c amd64 Образ ядра Linux для версии 5.4.0 на 64-разрядной x86 SMP
rc linux-image-5.8.0-7630-generic 5.8.0-7630.32~1609193707~20.04~781bb80 amd64 Образ ядра Linux для версии 5.8.0 на 64-разрядной x86 SMP
rc linux-image-5.8.0-7642-generic 5.8.0-7642.47~1614007149~20.04~82fb226 amd64 Образ ядра Linux для версии 5.8.0 на 64-разрядной x86 SMP
ii linux-image-generic 5.11.0.7614.15~1618626693~20.04~ecb25cd amd64 Образ общего ядра Linux
Есть идеи, как это исправить?
Я только что нашел решение здесь. Проблема заключалась в том, что /boot/efi/EFI
было полностью заполнено. Я публикую это здесь, так как связанный ответ не был принят и получил отрицательные оценки. Но это решило мою проблему.
В основном я использовал:
sudo su
cd /boot/efi/EFI
ls
Это обнаружило папку с именем Ubuntu-22666039-42da-4b29-8575-b464fa505439
. Поскольку я использую Pop!_OS, я предположил, что она мне не нужна в папке EFI, поэтому я переместил ее:
mv Ubuntu-22666039-42da-4b29-8575-b464fa505439 /home/johannes/Downloads/backup/
Если возникнут проблемы, я смогу вернуть ее обратно, но сейчас все работает нормально.
Ответ или решение
Проблема, с которой вы столкнулись, возникает из-за исчерпания места на разделе EFI (EFI System Partition, ESP), который находится в директории /boot/efi
. Это происходит в основном из-за того, что в этой папке накапливаются старые файлы и каталоги, связанные с устаревшими версиями ядра.
Шаги для решения проблемы
-
Проверка свободного места:
Запустите следующую команду, чтобы увидеть текущее состояние дискового пространства:df -H
Если вы видите, что раздел
/boot/efi
заполнен на 100%, вам следует удалить старые файлы. -
Переход в директорию
/boot/efi/EFI
:
Используйте команду, чтобы перейти в нужный каталог:cd /boot/efi/EFI
-
Просмотр содержимого:
Просмотрите содержимое директории, чтобы идентифицировать устаревшие файлы:ls
-
Перемещение или удаление старых папок:
Если вы видите папку, связанную с предыдущими установками системы, как, например,Ubuntu-22666039-42da-4b29-8575-b464fa505439
, вы можете переместить ее в безопасное место на вашем основном разделе (например, в директориюDownloads
), чтобы освободить место. Это можно сделать с помощью команд:sudo mv Ubuntu-22666039-42da-4b29-8575-b464fa505439 ~/Downloads/backup/
Если вы хотите удалить папку, вместо перемещения используйте:
sudo rm -rf Ubuntu-22666039-42da-4b29-8575-b464fa505439
-
Проверка после удаления:
После удаления или перемещения старых файлов вернитесь к обновлению системы и проверьте, исчезла ли ошибка. Вы можете попробовать снова выполнить команду:sudo apt update sudo apt upgrade
- Удаление старых версий ядра (при необходимости):
Чтобы дополнительно освободить место на основном разделе, вы можете удалить старые версии ядра. Для этого используйте следующие команды:sudo apt-get autoremove --purge
Заключение
Данная последовательность действий должна помочь вам решить проблемы с нехваткой места на разделах /boot/efi
. Если вы столкнётесь с какими-либо проблемами или ошибками, не стесняйтесь искать помощь на форумах или в сообществе, посвящённом вашему дистрибутиву. Убедитесь также, что вы делаете резервные копии важных данных перед удалением любых файлов.