Apa itu mungkin?
Nah, sebagian besar utilitas yang sepele dan penting diinstal /bin
, dan sekarang Anda kehilangan akses ke semuanya. Faktanya, jika Anda reboot, sistem Anda tidak akan bisa boot-up lagi.
Bagaimanapun, kami akan memperbaiki masalah ini dan membuat /bin
isinya sedekat mungkin dengan tempatnya. Satu-satunya perbedaan adalah beberapa tautan simbolis yang akan kami perbaiki juga.
Bagaimana?
Pertama, kita harus chroot
masuk ke sistem rusak Anda, tetapi dengan perbedaan kecil ! Setelah itu kami akan mendapatkan daftar paket yang diinstal pada sistem Anda yang memiliki file yang diinstal dalam /bin
direktori, maka kami hanya akan mengunduh paket yang diperlukan dan mengekstrak file yang diperlukan ke dalam /bin
. Lalu kita akan selesai.
Sebagai contoh, setelah itu chroot
, kita bisa mendapatkan daftar paket yang telah menginstal file /bin
menggunakan:
dpkg --search /bin | cut -f1 -d: | tr ',' '\n'
Dan kita juga bisa menggunakan:
dpkg --listfiles PACKAGE-NAME | grep "^/bin/" # or awk '$0 ~ "^/bin/
untuk mendaftarkan file yang diinstal oleh paket ini di /bin
.
Kemudian kita cukup membuat daftar semua paket yang diperlukan untuk kita, lalu mengunduhnya dan mengekstraknya /bin
dengan sesuatu seperti:
xargs apt download < list-packages
dpkg-deb -x PACKAGE .
mv ./bin/* /bin
Namun kita harus menggunakan skrip untuk memeriksa semua paket yang terinstal di sistem kita, karena melakukannya secara manual hanyalah kegilaan.
Jadi saya menulis naskah yang melakukan semua yang kita butuhkan. Ia menemukan semua paket yang diperlukan untuk kami pulihkan /bin
, menunjukkan kepada kami nama setiap paket dan file terkait miliknya /bin
. Ini screenshotnya:
Pada akhirnya kami memilih untuk menginstal ulang semua paket atau hanya mengunduh dan mengekstrak file yang diperlukan /bin
(yang merupakan opsi yang disarankan):
Anda dapat mengambil salinan skrip ini atau mengunduhnya secara langsung .
Ayo mulai
chroot
Boot sistem Anda dengan live disk yang arsitekturnya sama dengan Ubuntu yang Anda instal, buka terminal dan dapatkan akses root:
sudo -i
Pasang root
sistem file Anda (bagi saya itu /dev/sda1
):
mount /dev/sda1 /mnt
Kami akan membutuhkan konektivitas ke Internet, jadi salin resolv.conf
dari Ubuntu langsung ke partisi root yang Anda pasang:
cp /etc/resolv.conf /mnt/etc/resolv.conf
Sekarang salin skrip ke suatu tempat di partisi yang terpasang, misalnya:
cp /media/ubuntu/usb/restore-bin.sh /mnt/restore-bin.sh
atau Anda dapat mengunduhnya menggunakan wget
, dll. seperti:
wget https://git.io/v9fRm -O /mnt/restore-bin.sh
Pasang jalur lain yang diperlukan:
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
Dan inilah perbedaan kecilnya : bagaimana kita chroot
menuju sistem yang rusak ketika tidak ada /bin
direktori di sana? Cangkang mana yang harus kita jalankan?
Jadi buat direktori bin sementara. misalnya: dinamai bintmp
dalam root sistem Anda yang rusak:
mkdir /mnt/bintmp
Kemudian ikat langsung /bin
ke dalamnya:
mount --bind /bin /mnt/bintmp
Chroot masuk ke sistem sambil mengatur /bintmp/bash
shell login Anda:
chroot /mnt /bintmp/bash
Ekspor /bintmp
sebagai PATH
variabel lingkungan Anda :
export PATH=/bintmp:$PATH
Berikan script bit yang dapat dieksekusi:
chmod +x restore-bin.sh
Jalankan skrip:
./restore-bin.sh
Tunggu pencarian selesai kemudian jawab pertanyaan yang kami lihat di tangkapan layar. Ini akan mulai mengembalikan /bin
dan kita hampir selesai.
Setelah selesai, gunakan CTRL+ Duntuk keluar dari chroot
lingkungan dan lepaskan jalur yang dipasang:
umount -R /mnt
Mulai ulang sistem.
Memulihkan tautan di dalamnya /bin
Sekarang hampir semua file dalam /bin
direktori sudah kembali, kecuali sekitar 5 tautan simbolik yang dikelola oleh update-alternatives
.
Di sistem Anda yang sedang berjalan, jalankan:
sudo update-alternatives --all
Ini menanyakan beberapa pertanyaan; Anda cukup menekan ENTERuntuk menerima semuanya.
Dan sekarang kita selesai.
/bin
di Ubuntu hanya symlink untuk/usr/bin
hari ini? Jadi yang perlu Anda lakukan adalah mengembalikan symlink?