Este tutorial describe cómo sincronizar directorios locales y remotos en Linux usando Lsyncd (Demonio de sincronización en vivo). Usando Lsyncd, podemos duplicar directorios locales a locales o directorios locales a remotos. Resulta útil cuando desea sincronizar datos entre directorios que se actualizan con frecuencia con nuevos contenidos. Lsyncd está diseñado para sincronizar un árbol de directorios local con un perfil bajo de cambios esperados en un espejo remoto. Es especialmente útil para sincronizar datos de un área segura a un área no tan segura.
Instalar Lsyncd en Linux
En Debian y sus derivados como Ubuntu, Linux Mint ejecuta el siguiente comando para instalar Lsyncd:
$ sudo apt-get install lsyncd
En RHEL, CentOS, primero debe habilitar el repositorio EPEL.
$ sudo yum install epel-release
Luego, instale Lsyncd usando el comando:
$ sudo yum install lsyncd
Configuración de Lsyncd en Debian y Ubuntu y derivados
Lsyncd no proporciona ningún archivo de configuración predeterminado en los sistemas basados en DEB. Necesitamos crearlo manualmente. Sin embargo, Lsyncd incluye algunos archivos de configuración de muestra que son útiles para tener una idea básica de qué/cómo realiza la sincronización. Los archivos de configuración de ejemplo se encontrarán en "/usr/share/doc/lsyncd-*/examples" directorio.
$ ls /usr/share/doc/lsyncd/examples/
Salida de muestra:
lbash.lua lgforce.lua lpostcmd.lua lrsyncssh.lua lecho.lua limagemagic.lua lrsync.lua
Como puede ver en el resultado anterior, cada archivo de configuración termina con .lua extensión. Es porque el archivo de configuración de lsync está escrito usando lenguaje de programación Lua . Echemos un vistazo a un archivo de configuración de muestra.
$ cat /usr/share/doc/lsyncd/examples/lrsync.lua
Así es como se ve el archivo de configuración de Lrsync:
---- -- User configuration file for lsyncd. -- -- Simple example for default rsync. -- settings = { statusFile = "/tmp/lsyncd.stat", statusInterval = 1, } sync{ default.rsync, source="src", target="trg", }
Configuración de Lsyncd en RHEL y CentOS
En los sistemas RHEL y CentOS, el archivo de configuración Lsyncd se creará automáticamente. Puede ver el contenido de este archivo usando el comando:
$ cat /etc/lsyncd.conf
Y los archivos de configuración de ejemplo están disponibles en la siguiente ubicación.
$ ls /usr/share/doc/lsyncd-2.1.5/examples/
Sincronice directorios locales y remotos en Linux usando Lsyncd
Como ya se indicó, Lyncd puede sincronizar el contenido de dos directorios locales y un directorio local con un directorio remoto. Primero, veremos cómo sincronizar directorios locales.
1. Sincronizar directorios locales en Debian, Ubuntu
Ahora sincronizaremos dos directorios locales.
Vamos a crear dos directorios con algunos contenidos de ejemplo.
$ sudo mkdir source_dir
$ sudo mkdir dest_dir
Cree algunos archivos aleatorios en el directorio source_dir:
$ sudo touch source_dir/file{1..10}
Opcionalmente, puede crear algunos archivos de registro para Lysyncd. Esto es solo opcional. Si no desea archivos de registro, omita este paso.
$ sudo mkdir /var/log/lsyncd
$ sudo touch /var/log/lsyncd/lsyncd.{log,status}
A continuación, cree un archivo de configuración para Lsyncd:
$ sudo mkdir /etc/lsyncd
$ sudo nano /etc/lsyncd/lsyncd.conf.lua
Edite/modifique las siguientes líneas:
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status" } sync { default.rsync, source = "/home/sk/source_dir", target = "/home/sk/dest_dir", }
Reemplace la ruta de los directorios de origen y destino con sus propios valores. Guarde y cierre el archivo.
Habilite e inicie o reinicie el servicio Lsyncd usando los comandos:
$ sudo systemctl enable lsyncd
$ sudo systemctl restart lsyncd
Ahora, verifique el contenido de los directorios source_dir y dest_dir.
$ ls source_dir/
Salida de muestra:
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
Compruebe el contenido de dest_dir:
$ ls dest_dir/
Salida de muestra:
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
¿Ver? Hemos creado archivos en el directorio source_dir únicamente y el contenido de este directorio se ha sincronizado automáticamente con el directorio dest_dir.
Además, puede revisar los archivos de registro para verificar si la replicación se completó o no.
$ tail -10 /var/log/lsyncd/lsyncd.log
Salida de muestra:
Sat Apr 15 17:07:34 2017 Normal: recursive startup rsync: /home/sk/source_dir/ -> /home/sk/dest_dir/ Sat Apr 15 17:07:34 2017 Normal: Startup of "/home/sk/source_dir/" finished.
Compruebe el archivo de estado de Lsyncd:
$ more /var/log/lsyncd/lsyncd.status
Salida de muestra:
Lsyncd status report at Sat Apr 15 17:07:44 2017 Sync1 source=/home/sk/source_dir/ There are 0 delays Excluding: nothing. Inotify watching 1 directories 1: /home/sk/source_dir/Descargar - Libro electrónico gratuito:"La administración avanzada de GNU/Linux"
2. Sincronice directorios locales en RHEL, CentOS
Editar archivo de configuración de Lsyncd:
$ sudo nano /etc/lsyncd.conf
Edite y modifique las siguientes líneas:
---- -- User configuration file for lsyncd. -- -- Simple example for default rsync, but executing moves through on the target. -- -- For more examples, see /usr/share/doc/lsyncd*/examples/ -- settings { logfile = "/var/log/lsyncd.log", statusFile = "/var/log/lsyncd.status" } sync { default.rsync, source = "/root/source_dir", target = "/root/dest_dir",
Reemplace la ruta de los directorios de origen y destino con sus propios valores. Guarde y cierre el archivo.
Habilite e inicie el servicio Lsyncd usando los comandos:
$ sudo systemctl enable lsyncd
$ sudo systemctl start lsyncd
Ahora, verifique el contenido de los directorios source_dir y dest_dir.
$ ls source_dir/
Salida de muestra:
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
Compruebe el contenido de dest_dir:
$ ls dest_dir/
Salida de muestra:
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
¡Felicitaciones! El contenido de source_dir se ha sincronizado correctamente con el directorio dest_dir.
Además, puede revisar los archivos de registro para verificar si la replicación se completó o no.
$ tail -10 /var/log/lsyncd.log
Compruebe el archivo de estado de Lsyncd:
$ more /var/log/lsyncd.status
3. Sincronice directorios remotos en sistemas Debian, Ubuntu
Necesitamos configurar SSH sin contraseña acceso. Esto se debe a que Lsyncd replicará automáticamente el contenido del directorio local en un directorio remoto sin la intervención del usuario.
$ sudo su
# ssh-keygen -t rsa
No ingrese ninguna frase de contraseña. Simplemente presione ENTER para aceptar los valores predeterminados.
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/home/sk/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:dHc2aKk5F2wBq7CIc5sVHJwYNjoPdwgxDKb1KuBBkgs [email protected] The key's randomart image is: +---[RSA 2048]----+ |o*=.++.. ... | |E..*.+o. o + | |+o+ + = . o O + | |+ .B o = o * + . | |..+ + o S + . | | . o + o | | o | | | | | +----[SHA256]-----+
Ahora, copie la clave pública SSH a su sistema remoto:
# ssh-copy-id [email protected]
Salida de muestra:
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" The authenticity of host '192.168.43.150 (192.168.43.150)' can't be established. ECDSA key fingerprint is SHA256:U7I0O1OOzzbHFlhIG0HoGDr1usHzLBju6Jmr6bUB9Es. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys [email protected]'s password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '[email protected]'" and check to make sure that only the key(s) you wanted were added.
Aquí, 192.168.43.150 es la dirección IP del sistema remoto.
Ahora, podrá conectarse mediante SSH a su sistema remoto sin tener que ingresar la contraseña:
# ssh [email protected]
Cree un directorio de destino en el sistema remoto con el comando:
# mkdir remotesync
Salir del sistema remoto:
# exit
A continuación, edite el archivo de configuración de Lsyncd en la máquina de origen:
$ sudo nano /etc/lsyncd/lsyncd.conf.lua
Edite/modifique las siguientes líneas:
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status" } sync { default.rsync, source = "/home/sk/source_dir", host = "192.168.43.150", targetdir = "/root/remotesync", }
Aquí, 192.168.43.150 es la dirección IP de mi host remoto. Y, /root/remotesync/ es el directorio de destino en mi sistema remoto. Reemplace los valores con los suyos propios. Guarde y cierre el archivo.
Reinicie el servicio Lsyncd para replicar el contenido del directorio de origen al destino.
$ sudo systemctl restart lsyncd
Ahora, SSH a su sistema remoto:
$ ssh [email protected]
Y verifique el contenido del directorio de destino (es decir, /root/remotesync/ en nuestro caso). Verá que todos los archivos del directorio de origen del sistema local se han replicado en el directorio de destino en el sistema de destino.
[email protected] ~]# ls remotesync/ file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
Este procedimiento es el mismo para los sistemas RHEL y CentOS. Configure el inicio de sesión SSH sin contraseña y asegúrese de haber modificado las rutas de origen y destino correctas en el archivo de configuración principal de Lsyncd (/etc/lsyncd.conf) en su sistema RHEL o CentOS, y el resto de los pasos son los mismos.
Descargar - Guía gratuita:"10 formas sencillas de restaurar su sistema Linux"Sabes cómo sincronizar directorios locales y remotos en Linux usando Lsyncd. Como puede ver, este es un método muy fácil y directo.
Espero que esto ayude.