UNIX-ルートの下のすべてを誤って/ oldに移動した-Solaris 10


13

見出しにあるように、ルート(/)の下にあるルートとして重要なほぼすべてが、Solaris 10マシンでは/ oldに移動されました。だから今、一般的な障害のコマンドを実行するときにしようとしたときにはされているCannot find /usr/lib/ld.so.1(変更$PATHとも変えてみました$LD_LIBRARY_PATH$LD_LIBRARY_PATH_64そして$LD_RUN_PATH、それらをエクスポートするが、それの何が本当のライブラリパスを変更するようです)。昨日は助けになるかもしれないものを見つけようとしましたが、Solaris 10のライブラリパスを実際に変更するものはないかもしれませんcrleが、それ以降は実行できませんCannot find /usr/lib/ld.so.1

Linux用のルートまたは/ usr / binリカバリのヒントなどを多数見つけましたが、Solaris 10 / Unixに関するその情報は豊富ではなく、非常にまばらです。

実行することはできませんcplnmkdirまたはmv以来Cannot find /usr/lib/ld.so.1。マシンへの他のセッションでログインすることもできません。使用できるセッションがまだ1つあり、そのウィンドウが停止していwhile true; do date; echo hej 1234567; doneます。SolarisブートCDとUSBドライブ上のLinux distを使用するソリューションについて説明しました。ハードディスクを別のラックに切り替えるソリューションについて説明しました。

/.../static/.../mvソリューションは、テストされていますが、それはうまくいきませんでした。

まだ使用可能なコマンドを使用することができる(以上のコマンドがあるかもしれません): 、echo<>>>|、。pwdcd

なしでディレクトリまたはフォルダを作成する方法はありますmkdirか?使用するためにどのような方法がありecho、および>またはechoおよび>>復元するためには/usr/lib/ld.so.1/usr/lib/ld.so.1コマンドが機能するためには、おそらくそれ以上を復元する必要があることを知っています。

読んでくれてありがとう、とても良い一日を過ごす=)


2
/ oldの下にデータを移動するためにどのコマンドが使用されましたか?
schaiba

Solaris標準mv。より正確に:shopt -s extglob; mv !(old) /old
忍耐

1
現在実行中のシェルは何ですか?一部のシェルはinbuildコマンド持っている
Ferrybig

それが機能しているln場合は、で修正できます。
デビッドシュワルツ

2
「/.../static/.../mvソリューションはテスト済みですが、動作しませんでした。」どうした?ローダーエラーが発生しましたか?正確に「機能しなかった」ものは何ですか?static一時的なメディアを起動したくない場合は、このカテゴリの問題に対応するバイナリがあります。
チタンStrga

回答:


19

シェルをルートとして実行していない場合は、レスキューメディアを再起動する必要があります。ルートファイルシステムを読み書き可能にマウントできる限り、何でもできます。

それでもrootとしてコマンドを実行できる場合は、すべて問題ありません。LD_LIBRARY_PATH基本システムツールで使用されるライブラリを含むディレクトリを指すように環境変数を設定します。これは少なくとも/usr/lib32ビットSolaris、/usr/lib/6464ビットSolaris、その他のディレクトリ(おそらく、チェックするためにSolaris 10にアクセスできません)です。実行可能ファイルを実行するには、実行時リンカーを接頭辞/usr/lib/ld.so.1として:(32ビット実行可能ファイルの場合)または/usr/lib/64/ld.so.1(64ビット実行可能ファイルの場合)—に移動し/oldます。したがって、次のようなもので回復できるはずです。

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

ローダーのスマートな使用。階層全体がに移動されなかった場合、/oldPeschke自身のコメントに対する私のコメントはここでも有効です。mv使用すべきではありませんがpaxtarなどの既存の階層を保持するコマンドです。
jlliagre

1
忍耐とこれを書くのに時間を割いていただきありがとうございます。などのコマンドを実行するように/old/usr/lib/ld.so.1 /old/usr/bin/mvなり/old/usr/lib/ld.so.1 /old/usr/bin/cpました。私は何ができるか見ていきますが、今の問題はスペースが不足していることですが、それを修正できるかもしれません。
忍耐

