{"id":789,"date":"2023-12-20T18:34:01","date_gmt":"2023-12-20T18:34:01","guid":{"rendered":"http:\/\/arripio.com.br\/?p=789"},"modified":"2023-12-20T18:34:01","modified_gmt":"2023-12-20T18:34:01","slug":"rsync-nao-faz-analise-de-checksum-dos-arquivos-por-padrao","status":"publish","type":"post","link":"https:\/\/arripio.com.br\/?p=789","title":{"rendered":"Rsync n\u00e3o faz an\u00e1lise de checksum dos arquivos por padr\u00e3o"},"content":{"rendered":"\n<p><strong>Rsync n\u00e3o faz an\u00e1lise de checksum dos arquivos por padr\u00e3o<\/strong><\/p>\n\n\n\n<p>Do man rsync<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp;Rsync &nbsp;finds &nbsp;files &nbsp;that &nbsp;need to be transferred using a &#8220;quick check&#8221; algorithm (by default) that looks for files<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp;that have changed in size or in last-modified time. &nbsp;Any changes in the other preserved attributes (as requested by<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp;options) &nbsp;are &nbsp;made &nbsp;on &nbsp;the destination file directly when the quick check indicates that the file&#8217;s data does not<\/p>\n\n\n\n<p>&nbsp; &nbsp; &nbsp; &nbsp;need to be updated.<\/p>\n\n\n\n<p>Logo, se temos dois arquivos:<\/p>\n\n\n\n<p>mkdir -p \/tmp\/testersync\/{origem,destino}<\/p>\n\n\n\n<p>echo&nbsp;&#8220;O rsync nao faz checksum por padrao&#8221; &gt; \/tmp\/testersync\/origem\/arquivo<\/p>\n\n\n\n<p>Se, um tempo depois, voc\u00ea criar um arquivo igual no destino:<\/p>\n\n\n\n<p>echo&nbsp;&#8220;O rsync nao faz checksum por padrao&#8221; &gt; \/tmp\/testersync\/destino\/arquivo<\/p>\n\n\n\n<p>E usar o rsync:<\/p>\n\n\n\n<p>rsync -avi \/tmp\/testersync\/origem\/ \/tmp\/testersync\/destino<\/p>\n\n\n\n<p>sending incremental file list<\/p>\n\n\n\n<p>&gt;f..t&#8230;&#8230; arquivo<\/p>\n\n\n\n<p>Esse t na sa\u00edda do log mostra que ele notou que o timestamp est\u00e1 diferente.<\/p>\n\n\n\n<p>Se voc\u00ea mudar o tamanho da frase:<\/p>\n\n\n\n<p>echo&nbsp;&#8220;Claro que o rsync faz checksum por padrao, oras&#8221; &gt; \/tmp\/testersync\/destino\/arquivo<\/p>\n\n\n\n<p>Agora o rsync vai falar que ele mudou n\u00e3o s\u00f3 o timestamp mas o tamanho:<\/p>\n\n\n\n<p>rsync -avi &nbsp;\/tmp\/testersync\/origem\/ \/tmp\/testersync\/destino<\/p>\n\n\n\n<p>sending incremental file list<\/p>\n\n\n\n<p>&gt;f.st&#8230;&#8230; arquivo<\/p>\n\n\n\n<p>Agora vamos tentar enganar o rsync. Vou criar o arquivo com a mesma frase, mas toda em mai\u00fascula:<\/p>\n\n\n\n<p>\u2002\u2002\u2002\u2002\u2002\u2002cat \/tmp\/testersync\/origem\/arquivo | tr &#8216;[a-z]&#8217; &#8216;[A-Z]&#8217; &gt; \/tmp\/testersync\/destino\/arquivo<\/p>\n\n\n\n<p>Do ponto de vista computacional, claramente eles s\u00e3o diferentes:<\/p>\n\n\n\n<p>find \/tmp\/testersync -type f -exec sha256sum &#8216;{}&#8217; \\+<\/p>\n\n\n\n<p>f27d88d52759a4b07c077f34c230c47b94ea88b6640fc47b44d562243966eb7e &nbsp;\/tmp\/testersync\/destino\/arquivo<\/p>\n\n\n\n<p>47c6ec4243572212a13d657637a62975a1007cf5881668cf7d02d370956dc3b3 &nbsp;\/tmp\/testersync\/origem\/arquivo<\/p>\n\n\n\n<p>O tamanho \u00e9 o mesmo:<\/p>\n\n\n\n<p>find \/tmp\/testersync -type f -printf &#8216;%P: %s\\n&#8217;<\/p>\n\n\n\n<p>destino\/arquivo: 36<\/p>\n\n\n\n<p>origem\/arquivo: 36<\/p>\n\n\n\n<p>Mas se voc\u00ea usar o rsync, ele vai retransferir o arquivo porque o&nbsp;<strong>mtime<\/strong>&nbsp;\u00e9 diferente, e isso \u00e9 um grande indicador que algo mudou no arquivo:<\/p>\n\n\n\n<p>find \/tmp\/testersync -type f -printf &#8216;%P: %t\\n&#8217;<\/p>\n\n\n\n<p>destino\/arquivo: Sun Dec 17 14:45:<a href=\"callto:20.4011998470 2023\">20.4011998470 2023<\/a><\/p>\n\n\n\n<p>origem\/arquivo: Sun Dec 17 14:43:<a href=\"callto:11.4812008470 2023\">11.4812008470 2023<\/a><\/p>\n\n\n\n<p>Ent\u00e3o, se voc\u00ea executar o rsync, ele vai substituir o arquivo:<\/p>\n\n\n\n<p>&nbsp;rsync -avi \/tmp\/testersync\/origem\/ \/tmp\/testersync\/destino<\/p>\n\n\n\n<p>sending incremental file list<\/p>\n\n\n\n<p>&gt;f..t&#8230;&#8230; arquivo<\/p>\n\n\n\n<p>find \/tmp\/testersync -type f -exec sha256sum &#8216;{}&#8217; \\+<\/p>\n\n\n\n<p>47c6ec4243572212a13d657637a62975a1007cf5881668cf7d02d370956dc3b3 &nbsp;\/tmp\/testersync\/destino\/arquivo<\/p>\n\n\n\n<p>47c6ec4243572212a13d657637a62975a1007cf5881668cf7d02d370956dc3b3 &nbsp;\/tmp\/testersync\/origem\/arquivo<\/p>\n\n\n\n<p>S\u00f3 que isso \u00e9 bem diferente de executar an\u00e1lise de checksum, que em larga escala, pode ser muito ineficiente.&nbsp;<\/p>\n\n\n\n<p>Vamos enganar o rsync. Primeiro recrio o arquivo diferente:<\/p>\n\n\n\n<p>\u2002\u2002\u2002\u2002\u2002\u2002cat \/tmp\/testersync\/origem\/arquivo | tr &#8216;[a-z]&#8217; &#8216;[A-Z]&#8217; &gt; \/tmp\/testersync\/destino\/arquivo<\/p>\n\n\n\n<p><br>Depois eu altero os hor\u00e1rios dele para ficarem iguais ao da origem (conhece essa fun\u00e7\u00e3o do comando touch?):<\/p>\n\n\n\n<p>touch \/tmp\/testersync\/destino\/arquivo -r \/tmp\/testersync\/origem\/arquivo<\/p>\n\n\n\n<p>Como o rsync enxerga o arquivo agora?<\/p>\n\n\n\n<p>find \/tmp\/testersync -type f -printf &#8216;%P:Tamanho %s, Mtime %t\\n&#8217;<\/p>\n\n\n\n<p>destino\/arquivo:Tamanho 36, Mtime Sun Dec 17 14:43:<a href=\"callto:11.4812008470 2023\">11.4812008470 2023<\/a><\/p>\n\n\n\n<p>origem\/arquivo:Tamanho 36, Mtime Sun Dec 17 14:43:<a href=\"callto:11.4812008470 2023\">11.4812008470 2023<\/a><\/p>\n\n\n\n<p>Do ponto de vista do rsync, eles agora s\u00e3o&nbsp;<strong>iguais<\/strong>:<\/p>\n\n\n\n<p>rsync -avi \/tmp\/testersync\/origem\/ \/tmp\/testersync\/destino<\/p>\n\n\n\n<p>sending incremental file list<\/p>\n\n\n\n<p>sent 85 bytes &nbsp;received 12 bytes &nbsp;194.00 bytes\/sec<\/p>\n\n\n\n<p>total size is 36 &nbsp;speedup is 0.37<\/p>\n\n\n\n<p>Pelo log, voc\u00ea pode ver que ele n\u00e3o transferiu nada, e o checksum segue diferente:<\/p>\n\n\n\n<p>find \/tmp\/testersync -type f -exec sha256sum &#8216;{}&#8217; \\+<\/p>\n\n\n\n<p>f27d88d52759a4b07c077f34c230c47b94ea88b6640fc47b44d562243966eb7e &nbsp;\/tmp\/testersync\/destino\/arquivo<\/p>\n\n\n\n<p>47c6ec4243572212a13d657637a62975a1007cf5881668cf7d02d370956dc3b3 &nbsp;\/tmp\/testersync\/origem\/arquivo<\/p>\n\n\n\n<p>Neste tipo de situa\u00e7\u00e3o &#8211; que geralmente \u00e9 improv\u00e1vel de acontecer, mas n\u00e3o necessariamente imposs\u00edvel, voc\u00ea precisa da flag -c:<\/p>\n\n\n\n<p>rsync -avic \/tmp\/testersync\/origem\/ \/tmp\/testersync\/destino<\/p>\n\n\n\n<p>sending incremental file list<\/p>\n\n\n\n<p>&gt;fc&#8230;&#8230;.. arquivo<\/p>\n\n\n\n<p>find \/tmp\/testersync -type f -exec sha256sum &#8216;{}&#8217; \\+<\/p>\n\n\n\n<p>47c6ec4243572212a13d657637a62975a1007cf5881668cf7d02d370956dc3b3 &nbsp;\/tmp\/testersync\/destino\/arquivo<\/p>\n\n\n\n<p>47c6ec4243572212a13d657637a62975a1007cf5881668cf7d02d370956dc3b3 &nbsp;\/tmp\/testersync\/origem\/arquivo<\/p>\n\n\n\n<p>Se voc\u00ea quiser&nbsp;<strong>garantir<\/strong>&nbsp;que a origem e o destino s\u00e3o iguais, voc\u00ea precisa desta flag. Se voc\u00ea est\u00e1 trabalhando com arquivos que usam algum tipo de empacotamento bin\u00e1rio de data (basicamente qualquer coisa), a chance desse tipo de situa\u00e7\u00e3o passar batido \u00e9 extremamente baixa. Mas quando voc\u00ea trabalha com muitos arquivos textos com formatos e layouts parecidos e com filesystems extravagantes que podem n\u00e3o expor o mtime adequadamente, voc\u00ea pode cair nessa armadilha.<\/p>\n\n\n\n<p>Autor: <strong>Marcelo Rocha<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Rsync n\u00e3o faz an\u00e1lise de checksum dos arquivos por padr\u00e3o Do man rsync &nbsp; &nbsp; &nbsp; &nbsp;Rsync &nbsp;finds &nbsp;files &nbsp;that &nbsp;need to be transferred using a &#8220;quick check&#8221; algorithm (by default) that looks for files &nbsp; &nbsp; &nbsp; &nbsp;that have&hellip; <br \/><a class=\"read-more-button\" href=\"https:\/\/arripio.com.br\/?p=789\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[1],"tags":[],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pazGcY-cJ","jetpack-related-posts":[{"id":84,"url":"https:\/\/arripio.com.br\/?p=84","url_meta":{"origin":789,"position":0},"title":"Servi\u00e7o de E-mail 211","date":"9 Junho, 2014","format":false,"excerpt":"SMTP- MTA -\u00a0Postfix, Sedmail, qmail, Exim POP e IMAP - MDA Currier Dovecot MUA - Thunderbird Evolution SendMail aquivos de configura\u00e7\u00e3o \/etc\/mail Servidor Exim arquivos de configura\u00e7\u00e3o \/etc\/default\/exim4 Alias no postfix e sendmail \u00a0 \u00a0\/etc\/aliases \u00a0 usu\u00e1rio: usu\u00e1rios_a_ser_encaminhados \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u2026","rel":"","context":"In &quot;Automa\u00e7\u00e3o&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":97,"url":"https:\/\/arripio.com.br\/?p=97","url_meta":{"origin":789,"position":1},"title":"LPIC-2 202 PAM Authentication","date":"29 Junho, 2014","format":false,"excerpt":"Arquivos de configura\u00e7\u00e3o O prop\u00f3sito do do projeto PAM \u00e9 separar a concess\u00e3o de privil\u00e9gios nos aplicativos do desenvolvimento de esquemas de autentica\u00e7\u00e3o apropriados e seguros. Isto \u00e9 realizado fornecendo-se uma biblioteca de fun\u00e7\u00f5es utilizada pelas aplica\u00e7\u00f5es para solicitar a autentica\u00e7\u00e3o de usu\u00e1rios.\u00a0 As bibliotecas PAM s\u00e3o configuradas no arquivo\u00a0\/etc\/pam.conf\u00a0ou\u2026","rel":"","context":"In &quot;Automa\u00e7\u00e3o&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":736,"url":"https:\/\/arripio.com.br\/?p=736","url_meta":{"origin":789,"position":2},"title":"Meu uso do comando screen no lINUX","date":"18 Maio, 2021","format":false,"excerpt":"Normalmente eu fa\u00e7o uso do screen quando vou executar comando de grande dura\u00e7\u00e3o e que em caso de perder a sess\u00e3o do meu ssh n\u00e3o interrompa o trabalho no meio da execu\u00e7\u00e3o. Basicamente ele executa o comando em uma sess\u00e3o em background na qual vc pode verificar a qualquer momento\u2026","rel":"","context":"In &quot;Sem categoria&quot;","img":{"alt_text":"","src":"https:\/\/i2.wp.com\/img.youtube.com\/vi\/wDHKbiR7Hts\/0.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":31,"url":"https:\/\/arripio.com.br\/?p=31","url_meta":{"origin":789,"position":3},"title":"LPIC-2 Web Service 208","date":"24 Maio, 2014","format":false,"excerpt":"Arquivo de configura\u00e7ao: \u00a0\/etc\/apache2\/apache2.conf \u00a0 ServerRoot \"\/etc\/apache2\" caminho de configura\u00e7\u00e3o dos arquivos do apache Timeout 300 Tempo m\u00e1ximo em segundos que o apache aguarda por resposta do cliente KeepAlive On Uso de diversas requisi\u00e7\u00f5es dentro da mesma conex\u00e3o MaxKeepAliveRequests 100 Numero m\u00e1ximo que o usu\u00e1rio poder\u00e1 fazer dentro da mesma\u2026","rel":"","context":"In &quot;Cerifica\u00e7\u00e3o LPIC-2 202&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":73,"url":"https:\/\/arripio.com.br\/?p=73","url_meta":{"origin":789,"position":4},"title":"Administra\u00e7\u00e3o de Rede 210","date":"9 Junho, 2014","format":false,"excerpt":"DHCP host ArripioLinux{ hardware ethernet 00:00:00:00:00:00; fix-address 10.1.0.3; } option domain-name-servers option domain-name \"Arripio.net\"; Tipo de de autentica\u00e7\u00e3o PAM account auth password session Controle do PAM requisite -> autentica\u00e7\u00e3o \u00e9 imediata negada, no caso de negativa do m\u00f3dulo required ->autentica\u00e7\u00e3o recusada no caso de negativa do m\u00f3dulo , mas consultar\u00e1\u2026","rel":"","context":"In &quot;Automa\u00e7\u00e3o&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":261,"url":"https:\/\/arripio.com.br\/?p=261","url_meta":{"origin":789,"position":5},"title":"Agradecimento","date":"23 Setembro, 2015","format":false,"excerpt":"Primeiro, pe\u00e7o desculpas pela minha aus\u00eancia familiar, isso n\u00e3o tem sido f\u00e1cil ,por\u00e9m necess\u00e1ria. Agrade\u00e7o a Deus todos os dia por fazer parte dessa fam\u00edlia maravilhosa a qual e me orgulho muito. Nela encontro os melhores exemplos que uma pessoa pode ter como ser humano: luta, determina\u00e7\u00e3o, educa\u00e7\u00e3o, generosidade, fraternidade,\u2026","rel":"","context":"In &quot;Sem categoria&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/arripio.com.br\/index.php?rest_route=\/wp\/v2\/posts\/789"}],"collection":[{"href":"https:\/\/arripio.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arripio.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arripio.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/arripio.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=789"}],"version-history":[{"count":1,"href":"https:\/\/arripio.com.br\/index.php?rest_route=\/wp\/v2\/posts\/789\/revisions"}],"predecessor-version":[{"id":790,"href":"https:\/\/arripio.com.br\/index.php?rest_route=\/wp\/v2\/posts\/789\/revisions\/790"}],"wp:attachment":[{"href":"https:\/\/arripio.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=789"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arripio.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=789"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arripio.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=789"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}