Migraciones de servidores de archivos con Robocopy Parte 1 de 2
Este blog es la parte 1 de una serie de 2 partes. Para ver la parte 2, haga clic aquí.
Con varios sabores de los sistemas operativos de Windows Server saliendo de soporte este año, me he encontrado con un número decente de migraciones de servidores de archivos de un sistema a otro. A veces, si el servidor no tiene ningún otro papel o funciones instaladas que no sea sólo un servidor de archivos, entonces yo podría simplemente unshare los recursos compartidos en el servidor original, separar el disco duro virtual de la misma, adjuntar el disco duro virtual para el nuevo servidor, y volver a compartir las acciones. Esto mantiene los permisos NTFS si ambos servidores son miembros del mismo dominio de Active Directory. Además, suele ser muy rápido, ya que no es necesario copiar terabytes de datos de un servidor a otro. Sin embargo, este proceso sólo funciona elegantemente cuando los datos de los archivos compartidos existen en un volumen que no está donde Windows o cualquier aplicación está instalada.
Cuando surge la necesidad de duplicar los datos para la migración al nuevo servidor, siempre vuelvo al viejo fiel-Robocopy (Robust File Copy for Windows). Robocopy ha existido desde los días de NT4 en 1996, por lo que es probable que no sea la primera vez que oiga hablar de él. Por aquel entonces y hasta 2008, estaba disponible con la descarga del kit de recursos de Windows. A partir de 2008 (y posteriormente), se incluyó en los sistemas operativos de escritorio y de servidor a partir de Vista y Server 2008. Por lo tanto, lo más probable es que si se inicia un símbolo del sistema en el equipo y el tipo «robocopy /?» verá el volcado de ayuda de la información a su pantalla sobre cómo utilizar la utilidad.
Hay un buen número de opciones cuando se trata de las migraciones de servidores de archivos utilizando Robocopy, y usted puede no saber por dónde empezar. Tenga cuidado con algunas de las opciones si sólo lo está probando, ya que algunas de ellas mueven los datos (borrando los archivos y carpetas en la ubicación de origen o en la de destino).
A lo largo de los años de uso, he encontrado que esta sintaxis es a la que vuelvo una y otra vez:
robocopy \\Nsourceserver\NShareName D:\Shares\ShareName /e /b /copyall /PURGE /r:5 /w:5 /MT:64 /tee /log+:D:\Shares\log_ShareName _%date:~-10,2%»-«%date:~7,2%»-«%date:~-4,4%.txt /v
Vamos a desglosar esto.
Robocopy
Inicia el comando.
\Nsourceserver\NShareName
El primer parámetro es siempre la ubicación de origen. Por lo general, siempre ejecuto Robocopy desde el nuevo servidor de archivos como:
- Es probable que tenga una versión más reciente de Robocopy instalada; y
- Es probable que no tenga los recursos compartidos construidos todavía en el nuevo servidor.
D:\Shares\ShareName
El segundo parámetro es siempre la ubicación de destino. Le recomiendo encarecidamente que no los ponga en el volumen del sistema operativo C:\Nsiempre que sea posible. También me gusta crear una carpeta raíz llamada «Shares» y poner todas las carpetas compartidas en esta carpeta en lugar de dejarlas en la raíz. Hay múltiples ventajas que he encontrado a lo largo de los años.
Los siguientes parámetros no necesitan estar en ningún orden en particular.
/e
Esto copia los subdirectorios, incluyendo los vacíos. Aquí es donde entra en juego el verdadero valor de Robocopy. Si sólo copiara los archivos de la carpeta compartida de nivel superior, no tendría mucho valor.
/b
Esto copia los archivos en modo de copia de seguridad. Esto no crea una instantánea VSS, pero en cambio, esto es útil si la cuenta de Windows que está ejecutando Robocopy con puede no tener acceso completo a la ubicación de origen debido a ACLs en NTFS.
/copy all
Así que usted puede haber estado preguntando, ¿por qué toda la molestia? ¿Por qué no navegar a ambas ubicaciones y copiar y pegar los archivos de una ubicación a otra? Este parámetro copia toda la información de los archivos. De esta manera, no hay una nueva marca de tiempo, o propietario, o permisos NTFS heredados cuando no debería haberlos, etc. Toda la información del archivo incluye:
- Datos
- Atributos
- Sellos de tiempo
- Seguridad (NTFS ACLs)
- Información del propietario
- Información de auditoría
/PURGE
Este parámetro borra los archivos y carpetas de destino que ya no existen en el origen. Tenga en cuenta que técnicamente, el uso de los parámetros /e y /PURGE juntos da el mismo efecto que el uso de un parámetro por sí mismo (/mir – para «espejo»), pero prefiero tener un gran «PURGE» en mayúsculas en la sintaxis para que cuando lo vea, sepa que probablemente estoy borrando algo. La pregunta que surge aquí es que si el archivo o la carpeta ya no existe en la ubicación de origen, por qué estaría tratando de copiarlo en el destino. Además, ¿por qué querría borrar un archivo que nunca existió en primer lugar?
Este es el segundo lugar donde Robocopy realmente brilla. Por lo general, no ejecuto Robocopy una vez y ya está, a menos que esté copiando datos inactivos. Suelo crear una tarea programada para ejecutar un archivo por lotes que incluye las líneas de Robocopy a ejecutar. Teniendo esto en cuenta y con los parámetros anteriores, la primera ejecución de la tarea tardará un poco ya que tiene que hacer la copia inicial de todos los datos. Sin embargo, cuando se ejecute la siguiente vez (suelo configurarlo para que se ejecute diariamente después del horario laboral), mirará el origen y lo comparará con el destino, y si el archivo no ha cambiado, no hará nada con él. Si el archivo en el origen es más nuevo, sobrescribirá el archivo en el destino. Si el archivo en el origen ha sido eliminado desde la última ejecución del trabajo, el mismo archivo en el destino será eliminado automáticamente también. Para una migración real de archivos compartidos, lo configuro con una semana de antelación, miro los registros que genera, soluciono cualquier problema y dejo que se ejecute diariamente hasta la fecha de corte programada. En la fecha de transición, pongo el recurso compartido de origen en modo de sólo lectura y ejecuto la tarea de Robocopy una vez más para copiar cualquier delta que haya cambiado desde la última ejecución. A continuación, para terminar, descompartiría el recurso compartido de origen y luego compartiría el nuevo recurso compartido.
/r:5
Esta bandera especifica el número de veces que Robocopy reintentará una copia fallida en un archivo o una carpeta. A veces esto falla porque hay un bloqueo en el archivo porque el usuario o proceso lo tiene abierto. Cuando esto ocurre, Robocopy reintentará la copia para ver si el bloqueo ya no está en el archivo. Por defecto (si no se especifica este parámetro), Robocopy reintentará la copia 1 millón de veces. Sabiendo que vamos a intentar copiar este archivo de nuevo durante la próxima ejecución programada a un día de distancia, estoy más que satisfecho con intentar cinco reintentos, y si no se copia con éxito, proceder al siguiente archivo.
/w:5
Esta bandera va de la mano con /r. Esta bandera especifica la cantidad de tiempo en segundos a esperar entre reintentos. El valor por defecto es de 30 segundos. Juntando 2 y 2, 1.000.000 * 30 = 30.000.000 segundos o 500.000 minutos o 8.333 horas y 20 minutos o 347 días y 5 horas. Esto significa que si un solo archivo se bloquea y permanece bloqueado, Robocopy tardaría casi un año en pasar a la siguiente tarea. Esto es una necesidad para establecer las banderas /r y /w apropiadamente.
/MT:64
Esta bandera establecerá un nuevo número máximo de hilos cuando se realicen copias multihilo. Esto no copia múltiples archivos o carpetas al mismo tiempo, sino que utiliza más hilos con la CPU para hacer la copia que se ha establecido. El número por defecto es 8. A mí me gusta aumentar este número hasta un total de 64 (téngalo en cuenta si ejecuta varios trabajos de Robocopy simultáneamente). Hay una sobrecarga de la CPU al abrir el archivo de origen, abrir el archivo de destino, copiar los datos, cerrar el archivo de origen y cerrar el archivo de destino. Si todo esto debe hacerse antes de proceder al siguiente archivo, existe la posibilidad de que el subsistema de E/S esté inactivo parte del tiempo que podría haber estado trabajando. Nota: esto probablemente hará que su sistema parezca lento ya que está trabajando la CPU decentemente. Si esto es en un nuevo servidor de archivos que aún no está en producción, no debería importar si es «lento».
/tee
Por defecto, cuando esto se ejecuta manualmente desde el símbolo del sistema, Robocopy mostrará lo que está haciendo en la pantalla. Con miles de archivos para copiar, es una forma poco eficiente de encontrar algo que salió mal. Especificando /tee (en lugar de omitirlo por completo) forzará la salida a la ventana de la consola, así como al archivo de registro. Esto es especialmente útil si es la primera vez que se ejecuta el trabajo de Robocopy, y está solucionando algo que no funciona como debería. Si creo una tarea programada del trabajo de Robocopy, recomiendo dejar este comando fuera.
log+:D:\Shares\log_ShareName _%date:~-10,2%»-«%date:~7,2%»-«%date:~-4,4%.txt
Por defecto, el único registro de Robocopy se muestra en la pantalla. Con el parámetro /log, especifique la ruta de acceso a un nuevo archivo (o a un archivo existente). Se sobrescribirá el archivo si ya existe. Sin embargo, al realizar este proceso con una tarea programada, es posible que desee ver todas las iteraciones de la ejecución en lugar de sólo la más reciente. Al especificar el + después de log (/log+), se añadirá al archivo especificado en lugar de sobrescribirlo. También poniendo «_%fecha:~-10,2%»-«%fecha:~7,2%»-«%fecha:~-4,4%» en el nombre del archivo, se creará automáticamente un nuevo archivo (si se ejecuta por primera vez ese día) con un sufijo de _MM_DD_YYY al final del archivo de registro para referencias históricas. En el caso de archivos compartidos especialmente grandes, incluso los archivos de registro pueden crecer hasta varios gigabytes si se dejan funcionando durante días y dividirlos en registros diarios tiene mucho sentido.
/v
Este parámetro muestra la salida Verbose, que mostrará los archivos omitidos. Generalmente, usted realmente quiere ver esto para asegurarse de que los archivos omitidos se registran.
En la parte 2 de este blog, mostraré cómo configurar un trabajo diario de Robocopy con el Programador de tareas.
¿Tiene preguntas sobre la migración de sus servidores de archivos? Póngase en contacto con Sikich. Estamos listos para ayudar.