Вопрос или проблема
Каждый раз, когда я sudo apt-get update
, он никогда не завершает процесс, и в конце говорит
E: Ошибка чтения - read (5: Ошибка ввода/вывода)
E: Списки пакетов или файл состояния не могут быть разобраны или открыты.
То же самое происходит, когда я пытаюсь установить что-то и выполняю sudo apt-get install <некоторое приложение>
Что мне делать? Я признаю, что на моем диске есть битые сектора, может ли это быть причиной? Есть ли что-то еще, что я могу сделать?
Это старый вопрос, но для архивных целей ниже приведено то, что решило эту проблему в моем случае:
sudo rm /var/lib/apt/lists/* -vf
sudo apt-get clean
sudo apt-get update
Попробуйте использовать более старый файл состояния,
sudo mv /var/lib/dpkg/status /var/lib/dpkg/status.bad
sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status
sudo apt-get update
Я столкнулся с подобной ошибкой:
Чтение списков пакетов... Ошибка!
E: Обнаружен раздел без заголовка Package:
E: Проблема с MergeList /var/lib/dpkg/status
E: Списки пакетов или файл состояния не могут быть разобраны или открыты.
Я следовал подобным рекомендациям, чтобы скопировать status-old
.
$ head /var/lib/dpkg/status
$ head /var/lib/dpkg/status-old
Все мои файлы состояния по какой-то причине были пустыми. К счастью, я узнал, что существуют резервные копии этих файлов:
$ ls -l /var/backups/dpkg.status.*
-rw-r--r-- 1 root root 444620 Nov 15 06:33 /var/backups/dpkg.status.0
-rw-r--r-- 1 root root 444620 Nov 15 06:33 /var/backups/dpkg.status.1.gz
-rw-r--r-- 1 root root 128168 Sep 20 2013 /var/backups/dpkg.status.2.gz
-rw-r--r-- 1 root root 112545 Sep 16 2013 /var/backups/dpkg.status.3.gz
-rw-r--r-- 1 root root 107767 Sep 14 2013 /var/backups/dpkg.status.4.gz
-rw-r--r-- 1 root root 107766 Sep 11 2013 /var/backups/dpkg.status.5.gz
-rw-r--r-- 1 root root 94583 Sep 11 2013 /var/backups/dpkg.status.6.gz
Я проверил последнюю резервную копию…
$ head /var/backups/dpkg.status.0
…но она все еще была пустой. Так что я распаковал более старую…
$ gunzip /var/backups/dpkg.status.1.gz
$ head /var/backups/dpkg.status.1
На этот раз содержимое было. Так что я скопировал его…
$ cp /var/backups/dpkg.status.1 /var/lib/dpkg/status
Затем apt-get update
выполнился без проблем.
У меня была подобная ошибка, но проблема заключалась не в dpkg.status
, а в списке apt.
Чтобы проверить вероятную причину, выполните strace -efile apt install что-то
. Затем найдите последние файлы, доступ к которым был осуществлен перед появлением сообщения об ошибке:
stat("/var/lib/apt/lists/linux.dropbox.com_ubuntu_dists_xenial_main_i18n_Translation-en%5fUS.uncompressed", 0x7fffd2f39d00) = -1 ENOENT (Нет такого файла или директории)
stat("/var/lib/apt/lists/linux.dropbox.com_ubuntu_dists_xenial_main_i18n_Translation-en%5fUS", 0x7fffd2f39e50) = -1 ENOENT (Нет такого файла или директории)
stat("/var/lib/apt/lists/www.fossology.org_releases_2.6.2_Ubuntu_dists_14.04_InRelease", 0x7fffd2f39d10) = -1 ENOENT (Нет такого файла или директории)
stat("/var/lib/apt/lists/www.fossology.org_releases_2.6.2_Ubuntu_dists_14.04_Release", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
stat("/var/lib/apt/lists/www.fossology.org_releases_2.6.2_Ubuntu_dists_14.04_InRelease", 0x7fffd2f396d0) = -1 ENOENT (Нет такого файла или директории)
stat("/var/lib/apt/lists/www.fossology.org_releases_2.6.2_Ubuntu_dists_14.04_Release", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
stat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=57344, ...}) = 0
open("/tmp/fileutl.message.XlglFW", O_RDWR|O_CREAT|O_EXCL, 0600) = 5
unlink("/tmp/fileutl.message.XlglFW") = 0
open("/var/lib/apt/lists/www.fossology.org_releases_2.6.2_Ubuntu_dists_14.04_Release", O_RDONLY) = 6
open("/var/lib/apt/lists/www.fossology.org_releases_2.6.2_Ubuntu_dists_14.04_Release", O_RDONLY) = 5
stat("/var/lib/apt/lists/www.fossology.org_releases_2.6.2_Ubuntu_dists_14.04_Release", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
Чтение списков пакетов... Готово
E: Списки пакетов или файл состояния не могут быть разобраны или открыты.
+++ вышло с 100 +++
В моем случае последний файл (файл Release
от fossology) оказался длиной 0 байт. Удаление этого репозитория позволило apt продолжить нормальную работу.
Ответ или решение
Ошибка "The package lists or status file could not be parsed or opened" часто возникает при использовании команды sudo apt-get update
и может вызывать значительные неудобства, так как она препятствует установке и обновлению пакетов. Данная проблема может быть связана как с поврежденными файлами в системе пакетного менеджера, так и с аппаратными неисправностями, например, с плохими секторами на жестком диске.
Причины ошибки
-
Проблемы с файловой системой:
- Если на вашем жестком диске есть поврежденные сектора, это может привести к тому, что система не сможет прочитать или записать определенные файлы, необходимые для apt.
-
Поврежденные файлы списка пакетов:
- Иногда файлы в каталоге
/var/lib/apt/lists/
могут быть повреждены, что вызывает ошибки при попытке чтения.
- Иногда файлы в каталоге
-
Проблемы с файлом статуса (
/var/lib/dpkg/status
):- Если файл статуса поврежден или пуст, это также может вызывать данную ошибку.
Решения проблемы
-
Очистка списков пакетов:
Если вы подозреваете, что списки пакетов повреждены, попробуйте удалить их. Выполните следующие команды:sudo rm /var/lib/apt/lists/* -vf sudo apt-get clean sudo apt-get update
Это удалит все списки пакетов и создаст их заново при следующем обновлении.
-
Восстановление файла статуса:
Если файл статуса поврежден, вы можете попробовать восстановить его из резервной копии. Сначала выполните команду:sudo mv /var/lib/dpkg/status /var/lib/dpkg/status.bad sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status sudo apt-get update
Это переместит поврежденный файл и восстановит предыдущую версию, если она доступна.
-
Проверка резервных копий файлов:
Если указанные выше методы не помогли, проверьте наличие резервных копий файлов статуса:ls -l /var/backups/dpkg.status.*
Используйте более старую резервную копию для восстановления файла статуса, как показано ниже:
gunzip /var/backups/dpkg.status.1.gz cp /var/backups/dpkg.status.1 /var/lib/dpkg/status
Затем выполните команду
apt-get update
, чтобы проверить результат. -
Устранение проблем с конкретными репозиториями:
Если у вас есть подозрение, что проблема связана с определенным репозиторием, вы можете временно отключить его. Для этого отредактируйте файл списка источников:sudo nano /etc/apt/sources.list
Закомментируйте строки, относящиеся к проблемным репозиториям, и попробуйте выполнить
apt-get update
снова. -
Проверка состояния диска:
Не забудьте проверить состояние вашего жесткого диска на наличие ошибок, используя следующие команды:sudo fsck -f /dev/sdX
Замените
/dev/sdX
на нужный вам диск. Это поможет выявить и исправить возможные ошибки на уровне файловой системы.
Заключение
Ошибка "The package lists or status file could not be parsed or opened" может быть вызвана множеством различных факторов, включая программные и аппаратные. Следуя вышеуказанным шагам, вы можете устранить проблемы и вернуть функциональность пакетного менеджера в Ubuntu. Регулярное резервное копирование и мониторинг состояния жесткого диска помогут предупредить подобные ситуации в будущем.