Qual é a interação das opções rsync --size-only e --sparse?

2

Se eu usar rsync com as opções --size-only e --sparse juntas, se um arquivo já existir no destino como um arquivo completo (caso contrário, o mesmo), ele não será sobrescrito.

Se eu omitir a opção --size-only , o arquivo não esparso será sobrescrito com a versão esparsa. Eu faço quero que o arquivo seja sobrescrito e quero manter a opção --size-only (a menos que eu possa ser convencido de que não o faço).

Isso faz parte de um script que é executado periodicamente. No passado, a opção --sparse não era usada e muito espaço foi desperdiçado.

Como posso continuar a usar --space-only (e outras opções que não incluí aqui) e ter os arquivos grandes sobrescritos à medida que o script faz seu trabalho? Uma missão de busca e destruição seria muito "cara".

Eu testei isso com rsync 3 no Ubuntu com ext3 e CentOS com ext4. O% realrsync é realizado em uma conexão ssh .

Observe que, na demonstração a seguir, nada muda nos arquivos de origem ou de destino (tamanho, hora ou conteúdo) entre execuções de rsync .

Demonstração:

$ dd if=/dev/zero of=sparse.out bs=1 seek=1M count=1
1+0 records in
1+0 records out
1 byte (1 B) copied, 0.000307332 s, 3.3 kB/s

$ stat sparse.out
  File: 'sparse.out'
  Size: 1048577         Blocks: 16         IO Block: 4096   regular file
Device: 802h/2050d      Inode: 2377326     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  dennis)   Gid: ( 1000/  dennis)
Access: 2011-07-28 22:06:52.000000000 -0500
Modify: 2011-07-28 22:06:52.000000000 -0500
Change: 2011-07-28 22:06:52.000000000 -0500

$ du -h sparse.out
8.0K    sparse.out

$ rsync --size-only sparse.out sparse.out.rsync

$ stat sparse.out.rsync
  File: 'sparse.out.rsync'
  Size: 1048577         Blocks: 2064       IO Block: 4096   regular file
Device: 802h/2050d      Inode: 2377329     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  dennis)   Gid: ( 1000/  dennis)
Access: 2011-07-28 22:09:19.000000000 -0500
Modify: 2011-07-28 22:09:20.000000000 -0500
Change: 2011-07-28 22:09:20.000000000 -0500

$ du -h sparse.out.rsync
1.1M    sparse.out.rsync

$ rsync --size-only --sparse sparse.out sparse.out.rsync

$ stat sparse.out.rsync
  File: 'sparse.out.rsync'
  Size: 1048577         Blocks: 2064       IO Block: 4096   regular file
Device: 802h/2050d      Inode: 2377329     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  dennis)   Gid: ( 1000/  dennis)
Access: 2011-07-28 22:09:19.000000000 -0500
Modify: 2011-07-28 22:09:20.000000000 -0500
Change: 2011-07-28 22:09:20.000000000 -0500

$ du -h sparse.out.rsync
1.1M    sparse.out.rsync

$ rsync --sparse sparse.out sparse.out.rsync

$ stat sparse.out.rsync
  File: 'sparse.out.rsync'
  Size: 1048577         Blocks: 16         IO Block: 4096   regular file
Device: 802h/2050d      Inode: 2377330     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  dennis)   Gid: ( 1000/  dennis)
Access: 2011-07-28 22:11:23.000000000 -0500
Modify: 2011-07-28 22:11:23.000000000 -0500
Change: 2011-07-28 22:11:23.000000000 -0500

$ du -h sparse.out.rsync
8.0K    sparse.out.rsync

$ stat -c '%b %B %o %s' sparse.out sparse.out.rsync
16 512 4096 1048577
16 512 4096 1048577

$ cmp sparse5.out sparse5.out.rsync
$
    
por Dennis Williamson 29.07.2011 / 05:41

1 resposta

1

--size-only diz ao rsync para pular arquivos que correspondam em tamanho. Como os arquivos esparsos são pré-alocados, eles podem ter o mesmo tamanho e ter conteúdo diferente. Sugiro que você remova a opção --size-only e verifique se os horários de modificação estão sincronizados ( --times ). O rsync não verificará o conteúdo do arquivo se os horários de modificação forem correspondentes (que é o que eu suponho que você esteja tentando evitar com --size-only ), enquanto ainda sincroniza os arquivos que foram modificados.

    
por 27.03.2012 / 00:02