あなたとジルは、私のコメントは考えられなかった@propatienceすぎるの悪い...
jlliagre

1
イェー!私が最初に戻ってすべてのものを移動するために管理/old/usr/lib/ld.so.1 /old/usr/bin/mvし、/old/usr/lib/ld.so.1 /old/usr/bin/cpしかし、スペースなしので使用できませんでした/old/usr/lib/ld.so.1 /old/usr/bin/cp。そして、変更された$PATHを使用mvして編集し、フォルダごとに編集します$PATH。これですべてが戻ったので、再度ログインしてdf -hとすべてを入力できます。皆さん本当にありがとうございます。@Gillesに本当に感謝します!StackExchangeに感謝します!
忍耐

1
LD_LIBRARY_PATHSolarisでの設定には、32ビットと64ビットの両方の実行可能ファイルを実行できるように設定する必要がある場合、いくつかの危険があります。LD_LIBRARY_PATHSolarisで利用可能な32ビットおよび64ビットの特定バージョンを使用することをお勧めします。この場合: LD_LIBRARY_PATH_32=/old/usr/libおよびLD_LIBRARY_PATH_64=/old/usr/lib/64参照してくださいld.so.1manページを:「各環境変数は、_32または_64接尾辞で指定することができます。これは、32ビットまたは64ビットプロセスに、それぞれ、環境変数の特定を行います。。」
アンドリューヘンレ

16

シェルの組み込みコマンドだけでディレクトリを作成したり、バイナリファイルをコピーしたりする方法はありません(ただし、Gillesは返信でスマートな潜在的な回避策を説明しています)。

最善のオプションは、外部メディア(DVD、USBスティック)でSolarisを起動し、ファイルシステムをマウントまたはインポートし、次のような混乱を修正することです。

  • Solarisインストールディスクを起動し、シェルの実行を選択します。

  • /mntまたはなどのディレクトリの下に古いルート(および他のすべてのファイルシステム)をマウントします/a。Solarisブートディスクは、既存のファイルシステムを検出するときに役立つ場合があります。

  • 次のコマンドを使用して、ファイルを元の場所に戻します(すべてがの下にマウントされていると仮定/mnt)。

    cd /mnt/old
    find . -depth | cpio -pdlmPV@ /mnt
    
  • システムを再起動します

    init 6
    

ZFSを使用していて、最新のスナップショットが存在する場合、/oldディレクトリを別の場所にバックアップしてから最後のスナップショットに戻すこともオプションの可能性があります。


素晴らしい答え。レスキューUSBへのブートは、ファイルシステムをマウントし、次にような何かmv /mountpoint/old/* /mountpoint
Peschke

1
@Peschkeありがとう。提案されたmvコマンドをやみくもに実行しても私のアドバイスにはなりません。OPは「すべてまたはほとんどすべて」と書いた。2番目の場合、移動すると既存のディレクトリが破損します。私はそうのようなユーティリティを使用しtarpaxまたはcpio送信先のディレクトリ階層を維持するために。
jlliagre

迅速に対応していただき、ありがとうございます。ご回答いただきありがとうございます。明日はこれを試すかもしれません。
忍耐

可能なスナップショット(ZFSまたはUFS)に関連付けられているため、ライブアップグレードを使用している場合は、代替BEから起動できます。 lustatus まだパニックにならないでください。すべてのデータはまだディスクに存在しています。
sleepyweasel

0

Solarisの静的基本的なユーティリティのビルド(含まれcplnmvrcp、およびtarに)/usr/sbin/staticあなたがの可用性に問題修復するために使用できる/usr/lib/ld.so.1ことを防ぎ、通常のダイナミックリンクを使用する/usr/binバージョンを。

静的はmkdir提供されていませんが、静的lnを使用しlib/ld.so.1/usr一時的に任意のディレクトリに含まれるディレクトリをシンボリックリンクし、標準mkdirを使用して必要なディレクトリを作成できます。staticを使用して、すでに存在するディレクトリの名前を変更できますmv


これは私が株式ことがわかったのSolaris 2.5.1、にまでさかのぼるとして少なくとも行くld.so.1あなたがジルの例に示すように、手動でそれを実行しようとするとセグメンテーション違反
rakslice
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.