サーバー全体を誤って圧縮しました


10

誰かが神を演じて奇跡を起こしたいのなら、私はダウンしています。

そのため、6か月以上経過したファイルを見つけ、それらを圧縮してから削除するスクリプトを作成するタスクが与えられました。スクリプトを作成する途中で、私はこれを実行しました:

find / -type f -mtime -400 ! -mtime -180 | xargs gzip blablabla

そして、それはすべての単一ファイルに.gz拡張子を与えました。気づいたらすぐに元に戻しましたが、ちょっと遅すぎました。コマンドが完了すると、$ PATH変数が空になったため、bashコマンドはどれも機能しません。何が問題なのか気づく前に、いろいろと試しました。

だから私はまだ起動できないすべてのものを解凍します。私はそれをなんとかして救出することができました、その後、私は次のオンライン指示に従いました:

root (hd0,0)
setup (hd0)
kernel (hd0,0)/boot/vml[...]
initrd (hd0,0)/boot/initrd.im[...]

Linuxが部分的に起動した後、次のエラーが表示されます。

Begin : Running /scripts/init-bottom ... mount : mounting /dev on /root/dev failed : No such file or directory
mount: mounting /sys/ on /root/sys failed: No such file or directory
mount: mounting /proc on /root/proc failed : No such file or directory
Target filesystem doesn't have requrested /sbin/init.
No init found. Try passing init= bootarg.

私はファイルシステムを修復しようとしました、私は3つの異なるLiveCD /レスキューディスクから起動しました、私は2つの異なるdicscから起動修復を実行しました。私はfscksを強制しました...

私は本当にアイデアが足りないので、このデータベースを少なくとも起動して、SQLデータベースを回復できるようにする必要があります。私は助けを必死にしています、必要なら私も支払います。

可能な解決策を見つけるために、フォーラムに3日間ずっとフォーラムを潜んでいますが、私はまだ同じ時点です...助けてください?


3
mysql dbの場合、必ずしも起動する必要はありません。その場合、ドライブをスレーブとしてマウントし、/ var / lib / mysqlディレクトリにコピーしようとします
user16081-JoeT

8
新しいストレージデバイスにクリーンインストールします。古いドライブをマウントし、必要に応じてデータを転送します。修理は努力する価値はないでしょう。
Zoredache 2013年

7
これは、バックアップから復元するポイントです。また、次回はrootユーザーとして非特権アクションを実行しないでください。
マゼラン

1
because of version differences,まったく同じバージョンで再インストールします。 we have corruption issues,データが破損している可能性があります。起動可能なようにシステムを修復しても、データが破棄されている場合は役に立ちません。データベースの使用中にgzipコマンドでデータベースファイルを圧縮した場合、破損が避けられないようです。
Zoredache 2013年

5
これらのコマンドの実行中にDBソフトウェアが実行されていた場合、DBを回復できない可能性があります。Gzipは喜んでファイルを圧縮し、リンクを解除します。しかし、DBソフトウェアはファイルを開いたままで、変更をコミットしていました。停止するとすぐに、ファイルは削除されました。
toppledwagon

回答:


8

これは、LiveCDからそれらのパーティションをマウントできるようにファイルシステムが十分に修復されているかどうかによって異なります。まだシステムを起動しようとしないでください。まず、パーティションをマウントし、すべての.gzファイルを解凍します。これにより、initおよびsystemバイナリの作業用コピーが提供されます。次に、grubを使用してブートセクターを修復できます。次に、シングルユーザーモードで起動し、ファイルシステムをもう一度fsckします。それがうまくいけば、実行中のシステムがあります。また、実際に圧縮する必要のある圧縮されていないファイル(manページなど)もたくさんありますが、起動できないシステムよりも優れています。

LiveCDからパーティションをマウントできない場合は、残念ながらうまくいきません。その時点でシステムを回復するものはありません。


1
これは本当に魅力のように機能しました...私はこれに十分に感謝できません!MySQLは起動しませんでしたが、--force fsckをまだ実行していません。うまくいけば、修正されるでしょう!THANKS
Dexirian

1
驚くばかり。それが助けてうれしい。
Michael Martinez

