unix - yanlışlıkla her şeyi kök altında / yaşlıya taşıdı - Solaris 10


13

Başlığın söylediği gibi, kök (/) altında kök olarak her şey veya neredeyse önemli olan her şey bir Solaris 10 makinesinde / eskisine taşındı. Yani şimdi tipik fay komutlardır çalıştırırken çalışırken Cannot find /usr/lib/ld.so.1(değişti $PATHve aynı zamanda değişen çalıştı $LD_LIBRARY_PATH, $LD_LIBRARY_PATH_64ve $LD_RUN_PATHonları ihraç ama hiçbir şey gerçek kütüphane yolunu değiştirmek gibi görünüyor). Dün yardımcı olabilecek bir şey bulmaya çalıştı, ancak Solaris 10 için kütüphane yolunu değiştirecek crleama belki o zamandan beri çalıştıracak hiçbir şey bulamadı Cannot find /usr/lib/ld.so.1.

Linux için çok sayıda kök veya / usr / bin kurtarma ipucu bulundu, ancak Solaris 10 / Unix ile ilgili bilgiler çok yaygın ve seyrek değil.

Çalıştırılamıyor cp, ln, mkdirveya mvberi Cannot find /usr/lib/ld.so.1. Makinede başka oturumlarla da oturum açılamıyor. Bir oturum hala kullanılabilir olmasına rağmen ve o pencere ile durduruluyor while true; do date; echo hej 1234567; done. Bir USB sürücüsünde Solaris önyükleme CD'si ve ayrıca bir Linux dağıtımını kullanma çözümünü ele aldık. Sabit sürücü disklerini başka bir rafa geçirme çözümünü ele aldık.

/.../static/.../mvÇözelti test edilmiş ama işe yaramadı.

Hala kullanılabilen komutları (kullanılabilir fazla komutları olabilir): echo, <, >, >>, |, pwd, cd.

Olmadan bir dizin veya klasör oluşturmanın bir yolu var mı mkdir? Kullanmak için herhangi bir yolu var mı echove >ya echove >>geri /usr/lib/ld.so.1? /usr/lib/ld.so.1Komutların çalışması için muhtemelen daha fazlasının geri yüklenmesi gerektiğini biliyorum .

Okuduğunuz için çok teşekkür ederim ve iyi günler =)


2
/ Eski öğeyi taşımak için hangi komut kullanıldı?
schaiba

Solaris standardı mv. Ya da daha doğrusu: shopt -s extglob; mv !(old) /old.
yatkınlık

1
Şu anda hangi kabuk çalışıyor? bazı mermilerin
yerleşik

Eğer lnçalışırsa, düzeltebilirsiniz .
David Schwartz

2
"/.../Static/.../mv çözümü test edildi, ancak işe yaramadı." Ne oldu? Bir yükleyici hatası verdi mi? Tam olarak ne işe yaramadı? staticGeçici medyayı önyüklemek istemiyorsanız, bu ikili dosyalar tam olarak bu sorun kategorisi için vardır.
Ti Strga

Yanıtlar:


19

Artık kök olarak çalışan bir kabuğunuz yoksa, kurtarma ortamına yeniden başlatmanız gerekir. Kök dosya sisteminin okuma-yazma özelliğini bağlayabildiği sürece her şey yapılır.

Hala komutları root olarak çalıştırabiliyorsanız, her şey copacetic'dir. Ortam değişkenini LD_LIBRARY_PATH, temel sistem araçları tarafından kullanılan kitaplıkları içeren dizinleri gösterecek şekilde ayarlayın . Bu en azından /usr/lib32 bit Solaris, /usr/lib/6464 bit Solaris, muhtemelen diğer dizinlerde (kontrol etmek için şimdi Solaris 10'a erişimim yok). Yürütülebilir dosyayı çalıştırmak için, çalışma zamanı bağlayıcısına önek ekleyin : /usr/lib/ld.so.1(32 bit yürütülebilir dosya için) veya /usr/lib/64/ld.so.1(64 bit yürütülebilir dosya için) - şimdi taşındı /old. Böylece aşağıdaki gibi bir şeyle iyileşebilmelisiniz:

