破損したシステムディレクトリ(例:/ lib)の再構築

破損したシステムディレクトリ(例:/ lib)の再構築

ユーザーが削除したDebian、Ubuntu、CentOSなどのLinuxシステムがあるとします/lib。システムが実行されているオペレーティングシステムのlivecdバージョンを使用してシステムを正常に起動したとします。/lib破損したシステムで再構築コマンドを実行できますか?

たとえば、ターゲットシステムが使用しているすべてのパッケージを再インストールすると、このようなことができるようになります。

このような状況に直面した同僚があり、最終結果は完全な再インストールでした。しかし、これは問題を解決できるのか、それとも早く解決できるのかを考えました。

答え1

ほとんどの場合、この問題は比較的簡単に解決できます。次のディレクトリを使用して、インストールされているすべてのパッケージのリストを生成できます/lib

dpkg -S /lib | awk -F': ' '{ print $1 }' | tr -d ,

これらのパッケージを再インストールすると問題が解決します。

apt-get --reinstall $(dpkg -S /lib | awk -F': ' '{ print $1 }' | tr -d ,)

もちろん、これは削除したディレクトリによって異なりますapt-get。タスクを実行するために必要なパッケージはapt-get手動でインストールする必要があります。そうしないと、dpkgそのパッケージが別のコンピュータに抽出され、ファイルが所定の場所にコピーされる可能性があります。とにかく、後でそこにいるので、すべて再インストールされるので、apt他の問題は発生しません。

にファイルを入れた私のパッケージのリストを見ると、メイン/libパッケージはカーネル(すべてのモジュールがに移動/lib/modules)とlibc。どちらもシステムを起動するために再インストールが必要であることはほぼ確実です。 1つの方法は、Debianベースのライブシステムからインストールすることです。必要なパッケージをダウンロードしてターゲットシステムのルートディレクトリにインストールした場合は、ここにインストールするオプションを追加できます。例--root:dpkg

dpkg --root=/path/to/target/root -i package1.deb package2.deb ...

必要に応じて、この--rootオプションを最初のコマンドで使用することもできます。dpkgもちろん、十分な忍耐力とスキルが必要なオンライン修理が可能です。そのdpkgコマンドが機能しない場合は、いつでもから直接パッケージの依存関係を探し、ファイルを介してファイルが配置されている/var/lib/dpkg/infoパッケージを検索してみることができます。/lib.list/var/lib/dpkg/info

何が得られるかについてのアイデアを提供するために、実行中のGentooシステムを復元した人のためのブログがあります。みんなパッケージが削除されました。興味深い内容であり、使用された(またはコメントで提案された)いくつかの技術がこの状況に適用されることがあります。http://fakeguido.blogspot.co.uk/2010/08/rescuing-hosed-system-using-only-bash.html

答え2

/libほとんどの場合、作業ディレクトリがなければ、回復操作を実行する必要がある多くのアプリケーションがもう存在しないと思います。弾丸を噛んで再インストールします。


とにかく試してみたい場合は、RedHatベースのディストリビューションで行う方法は次のとおりです。

Redhatベースのディストリビューション(CentOS / Fedora / RHELなど)の場合は、RPMを使用してインストールされたパッケージの特定の側面を確認して変更できます。

すべてのパッケージを確認

% rpm -qVav
.........    /usr/bin/rdesktop
.........    /usr/share/doc/rdesktop-1.6.0
.........  d /usr/share/doc/rdesktop-1.6.0/AUTHORS
.........  d /usr/share/doc/rdesktop-1.6.0/COPYING
.........  d /usr/share/doc/rdesktop-1.6.0/ChangeLog
.........  d /usr/share/doc/rdesktop-1.6.0/HACKING
.........  d /usr/share/doc/rdesktop-1.6.0/README
.........  d /usr/share/doc/rdesktop-1.6.0/TODO
.........  d /usr/share/doc/rdesktop-1.6.0/ipv6.txt
.........  d /usr/share/doc/rdesktop-1.6.0/keymap-names.txt
.........  d /usr/share/doc/rdesktop-1.6.0/keymapping.txt
...
...

openssh 確認

% rpm -qVv openssh
.........    /etc/ssh
..?......  c /etc/ssh/moduli
.........    /usr/bin/ssh-keygen
.........    /usr/libexec/openssh
.........    /usr/libexec/openssh/ssh-keysign
.........    /usr/share/doc/openssh-5.5p1
.........  d /usr/share/doc/openssh-5.5p1/CREDITS
.........  d /usr/share/doc/openssh-5.5p1/ChangeLog
.........  d /usr/share/doc/openssh-5.5p1/INSTALL
.........  d /usr/share/doc/openssh-5.5p1/LICENCE
.........  d /usr/share/doc/openssh-5.5p1/OVERVIEW
...
...

権限と所有権の編集

% rpm --setperms {packagename}
% rpm --setugids {packagename}

メモ:出力の詳細については、参考man rpm資料を参照してください。-V|--verify

詳細については、この記事を参照してください。http://www.cyberciti.biz/tips/reset-rhel-centos-fedora-package-file-permission.html

答え3

他の人が言ったように、これが私に起こった場合、おそらく再インストールします。ただし、回復しようとすると、まず/libライブインストールのディレクトリを自分のシステムにコピーします。すべて/libを削除すると、最初は何も機能せず、パッケージマネージャも機能しないため、これらの手順が必要になる場合があります。次に、パッケージマネージャに移動して、リストされたファイルを含む/libすべてのパッケージを再インストールします(そのリストを取得する方法の詳細については、Graemeの回答を参照)。次に、最後のクリーンアップとして、/libライブインストールからコピーされたファイルのうち存在しないファイルをすべて削除します。つまり、インストールされているパッケージのファイルと一致しません。

答え4

スピードの面では、再インストールがより速いと思います。システムの平和を選択する必要があるため、時間がかかるだけでなく、後で発生する可能性のある問題をデバッグするのに時間がかかる場合があります。システムを確実に安定した状態にすることができるので、マシンを再構築することをお勧めします。

関連情報