Eu tenho um dispositivo Linux embarcado NAS que possui o Samba4 instalado e em execução. Configurei um compartilhamento de samba e estou tentando fazer uma cópia do lado do servidor nesse compartilhamento de samba de um cliente. Isto é o que estou tentando fazer: https://wiki.samba.org/index.php/Server-Side_Copy
Eu tentei pela primeira vez no Windows7. Primeiro monto esse compartilhamento de samba em meu laptop WIN7 e uso o comando robocopy para copiar um arquivo grande entre dois diretórios nesse compartilhamento. E posso ver que isso funciona. O robocpoy é muito rápido para copiar um arquivo grande. E também analiso o tráfego de rede usando wireshark. Tem algo como: Ioctl req FSCTL_SRV_COPYCHUNK_WRITE Arquivo:... e Ioctl resp FSCTL_SRV_COPYCHUNK_WRITE Arquivo:...
Então tentei no ubuntu15. Tenho certeza de que o kernel Linux do ubuntu15 suporta CIFS_IOC_COPYCHUNK_FILE ioctl. Eu monto esse compartilhamento usando: mount.cifs //[host_ip]/[share_name] [mount_path] -o vers=2.1,username=root. Tenho certeza de que deve ter vers=2.1 porque para usar a cópia do lado do servidor é necessário usar o protocolo SMB2. E novamente com base emhttps://wiki.samba.org/index.php/Server-Side_Copy, diz que "cloner" faz essa função. A função principal aqui é chamar: "ioctl(dst_fd, CIFS_IOC_COPYCHUNK_FILE, src_fd)". Então baixei e compilei o "cloner" e executei esse comando, mas não funcionou. Basicamente, o comando cloner leva uma eternidade e nunca para (kill -9 nem funciona). Eu uso o wireshark para monitorar o tráfego de rede também. O que vejo é: Ele está enviando a mesma solicitação que o Windows7, que é Ioctl req FSCTL_SRV_COPYCHUNK_WRITE Arquivo:..., mas está recebendo um erro dizendo: Resposta Ioctl, Erro: status_invalid_device_request
Por que o clonador no Linux não funciona, mas o robocopy no win7 funciona? Por que está recebendo o erro: status_invalid_device_request? O que está faltando no clonador? Se houver algo faltando aqui ou um bug, como consertar isso? Existe algum código ou ferramenta de cópia do servidor do lado do cliente que eu possa usar?