Исправить ошибку «E: не удалось получить блокировку /var/lib/dpkg/lock» в Ubuntu
Это краткое руководство поможет вам узнать, как исправить ошибку «E: Не удалось получить блокировку /var/lib/dpkg/lock» в Ubuntu. Обычно это происходит, когда в фоновом режиме уже выполняется другая операция apt.
У меня есть виртуальная машина Ubuntu 18.04 LTS, которую я использую в целях тестирования. Всякий раз, когда я запускаю эту виртуальную машину и пытаюсь обновить или установить любое приложение с помощью диспетчера пакетов APT, я получаю следующую ошибку:
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
Или что-то подобное, как показано ниже:
E: Could not get lock /var/lib/dpkg/lock - open (11 Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/) is another process using it?
E: Could not get lock /var/lib/apt/lists/lock – open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
Это происходит каждый раз. Мне пришлось подождать несколько минут, чтобы выполнить удачную операцию.
Я знаю, что какой-то процесс заблокировал базу данных apt во время установки или удаления программного обеспечения или обновления системы в фоновом режиме. Я запустил команду top, чтобы изучить список запущенных процессов. Изучив выходные данные команды top, я узнал, что существует процесс под названием unattended-update, который запускает apt update. > каждый раз, когда я включаю свою виртуальную машину Ubuntu. Пока выполняется обновление apt, база данных apt заблокирована, и я не могу выполнить какую-либо операцию apt.
Исправить ошибку «E: не удалось получить блокировку /var/lib/dpkg/lock» в Ubuntu
Правильный способ устранения ошибки "E: Не удалось получить блокировку /var/lib/dpkg/lock
" — позволить корректно завершить текущую задачу установки, обновления или удаления. . Этот процесс займет некоторое время (от 5 до 10 минут или больше) в зависимости от размера обновления. Как только эта задача будет выполнена, блокировка будет снята автоматически.
Но если процесс по какой-то причине завис и заблокировал базу данных apt на несколько минут, у вас нет другого выбора, кроме как снять блокировку. В этом случае выполните следующую процедуру, чтобы исправить это.
Сначала давайте выясним, какой процесс владеет файлом блокировки, т. е. /var/lib/dpkg/lock
.
sudo lsof /var/lib/dpkg/lock
Если файл блокировки другой, например /var/lib/dpkg/lock-frontend
, вы можете узнать PID процесса, которому принадлежит этот файл блокировки, с помощью команды:
sudo lsof /var/lib/dpkg/lock-frontend
Если файл блокировки — «/var/lib/apt/lists/lock», запустите:
sudo lsof /var/lib/apt/lists/lock
Пример вывода:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
unattende 1548 root 6uW REG 8,2 0 1181062 /var/lib/dpkg/lock
Как видно из приведенного выше вывода, PID процесса, содержащего файл блокировки, равен 1548.
Просто убейте его, чтобы снять блокировку, используя команду:
sudo kill -9 1548
Теперь вы можете безопасно снять блокировку с помощью команд:
sudo rm /var/lib/dpkg/lock
Или,
sudo rm /var/lib/dpkg/lock-frontend
Или,
sudo rm /var/lib/apt/lists/lock
Также вам может потребоваться удалить файл блокировки в каталоге кеша:
sudo rm /var/cache/apt/archives/lock
После снятия блокировки выполните:
sudo dpkg --configure -a
Это должно решить проблему.
Этот метод будет работать нормально в 99% случаев. Но имейте в виду, что если процесс обновления запущен, и вы прервали его в середине установки пакета, вы можете получить сломанную систему. В таких случаях не паникуйте, просто следуйте приведенному ниже руководству, чтобы исправить это.
- Как исправить сломанную ОС Ubuntu без ее переустановки
Удачи!
Является ли удаление файла блокировки правильным решением?
Конечно, нет! Как заметил один из наших читателей, г-н Гиллем Джовер, удаление файлов блокировки никогда не является правильным решением и может привести к потере данных или повреждению системы. Вы должны позволить текущей задаче apt завершиться корректно. Однако иногда задача может выполняться дольше обычного или зависать.
Если когда-либо возникнет необходимость завершить такие замороженные процессы, выполните следующие команды:
sudo fuser -vki -TERM /var/lib/dpkg/lock /var/lib/dpkg/lock-frontend
sudo dpkg --configure --pending
Первая команда будет искать процессы, в данный момент удерживающие блокировки, выводить информацию о них и предлагать их завершить. Если плавное завершение не работает, возможно, вам придется вместо этого использовать -KILL
. Команда dpkg --configure --pending
необходима для завершения любой ожидающей настройки, чтобы позволить процессам перейти в нормальное состояние и позволить dpkg объединить любые обновления журнала базы данных с основной базой данных состояния.
Ресурс:
- Вики Debian
Связанное чтение:
- Как отключить автоматические обновления в Ubuntu