J'ai accidentellement zippé tout mon serveur

10

Très bien si quelqu'un veut jouer à Dieu et faire des miracles, je suis en panne.

Donc, on m'a confié la tâche de créer un script qui a trouvé des fichiers de plus de 6 mois, les a zippés puis les a supprimés. Sur mon chemin en faisant ce script, j'ai couru ceci:

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

Et cela a donné à CHAQUE SINGLE FILE une extension .gz. Maintenant, je l'ai défait dès que j'ai remarqué mais c'était un peu trop tard. Une fois la commande terminée, aucune de mes commandes bash ne fonctionnerait car la variable $ PATH s'est vidée d'elle-même. J'ai essayé beaucoup de choses avant de réaliser quel était le problème.

Donc, après avoir décompressé tout ce que je ne peux toujours pas démarrer. J'ai réussi à faire le sauvetage, après avoir suivi les instructions en ligne pour:

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

Après quoi mon linux démarre partiellement mais me donne les erreurs suivantes:

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.

J'ai essayé de réparer le système de fichiers, j'ai démarré à partir de 3 disques LiveCD / Rescue différents, j'ai exécuté la réparation de démarrage à partir de 2 dicsc différents. J'ai forcé des fscks ...

Je suis vraiment à court d'idées et j'ai besoin d'obtenir ce serveur pour démarrer au moins afin que je puisse récupérer mes bases de données SQL. Je cherche désespérément de l'aide, je paierai même si besoin est.

Je rôde dans les forums depuis 3 jours toute la journée pour trouver une solution possible et je suis toujours au même point ... Aide s'il vous plait?

Dexirian
la source
3
s'il s'agit de bases de données mysql, vous n'avez pas nécessairement besoin de démarrer; dans ce cas, j'essaierais de monter le lecteur en tant qu'esclave et de copier sur le répertoire / var / lib / mysql
user16081-JoeT
8
Nouvelle installation sur les nouveaux périphériques de stockage. Montez l'ancien disque, transférez les données si nécessaire. Je parierais que la réparation ne vaudra pas la peine.
Zoredache
7
C'est le point où vous effectuez une restauration à partir d'une sauvegarde. Et rappelez-vous de ne pas courir en faisant des actions non privilégiées en tant qu'utilisateur root la prochaine fois.
Magellan
1
because of version differences,réinstaller avec la même version exacte. we have corruption issues,vos données peuvent être corrompues. Réparer le système pour qu'il soit amorçable, ne vous aidera pas si les données ont été jetées. Si votre commande gzip a compressé vos fichiers de base de données alors que la base de données était corrompue, cela semble inévitable.
Zoredache
5
Si votre logiciel de base de données était en cours d'exécution pendant que vous exécutiez ces commandes, vous ne pourrez peut-être pas récupérer les bases de données. Gzip aurait heureusement zippé le fichier, puis il l'a dissocié. Mais votre logiciel DB avait toujours le fichier ouvert et il y validait les modifications. Dès qu'il s'est arrêté, le fichier a été supprimé.
toppledwagon

Réponses:

8

Cela dépendra si les systèmes de fichiers sont suffisamment réparés pour que vous puissiez monter ces partitions à partir d'un LiveCD. Ne vous embêtez pas encore à essayer de démarrer le système. Tout d'abord, montez les partitions et décompressez tous les fichiers .gz. Cela vous donnera des copies de travail des binaires init et système. Ensuite, vous pouvez utiliser grub pour réparer le secteur de démarrage. Ensuite, démarrez en mode mono-utilisateur et fsck à nouveau le système de fichiers. Si cela fonctionne, vous aurez un système en cours d'exécution. Vous aurez également un tas de fichiers décompressés (comme les pages de manuel) qui devraient vraiment être zippés, mais c'est mieux que d'avoir un système non amorçable.

Si vous ne pouvez pas monter les partitions à partir d'un LiveCD, vous n'avez malheureusement pas de chance. Rien ne récupérera votre système à ce stade.

Michael Martinez
la source
1
En fait, cela a fonctionné comme un charme ... je ne vous en remercierai jamais assez! MySQL ne démarre pas mais je n'ai pas encore fait de --force fsck, j'espère que ça va le réparer! MERCI
Dexirian
1
Impressionnant. Heureux que cela ait aidé.
Michael Martinez
9

