Mova arquivos entre dois compartilhamentos de arquivos do Windows no mesmo servidor

Mova arquivos entre dois compartilhamentos de arquivos do Windows no mesmo servidor

Usando o Windows 7, tenho um servidor com pastas compartilhadas configuradas. Se eu abrir um deles, pegar um arquivo e movê-lo para uma subpasta, será instantâneo - o arquivo obviamente só está sendo movido no servidor. O mesmo para duas janelas com a mesma pasta compartilhada aberta.

Se eu, por outro lado, abrir outra pasta compartilhada no mesmo servidor e mover um arquivo entre eles, isso levará muito tempo - como se estivesse baixando o arquivo do primeiro compartilhamento para o meu computador em uma pasta temporária e depois enviando-o para o outro compartilhamento .

Existe alguma maneira de mover arquivos entre diferentes compartilhamentos como este sem que meu computador os baixe no meio? Quero um pouco de velocidade porque geralmente são arquivos muito grandes.

Responder1

Quando você diz “outra pasta compartilhada”, você quer dizer “uma pasta em um compartilhamento de arquivo diferente (ou seja, uma unidade mapeada diferente)”? Nesse caso, esse é o problema e não existe uma solução mágica e fácil. Quando vocêmoverum arquivo de uma pasta para outrano mesmo volume, tudo o que precisa acontecer é que o sistema operacional grave uma nova entrada de diretório na pasta de destino e apague a entrada de diretório antiga na pasta de origem — os dados do arquivo não precisam ser acessados. Quando vocêcópia deum arquivo, o sistema operacional deve ler cada bloco de dados e gravá-lo em um novo local. E uma movimentação entre volumes também pode ser uma movimentação entre discos fisicamente separados — deve ser tratada como uma cópia seguida de exclusão do arquivo de origem — porque as entradas de diretório não podem apontar para blocos de dados em um volume diferente.

PS Ironicamente, uma mudança entre discos fisicamente separados pode até sermais rápidodo que uma movimentação entre partições (volumes ou “compartilhamentos”) no mesmo disco, porque neste último caso os cabeçotes de E/S do disco precisam alternar entre o(s) cilindro(s) de origem e o(s) cilindro(s) de destino.

Responder2

Mesmo estando atrasado para a festa, ainda assim, aqui está a receita, e acredito que seja umamétodo prático, com algumas condições prévias.

  • A ideia centralestá dizendo ao servidor para mover os objetos em um local específico (que obviamente está em um compartilhamento do Samba) paraoutrolocalização (que, claro, está emoutroCompartilhamento de samba).

  • inotifywaité o chef, com os cozinheiros chamados while, read, e mv. Essa é a equipe do nosso jantar.

  • E a cozinha (ou talvez a sala de jantar) fica assim:

Samba shares ├─share.1 │ ├─recv │ ├─to.share.2 │ ├─to.share.3 │ └─[...] ├─share.2 │ ├─recv │ ├─to.share.1 │ ├─to.share.3 │ └─[...] ├─share.3 │ ├─recv │ ├─to.share.1 │ ├─to.share.2 │ └─[...] └─[...]

Um login de usuário, digamos, share.x. Se o usuário quiser mover/copiar algo dentro de share.x para share.y, aqui está a operação:

  1. Escolha os objetos dentro de share.x, mova/copie-os para share.x/to.share.y.

  2. O servidor está monitorando essas to.share.*pastas com inotifywait, portanto sabe que é hora de trabalhar.

  3. O servidor move os objetos dentro share.x/to.share.ypara share.y/recv.

  4. Feito!

As pré-condições incluem uma estrutura de pastas específica como acima, um trabalho/serviço/script executado no servidor para realizar a mvoperação real.

Tenho meu próprio código de script para compartilhar com vocês, mas há muitas melhorias a serem feitas:

inotifywait -m "$source_dir" --format '%w%f' -e moved_to,create,modify | while read file; do mv -v "$file" "$dest_dir"; done

Modifique-os $source_dire $dest_diratenda às suas próprias necessidades.

Eu uso supervisorvários scripts como os acima para fazer meu "teletransporte do Samba". Se você não estiver familiarizado com supervisor, consultehttp://supervisord.org/e outras respostas sobre isso.

Responder3

A maneira mais fácil/rápida e suja seria fazê-lo a partir do próprio servidor ou criar um compartilhamento que tenha ambos os compartilhamentos de destino como subpastas (por exemplo, \\servername\c$).

informação relacionada