Случайно выполненный sudo rm / * на удаленном сервере

11

Я случайно выполнил rm /*вход в систему как пользователь root на удаленном сервере Ubuntu и удалил почти все двоичные файлы, и в настоящее время я не могу войти в систему через ssh или ftp для восстановления файлов (и надеюсь на лучшее).

Есть ли способ как-то исправить этот беспорядок, или я должен позвонить в центр обработки данных и попросить формат?

Муравей
источник
2
Можете ли вы подтвердить, является ли это физическим или виртуальным сервером? Кроме того, независимо от того, выполняли ли вы -rаргумент rmили просто выполняли указанную вами команду. Предоставляет ли ваш хостинг-провайдер какой-либо способ доступа к образам дисков вне этой конкретной машины?
Калеб

Ответы:

26

rm /*следует удалить очень мало. Там нет -rфлага, который бы рекурсивно удалял что-либо, и без этого каталоги не будут удалены (и даже если каталоги были удалены, могут быть удалены только пустые). Этот ответ основан на предположении, что вы не работали rm -rf /*.

В качестве единственных файлов в корневой файловой системе могут быть символические /lib64ссылки на ядро и initrd (хотя в одной из систем Ubuntu, на которые я смотрю, их нет) или символическая ссылка на 64-битных системах.

Проблема может быть просто в том, что /lib64 -> /libсимволическая ссылка была удалена. Это довольно неприятно, поскольку почти каждая программа будет полагаться на эту символическую ссылку:

$ ldd /bin/bash
...
    /lib64/ld-linux-x86-64.so.2 (0x00007f8946ab7000)

Это ld-linuxдинамический загрузчик, и если он недоступен, вы не можете запускать динамические исполняемые файлы. Это очень усложнит вход в систему, а вы вообще не сможете.

Один спаситель может быть busybox. Запустите это, чтобы проверить:

$ ldd /bin/busybox
    not a dynamic executable

В этом случае busybox должен быть запущен, но вопрос в том, как его запустить?

Если у вас есть доступ к приглашению загрузчика, возможно, вы сможете выполнить загрузку init=/bin/static-sh, где static-sh является символической ссылкой busybox(проверка /bin/static-shсуществует - она ​​существует в моей системе, но это не стандартная версия Ubuntu. Эта ошибка предполагает, что она доступна .)

Получив корневую оболочку, вы можете заново создать /lib64символическую ссылку. Возможно, вам придется сначала перемонтировать корневую файловую систему как чтение / запись. В busybox должны быть встроены эти инструменты, которые вы можете запустить следующим образом:

# busybox mount -o remount,rw /
# busybox ln -s /lib /lib64
# /bin/bash
bash# 

Если bash работает, проблема должна быть исправлена.

CAMH
источник
18

Если вам нужно восстановить файлы из текущей установки, попросите вашего хоста помочь вам. Предполагая, что это виртуальная машина, им требуется около пяти минут в день для создания образа вашего диска, переустановки хоста с нуля и выгрузки старого образа диска в новую файловую систему.

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

Oli
источник
2
Concur. Если они являются достаточно компетентным сервисом виртуального хостинга, они должны быть в состоянии сделать это. Свяжитесь с ними как можно быстрее, чтобы убедиться, что у них все еще будет резервная копия перед установкой.
Шадур
2

Если вы только что удалили символическую ссылку / lib64 на / lib и у вас по-прежнему открыта консоль, просто выполните:

/lib/ld-linux-x86-64.so.2 /bin/ln -s /lib /lib64

и вы сможете снова запускать команды в обычном режиме. Отрегулируйте путь к вашей фактической библиотеке ld. Вы также можете запустить любую другую команду, просто указав ей полный путь к библиотеке ld.

Нейро Мансер
источник
1

Без доступа к физическому серверу мало что можно сделать.

Марко Чеппи
источник
Итак, я должен спросить формат тогда, или есть ли способ восстановить эти файлы, не взбивая все остальное?
Муравей
Вы забываете, что существует высокая вероятность того, что это виртуальный сервер, и в этом случае «физический сервер» ничего не значит, кроме наличия доступа к удаленным инструментам более высокого уровня.
Калеб