出来ますか?
さて、ほとんどの些細で重要なユーティリティはにインストールされて/bin
おり、今ではそれらすべてにアクセスできなくなりました。実際、再起動すると、システムは起動できなくなります。
とにかく、私たちは問題を修正し、/bin
の内容を可能な限り近くするつもりです。唯一の違いは、修正するシンボリックリンクです。
どうやって?
まず、chroot
壊れたシステムを調べますが、わずかな違いがあります!その後、/bin
ディレクトリにインストールされたファイルがあるシステムのインストール済みパッケージのリストを取得し、必要なパッケージのみをダウンロードして、必要なファイルをに抽出します/bin
。これで完了です。
たとえば、の後にchroot
、次を/bin
使用してファイルをインストールしたパッケージのリストを取得できます。
dpkg --search /bin | cut -f1 -d: | tr ',' '\n'
また、次のものも使用できます。
dpkg --listfiles PACKAGE-NAME | grep "^/bin/" # or awk '$0 ~ "^/bin/
これらのパッケージによってインストールされたファイルを一覧表示するには/bin
。
次に、必要なすべてのパッケージのリストを作成し、それらをダウンロードして/bin
、次のようなもので展開します。
xargs apt download < list-packages
dpkg-deb -x PACKAGE .
mv ./bin/* /bin
ただし、スクリプトを使用して、システムにインストールされているすべてのパッケージを確認する必要があります。手動で行うのは単なる狂気です。
そこで、必要なすべてを実行するスクリプトを作成しました。それは私たちが復元するために必要なすべてのパッケージを見つけ/bin
て、各パッケージの名前とに属するそれらの関連ファイルを示します/bin
。これがスクリーンショットです:
最後に、すべてのパッケージを再インストールするか、必要なファイルのみをダウンロードして抽出することを選択します/bin
(推奨オプション)。
このスクリプトのコピーを取得するか、直接ダウンロードできます。
始めましょう
chroot
インストールしたUbuntuと同じアーキテクチャのライブディスクでシステムを起動し、ターミナルを開いてルートアクセスを取得します。
sudo -i
root
ファイルシステムをマウントします(私にとっては/dev/sda1
)。
mount /dev/sda1 /mnt
インターネットへの接続が必要になるためresolv.conf
、ライブUbuntuからマウントされたルートパーティションにコピーします。
cp /etc/resolv.conf /mnt/etc/resolv.conf
次に、スクリプトをマウントされたパーティションのどこかにコピーします。例:
cp /media/ubuntu/usb/restore-bin.sh /mnt/restore-bin.sh
またはwget
、などを使用してダウンロードできます。
wget https://git.io/v9fRm -O /mnt/restore-bin.sh
他の必要なパスをマウントします。
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
そしてここに小さな違いがあります:chroot
そこに/bin
ディレクトリがないときに壊れたシステムにどうやって行くことができますか?どのシェルを実行する必要がありますか?
そのため、一時的なbinディレクトリを作成します。例:bintmp
壊れたシステムルート内で名前が付けられます:
mkdir /mnt/bintmp
次に、ライブ/bin
をそれにバインドします。
mount --bind /bin /mnt/bintmp
を/bintmp/bash
ログインシェルとして設定しながら、システムにchrootします。
chroot /mnt /bintmp/bash
を環境変数/bintmp
としてエクスポートしPATH
ます。
export PATH=/bintmp:$PATH
スクリプトに実行可能ビットを与えます。
chmod +x restore-bin.sh
スクリプトを実行します。
./restore-bin.sh
検索が完了するのを待ってから、スクリーンショットで見た質問に答えてください。復元が開始され、/bin
ほぼ完了です。
完了したら、CTRL+ Dを使用してchroot
環境から抜け出し、マウントされたパスをアンマウントします。
umount -R /mnt
システムを再起動します。
内のリンクを復元する /bin
これで、/bin
ディレクトリ内のほぼすべてのファイルが元に戻ります。ただし、で管理される約5つのシンボリックリンクは例外update-alternatives
です。
実行中のシステムで、次を実行します。
sudo update-alternatives --all
いくつか質問があります。を押しENTERて、それらすべてを受け入れることができます。
これで完了です。
/bin
Ubuntu は/usr/bin
最近の単なるシンボリックリンクではありませんか?シンボリックリンクを戻すだけでいいのですか?