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

4

Usando o Windows 7, tenho um servidor com pastas compartilhadas configuradas. Se eu abrir um deles e pegar um arquivo e movê-lo para uma subpasta, ele é instantâneo - obviamente, o arquivo está sendo movido apenas 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, demorará muito tempo, como baixar o arquivo do primeiro compartilhamento para o meu computador em uma pasta temporária e enviá-lo para a outra parte.

Existe alguma maneira de mover arquivos entre diferentes compartilhamentos como este sem o meu computador baixá-los entre eles? Eu quero um pouco de velocidade porque geralmente são arquivos bastante grandes.

    
por olofom 08.11.2012 / 19:43

3 respostas

2

Quando você diz "outra pasta compartilhada", quer dizer "uma pasta em um compartilhamento de arquivo diferente (ou seja, uma unidade mapeada diferente)"? Nesse caso, esse é o problema e não há uma solução mágica fácil. Quando você move um arquivo de uma pasta para outra no 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ê copia um arquivo, o SO deve ler cada bloco de dados e gravá-lo em um novo local. E uma mudança entre volumes pode ser uma mudança entre discos fisicamente separados - deve ser tratada como uma cópia seguida por uma exclusão do arquivo de origem - porque as entradas de diretório não podem apontar para blocos de dados em um volume diferente.

P.S. Ironicamente, um movimento entre discos fisicamente separados pode até ser mais rápido do que um movimento entre partições (volumes ou “compartilhamentos”) no mesmo disco, porque no último caso as cabeças de E / S de disco precisam pular para frente e para trás entre o (s) cilindro (s) de origem e o (s) cilindro (s) de destino.

    
por 09.11.2012 / 01:12
2

Mesmo que eu esteja atrasado para a festa, ainda assim, aqui está a receita, e eu acredito que é um método prático, com algumas precondições .

  • A ideia principal é dizer ao servidor para mover os objetos em um local específico (o que obviamente está em um compartilhamento do Samba) para outro local (que claro está em outra parte do Samba).

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

  • E a cozinha (ou talvez a sala de jantar) é 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 para, digamos, share.x. Se o usuário quiser mover / copiar algo dentro do share.x para share.y, aqui está a operação:

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

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

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

  4. Feito!

As condições prévias incluem, uma estrutura de pastas específica como acima, um job / service / script executado no servidor para executar a operação mv real.

Eu tenho meu próprio código de script para compartilhar com você, 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_dir e $dest_dir para atender a sua necessidade.

Eu uso supervisor para gerenciar vários scripts, como acima, para fazer meu "teletransporte Samba". Se você não estiver familiarizado com supervisor , consulte o link e outras respostas sobre ele.

    
por 24.08.2016 / 16:06
1

A maneira mais fácil / rápida e suja seria fazer isso do próprio servidor ou criar um compartilhamento que tenha dois compartilhamentos de destino como subpastas (por exemplo, \servername\c$ ).

    
por 08.11.2012 / 20:20