シェルスクリプトを使ってみる④

概 要

引き続きシェルスクリプトを使ってみます。デバイスをマウントしたり、ファイルコピーしたりしてみようと思います。

ドライブのマウント

デバイスがマウントされているか否かを確認し、マウントされていなければマウントを試みます。
下記スクリプトでは、ディレクトリがマウントポイントかどうかを調べる“mountpoint” コマンドを実行すると、特殊変数 “$?”に実行結果(0:成功,1:失敗)が格納されることを利用します。

#!/bin/bash

mountpoint -q /mnt
chk_mount=$?

if [ $chk_mount -eq 0 ] ; then
    echo " /mnt は、マウント済みです。"
else
    mount /dev/sdd1 /mnt
    mountpoint -q /mnt
    chk_mount=$?

    if [ $chk_mount -eq 0 ] ; then
    	echo " /dev/sdd1 を /mnt にマウントしました。"
    else
	echo " /dev/sdd1 のマウントに失敗しました。"
    fi
fi

echo $chk_mount
echo
exit 0

実行結果は以下の通りです。

 

外付ドライブへファイルバックアップ

外付ドライブのマウントを確認後、ファイルをバックアップします。ルート直下の“TEST”ディレクトリごとマウントした“mnt”下にコピーします。“cp”コマンドに“-f”オプションを指定し強制書込しようとしましたが、同一名ファイル・ディレクトリが既に存在する場合、更新確認メッセージが出ますので、“cp”コマンド前に、“¥” あるいは “\” を設定しエイリアス設定を無効化します。
スクリプトは次の通りです。

#!/bin/bash

mountpoint -q /mnt
chk_mount=$?

if [ $chk_mount -eq 0 ] ; then
    echo " /mnt は、マウント済みです。"
else
    mount /dev/sdd1 /mnt
    mountpoint -q /mnt
    chk_mount=$?

    if [ $chk_mount -eq 0 ] ; then
    	echo " /dev/sdd1 を /mnt にマウントしました。"
    else
	echo " /dev/sdd1 のマウントに失敗しました。"
	exit 1
    fi
fi

echo $chk_mount
echo

\cp -r -f /test/ /mnt/
echo " ディレクトリをコピーしました。(/test → /mnt/test)"
ls -l /mnt/test/

echo
exit 0

実行結果は次の通りです。“mnt”下に“test”ディレクトリが作成され、ファイルがコピーされます。
まだ、実行していませんが、“crond” 等で定期的にスクリプトを実行させ、更新することが可能と思います。

rsync コマンド

rsync コマンドについても少し調べてみました。“rsync”  コマンドは、“cp” コマンドと似ていると思いましたが、“ローカル、及びネットワーク越しに変更があった分だけ同期更新する”ところが異なり、全更新しない為、時間短縮される様です。
次の様にコマンド・オプション・同期元・同期先の順に指定し、実行すると同期元ディレクトリ下のディレクトリとファイルが同期先ディレクトリ下にコピーされます。同期元ディレクトリ末の “/” を省略した場合は、同期先ディレクトリ下に同期元ディレクトリごと新たに作られて、コピーされます。
rsync -a /test/ /mnt/test/

“cp” コマンドを使用したバックアップスクリプト行番24を次の様に書き替え実行します。(行番26 “ls -l” コマンドも消去)
[元] \cp -r -f /test/ /mnt/ → [変更] rsync -av /test/ /mnt/test/

実行結果は次の通りです。2回続けて同じスクリプトを実行します。1回目は11ファイル更新、2回目は一定頻度でファイルに追記する“datefile”のみ更新していますので、適切な結果を得ることが出来ました。

まとめ

バックアップ方法については、他にもデバイスを直接指定できる “dd” コマンド、複数ファイルを一つにまとめる “tar” コマンド、デバイス全体を1つのファイルに保存・復元する “dump / restore” コマンド(※1)等を利用できる様です。また、バックアップとは違う様ですが、“RAID1”(ミラーリング)を構成することで冗長性・耐障害性を高めることが可能とのことです。
使い方だけでなく、どの様な場合にどの方法を使うか、またバックアップ先となるハードディスクなど、確認するにももう少し準備が必要な様です。
※1:ext2/ext3/ext4ファイルシステム対応。CentOS7は、XFSファイルシステム対応の “xfsdump / xfsrestore” 利用。