外部HDDに特定ディレクトリ以下を丸ごとバックアップする想定の手順に関するメモ
基本構文
基本的に-av
オプションをつけておけば良い
> rsync -av …
dir1ディレクトリを、backupディレクトリにコピーする
> rsync -av /usr/temp/dir1 /usr/temp/backup
アーカイブモード(-a)に関して
-a
は、下記のオプションをまとめたものになる
-r : ディレクトリを再帰的にコピーする
-l : シンボリックリンクを、そのままシンボリックリンクとしてコピーする
-p : パーミッションをそのままコピーする
-t : タイムスタンプをそのままコピーする
-g : グループをそのままコピーする
-o : ファイルオーナー (所有者) をそのままコピーする
-D : デバイスファイルやを特殊ファイルを、そのままコピーする
-v : コピーしたファイル名や、コピーしたバイト数などの転送情報を表示するオプション
コピー元の末尾にスラッシュ(/)をつける場合とつけない場合の違い
- スラッシュ(/)付き
コピー元ディレクトリの中身
がコピーされる
rsync -av /usr/temp/dir1/ /usr/temp/backup
--------------------
usr
└temp
└backup
└A
- スラッシュ(/)なし
コピー元のディレクトリ
がコピーされる
rsync -av /usr/temp/dir1 /usr/temp/backup
--------------------
usr
└temp
└backup
└dir1
└A
- –delete
–deleteオプションを追加すると、コピー元で削除されたファイルが、コピー先でも削除される
。
つまり同期
されるようになる。このオプションを付けないと、コピー先は増えていく一方である。
> rsync -av --delete dir/ backup
- –dry-run
実際のコピーや削除は行われない。テストモード。
> rsync -av --delete --dry-run dir/ backup
nohupでログアウトしてもバックアップし続けるようにする
&
はスペースを空けないで
付けること
> sudo nohup rsync -av /home /media/hdd/BACKUP&
rsyncコマンドの備忘録
外部HDD(sdb1)を/media/hddにマウントし、rsyncで同期コピーする。
またrsyncはnohupで実行する。
> sudo mount /dev/sdb1 /media/hdd/
> cd /
> sudo nohup rsync -av --delete --exclude "media" / /media/hdd/BACKUP&
> sudo umount /dev/sdb1
ddコマンドについて
rsyncについてはディレクトリやファイルをコピーするイメージだが、ddコマンドはハードディスクのセクターをコピーするようなコマンド。ハードディスクを丸ごとコピーするのに向いている。なので、1TBのハードディスクの場合、1MBファイルが1個しかなくても1TB丸ごとコピーすることになる。
ddコマンドの使い方
> dd if=[コピー元デバイス] of=[コピー先デバイス] bs=[バッファ] conv=[オプション]
注意点としては、コピー先のデバイスはマウントしてない状態で実行する必要がある。また、デバイスファイル名はlsblkコマンドなどで確認する。
以下の場合、通常使用しているのが、/dev/sda
でバックアップ用に接続したHDDが/dev/sdb
となる。いくつかのパーティションに区切られているが、ddコマンドではお構いなしに丸ごと上書きする。
> lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 1.8T 0 disk
├─sda1 8:1 0 59.6G 0 part /
├─sda2 8:2 0 1K 0 part
├─sda5 8:5 0 7.5G 0 part [SWAP]
└─sda6 8:6 0 1.8T 0 part /home
sdb 8:16 0 1.8T 0 disk
├─sdb1 8:17 0 59.6G 0 part
├─sdb2 8:18 0 1K 0 part
├─sdb5 8:21 0 7.5G 0 part
└─sdb6 8:22 0 1.8T 0 part
あと、オプションに関しては、bsで指定するバッファサイズは大きくなるほど転送時間が短くなるようで、とりあえず64kぐらいを目安にしている。convで指定するオプションとしてはnoerrorとsyncが一般的のようである。(エラーが発生しても続行する)
上記を踏まえて普段使用するコマンドは以下になる
> sudo dd if=/dev/sda of=/dev/sdb bs=64k conv=noerror,sync
ちなみに進捗を表示する機能がないようで、以下のように別のコンソールからコマンドを実行すると、進捗具合が表示される。
> sudo killall -USR1 dd