Rétablir le répertoire racine mobile récursivement

14

J'ai un bureau Ubuntu utilisé comme serveur. Ce matin, j'ai accidentellement déplacé toute ma racine vers../

 root@server:/tmp/UPS/up/upsilon# mv /* ../
 mv: impossibile spostare "/dev" in "../dev": Dispositivo o risorsa occupata
 mv: impossibile spostare "/proc" in "../proc": Dispositivo o risorsa occupata
 mv: impossibile spostare "/run" in "../run": Dispositivo o risorsa occupata
 mv: impossibile spostare "/sys" in "../sys": Dispositivo o risorsa occupata
 mv: impossibile spostare "/tmp" in una sottodirectory di sé stessa, "../tmp"
 root@server:/tmp/UPS/up/upsilon# ls
 -bash: /bin/ls: No such file or directory

J'étais connecté à distance en ssh. Maintenant, je ne peux plus y accéder. Je ne peux pas également afficher Webmin.

Donc, maintenant je ne peux pas redémarrer le système correctement? Et je dois physiquement accéder à la console système et taper cette commande:

../bin/mv ../{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*}

droite?

Où est passé mon répertoire racine et comment le récupérer? La commande ci-dessus fonctionnera-t-elle?

MaxDL
la source
10
Hou la la! C'est une erreur impressionnante! :(
Sparhawk
3
Dois-je bien comprendre que le répertoire de travail à l'époque était /? Si oui, quand j'essaye mv tempdir/ ../, je reçois mv: ‘tempdir/’ and ‘../tempdir’ are the same file, sans rien bouger.
Sparhawk
La prochaine fois, ne vous connectez pas en tant que root. Et si vous comptez mvajouter le -icommutateur.
Braiam
1
Je ne suis pas d'accord. Parfois, vous voulez vous connecter en tant que root plutôt que d'apprendre à mettre inconsidérément «sudo» devant chaque commande. Cependant, soyez prudent lorsque vous êtes connecté en tant que root. Surtout avec les commandes de suppression et de déplacement. --- Pourtant, des erreurs se produisent et nous en tirons des leçons. @MaxDL: Pouvez-vous restaurer la partition / à partir d'une sauvegarde? Avez-vous des sauvegardes? Pouvez-vous utiliser un Dell DRAC, un HP ILO ou un autre outil d'accès à distance pour accéder à la console des serveurs sans démarrer le système d'exploitation?
Hennes

Réponses:

12

Vous n'avez pas déplacé le répertoire racine (vous ne pouvez pas), vous venez de déplacer presque tout ce qu'il contient vers le répertoire parent du chemin sur lequel vous vous trouviez.

Pour compliquer les choses, vous avez également déménagé mvpour que cela ne fonctionne pas comme prévu. Ce qui suit devrait fonctionner (tant que vous n'avez pas redémarré depuis que vous le demandez!) Si vous êtes toujours dans le même répertoire que vous étiez lorsque vous avez tiré votre dernier mv.

../bin/mv ../{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*} /

Si vous n'en avez aucun, omettez-les simplement de la commande.

Et si vous n'y avez pas accès (vous ne pourrez pas effectuer une nouvelle connexion tant que les choses sont dans cet état), vous devrez monter le système de fichiers en externe (via quelque chose comme LiveCD et monter le système de fichiers, puis déplacer les fichiers au bon endroit. La réponse de Braiam devrait aider avec cette partie.

Oli
la source
Ce qui m'a dérouté était la ligne root@server:/# ls, qui m'a suggéré que le répertoire actuel était /. (D'où mon deuxième commentaire ci-dessus.)
Sparhawk
Désolé, c'est la commande complète: root @ server: / tmp / UPS / up / upsilon # mv / * ../ J'ai été connecté à distance dans ssh. Maintenant, je ne peux plus y accéder.
MaxDL
Ensuite, la commande à corriger est/tmp/UPS/up/bin/mv /tmp/UPS/up/{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*} /
Sparhawk
10

Si vous avez déjà redémarré ou vous êtes déconnecté, vous pouvez démarrer sur un liveCD / USB pour réparer votre système. Je vais omettre la partie où vous savez comment créer un système Live et démarrer avec Ubuntu (le cd alternatif fonctionne également, il suffit de le déposer dans un shell racine):

Vous devez d'abord monter votre système quelque part, donc:

mkdir /mnt/system
mount /dev/sda1 /mnt/system

Je suppose que /dev/sda1c'est ta racine. Si vous les avez séparés /binou que /usrvous devez également les monter:

mount /dev/sda2 /mnt/system/usr

Maintenant, vous devriez arriver au répertoire que vous étiez avant la catastrophe:

cd /mnt/system/tmp/UPS/up/upsilon

Maintenant, avec la commande que Oli a donnée, que je vais copier avec évidence:

mv ../{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*} /mnt/system/

Vérifiez maintenant que tout est en ordre:

# ls /mnt/system/
bin boot etc home media mnt opt root sbin selinux usr var etc...

Redémarrez votre système et soyez plus prudent à l'avenir.

Braiam
la source
1

J'ai eu ce problème, j'ai trouvé que j'avais besoin d'appeler la commande mv comme ceci:

/tmp/UPS/up/lib/ld-linux-x86-64.so.2 --library-path /tmp/UPS/up/lib/ /tmp/UPS/up/test/bin/mv /tmp/UPS/up/{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var} /

J'espère que cela aide les autres.

Johny
la source