renombrar una carpeta enorme: ¿es arriesgado?


19

¿Es arriesgado cambiar el nombre de la carpeta con 180 GB con el mvcomando?

Tenemos una carpeta /dataque contiene 180GB.

Queremos cambiar el nombre de la /datacarpeta /BD_FILEScon el mvcomando

¿Es seguro hacer eso?


14
¿Por qué y cómo debería ser arriesgado? Si no está seguro, llame mvcon la -iopción.
postre

55
¿Hay algo en su entorno que lo lleve a pensar que podría ser arriesgado?
Jeff Schaller

2
¿Quiere decir si existe el riesgo de que el acto en sí mismo pueda causar un problema o si existe el riesgo de que pueda haber efectos problemáticos? Si tiene algún programa que espera que haya una carpeta / data, cambiarle el nombre podría causar problemas.
Acumulación

3
Nota al margen: casi todo está seguro si ha verificado copias de seguridad. Nada es tan seguro como debería ser si no lo hace. En otras palabras: al preguntar "¿es seguro", su primer pensamiento debería ser "¿he verificado mis copias de seguridad?"
RedGrittyBrick

2
Me refiero a un riesgo que podría ser problemático cuando mover una carpeta enorme con datos por este sistema operativo podría detener el movimiento en el medio, por ejemplo, o perder datos
yael

Respuestas:


71

Cambiar el nombre de una carpeta es seguro si permanece dentro del mismo sistema de archivos.


Si es un punto de montaje ( /dataparece que podría ser un punto de montaje para mí, verifique esto con mount), entonces debe hacer algo más que un simple mvpuesto mv /data /BD_FILESque movería los datos a la partición raíz (que puede no ser lo que quieres que suceda)

Debe desmontar el sistema de archivos, renombrar el directorio ahora vacío, actualizar /etc/fstabcon la nueva ubicación para este sistema de archivos y luego volver a montar el sistema de archivos en la ubicación renombrada.

En otras palabras,

  1. umount /data
  2. mv /data /BD_FILES(suponiendo /BD_FILESque no exista, en ese caso, quítelo primero)
  3. actualizar /etc/fstab, cambiando el punto de montaje de /dataa/BD_FILES
  4. mount /BD_FILES

Esto no implica copiar ningún archivo, solo cambia el nombre del directorio que actúa como punto de montaje para el sistema de archivos.


Si el cambio de nombre del directorio implica moverlo a un nuevo sistema de archivos (lo que sería el caso si /dataestá en un disco mientras /BD_FILESestá en otro disco, algo común si está moviendo cosas a una partición más grande, por ejemplo) , Recomendaría copiar los datos mientras deja el original intacto hasta que pueda verificar que la copia está bien. Puedes hacer esto con

rsync -a /data/ /BD_FILES/

por ejemplo, pero vea el rsyncmanual de lo que hace y no hace (no conserva los enlaces duros, por ejemplo).


Una vez que se cambia el nombre de la carpeta, también debe asegurarse de que los procedimientos existentes (programas y usuarios que usan la carpeta, copias de seguridad, etc.) estén al tanto del cambio de nombre.


99
Existe el riesgo de que uno solo espere mvhacer una renamellamada al sistema, pero debido a circunstancias no se ha dado cuenta de que va a copiar los archivos y eliminar el original. Si necesito estar absolutamente seguro de que solo se realiza una renamellamada al sistema y mvno va a hacer algo "inteligente" a mis espaldas, abro un shell de Python y lo uso os.rename.
kasperd

3
Con un kernel de Linux relativamente reciente, puede mover el punto de montaje:mkdir /BD_FILES && mount -M /data /BD_FILES && rmdir /data
David Foerster,

2
@MichealJohnson Eso probablemente funcionará en un sistema Linux, sí. Lo bueno rsynces que es reiniciable.
Kusalananda

3
@MichealJohnson One utiliza las herramientas con las que se siente más cómodo, obviamente. Sí, rsync -aconserva casi todos los metadatos, pero no los enlaces duros, las ACL o los atributos extendidos (agregue -HAXpara eso).
Kusalananda

3
@Max Diferentes distribuciones tienen diferentes renamecomandos con diferentes comportamientos. Creo que es una razón suficiente para no usar el renamecomando cuando quieres estar seguro de lo que va a hacer.
kasperd

