Arch Linuxでpacmanのロックエラーを解決する方法|「failed to init transaction」の原因と対処法

はじめに

Arch Linuxでパッケージを更新しようとした際、次のようなエラーが表示された経験はないだろうか。

error: failed to init transaction (unable to lock database)
error: could not lock database: File exists

初めて見ると「パッケージデータベースが壊れたのでは?」と焦ってしまう。しかし、多くの場合は単純なロックファイルが原因であり、数分で解決できる。

この記事では、pacmanのロックエラーが発生する原因と、安全に解決する方法を順番に解説する。


スポンサーリンク
スポンサーリンク

pacmanのロックエラーとは

pacmanは、複数の処理が同時にパッケージデータベースを書き換えないように、ロックファイルを作成する。

ロックファイルは次の場所にある。

/var/lib/pacman/db.lck

パッケージのインストールやアップデート中は、このファイルが作成される。

正常に終了すれば自動で削除されるが、次のようなケースでは残ってしまうことがある。

  • PCを強制終了した
  • ターミナルを途中で閉じた
  • pacmanの処理中に電源が切れた
  • ネットワーク障害で更新が中断した
  • 別のpacmanプロセスがまだ動作している

まずはpacmanが動作中ではないか確認する

ロックファイルを削除する前に、本当にpacmanが実行されていないか確認する。

ps aux | grep pacman

または

pgrep pacman

何も表示されなければ、pacmanは終了している。

もしPIDが表示された場合は、更新処理がまだ動いている可能性がある。

慌ててロックファイルを削除せず、処理が終わるまで待とう。


ロックファイルを削除する

pacmanが完全に停止していることを確認できたら、ロックファイルを削除する。

sudo rm /var/lib/pacman/db.lck

これだけで解決するケースがほとんどだ。

続いてパッケージデータベースを更新する。

sudo pacman -Sy

さらにシステム全体を更新して問題がないか確認する。

sudo pacman -Syu

正常に実行できれば復旧完了だ。


「別のpacmanが動いている」場合

例えば次のようなプロセスが残っていることがある。

/usr/bin/pacman
yay
paru
pamac

AURヘルパーも内部ではpacmanを使用するため、同時実行できない。

不要なプロセスであれば終了する。

sudo kill PID

終了しない場合は

sudo kill -9 PID

を利用できるが、実際に更新中だった場合はシステムが不整合になる可能性がある。

強制終了は最後の手段として考えよう。


データベースが壊れていないか確認する

ロック解除後もエラーが続く場合は、パッケージデータベースを再同期する。

sudo pacman -Syy

さらに更新する。

sudo pacman -Syu

-Syyはミラー上のデータベースを強制的に再取得するオプションだ。

キャッシュの不整合が原因の場合はこれで改善することが多い。


よくある質問

sudo rmで削除して大丈夫?

pacmanが動作していないことを確認できていれば問題ない。

逆に、動作中に削除するとパッケージ管理が壊れる可能性がある。


再起動すれば直る?

多くの場合は直る。

再起動するとpacmanプロセスが終了するため、ロック解除後に正常に更新できることが多い。


yayでも同じエラーになる

yayやparuは内部でpacmanを呼び出している。

つまり原因は同じなので、まずロックファイルの状態を確認しよう。


トラブルを防ぐコツ

次の点を意識するとロックエラーはほとんど発生しない。

  • 更新中はターミナルを閉じない
  • ノートPCはACアダプター接続時に更新する
  • pacmanyayを同時に実行しない
  • SSH接続ではtmuxscreenを利用する
  • 定期的にsudo pacman -Syuで最新状態を維持する

特にローリングリリースであるArch Linuxでは、長期間更新しないよりも、こまめにアップデートする方がトラブルが少ない。


まとめ

pacmanのロックエラーは、Arch Linuxユーザーなら一度は遭遇する代表的なトラブルだ。

多くの場合は次の3ステップで解決できる。

  1. pacmanプロセスが動いていないことを確認する
  2. /var/lib/pacman/db.lckを削除する
  3. sudo pacman -Syuで正常に更新できるか確認する

ロックファイルはシステムを保護するための仕組みであり、決して悪いものではない。原因を理解して正しく対処すれば、数分で復旧できる。

Arch Linuxでは「なぜこのエラーが起きたのか」を理解することが、安定した運用への近道になる。

コメント