9

私が最初に試すのは、LiveCD環境を実行して、すべてを解凍し、システムが起動可能な状態に戻ることを期待しています。注:元のgzipプロセスが中断された場合、データが破損する可能性があるかどうか心配です。

それ以外の場合は、他の人が示唆しているように、DBを新しいシステムに移行しようとしますが、遭遇したように、個別に解決する必要がある労働集約的な依存関係と構成の問題がある可能性があります。


簡単な質問:古いSQLデータベースサーバーが不明であり、新しいサーバーが別のLinux Distroを使用しています。新しいサーバーはWHMでCentOSを実行しており、古いサーバーはDebian / Unbuntuでした。だから私の質問は、SQLデータベースを破損せずに効果的に移行するにはどうすればよいですか?
デキシリアン2013年

6

ここで、ディスクを稼働中のシステムにマウントしてファイルをレスキューするだけでよいという一般的なコンセンサスは間違いありません。それは賢明なことです。しかし、他の方法はより楽しく、非常に教育的です。他の人があきらめてゼロから再インストールしたばかりの厄介な状況から抜け出すために戦いながら多くのことを学びました。(他の人が依存しているサーバーではありません...)

とにかく、これまでのところ、実行するinitramfs(initrd)があります。それは良いスタートです。しかし、initはinit.gzおそらく今なので、initへのハンドオフを完了できませんか?何らかの進歩を遂げるには、お使いのLinuxディストリビューションを正確に把握しておくと役立つでしょう。そのため、緊急用にinitramfsで利用可能なツールを検索できます。

表示されたエラーメッセージは、Debianのinitramfsから送信された可能性があるようです。Debianの場合(initramfs)、最後のエラーの次の行にシェルプロンプトが表示されているはずです。もしそうなら、それらの失敗したマウントで何が起こっているのかを調べる必要があります。されて/root/dev行方不明?(これ/rootは、initramfsの実行中に通常のルートファイルをマウントする場所です)

シェルプロンプトが表示されない場合は、その後の処理No init found. Try passing init= bootarg.が興味深いでしょう。カーソルが点滅しているだけの場合でも、それは手掛かりです。完全にフリーズしているように見える場合は、magic sysrqまたはCtrl + ScrollLockを使用して、どのプロセスがまだ残っているかに関する情報を取得してください。

Debian initramfsではbreak=、カーネルコマンドラインにパラメータを追加することで、いくつかの特別なランドマークでシェルをリクエストすることもできます。たとえば、Running /scripts/init-bottom行の前にシェルを取得するには、を使用しますbreak=bottom

余談:findコマンドがどのようにしてすべてのファイルをgzip圧縮したのかわかりません... 180日から400日の間のファイルを選択するためには、コマンドは正しいように見えます。


/ rootの下でlsを実行すると、何も見つかりません。だから私はそれがfsマウントがブートで大丈夫ではないことを理解できますか?どこで変更できますか?
デキシリアン2013年

1
あなたは(あなたが使用する必要がなかったシェルプロンプト手に入れたので@Dexirian break=bottom?)...はい、時間によってそれをマウントしようとしている/root/dev/root/proc/root/sys、は、/root実際のルートファイルシステムでなければなりません。マウントに失敗したことについて、以前にエラーメッセージが表示されているはずです。root=カーネルコマンドラインにパラメーターを含めましたか?私の記憶はこの点で少しあいまいroot (hd0,0)ですが、サポートファイルの場所をgrubに伝えるだけで、ルートがどこにあるかをカーネルに個別に伝える必要があると思います。

はい、私はroot =、kernel = initrd =、setup =を使用しましたが、break = bottomを使用する必要はありませんでした。そして、私はそれが本当に速くスクロールするので、以前の失敗したマウントメッセージを発見しませんでした
Dexirian

@Dexirianコンソールのスクロールバックは利用できますか?Shift + PgUp。そして、あなたは彼の(initramfs) プロンプトからそれをマウントできますmount -r /dev/sda1 /rootか?cat /proc/partitions使用可能なディスクを確認します。

1
システム管理の世界へようこそ。
Michael Martinez
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.