LD_LIBRARY_PATH=/old/usr/lib
export LD_LIBRARY_PATH
/old/usr/lib/ld.so.1 /old/usr/bin/mv /old/* /

Yükleyicinin akıllı kullanımı. Tüm hiyerarşi taşınmamışsa /old, Peschke'nin kendi yorumuna yaptığım yorum burada da geçerlidir. mvkullanılan ancak böyle varolan hiyerarşiyi korumak komut olmamalıdır pax, tarve sever.
jlliagre

1
Sabrınız ve bunu yazmak için zaman ayırdığınız için çok teşekkür ederiz. Şimdi benzer komutları çalıştırarak çalışır /old/usr/lib/ld.so.1 /old/usr/bin/mvve /old/usr/lib/ld.so.1 /old/usr/bin/cpvb. Ne yapabileceğimi göreceğim, şimdi sorun alanımın olmaması ama bunu düzeltebilirim.
yatkınlık

@propatience Çok kötü sen ve Gilles yorumlarıma
bakmadım

1
YAŞ TANRIM! İlk önce her şeyi geri taşımayı başardım /old/usr/lib/ld.so.1 /old/usr/bin/mvve /old/usr/lib/ld.so.1 /old/usr/bin/cphiçbir yer kullanamadı /old/usr/lib/ld.so.1 /old/usr/bin/cp. Ve sonra düzenleme $PATHve sonra klasör kullanarak klasör mvdeğiştirildi $PATH. Şimdi hepsi geri taşındı, böylece tekrar giriş yapabilir ve df -h ve her şeyi yazabilirim. Herkese çok teşekkür ederim. Gerçekten, teşekkürler @Gilles! Teşekkür ederim StackExchange!
yatkınlık

1
LD_LIBRARY_PATHHem 32 hem de 64 bit yürütülebilir dosyaları çalıştırabilmeniz için Solaris'te ayarlamanın bazı tehlikeleri vardır. LD_LIBRARY_PATHSolaris'te bulunan 32 ve 64 bit spesifik sürümlerini kullanmak daha iyi olur . Bu durumda: LD_LIBRARY_PATH_32=/old/usr/libve LD_LIBRARY_PATH_64=/old/usr/lib/64. Man sayfasına bakınld.so.1 : "Her ortam değişkeni bir _32 veya _64 sonekiyle belirtilebilir. Bu, ortam değişkenini sırasıyla 32 bit veya 64 bit işlemlere özgü hale getirir."
Andrew Henle

16

Sadece kabuk yerleşik komutları ile bir dizin oluşturmanın veya ikili dosyaları kopyalamanın bir yolu yoktur (Gilles yanıtında akıllı bir potansiyel geçici çözümü açıklasa da ).

En iyi seçenek Solaris'i harici bir ortama (dvd, usb stick) önyüklemek, dosya sistemlerini yüklemek veya içe aktarmak ve karışıklığı aşağıdaki gibi bir şeyle düzeltmektir:

  • Bir Solaris kurulum diskini önyükleyin ve bir kabuk çalıştırmayı seçin.

  • Eski kökü (ve varsa diğer tüm dosya sistemlerini) /mntveya gibi bir dizinin altına bağlayın /a. Solaris önyükleme diski, varolan dosya sistemlerini algıladığında bunu yapmanıza yardımcı olabilir.

  • bu komutla dosyaları orijinal konumlarına geri koyun (hepsinin altına monte edildiği varsayılarak /mnt):

    cd /mnt/old
    find . -depth | cpio -pdlmPV@ /mnt
    
  • Sisteminizi yeniden başlatın

    init 6
    

ZFS kullanıyorsanız ve yeni bir anlık görüntü varsa, /olddizini başka bir yerde yedeklemek ve son anlık görüntüye geri dönmek de bir seçenek olabilir.


Mükemmel cevap. Kurtarma USB'sine önyükleme yapın, dosya sistemini bağlayın ve ardından benzer bir şey yapınmv /mountpoint/old/* /mountpoint
Peschke

1
@Peschke Teşekkürler, ancak körü körüne önerilen mvkomutu çalıştırmanıza rağmen benim tavsiyem olmaz. OP "her şeyi veya neredeyse her şeyi " yazdı . İkinci durumda, taşıma hala mevcut dizinleri kıracaktır. Ben büyük olasılıkla benzeri bir uygulama kullanıyor tar, paxveya cpiohedef dizin hiyerarşisi korumak için.
jlliagre

Hızlı yanıt verdiğiniz için çok teşekkür ederiz. Yanıtlarınız için çok teşekkür ederiz. Bunu yarın deneyebilirim.
yatkınlık

Olası anlık görüntüye (ZFS veya UFS) bağlı olarak, canlı yükseltme kullanıyorsanız alternatif bir BE'ye önyükleme yapabilirsiniz. lustatus Ve henüz panik yapma. Tüm veriler hala disklerde var.
sleepyweasel

0

Solaris statik temel kamu hizmetleri (yapılarında içerir cp, ln, mv, rcp, ve tariçinde) /usr/sbin/staticEğer kullanılabilirliği ile ilgili herhangi bir sorun onarmak için kullanabileceğiniz /usr/lib/ld.so.1bu engeller düzenli dinamik bağlantılı kullanımı /usr/binsürümleri.

mkdirSağlanan statik yoktur , ancak lnstatikin bulunduğu dizini geçici lib/ld.so.1olarak /usrsymlink'lemek için kullanabilir ve ardından standardı mkdirkullanarak ihtiyacınız olan dizinleri oluşturabilirsiniz. Statik kullanarak önceden var olan dizinleri yeniden adlandırabilirsiniz mv.


Bu en azından Solaris 2.5.1'e kadar gidiyor, burada ld.so.1Gilles'in örneğinde gösterildiği gibi manuel olarak çalıştırmayı denerseniz stok segfaultlarının olduğunu
gördüm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.