Восстановить перемещение корневого каталога рекурсивно

14

У меня Ubuntu Desktop используется в качестве сервера. Этим утром я случайно перенес весь свой корень в../

 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

Я был подключен удаленно в SSH. Теперь я не могу получить доступ больше. Я не могу также просмотреть Webmin.

Итак, теперь я не могу перезагрузить систему правильно? И я должен физически получить доступ к системной консоли и набрать эту команду:

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

право?

Куда ушел мой корневой каталог и как его вернуть? Будет ли работать вышеуказанная команда?

MaxDL
источник
10
Вот это да! Это впечатляющая ошибка! :(
Sparhawk
3
Правильно ли я понимаю, что рабочий каталог на тот момент был /? Если так, когда я пытаюсь mv tempdir/ ../, я получаю mv: ‘tempdir/’ and ‘../tempdir’ are the same file, ни с чем не двигался.
Sparhawk
В следующий раз не входите как root. И если вы собираетесь сделать, mvдобавьте -iпереключатель.
Брайам
1
Я не согласен. Иногда вы хотите войти в систему как root, а не учиться бездумно ставить sudo перед каждой командой. Однако будьте осторожны при входе в систему как root. Особенно с командами удаления и перемещения. --- Тем не менее, ошибки случаются, и мы учимся на них. @MaxDL: вы можете восстановить / раздел из резервной копии? У вас есть резервные копии? Можете ли вы использовать Dell DRAC, HP ILO или другой инструмент удаленного доступа для доступа к консоли серверов без загрузки ОС?
Хеннес

Ответы:

12

Вы не переместили корневой каталог (вы не можете), вы просто переместили почти все в нем в родительский каталог, где бы вы ни находились.

Чтобы усложнить ситуацию, вы также переехали, mvчтобы не сработало, как ожидалось. Следующее должно работать (до тех пор, пока вы не перезагрузились после того, как спросили об этом!), Если вы все еще находитесь в той же директории, в которой находились, когда выключили свой последний mv.

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

Если у вас их нет, просто опустите их в команду.

И если у вас нет доступа (вы не сможете выполнить новый вход в систему, когда все в этом состоянии), вам придется монтировать файловую систему извне (через что-то вроде LiveCD и монтировать файловую систему, а затем перемещать файлы в правильном месте. Ответ Брайама должен помочь с этой частью.

Оли
источник
То, что смутило меня, было строкой root@server:/# ls, которая подсказывала мне, что текущий каталог был /. (Отсюда мой второй комментарий выше.)
Sparhawk
Извините, это полная команда: root @ server: / tmp / UPS / up / upsilon # mv / * ../ Я был подключен удаленно в SSH. Теперь я не могу получить доступ больше.
MaxDL
Тогда команда, чтобы исправить это/tmp/UPS/up/bin/mv /tmp/UPS/up/{bin,boot,etc,home,media,mnt,opt,root,sbin,selinux,usr,var,vmlinuz*} /
Sparhawk
10

Если вы уже перезагрузились или вышли из системы, вы можете загрузить LiveCD / USB, чтобы исправить вашу систему. Я собираюсь пропустить часть, где вы знаете, как создать Live-систему и загрузиться с Ubuntu (альтернативный cd также работает, просто перейдите в корневую оболочку):

Сначала вы должны смонтировать свою систему куда-нибудь, так:

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

Я полагаю, /dev/sda1это твой корень. Если вы разошлись /binили /usrвам тоже нужно их смонтировать:

mount /dev/sda2 /mnt/system/usr

Теперь вы должны прибыть в каталог, где вы были до катастрофы:

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

Теперь с командой, которую дал Оли, которую я скопирую с явным видом:

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

Теперь убедитесь, что все в порядке:

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

Перезагрузите систему и будьте более осторожны в будущем.

Braiam
источник
1

У меня была эта проблема, я обнаружил, что мне нужно вызвать команду mv следующим образом:

/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} /

Надеюсь, что это помогает другим.

Johny
источник