Buscamos en diferentes foros y así de esta manera mostrarte la respuesta a tu inquietud, si tienes dificultades puedes dejar la duda y contestaremos con mucho gusto, porque estamos para servirte.
Solución:
Pregunta 1
1) Simplemente no entendemos cómo bash podría destruir el disco, incluidos /data/;
Razón: $OUT_DIR
estaba desarmado
En bash
y sh
los comentarios se escriben como # comment
, no // comment
.
La siguiente línea tendrá los siguientes efectos.
someVariable=someValue // not a comment
- Asignar
someValue
a variablesomeVariable
, pero solo para esa línea. Después de esa línea la variable volverá a su valor anterior, cual es null en este caso. - Ejecutar el “comando”
// not a comment
, ese es el programa//
con los parametrosnot
,a
, ycomment
. Ya que//
es solo un directorio (lo mismo que/
) esto causará un mensaje de error y nada más.
En este momento, este comportamiento puede parecer extraño, pero es posible que ya lo hayas usado en modismos conocidos como IFS= read -r line
o LC_ALL=C sort
.
Mirando su secuencia de comandos, las siguientes líneas probablemente causaron el problema:
OUT_DIR=/data/backup/mongodb/tmp // ...
...
rm -rf $OUT_DIR/*
Lamento traerte esto, pero básicamente ejecutaste rm -rf /*
ya que $OUT_DIR
expandido al vacío string.
Riesgo potencial en otros sistemas
Incluso si $OUT_DIR
no estaba vacío el efecto pudo han sido los mismos desde que hay un //
“comentario” después rm
. Considere el comando
rm -rf some // thing
Se supone que esto elimina los tres archivos/directorios some
, //
, y thing
. Como ya se ha señalado //
es el mismo directorio que /
.
Sin embargo, más implementaciones de rm
en Linux tiene un protector para este caso y no eliminará /
Tan fácilmente. En Ubuntu obtendrá la siguiente advertencia (No intentes esto en casa. Apestaría si tu rm
difiere)
$ rm -rf //
rm: it is dangerous to operate recursively on '//' (same as '/')
rm: use --no-preserve-root to override this failsafe
Pregunta 2
2) Y por qué, ¿es posible recuperar /datos/?
Esto está fuera de tema para StackOverflow. Sin embargo, puede encontrar muchas respuestas a esta pregunta en otros sitios de stackexchange.
Hay herramientas de recuperación que puede probar, pero no hay garantía de que pueda restaurar sus datos si no tiene una copia de seguridad.
¡Cambiar entre idiomas puede ser complicado! //
no es un iniciador de comentarios en shell, es #
. Todos los comandos con estos “comentarios” se analizaron incorrectamente y se omitieron:
$ VAR=whatever // comment
bash: //: Is a directory
[$?=126]
$ echo "($VAR)"
()
Por lo tanto, OUT_DIR=...
fue ignorado y $OUT_DIR
estaba vacio. Es fácil adivinar qué
rm -rf $OUT_DIR/*
entonces lo hizo. Básicamente era equivalente a
rm -rf /*
Utilice sus copias de seguridad para restaurar la base de datos.
Puedo leer las palabras en chino en el campo de comentarios, desde la línea 10, el usuario quiere crear una carpeta temporal pero usó cd
, Así que si /data/backup/mongodb/tmp
no existe en primer lugar, entonces $OUT_DIR está vacío o null, después de que la línea 11 se convirtió en rm -rf /*
.
Si eres capaz, puedes dejar un artículo acerca de qué te ha gustado de esta división.