La première chose que j'essaierais est d'exécuter un environnement LiveCD et d'essayer de tout décompresser, en espérant que cela ramènerait le système à un état de démarrage. Remarque: je serais préoccupé par la corruption potentielle des données si le processus gzip d'origine était interrompu.

Sinon, j'essaierais de migrer la base de données vers un nouveau système comme d'autres l'ont suggéré, mais comme vous l'avez rencontré, il peut y avoir des problèmes de dépendance et de configuration à forte intensité de main-d'œuvre qui devront être résolus individuellement.

Bob Barker
la source
Question rapide: nous ne sommes pas sûrs de l'ancien serveur de base de données SQL et le nouveau serveur utilise une distribution Linux différente. Le nouveau serveur exécute CentOS avec WHM, et l'ancien serveur était soit Debian / Unbuntu. Donc ma question est, comment puis-je migrer efficacement mes bases de données SQL sans corruption et ainsi de suite?
Dexirian
6

Le consensus général ici, que vous devez simplement monter le disque dans un système qui fonctionne et sauver vos fichiers, n'est pas faux. C'est la chose sensée à faire. Mais l'autre manière est plus amusante et très éducative. J'ai beaucoup appris en me battant pour sortir de situations désordonnées où d'autres personnes auraient simplement abandonné et réinstallé à partir de zéro. (Pas sur un serveur dont dépendent d'autres personnes cependant ...)

Quoi qu'il en soit, jusqu'à présent, vous avez un initramfs (initrd) qui s'exécute. Voilà un bon début. Mais il ne peut pas terminer le transfert à init car init est init.gzpeut-être maintenant ? Pour faire des progrès, il serait utile de savoir exactement quelle distribution Linux vous avez, afin que nous puissions rechercher quels outils sont disponibles dans ses initramfs pour une utilisation d'urgence.

Les messages d'erreur que vous avez présentés semblent provenir des initramfs de Debian. S'il s'agit de Debian, vous devriez avoir obtenu une (initramfs)invite shell sur la ligne suivante après la dernière erreur. Si vous l'avez fait, vous devriez vérifier ce qui se passe avec ces montures qui ont échoué. est /root/devmanquant? ( /rootest l'endroit où votre fs racine normal doit être monté pendant l'exécution des initramfs)

Si vous n'avez pas reçu l'invite du shell, ce qui est venu après No init found. Try passing init= bootarg.sera intéressant. Même si ce n'était qu'un curseur clignotant, c'est un indice. Si cela semble totalement figé, essayez d'obtenir des informations sur les processus qui existent toujours à l'aide de Magic Sysrq ou Ctrl + ScrollLock.

Les initramfs Debian vous permettent également de demander un shell à quelques points de repère spéciaux en ajoutant un break=paramètre à la ligne de commande du noyau. Par exemple, pour obtenir un shell avant la Running /scripts/init-bottomligne, utilisez break=bottom.

En plus: Je ne sais pas comment la findcommande aurait pu compresser chaque fichier ... elle me semble correcte dans le but de sélectionner des fichiers entre 180 et 400 jours.


la source
Quand je fais un ls sous / root, rien n'est trouvé. Je peux donc prendre le montage fs n'est pas correct au démarrage? Où puis-je le changer?
Dexirian
1
@Dexirian, vous avez donc reçu une invite de shell (avez-vous dû utiliser break=bottom?) ... oui, au moment où il essaie de monter /root/devet /root/procet /root/sys, /rootdevrait être le véritable système de fichiers racine. Il doit y avoir eu un message d'erreur plus tôt, à propos de l'échec du montage. Avez-vous inclus un root=paramètre dans la ligne de commande du noyau? Ma mémoire est un peu floue sur ce point mais je pense que le root (hd0,0)juste indique à grub où trouver ses fichiers de support, et vous devez toujours dire au noyau séparément où se trouve la racine.
Oui, j'ai utilisé root =, kernel = initrd = et setup =, je n'ai pas eu à utiliser break = bottom. Et je n'ai pas repéré un message de montage échoué plus tôt, car il défile très rapidement
Dexirian
@Dexirian Le défilement de la console est-il disponible? Maj + PgUp. Et pouvez-vous le monter à partir de l' (initramfs) invite, quelque chose comme mount -r /dev/sda1 /root? cat /proc/partitionspour voir quels disques sont disponibles.
1
Bienvenue dans le monde de l'administration système.
Michael Martinez