Logo Hardware.com.br
advi
advi Veterano Registrado
782 Mensagens 33 Curtidas

[Resolvido] Como sincronizar 2 pastas (diretórios)?

#1 Por advi 08/03/2007 - 00:59
Oi, gente.

Tenho 2 HDs no meu PC. Gostaria de saber que programa do Linux eu posso usar para fazer um sincronismo de 2 pastas, que ficam uma em cada HD.

Não quero backup. Programas de backup criam uma imagem compactada. Eu não quero que seja compactada e sim uma cópia utilizável dos arquivos.

Quero um programa que identifique os arquivos da pasta A e da B, e mova os arquivos mais novos da A -> B e possa fazer também o inverso, ou seja, mover os arquivos mais novos da pasta B -> A.

Algo como o Allway Sync: http://allwaysync.com/

Imagem

Uma última pergunta: que sites devo usar para procurar programas para Linux?

Fui!
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#2 Por jqueiroz
08/03/2007 - 12:56
Se as duas máquinas tiverem acesso a rede, você pode usar o comando rsync, com ssh:

"Carlos Morimoto"
Para usar o comando rsync via SSH, o comando acaba sendo bem mais complexo, mas o resultado é bem interessante. Ele vai apenas atualizar as partes dos arquivos que foram modificadas, sem dar upload nos arquivos inteiros novamente, como muitos programas de backup fariam.

Para sincronizar a pasta local "/home/joao" com a pasta remota "/backup", no servidor 64.246.47.76 (onde seria feito um backup dos arquivos locais), usando o login "joao", por exemplo, tudo via SSH, o comando seria:

$ rsync -av --rsh="ssh -l joao" /home/joao/ joao@64.246.47.76:/backup

Para recuperar posteriormente o backup no caso de um desastre, baixando os arquivos salvos no servidor bastaria inverter a ordem dos diretórios no comando:

$ rsync -av --rsh="ssh -l joao" joao@64.246.47.76:/backup /home/joao/

No primeiro comando os arquivos da pasta "/home/joao" vão para a pasta /backup do servidor e no segundo eles são recuperados, sobrescrevendo os arquivos locais. A parte mais significativa desse comando é o parâmetro ``--rsh="ssh -l joao"´´, que diz para o rsync usar um programa externo (o SSH) para fazer o trabalho.

Fonte: "Redes e Servidores Linux - Guia Prático", pp 323.
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
advi
advi Veterano Registrado
782 Mensagens 33 Curtidas
#3 Por advi
08/03/2007 - 13:59
Oi, Jqueiroz.

É bastante interessante e instrutivo o uso do SSH para copiar em máquinas diferentes através da rede.

Mas, no meu caso, é algo mais simples. A cópia seria feita entre 2 pastas na mesma máquina.

Se possível, com sincronização nos dois sentidos, permitindo que o arquivo mais novo sobreescreva o mais antigo (independentemente da pasta de onde se encontra).

O rsync faz isso?

Fui!
Ubuntu 12.04
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#7 Por jqueiroz
08/03/2007 - 17:45
Mas, no meu caso, é algo mais simples. A cópia seria feita entre 2 pastas na mesma máquina.

É isso que dá prestar mais atenção na figura que no texto. fiquei_vermelho.png

...Se possível, com sincronização nos dois sentidos, permitindo que o arquivo mais novo sobreescreva o mais antigo (independentemente da pasta de onde se encontra).

O rsync faz isso?

Sim, conforme os colegas já responderam.
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
advi
advi Veterano Registrado
782 Mensagens 33 Curtidas
#8 Por advi
08/03/2007 - 18:11
Olá.

Primeiramente, gostaria de agradecer a todos pelas respostas.

Pelo que li no manual do rsync, devo usar 2 opções:

-u: para que os arquivos mais velhos (da origem) não apaguem os mais novos (do destino)
-r: para copiar todos os diretórios recursivamente.

Assim, para fazer a sincronização nos 2 sentidos, eu precisaria dar os seguintes comandos:
rsync -ru mnt/hdb1/Sincronizado mnt/hda1/Sincronizado
rsync -ru mnt/hda1/Sincronizado mnt/hdb1/Sincronizado

Estas pergunta são beeem mais básicas que a anterior, me desculpem, mas tenho que fazê-las: fiquei_vermelho.png

No MsDos (minhas origens), era possível fazer um arquivo de lote, onde eu poderia colocar estas 2 linhas em um arquivo de texto puro. Este arquivo poderia se chamar sincronizar.bat

Assim, bastaria eu digitar sincronizar no terminal e pronto.

Há um equivalente no Linux para arquivos de lote?

Se houver, este arquivo poderá estar em quais pastas?

Que comando devo dar para ver o PATH (local onde procurar os arquivos)?

Como acrescentar uma variável de ambiente? (Ex: SUNRISE= /mnt/hda1/Sincronizado)

Valeu! descolado.png
Ubuntu 12.04
Baelmorion
Baelmorion Novo Membro Registrado
31 Mensagens 1 Curtida
#9 Por Baelmorion
08/03/2007 - 18:15
Para ver o path digite:
$ echo $PATH

O "arquivo de lote" do linux eh o shell script (arquivos .sh), que porém podem ter qualquer extensao.
Crie um e coloque dentro de uma das pastas do seu PATH.
Para exportar uma variavel:
$ export NOME_DA_VARIAVEL=VALOR

Se o que você procura é redundância, talvez seja melhor investir em um sistema raid com hotplug, assim se um hd queimar basta retira-lo e colocar outro, sem desligar a maquina.
P4 3.0 HT s478
P4V800D-X
Dual Ram 512x2 mb
HD 80gb + 40gb
VGA FX5200 (7600GT em breve)
Monitor Samsung 17"