16

No está cambiando el nombre de cada archivo en el directorio, está cambiando el nombre de un archivo en /. Eso es porque:

  1. los directorios son archivos y
  2. El sistema de archivos realmente se preocupa por el inodo, no por el texto real.

Por lo tanto, cambiar el nombre de un directorio, sin importar cuántos archivos o cuántos datos contenga, es trivial.


14

Si solo cambia el nombre (origen y destino en el mismo sistema de archivos), es simplemente un cambio de nombre de una entrada de directorio. O tiene éxito y el directorio tiene un nuevo nombre, o falla, en cuyo caso nada cambia * .

Si el origen y el destino están en sistemas de archivos diferentes, los datos deben copiarse mv. Las diferencias en las características del sistema de archivos, como el tamaño máximo de archivo, las limitaciones en los nombres de archivo, etc., pueden causar problemas. Para evitar problemas, primero copia ficheros ( cp, rsync, ...) y después de la copia se realiza correctamente, eliminar los archivos en la ubicación original.

* Sin embargo, hay algunos casos de esquina, por ejemplo mencionados en la sección ERRORES en el cambio de nombre man 2


> "O tiene éxito y el directorio tiene un nuevo nombre, o falla en cuyo caso nada cambia". ¿Cómo está garantizado? ¿Es cierto para todos los sistemas de archivos? ¿Hay alguna documentación sobre esto?
turbanoff

Cambiar el nombre es una syscall única, sin embargo, hay una nota sobre NFS en la sección ERRORES del cambio de nombre de hombre : el cambio de nombre puede ser exitoso incluso cuando se devuelve un error al usar NFS (ver detalles en la página de manual). También agregué una nota en la respuesta. No espero que ningún sistema de archivos en el núcleo lo considere aceptable para que una entrada de directorio desaparezca si falla un cambio de nombre.
sebasth

8

Como han dicho otros, cambiar el nombre de una carpeta no plantea ningún riesgo inherente a los contenidos. Pero hay un tipo diferente de riesgo que puede considerar.

Los procedimientos existentes, los scripts, los accesos directos definidos por el usuario y las configuraciones que hacen referencia a la ubicación original podrían romperse con este cambio, y si las rutas se almacenan en una base de datos, por ejemplo, actualizarlas podría ser un gran trabajo.

Una cosa que puede hacer es hacer un enlace simbólico para el nuevo nombre del directorio, pero dejar el antiguo nombre en su lugar por un tiempo. Eso le dará tiempo para evaluar el impacto de este cambio. Puede eliminar temporalmente el nombre antiguo, ver si hay algún problema y, si lo hay, volver a crear el nombre antiguo para que las personas puedan seguir trabajando mientras usted descubre qué necesita actualizarse.

Un comando como este debería hacerlo: ln -s /data /BD_FILES


44
Un riesgo leve más que nadie ha mencionado todavía, es que dependiendo de su estrategia de copia de seguridad para esa carpeta, podría generar problemas de espacio en disco y latencia en la unidad de copia de seguridad debido a la repentina aparición de 180 GB de datos "nuevos" y la necesidad de ser respaldado
Kent

Yo prefiero algo así mv thing1 thing2 ; ln --symbolic ./thing2 thing1. De esa manera tengo el nuevo nombre y puedo probar fácilmente la ausencia del antiguo eliminando el enlace simbólico.
can-ned_food

3

Renombrar es atómico. El único riesgo razonable es que mvdecide copiar todo por alguna razón y se bloquea a la mitad. Si tiene GNU mv, mv -Teliminará este riesgo.

mv -Tle dice mvque se está moviendo a una no carpeta; lo que hará que se niegue a hacer lo mkdir()que a su vez hará que falle si mueve una carpeta y decidió copiar por alguna razón.

Estuve involucrado en sacudir errores mv -Tmientras trabajaba en mi tesis de maestría hace años. Solía ​​hacer lo incorrecto en muchos casos extremos.

Por otro lado, tiene 180 GB de datos de usuario en la partición raíz. Probablemente quiera mover esto fuera de la partición raíz.


No se puede saber solo por el nombre si algo está en la "partición raíz" o no.
Peter

@ Peter: si no está en la partición raíz, es un punto de montaje. No puede cambiar el nombre de los puntos de montaje montados con el comando mv.
Joshua
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.