周辺のいくつかのファイルを削除しました/var/lib/dpkg/
。
/var/lib/dpkg/status
/var/lib/dpkg/available
/var/lib/dpkg/info/*
Debian はインストールされたパッケージに関する情報を保存するためにこれらのファイルを使用することを理解しています。 今、それを実行するとapt-get update
、次のエラーが発生します。
Reading package lists... Error!
E: Could not open file /var/lib/dpkg/status - open
(2: No such file or directory)
E: The package lists or status file could not be parsed or opened.
私の理解ではFHSにあるファイルは/var
システムにとって重要なものではありません。評価すると、これらは一時ファイル、ログ、キャッシュなどになります。
削除されたファイルを再作成する方法はありますか?
答え1
を見てみるとファイルシステム階層標準で規定されている /var の目的、それは言う:
/var
可変データ ファイルが含まれます。これには、スプール ディレクトリとファイル、管理データとログ データ、一時ファイルと一時ファイルが含まれます。
「一時的」なファイルは、1つ含まれているもの。また、「スプール ディレクトリとファイル」および「管理データとログ データ」も含まれています。重要な「管理データ」を削除しました。
存在する理由については次のように説明されています/var
。
/var
読み取り専用でマウントできるようにするため、ここで を指定します/usr
。 に一度入ったもののうち/usr
、システム操作中 (インストールやソフトウェアのメンテナンス中ではない) に書き込まれるものはすべて にある必要があります/var
。
これが の重要な点です。 (ソフトウェアを追加/削除/更新したときにのみ変更される)と/var
は異なり、 内のデータは変更されます。/usr
以降のセクションでは、 のさまざまなサブディレクトリについて説明します/var
。たとえば、/var/lib
(削除したファイルが存在していた場所) には、「プログラムの実行中にプログラムが変更する、特定のホストに関連するデータ」として定義される「アプリケーションまたはシステムに関する状態情報」が保持されます。
あなた本当に特定のファイルの用途がわからないままファイルを削除しないでください。削除したファイルについては、これらのファイルのバックアップがない限り、 などのバックアップを取って再インストールするしかないと思います/home
。/etc
そうするまでは、 (および APT など) は使用できませんdpkg
。それ以外は、システムは引き続き機能するはずです。
答え2
にあるファイルは、/var
システムにとって非常に重要です。たとえば、/var/mail
またはには/var/spool/mail
ユーザーの電子メールが含まれています。隣人のメールボックスに火をつけるのと同じくらい、これを削除しないでください。 の特定のサブディレクトリにあるファイルだけが、/var
多かれ少なかれ一時的なファイルを含んでいます。たとえば、 のログ ファイル/var/log
、 では通常再作成できるキャッシュ/var/cache
、 の一時ファイル (使用中は削除しないでください!) などです/var/tmp
。
データは/var/lib
きわめて重要です。たとえば、MySQL は通常、デフォルトでデータベースを に保存するように設定されています。これを消去すると、データベースが消去されます。Dpkgも/var/lib/mysql
独自のデータベースを に保存します。/var/lib
/var/lib/dpkg/status
/var/lib/dpkg/status
にはインストールされたパッケージに関する情報が含まれています。これを消去した場合は、バックアップから復元する必要があります。バックアップが完全に最新でない場合は、 の下/var/log/apt
および 内の最近のパッケージ操作のログを確認してください/var/log/dpkg.log
。 が機能する前に、そのファイルを作成する必要がありますdpkg
。
/var/lib/dpkg/available
インターネットからダウンロードしたデータから構築されています。apt-get update
再構築する必要があります。
/var/lib/dpkg/info
には、Debian パッケージに同梱されているファイルが含まれています。これらのファイルは、パッケージを再インストールするだけで復元できます。もちろん、そのためにはインストールされたパッケージのリストが必要になります。 を復元した場合は/var/lib/dpkg/status
、そこからパッケージのリストを抽出できます。
apt-get install --reinstall $(</var/lib/dpkg/status sed -n 's/^Package://p')
を紛失した場合は/var/lib/dpkg/status
、空のファイルを作成し、apt-get install --reinstall
パッケージのリストに対して を実行することで、再作成できる可能性があります。パッケージのリストが保存される場所の 1 つは です/var/lib/apt/extended_states
。少なくとも、パッケージのインストールに APT のみを使用したことがある場合は (直接ではなくdpkg
)、上記のコマンドで の代わりにそのファイルを使用します。 も削除した場合は、ほとんどのパッケージが にエントリを作成するため、/var/lib/dpkg/status
を使用してパッケージのおおよそのリストを再構築できます。 おそらく、いくつかの例外があります。$(cd /usr/share/doc && ls)
/usr/share/doc
このシステムでのパッケージ管理に関するサポートは求めないでください。システムにとって重要なファイルの削除からの回復は、正確な科学ではありません。バックアップから復元できない場合は、できるだけ早く新しいクリーンなシステムをインストールする必要があります。
答え3
/var/lib/dpkg/status
コマンドを実行するだけでファイルが魔法のように現れるという意味で「再作成」することはできません。 いいえ。 ファイルのバックアップを使用し、/var/lib
ディレクトリ内のものを決して削除しないようにする必要があります。
sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status
これにより、前日のパッケージの状態がわかります。他のものが壊れていないことを祈り始めます。
答え4
誰かが「/var/lib/dpkg」を破壊してしまった場合:
sudo mkdir -p /var/lib/dpkg/updates
sudo mkdir -p /var/lib/dpkg/info
sudo mkdir -p /var/lib/dpkg/alternatives
sudo cp /var/backups/dpkg.status.0 /var/lib/dpkg/status
sudo cp /var/backups/dpkg.statoverride.0 /var/lib/dpkg/statoverride
sudo cp /var/backups/dpkg.diversions.0 /var/lib/dpkg/diversions
sudo cp /var/backups/dpkg.arch.0 /var/lib/dpkg/arch
sudo dpkg --clear-avail
sudo apt update
sudo apt upgrade # If needed.