Mümkün mü?
Eh, en önemsiz ve önemli yardımcı programlar yüklenmiştir /bin
ve şimdi hepsine erişiminizi kaybettiniz. Aslında, yeniden başlatırsanız, sisteminiz artık ön yükleme yapamaz.
Neyse, sorunu çözeceğiz ve /bin
içeriğini mümkün olduğu kadar yakın hale getireceğiz . Tek fark, biz de düzelteceğimiz bazı sembolik bağlar olacaktır.
Nasıl?
İlk olarak, chroot
kırık sisteminize girmeliyiz , ancak küçük bir farkla ! Ondan sonra sisteminizde /bin
dizinde kurulu bir dosya bulunan kurulu paketlerin bir listesini alacağız , o zaman sadece gerekli paketleri indirip gerekli dosyaları çıkaracağız /bin
. O zaman bittik.
Örneğin, sonra chroot
, dosyaları /bin
kullanarak yükleyen paketlerin bir listesini alabiliriz :
dpkg --search /bin | cut -f1 -d: | tr ',' '\n'
Ayrıca şunları da kullanabiliriz:
dpkg --listfiles PACKAGE-NAME | grep "^/bin/" # or awk '$0 ~ "^/bin/
Bu paketler tarafından yüklenen dosyaları listelemek için /bin
.
O zaman bizim için gerekli olan tüm paketlerin bir listesini oluşturduk, sonra indirip bunları aşağıdaki /bin
gibi bir şeyle çıkardık:
xargs apt download < list-packages
dpkg-deb -x PACKAGE .
mv ./bin/* /bin
Bununla birlikte, sistemimizdeki kurulu tüm paketleri kontrol etmek için bir script kullanmalıyız, çünkü manuel olarak yapmak sadece delilik.
Böylece ihtiyacımız olan her şeyi yapan bir senaryo yazdım. Geri yüklemek için gerekli tüm paketleri bulur /bin
, bize her bir paketin adını ve bunlara ait olan ilgili dosyaları gösterir /bin
. İşte bir ekran görüntüsü:
Sonunda tüm paketleri yeniden kurmayı veya sadece gerekli dosyaları indirip çıkarmayı seçiyoruz /bin
(önerilen seçenek):
Bu betiğin bir kopyasını alabilir veya doğrudan indirebilirsiniz .
Hadi başlayalım
chroot
Sisteminizi, kurulu Ubuntu'nuzla aynı mimariye sahip canlı bir diskle önyükleyin, bir terminal açın ve root erişimine erişin:
sudo -i
Senin monte root
(benim için bu kadar dosya sistemi /dev/sda1
):
mount /dev/sda1 /mnt
İnternet bağlantısına ihtiyacımız olacak, bu yüzden resolv.conf
canlı Ubuntu'dan bağlı kök bölümünüze kopyalayın:
cp /etc/resolv.conf /mnt/etc/resolv.conf
Şimdi betiği monte edilmiş bölümdeki bir yere kopyalayın, örneğin:
cp /media/ubuntu/usb/restore-bin.sh /mnt/restore-bin.sh
veya bunları kullanarak indirebilirsiniz wget
.
wget https://git.io/v9fRm -O /mnt/restore-bin.sh
Diğer gerekli yolları takın:
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
Ve burada küçük fark var : chroot
orada bir /bin
dizin yokken bozuk bir sisteme nasıl gidebiliriz ? Hangi kabuğu çalıştırmalıyız?
Bu yüzden geçici bir bin dizini oluşturun. örneğin: bintmp
bozuk sistem kök dizininizde:
mkdir /mnt/bintmp
Öyleyse canlıyı şuna bağla /bin
:
mount --bind /bin /mnt/bintmp
/bintmp/bash
Giriş kabuğunuzu ayarlarken sisteme chroot yapın:
chroot /mnt /bintmp/bash
Ortam değişkeniniz /bintmp
olarak dışa aktarın PATH
:
export PATH=/bintmp:$PATH
Komut dosyasına çalıştırılabilir bit verin:
chmod +x restore-bin.sh
Komut dosyasını çalıştırın:
./restore-bin.sh
Aramanın tamamlanmasını bekleyin, ardından ekran görüntüsünde gördüğümüz soruyu yanıtlayın. Geri yüklemeye başlayacak /bin
ve neredeyse bitti.
İşlem bittikten sonra , ortamdan çıkmak ve takılı yolların bağlantısını kesmek için CTRL+ Dkullanın chroot
:
umount -R /mnt
Sistemi yeniden başlatın.
İçindeki bağlantıları geri yükleme /bin
Artık, /bin
dizin tarafından yönetilen 5 sembolik bağ dışında, neredeyse tüm dosyalar dizin içinde update-alternatives
.
Çalışan sisteminizde şunları çalıştırın:
sudo update-alternatives --all
Size bazı sorular sorar; ENTERhepsini kabul etmek için basabilirsiniz .
Ve şimdi bitti.
/bin
Ubuntu sadece sembolik bağ üzerinde/usr/bin
bugünlerde? Yani tek yapman gereken bağlantıyı geri koymak mı?