Обратите внимание: ответы и комментарии на этот вопрос содержат материалы другого, похожего вопроса, который получил большое внимание со стороны внешних средств массовой информации, но оказался обманным вопросом в какой-то схеме вирусного маркетинга. Поскольку мы не допускаем злоупотребления ServerFault таким образом, исходный вопрос был удален, а ответы объединены с этим вопросом.
Вот развлекательная трагедия. Этим утром я немного занимался обслуживанием моего производственного сервера, когда я по ошибке выполнил следующую команду:
sudo rm -rf --no-preserve-root /mnt/hetznerbackup /
Я не заметил последний пробел раньше /
и несколько секунд спустя, когда предупреждения заполнили мою командную строку, я понял, что только что нажал кнопку самоуничтожения. Вот немного того, что сгорело в моих глазах:
rm: cannot remove `/mnt/hetznerbackup': Is a directory
rm: cannot remove `/sys/fs/ecryptfs/version': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/inode_readahead_blks': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_max_to_scan': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/delayed_allocation_blocks': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/max_writeback_mb_bump': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_stream_req': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_min_to_scan': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_stats': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/trigger_fs_error': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/session_write_kbytes': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/lifetime_write_kbytes': Operation not permitted
# and so on..
Я остановил задачу и почувствовал облегчение, когда обнаружил, что производственная служба все еще работает. К сожалению, сервер больше не принимает мой открытый ключ или пароль для любого пользователя через SSH.
Как бы вы продвинулись отсюда? Я поплыву через океан колючей проволоки, чтобы вернуть этот SSH-доступ.
Сервер работает под управлением Ubuntu-12.04 и размещен в Hetzner.
источник
--no-preserve-root
случайно ?! : -oОтветы:
Загрузитесь в спасательную систему, предоставленную Hetzner, и проверьте, какой урон вы нанесли.
Перенесите любые файлы в безопасное место и затем повторно разверните сервер.
Боюсь, это лучшее решение в вашем случае.
источник
Факт есть? На данный момент нет простого / легкого автоматического исправления для этого. Восстановление данных - это наука, и даже базовые, общие инструменты нуждаются в том, чтобы кто-то сел и убедился, что данные есть. Если вы ожидаете восстановления после этого без значительных простоев, вы будете разочарованы.
Я бы предложил использовать testdisk или какой-нибудь инструмент для восстановления файловой системы. Попробуйте одну систему, посмотрите, работает ли она, и так далее. Нет реального способа автоматизировать процесс, но вы, вероятно, можете аккуратно делать это партиями.
Тем не менее, есть несколько очень страшных вещей в вопросах и комментариях, которые должны быть частью ваших отчетов после действий.
Во-первых, вы запускали команду везде, не проверяя ее в первую очередь. Запустите команду на одном поле. Потом несколько, потом больше. В основном, если что-то идет не так, лучше, чтобы это влияло на некоторых, а не на все ваши системы.
во-вторых
Пугает меня. Резервное копирование на одном уровне - решенная проблема . Rsync может использоваться для сохранения разрешений и копирования файлов одним способом на сайт резервного копирования. Случайно что-то? Переустановите (желательно автоматически) rsync обратно, и все заработает. В будущем вы можете использовать снимки уровня файловой системы со снимками btrfs или zfs и отправлять их для резервного копирования на уровне системы. Я бы на самом деле поиграл с разделением серверов приложений, баз данных и хранилища и ввел бы принцип наименьших привилегий, чтобы вы могли разделить риск чего-то подобного ...
После того, как что-то случилось, самое плохое время, чтобы рассмотреть это.
Что мы можем извлечь из этого?
Никогда не запускайте команду везде сразу. Разделяйте испытательные и производственные машины и, предпочтительно, производите их поэтапно. Лучше исправить 1 или 10 машин, а не 100 или 1000.
Двойная и тройная проверка команд. Нет ничего постыдного в том, чтобы попросить коллегу дважды проверить: «Эй, я собираюсь записать диск, не могли бы вы проверить это, чтобы я не вытирал диск?». Обертка может также помочь, но ничто не сравнится с менее уставшим набором глаз.
Что ты можешь сделать сейчас? Получите электронную почту для клиентов. Дайте им знать, что есть время простоя и катастрофические сбои. Поговорите со своими начальниками, юридическими отделами, отделами продаж и так далее, и посмотрите, как вы можете уменьшить ущерб. Начните планировать выздоровление, и в случае необходимости вам, в лучшем случае, придется нанять дополнительные руки. В худшем случае планируйте потратить много денег на восстановление. На этом этапе вы будете работать над смягчением последствий, а также техническими исправлениями.
источник
dd
выше выпуске), это не усугубит ситуацию.$foo
и$bar
оба были неопределены, тоrm -rf /
должны были ошибиться с--no-preserve-root
сообщением. Единственный способ, которым я могу думать о том, что это на самом деле сработало бы на машине с CentOS7, - это если$bar
оценить*
, то, что было выполненоrm -rf /*
.Когда вы удаляете вещи с помощью
rm -rf --no-preserve-root
, его почти невозможно восстановить. Скорее всего, вы потеряли все важные файлы.Как сказал @faker в своем ответе, лучший способ - переместить файлы в безопасное место и затем повторно развернуть сервер.
Чтобы избежать подобных ситуаций в будущем, я бы предложил вам:
Делайте резервные копии еженедельно или, по крайней мере, раз в две недели. Это поможет вам восстановить поврежденную службу с минимально возможным MTTR.
Не работайте как root, когда не нужно . И всегда дважды подумайте, прежде чем что-то делать. Я бы посоветовал вам также установить safe-rm .
Не вводите параметры, которые вы не собираетесь вызывать , например,
--no-preserve-root
или--permission-to-kill-kittens-explicitly-granted
, в этом отношении.источник
--please-destroy-my-drive
параметр вhdparm
.У меня была та же проблема, но только при тестировании с жестким диском я потерял все. Я не знаю, будет ли это полезно, но не устанавливайте ничего , не перезаписывайте свои данные , вам нужно смонтировать свои жесткие диски и запустить некоторые инструменты для криминалистики, такие как вскрытие, фоторепортаж, тестдиск.
Я настоятельно рекомендую Testdisk, с помощью некоторой базовой команды вы можете восстановить свои данные, если не перезаписали их.
источник
Лучший способ решить такую проблему - это вообще не иметь ее.
Не вводите вручную команду «rm -rf» с косой чертой в списке аргументов. (Поместить такие команды в сценарий оболочки с действительно хорошими процедурами проверки / рассудка, чтобы защитить вас от глупостей - это другое.)
Просто не делай этого.
Когда-либо. Если вы думаете, что вам нужно сделать это, вы не думаете достаточно сильно.
Вместо этого измените ваш рабочий каталог на родительский каталог, из которого вы собираетесь запустить удаление, чтобы целевая команда rm не требовала косой черты:
источник
rm /bla/foo/bar -rf
. По крайней мере, в этом случае у меня не будет больших проблем, когда я нажимаю клавишу Return после вводаrm /
части./mnt/hetznerbackup
он должен был использовать "/", чтобы пометить все в этой папке ... но от родителяhetznerbackup
достаточно только без косых черт.Я бы попытался восстановить резервную машину, где хранились все копии:
dd
.testdisk
для восстановления файлов.Допустим, вы хотите восстановить 1 ТБ. Вам понадобятся дополнительные 2 ТБ, 1 ТБ для резервного копирования (1-й шаг) и 1 ТБ для восстановления (2-й шаг).
Я сделал аналогичную ошибку с псевдонимом rm -fr [телефон зазвонил] и cd в драгоценный каталог. Теперь я всегда думаю дважды и перепроверяю пару раз, прежде чем использовать команду rm или dd.
источник
dd
стереть свой последний шанс.Как уже упоминалось в другом ответе, у Хецнера есть спасательная система. Он включает в себя как вариант сетевой загрузки с доступом по ssh, так и java-апплет, чтобы дать вам экран и клавиатуру на вашем сервере.
Если вы хотите восстановить как можно больше данных, перезагрузите сервер в систему сетевой загрузки, а затем войдите в систему и загрузите образ файловой системы, прочитав соответствующий код устройства.
Я думаю, что-то вроде этого должно работать:
Конечно, перенаправление выполняется оболочкой до вызова команды ssh, поэтому server.img является локальным файлом. Если вам нужна только корневая файловая система, а не полный диск, замените
sda
ее,sda3
предположив, что вы используете тот же образ, что и я.источник
ssh root@host cat /dev/sda | gzip -c - > /path/to/dir_on_huge_partition/server.img.gz
(gzip «на лету» будет или не поможет в зависимости от содержимого файловой системы ...)-C
если он еще не включен в вашей конфигурации.ssh root@host "cat /dev/sda | gzip -c - " > /path/to/dir_on_huge_partition/server.img.gz
(опция -c ssh обычно тоже хороша, но вам все равно нужно сжимать в конце, так как ssh будет сжимать только при входе в свой туннель и распакуйте перед отправкой на стандартный вывод)Я бы пообещал использовать его
rm
до конца своей жизни и подумать, что это безумие, что trash-cli не является командой удаления по умолчанию в системах nix.https://github.com/andreafrancia/trash-cli
Я хотел бы убедиться, что это первое, что я устанавливаю на совершенно новую систему и
alias rm
что-то, что говорит людям, чтобы использоватьtrash-cli
вместо этого. Он также будет содержать примечание о другом псевдониме, который фактически работает,/bin/rm
но в большинстве случаев говорит им избегать его использования.:( Правдивая история
источник
trash-empty 5
в хрон. Дело в том, чтобы дать вам некоторый льготный период, потому что люди делают ошибки.Я бы посоветовал в таком случае размонтировать и использовать debugfs , а с помощью lsdel вы можете вывести список всех недавно удаленных файлов, которые не были очищены из журналов, а затем сбросить нужные файлы. Быстрый поиск по той же ссылке : http://www.linuxvoodoo.com/resources/howtos/debugfs
надеюсь, это кому-нибудь поможет. ;)
И да, один из предложений - сделать скрипт, который переместил ream rm в real.rm и symlinc mv в rm ;)
источник
Остановите все процессы сервера и все, что может вызвать дисковый ввод-вывод ... затем запустите testdisk, он должен быть в вашем программном стеке. Если у вас есть физический доступ, используйте livecd с testdisk.
источник