blog/content/post/2008/08/09/2008-08-09-00000992.md

164 lines
7.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: iMacと玄箱でバックアップをとりたい
author: kazu634
date: 2008-08-09
url: /2008/08/09/_1067/
wordtwit_post_info:
- 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4201;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
categories:
- linux
- rsync
- unix
---
<div class="section">
<p>
現状ではiMacからSamba経由で玄箱にアクセスしている状態です。しかしこれだと全部手動でやらなければいけない。これだと面倒なので、自動でバックアップを行うようにしてみたいと思う。
</p>
<p>
とりあえず自分の知っている知識
</p>
<ul>
<li>
ネットワーク越しのバックアップにはrsyncというのがある…らしい
</li>
<li>
Unix / Linuxで自動的に処理をさせるcronという仕組みがある…らしい
</li>
<li>
cronはシェルスクリプトを登録する仕組みらしい
</li>
</ul>
<p>
これぐらいの知識で、何とか自動的にバックアップをとるようにしていきたい。これが今日の課題。
</p>
<h4>
rsync
</h4>
<p>
公式ページは「<a href="http://www.infoscience.co.jp/technical/rsync/index.html" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.infoscience.co.jp/technical/rsync/index.html', 'rsync');" target="_blank">rsync</a>」。Leopardにはすでにあるので、玄箱のDebianに導入する。
</p>
<pre>
# su
# apt-get install rsync
</pre>
<p>
でrsyncを導入する。rsyncでネットワーク越しにファイルをコピーする場合、どちら側にもrsyncが存在しなければならないらしい。
</p>
<p>
rsyncの使い方は「<a href="http://www.itmedia.co.jp/enterprise/articles/0804/21/news013.html" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.itmedia.co.jp/enterprise/articles/0804/21/news013.html', ' Command Technicaはじめてrsyncを使う方が知っておきたい6つのルール (1/2) &#8211; ITmedia エンタープライズ');" target="_blank"> Command Technicaはじめてrsyncを使う方が知っておきたい6つのルール (1/2) &#8211; ITmedia エンタープライズ</a>」を参照するといい。ネットワーク越しにコピーする場合、「ユーザ名@ホスト名:ディレクトリ」という形式で指定すればいい。たとえば
</p>
<pre>
# rsync -avz --delete -e ssh ~/Documents/howm backup@kurobox:/home/backup
</pre>
<p>
でもこれだと、sshでkuroboxサーバ上のbackupユーザのパスワードを入力するように求められてしまう。これだと自動化できないので、パスワード認証無しで通るようにする。
</p>
<h4>
sshでの認証
</h4>
<p>
<a href="http://www.atmarkit.co.jp/flinux/rensai/linuxtips/447nonpassh.html" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.atmarkit.co.jp/flinux/rensai/linuxtips/447nonpassh.html', 'ITsshでパスワードなしにログインするには');" target="_blank">ITsshでパスワードなしにログインするには</a>」を参考にすればいい。私の場合、玄箱は常時電源ONでiMacは付けたり消えたりしている。だから、玄箱の側でiMacの状態を確認しながらrsyncを起動するようにした。だから、「<a href="http://www.atmarkit.co.jp/flinux/rensai/linuxtips/447nonpassh.html" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.atmarkit.co.jp/flinux/rensai/linuxtips/447nonpassh.html', 'ITsshでパスワードなしにログインするには');" target="_blank">ITsshでパスワードなしにログインするには</a>」のsshサーバがiMac側での作業になる。リモートが玄箱。
</p>
<p>
ここで大事なのがパスフレーズの入力の時に空白にすること<span class="footnote"><a href="/sirocco634/#f1" name="fn1" title="[http://www2s.biglobe.ne.jp/~nuts/labo/inti/cron-rsync-ssh-nodaemon.html:title]参照">*1</a></span>。これでよくなる。
</p>
<p>
基本的な手順はまずiMac側
</p>
<pre>
# ssh-keygen -t rsa ←RSA暗号方式の鍵を作成
Generating public/private rsa key pair.
Enter file in which to save the key (/home/nori/.ssh/id_rsa): Enterキー
Enter passphrase (empty for no passphrase): Enterキー
Enter same passphrase again: Enterキー
Your identification has been saved in /home/nori/.ssh/id_rsa.
Your public key has been saved in /home/&#91;任意のユーザ名]/.ssh/id_rsa.pub.
The key fingerprint is:
# cd ~/.ssh
# cat id_rsa.pub &#62;&#62; $HOME/.ssh/authorized_keys
# chmod 600 $HOME/.ssh/authorized_keys
</pre>
<p>
そして~/.sshにあるid_rsaを玄箱の/home/backup/.sshにコピーして、backupユーザにsuする。玄箱上では
</p>
<pre>
# eval `ssh-agent`
Agent pid 1084
# ssh-add
Identity added: /home/backup/.ssh/id_rsa (/home/backup/.ssh/id_rsa)
</pre>
<p>
この手順でよくなる。
</p>
<h4>
cronに登録するよ
</h4>
<p>
とりあえずシェルを作る。pingでiMacが応答すればrsyncを実行する。「> /dev/null 2>&1」は標準出力とエラー出力を表示させないようにするおまじない。
</p>
<pre>
if ping -qc 1 myimac &#62; /dev/null 2&#62;&#38;1
then
rsync -avz --delete -e ssh simoom634@myimac:/Users/simoom634/Documents/howm /home/backup &#62; /dev/null 2&#62;&#38;1
rsync -avz --delete -e ssh simoom634@myimac:/Users/simoom634/Documents/hatena /home/backup &#62; /dev/null 2&#62;&#38;1
fi
</pre>
<p>
これをcronに登録する。参考になるのは「<a href="http://www.linux.or.jp/JM/html/cron/man5/crontab.5.html" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.linux.or.jp/JM/html/cron/man5/crontab.5.html', '404 &#8211; エラー: 404');" target="_blank">404 &#8211; エラー: 404</a>」。
</p>
<pre>
# su
# crontab -u backup -e
&#91;編集]
</pre>
<p>
ここでの編集内容は
</p>
<pre>
40 &#42; &#42; &#42; &#42; /usr/bin/backup.sh
</pre>
<p>
この設定だと、毎時間40分になったら/usr/bin/backup.shを実行することになる。
</p>
<h4>
できた!
</h4>
<p>
こんな過程を通して、自動でバックアップする環境ができました。これで楽ちんができる。
</p>
</div>
<div class="footnote">
<p class="footnote">
<a href="/sirocco634/#fn1" name="f1">*1</a><a href="http://www2s.biglobe.ne.jp/~nuts/labo/inti/cron-rsync-ssh-nodaemon.html" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www2s.biglobe.ne.jp/~nuts/labo/inti/cron-rsync-ssh-nodaemon.html', 'rsync + cron + ssh rsyncd を立てない編)');" target="_blank">rsync + cron + ssh rsyncd を立てない編)</a>参照
</p>
</div>