Usando o rsync para fazer backup de um compartilhamento hospedado pelo Windows no Samba no FreeBSD

1

Eu estou tentando fazer backup de um compartilhamento hospedado pelo Windows, usando o rsync, de uma caixa do FreeBSD8.2:

bash$ sudo -i
bash#  uname -a
FreeBSD zeus.companyname.gr 8.2-RELEASE ...amd64
bash# cat /root/.nsmbrc
...
[MACHINENAME:ADMINISTRATOR]
password=mysuperuncrackablepassword
bash# mount_smbfs -N -E utf-8:cp737 -I 192.168.0.2 //Administrator@machinename/f$ /iso1/
bash# ls -l -raw /iso1/prj/
ΠΡΟΕΤΟΙΜΑΣΙΑ ΔΕΔΟΜΕΝΩΝ ΠΑΡΕΛΘΟΝΤΩΝ ΕΤΩΝ
Πανεπιστήμιο - Προβολή, Δημοσιότητα

Em palavras simples, vejo corretamente as pastas com caracteres gregos (específicos da localidade). A listagem acima é de uma sessão do PuTTY (ou seja, uma sessão SSH), e o PuTTY foi configurado para traduzir o UTF-8 por padrão.

Note que não toquei na localidade:

bash# locale
LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=

Então tudo parece estar bem.

No entanto, quando eu tentei rsyncing da pasta montada, alguns arquivos parecem desaparecer ...

bash# rsync --inplace -rltvxp /iso1/ /backups/backup-machinename/
sending incremental file list
file has vanished: "/iso1/prj/..."

A mensagem "arquivo desapareceu" significa que o rsync chamou as chamadas de sistema adequadas para ler o conteúdo de uma pasta (dir / dirent, acredito) e, quando tentou ler mais tarde um dos arquivos contidos, não localizou isso - ou seja, "open (2)" falhou.

Eu verifiquei o arquivo relatado: (a) ele existe, (b) ele tem permissões legíveis pelo mundo.

Assumi então que o cp737 (página de códigos grega) é o problema, então montei novamente com ...

bash$ mount_smbfs -N -E utf-8:utf-8 -I 192.168.0.2 //Administrator@machinename/f$ /iso1/

... ou seja, usei o utf-8 para o lado do Windows também. Quando tentei o rsync novamente, no entanto, ele ficou preso (!) Com 100% de utilização da CPU ... A conexão com o GDB mostrou:

bash# gdb /usr/local/bin/rsync 3109
GNU gdb 6.1.1 [FreeBSD]
Attaching to program: /usr/local/bin/rsync, process 3109
Reading symbols from /lib/libc.so.7...(no debugging symbols found)...done.
Loaded symbols for /lib/libc.so.7
Reading symbols from /libexec/ld-elf.so.1...(no debugging symbols found)...done.
Loaded symbols for /libexec/ld-elf.so.1
0x0000000800709c0a in getdirentries () from /lib/libc.so.7

... então parece que o rsync está preso esperando o retorno de getdirentries, ou cada chamada para getirentries leva um tempo impossível ...

Alguma idéia?

Alguém conseguiu fazer o que estou fazendo? Ou seja Use o FreeBSD para arquivos rsync com caracteres específicos de localidade em seus nomes de arquivos, a partir de um compartilhamento do Windows montado via mount_smbfs?

P.S. Caso alguém se pergunte por que tento fazer isso, a resposta é simples: ZFS.

    
por ttsiodras 24.03.2011 / 14:34

1 resposta

1

Não sei se a execução do rsync sobre o samba é uma boa ideia. Não sei o que o rsync faz internamente, mas ele pode gerar muito tráfego de rede para verificar quais arquivos foram alterados.

Há também uma versão para Windows do rsync, que pode ser executada como um serviço do sistema ( link ). Dessa forma, você não tem o carregamento da rede e, como ele usa somente as chamadas locais na máquina para fazer o backup, pode corrigir os problemas acima também. Eu usei esse método para fazer backup de laptops de usuários.

    
por 24.03.2011 / 20:12