Файл списка пакетов или файл состояния не удалось разобрать или открыть

Вопрос или проблема

Каждый раз, когда я 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 и может вызывать значительные неудобства, так как она препятствует установке и обновлению пакетов. Данная проблема может быть связана как с поврежденными файлами в системе пакетного менеджера, так и с аппаратными неисправностями, например, с плохими секторами на жестком диске.

Причины ошибки

  1. Проблемы с файловой системой:

    • Если на вашем жестком диске есть поврежденные сектора, это может привести к тому, что система не сможет прочитать или записать определенные файлы, необходимые для apt.
  2. Поврежденные файлы списка пакетов:

    • Иногда файлы в каталоге /var/lib/apt/lists/ могут быть повреждены, что вызывает ошибки при попытке чтения.
  3. Проблемы с файлом статуса (/var/lib/dpkg/status):

    • Если файл статуса поврежден или пуст, это также может вызывать данную ошибку.

Решения проблемы

  1. Очистка списков пакетов:
    Если вы подозреваете, что списки пакетов повреждены, попробуйте удалить их. Выполните следующие команды:

    sudo rm /var/lib/apt/lists/* -vf
    sudo apt-get clean
    sudo apt-get update

    Это удалит все списки пакетов и создаст их заново при следующем обновлении.

  2. Восстановление файла статуса:
    Если файл статуса поврежден, вы можете попробовать восстановить его из резервной копии. Сначала выполните команду:

    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

    Это переместит поврежденный файл и восстановит предыдущую версию, если она доступна.

  3. Проверка резервных копий файлов:
    Если указанные выше методы не помогли, проверьте наличие резервных копий файлов статуса:

    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, чтобы проверить результат.

  4. Устранение проблем с конкретными репозиториями:
    Если у вас есть подозрение, что проблема связана с определенным репозиторием, вы можете временно отключить его. Для этого отредактируйте файл списка источников:

    sudo nano /etc/apt/sources.list

    Закомментируйте строки, относящиеся к проблемным репозиториям, и попробуйте выполнить apt-get update снова.

  5. Проверка состояния диска:
    Не забудьте проверить состояние вашего жесткого диска на наличие ошибок, используя следующие команды:

    sudo fsck -f /dev/sdX

    Замените /dev/sdX на нужный вам диск. Это поможет выявить и исправить возможные ошибки на уровне файловой системы.

Заключение

Ошибка "The package lists or status file could not be parsed or opened" может быть вызвана множеством различных факторов, включая программные и аппаратные. Следуя вышеуказанным шагам, вы можете устранить проблемы и вернуть функциональность пакетного менеджера в Ubuntu. Регулярное резервное копирование и мониторинг состояния жесткого диска помогут предупредить подобные ситуации в будущем.

Оцените материал
Добавить комментарий

Капча загружается...