Ответ 1
Вопрос 1
1) Мы просто не понимаем, как bash может уничтожить диск, включая /data/;
Причина: $OUT_DIR
был не установлен
В bash
и sh
комментарии пишутся как # comment
, а не //comment
.
Следующая строка будет иметь следующие эффекты
someVariable=someValue // not a comment
- Присвойте
someValue
переменнойsomeVariable
, но только для этой одной строки. После этой строки переменная вернется к своему старому значению, которое в данном случае равно нулю. - Выполните "команду"
//not a comment
, то есть программу//
с параметрамиnot
,a
иcomment
. Поскольку//
это просто каталог (такой же, как/
), это вызовет сообщение об ошибке и ничего более.
Сейчас это поведение может показаться странным, но вы, возможно, уже использовали его в хорошо известных идиомах, таких как IFS= read -r line
или LC_ALL=C sort
.
Глядя на ваш скрипт, следующие строки, вероятно, вызвали проблему:
OUT_DIR=/data/backup/mongodb/tmp // ...
...
rm -rf $OUT_DIR/*
Извините, что принес это вам, но вы в основном выполнили rm -rf/*
так как $OUT_DIR
расширился до пустой строки.
Потенциальный риск в других системах
Даже если $OUT_DIR
не опустошить эффект мог бы быть такой же, так как есть //
"комментарий" после того, как rm
. Рассмотрим команду
rm -rf some // thing
Это должно удалить три файла/директории some
, //
и thing
. Как уже указывалось, //
это тот же каталог, что и /
.
Тем не менее, большинство реализаций rm
в Linux имеют защиту для этого случая и не удаляются /
так легко. В Ubuntu вы получите следующее предупреждение (не пытайтесь сделать это дома. Сосет, если ваш rm
отличается.)
$ rm -rf //
rm: it is dangerous to operate recursively on '//' (same as '/')
rm: use --no-preserve-root to override this failsafe
вопрос 2
2) И, конечно, можно ли получить/data/обратно?
Это не по теме для StackOverflow. Тем не менее, вы можете найти множество ответов на этот вопрос на других stackexchange сайтах.
Есть инструменты восстановления, которые вы можете попробовать, но нет никакой гарантии, что вы сможете восстановить свои данные, если у вас нет резервной копии.