O Rsync não desiste de gravar em uma unidade remota não montada

4

Eu tenho tido problemas com uma permanecendo montado em um ponto de montagem . Esse não é o tópico desta pergunta, mas informações de fundo.

O problema é com o rsync. Não parece reconhecer quando está tentando sincronizar com um destino imutável.

Você vê, quando esta unidade não está montada corretamente, tudo o que resta é a pasta do ponto de montagem, que eu tornei imutável.

Em vez de o rsync perceber que não pode transferir para este ponto de montagem, ele continua transferindo vários shows para esse destino remoto. Em vez de falhar, ele olha para a situação como se "ei, este destino não tenha nenhum dos arquivos que me disseram para sincronizar aqui, então é melhor mover todos os arquivos como se fosse uma nova transferência pela primeira vez".

Eu gostaria que o rsync fosse um erro, mas ele tenta gravar 100.000 arquivos neste ponto de montagem, com falha em cada arquivo.

    
por Lonniebiz 11.03.2014 / 20:05

2 respostas

3

Eu não sei se você tem a liberdade de decidir o seu caminho de destino, mas se você tem isso, o que você pode usar é o seguinte truque.

Crie um diretório xyz na pasta do ponto de montagem e altere as permissões usando chmod 000 xyz . Em seguida, monte a unidade no ponto de montagem e torne o diretório xyz deixando as permissões normais. Ajuste o rsync como destino /your-mount-point/xyz/ e se a unidade não estiver montada rsync sairá com um erro:

rsync: change_dir#1 "/your-mount-point/xyz/" failed: Permission denied (13)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(562) [Receiver=3.0.9]
rsync: connection unexpectedly closed (9 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]

Se a unidade estiver montada, rsync funcionará bem.

    
por 11.03.2014 / 20:25
2

Como rsync deve saber que a unidade não está montada? Pontos de montagem são apenas pastas como qualquer outra, então o rsync está fazendo exatamente o que você disse, não há erro porque você deu a ele um diretório que pode ser visualizado, então ele tenta escrever nele.

Uma solução alternativa seria primeiro certificar-se de que sua unidade está montada e então executar rsync . Para este exemplo, estou usando o rótulo da alteração do meu disco rígido externo (Iomega_HDD) de acordo:

mount | grep -q Iomega_HDD && rsync ...

O comando acima executará o comando rsync somente se a unidade estiver montada.

    
por 11.03.2014 / 20:21