www.securityinformatica.com.br
Cascavel - PR
Baelmorion
Baelmorion Novo Membro Registrado
31 Mensagens 1 Curtida
#11 Por Baelmorion
09/03/2007 - 03:18
Exatamente...
Essa variavel vai valer até voce reiniciar o PC.
Se voce quiser usar uma variavel apenas para um comando, pode defini-la na propria linha de comando, exemplo:

$ VAR=VALUE echo $VAR

O resultado disso será VALUE.
P4 3.0 HT s478
P4V800D-X
Dual Ram 512x2 mb
HD 80gb + 40gb
VGA FX5200 (7600GT em breve)
Monitor Samsung 17"

www.securityinformatica.com.br
Cascavel - PR
emtudo
emtudo Super Participante Registrado
851 Mensagens 4 Curtidas
#13 Por emtudo
28/05/2007 - 02:06
pegando uma carona:

Considerando o sistema montado abaixo:
# mount
/dev/hda1 on / type reiserfs (rw,noatime,notail)
/dev/hda3 on /tmp type reiserfs (rw,nosuid,nodev)
/dev/hda6 on /mnt/hda6 type reiserfs (rw,nosuid,nodev)
/dev/hda7 on /mnt/hda7 type reiserfs (rw,nosuid,nodev)
/dev/hda8 on /mnt/hda8 type reiserfs (rw,nosuid,nodev)
/dev/hda9 on /mnt/hda9 type reiserfs (rw,nosuid,nodev)
/dev/hda5 on /home type reiserfs (rw,notail)
/dev/hdg1 on /hd2 type reiserfs (rw,nosuid,nodev)

eu quero fazer um espelho de /dev/hda1 para /hd2

se eu digitar:

rsync -av / /hd2
vai acontecer um desastre pois o sistema vai copiar todos os arquivos das outras unidades, qual a alternativa para eu nao precisar desmonstar as outras unidades e conseguir fazer o espelho?

Eu tentei fazer o seguinte
criei outro diretorio

mkdir /hd1
mount /dev/hda1 /hd1
entao entrei em /hd1/mnt/hda7 e percebi que nao tinha nada so o diretorio, mas se eu entrar em /mnt/hda7 tem todos os arquivos.
isso quer dizer que posso fazer o seguinte:

rsync -av /hd1 /hd2
e nao vou ter problema dele copias as outras unidades?
ou em algum caso vou ter algum problema?


Outra observação: sabendo que o rsync so transporta os dados alterados o arquivo e nao o arquivo inteiro, e quando o rsync esta trabalhando com o ssh, ele continua transportando apenas os dados alterados ao invez do arquivo inteiro?

Mais outra detalhe, tentei usar:

rsync -av ip:/hd1 /meu-diretorio/


e ele me pediu senha, estranho que eu estava com o usuario root, entao ele me pediu a senha do root, como servidor estava configurado nao ter acesso com root pelo ssh ele nao deixou eu entrar na maquina usando o comando a cima, tive que habilitar o login pelo root no ssh para usar o comando assim. sinceramente nao entendi qual a ligacao se eu nao coloquei o "--rsh=..."

grato!
----->HENRIQUE<-----
Linux User #444017 - Linux Machine #350904
Ubuntu 10.04 - Pentium Dual-COre E5400 2.7Ghz - 2hdx500GB - 2x2GiB RAM - GeForce 9400 GT 1GiB compiz
jqueiroz
jqueiroz Cyber Highlander Registrado
104K Mensagens 5.7K Curtidas
#14 Por jqueiroz
28/05/2007 - 12:53
vai acontecer um desastre pois o sistema vai copiar todos os arquivos das outras unidades, qual a alternativa para eu nao precisar desmonstar as outras unidades e conseguir fazer o espelho?

Use a opção "-x":

rsync -avx / /hd2

Mais outra detalhe, tentei usar:
[QUOTE]rsync -av ip:/hd1 /meu-diretorio/

e ele me pediu senha, estranho que eu estava com o usuario root, entao ele me pediu a senha do root, como servidor estava configurado nao ter acesso com root pelo ssh ele nao deixou eu entrar na maquina usando o comando a cima, tive que habilitar o login pelo root no ssh para usar o comando assim. sinceramente nao entendi qual a ligacao se eu nao coloquei o "--rsh=..."
[/QUOTE]
O rsync já usa o SSH por default. A opção "--rsh=..." serve pra você especificar outro usuário, se for usar a conexão por SSH, ou pra não usar SSH.
"chmod 777 nunca ajudou ninguém" (c) 2002-2021 JQueiroz/FGdH
Conheça o Blog do Zekke
emtudo
emtudo Super Participante Registrado
851 Mensagens 4 Curtidas
#15 Por emtudo
28/05/2007 - 14:40
jqueiroz disse:
Use a opção "-x":

rsync -avx / /hd2


O rsync já usa o SSH por default. A opção "--rsh=..." serve pra você especificar outro usuário, se for usar a conexão por SSH, ou pra não usar SSH.


o que realmente a opcao "x" faz?

desde ja agradeco pela dica, mas eu gosto de saber o que ela faz, ao invez de apenas usar sem saber o sentido, acho que vc ne entendi ne?

outra coisa, o rsync sempre usou o ssh? acho que lembro de ja usar ele alguns anos atraz sem o ssh, existe como usar sem usar nenhum programa, como são os parametros?

grato!
----->HENRIQUE<-----
Linux User #444017 - Linux Machine #350904
Ubuntu 10.04 - Pentium Dual-COre E5400 2.7Ghz - 2hdx500GB - 2x2GiB RAM - GeForce 9400 GT 1GiB compiz
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal