<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>organelas &#187; script</title>
	<atom:link href="http://organelas.com/tag/script/feed/" rel="self" type="application/rss+xml" />
	<link>http://organelas.com</link>
	<description></description>
	<lastBuildDate>Mon, 14 May 2012 13:00:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Shell script para backup usando rsync e ssh em DHCP no Ubuntu</title>
		<link>http://organelas.com/2009/08/07/shell-script-para-backup-usando-rsync-e-ssh-em-dhcp-no-ubuntu/</link>
		<comments>http://organelas.com/2009/08/07/shell-script-para-backup-usando-rsync-e-ssh-em-dhcp-no-ubuntu/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 13:00:27 +0000</pubDate>
		<dc:creator>nelas</dc:creator>
				<category><![CDATA[código]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[dhcp]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[shell script]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://organelas.com/?p=334</guid>
		<description><![CDATA[[Fiz uma versão nova, mais completa, deste script. Confira aqui.] No meu computador mantenho apenas arquivos essenciais para o trabalho da semana/mês e vou estocando tudo em discos rígidos externos progressivamente. Contudo, como eles são meio desorganizados, queria um jeito prático de fazer backup completo dos arquivos diários de trabalho. A solução foi criar um [...]]]></description>
			<content:encoded><![CDATA[<ul class="lang_switch"></ul>
<p><span style="color: #ff0000;">[Fiz uma versão nova, mais completa, deste script. Confira <a href="http://organelas.com/2010/01/24/shell-script-para-backup-nova-versao/">aqui</a>.]</span></p>
<p>No meu computador mantenho apenas arquivos essenciais para o trabalho da semana/mês e vou estocando tudo em discos rígidos externos progressivamente. Contudo, como eles são meio desorganizados, queria um jeito prático de fazer backup completo dos arquivos diários de trabalho.</p>
<p>A solução foi criar um <a title="Shell Script" href="http://pt.wikipedia.org/wiki/Shell_script">script em shell</a> (bash) que fizesse uma cópia exata do meu computador para outra máquina conectada na rede local.</p>
<p>Depois de uma rápida pesquisa vi que o <a title="rsync" href="http://www.samba.org/rsync/"><em>rsync</em></a> era a ferramenta que estava procurando para o trabalho. Não é preciso muito para conseguir fazer o backup com o <em>rsync</em>, basta usar o seguinte comando (cheque a <a title="rsync documentação" href="http://www.samba.org/rsync/documentation.html">documentação</a> para entender os argumentos):</p>
<pre class="brush:bash">
rsync -ah --delete -e ssh /home/user1 user2@IPouHostname:/home/user2/Backup/
#nota de precaução: o --delete faz com que os arquivos no destino sejam deletados, caso estejam ausentes na origem
</pre>
<p>No entanto, foi preciso configurar algumas coisas para que tudo corresse bem nas duas máquinas rodando <a title="Ubuntu" href="http://www.ubuntu.com/">Ubuntu</a>.</p>
<p>Como minha rede local é <a title="DHCP" href="http://pt.wikipedia.org/wiki/DHCP">DHCP</a> as máquinas não tem um IP estático. Queria rodar o script sem precisar saber o IP do destino usando apenas o <em><a title="hostname" href="http://en.wikipedia.org/wiki/Hostname">hostname</a></em> (nome da máquina na rede). Quando tentei conectar via <em>ssh</em> usando o <em>hostname</em> original não consegui. Para funcionar é necessário simplesmente mudar o <em>hostname</em> da máquina de destino para <em>hostname.local</em>. Siga estas <a title="Mudar hostname ubuntu" href="http://codeghar.wordpress.com/2007/11/04/change-hostname-in-ubuntu/">instruções</a> resumidas abaixo:</p>
<ol>
<li>Abra o arquivo <strong>/etc/hosts</strong> com um editor de texto pelo terminal
<p><code>sudo vim /etc/hosts</code></li>
<li>Mude a linha
<p><code>127.0.1.1 hostname</code></p>
<p>para</p>
<p><code>127.0.1.1 hostname.local</code></li>
<li>Salve o arquivo e abra o arquivo <strong>/etc/hostname</strong> com
<p><code>sudo vim /etc/hostname</code></li>
<li>Mude o <em>hostname</em> para <em>hostname.local</em> e salve</li>
<li>Reinicie a máquina ou execute:
<ol>
<li><code>sudo /etc/init.d/hostname.sh stop</code></li>
<li><code>sudo /etc/init.d/hostname.sh start</code></li>
<li><code>sudo /etc/init.d/network restart</code></li>
</ol>
</li>
</ol>
<p>Com isso foi possível conectar via ssh sem precisar saber o IP, apenas com o <em>hostname</em>. Outra pendenguinha é que o ssh precisa da senha de usuário da máquina de destino para se conectar. Pra evitar isso e conseguir fazer o login remotamente sem precisar digitar a senha siga <a title="SSH remote login" href="http://immike.net/blog/2007/08/06/password-free-remote-login-and-other-ssh-tips/" class="broken_link">estes passos</a> (isso permite com que você possa iniciar o backup sem precisar estar por perto, por exemplo deixar agendado para rodar o script 1 vez por semana).</p>
<p>Com isso resolvido abra o script abaixo num editor de texto, edite os detalhes de configuração, salve e execute o script num terminal. Para executar torne o arquivo executável com o comando</p>
<p><code>chmod 755 backup.sh</code></p>
<p>e execute com</p>
<p><code>./backup.sh</code></p>
<p>Tentei fazer com que meu computador ligasse remotamente (para que nem precisasse ligar a máquina de destino pra fazer backup &#8211; o script a ligaria remotamente), mas não consegui. Tem instruções sobre o <em>wakeonlan</em> <a title="wakeonlan" href="http://blog.expept.info/?p=173" class="broken_link">aqui</a>.</p>
<p>O script abaixo basicamente:</p>
<ul>
<li>Checa se a máquina de destino está ligada (se estiver desligada ele avisa, põe no log e fecha)</li>
<li>Se estiver ligada ele executa o <em>rsync</em> (o <strong>&#8211;delete-before</strong> deleta os arquivos do destino antes de copiar os arquivos novos; útil se não houver muito espaço no disco do destino &#8211; o padrão é <strong>&#8211;delete</strong> que vai deletando e copiando progressivamente)</li>
<li>O terminal mostra todas as operações e calcula a duração do backup. Tudo isso fica registrado num arquivo log</li>
</ul>
<p>Obviamente sugestões são muito bem vindas! Segue então o script:</p>
<pre class="brush:bash">
#!/bin/bash

# Script para backup via SSH usando o rsync
# Versão 0.1

## Configuração!!! ##
# Mude os parâmetros abaixo, referentes ao seu sistema

# Arquivo log
LOG=/home/user0/.backup`date +%Y-%m-%d`.log

# Destino
# IP ou hostname da máquina de destino
DESTINO=destino.local

# Usuário no destino
USR=user1

# Diretório de destino
DIR=/home/user1/Backup/

# Origem
# Diretório de origem
SRC=/home/user0

## Fim das Configurações!!! ##

# Checar se a máquina de destino está ligada
/bin/ping -c 1 -W 2 $DESTINO &gt; /dev/null
if [ &quot;$?&quot; -ne 0 ];
then
   echo -e `date +%c` &gt;&gt; $LOG
   echo -e &quot;\n$DESTINO desligado.&quot; &gt;&gt; $LOG
   echo -e &quot;Backup não realizado\n&quot; &gt;&gt; $LOG
   echo -e &quot;--- // ---\n&quot; &gt;&gt; $LOG
   echo -e &quot;\n$DESTINO desligado.&quot;
   echo -e &quot;Backup não realizado.\n&quot;
else
   HORA_INI=`date +%s`
   echo -e `date +%c` &gt;&gt; $LOG
   echo -e &quot;\n$DESTINO ligado!&quot; &gt;&gt; $LOG
   echo -e &quot;Iniciando o backup...\n&quot; &gt;&gt; $LOG
   rsync -ah --delete --stats --progress --log-file=$LOG -e ssh $SRC $USR@$DESTINO:$DIR
   HORA_FIM=`date +%s`
   TEMPO=`expr $HORA_FIM - $HORA_INI`
   echo -e &quot;\nBackup finalizado com sucesso!&quot; &gt;&gt; $LOG
   echo -e &quot;Duração: $TEMPO s\n&quot; &gt;&gt; $LOG
   echo -e &quot;--- // ---\n&quot; &gt;&gt; $LOG
   echo -e &quot;\nBackup finalizado com sucesso!&quot;
   echo -e &quot;Duração: $TEMPO s\n&quot;
   echo -e &quot;Consulte o log da operação em $LOG.\n&quot;
fi

# Afazeres

#	- Incluir em cron job!
#	- Definir como lidar com o arquivo.log (deletar, arquivar, deixar...)
#	- Incluir wakeonlan para ligar o computador se estiver desligado
#	- Desligar máquina de destino após o término do backup
#	- Criar alça para quando a transferência falhar (e.g.,falta de espaço)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://organelas.com/2009/08/07/shell-script-para-backup-usando-rsync-e-ssh-em-dhcp-no-ubuntu/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

