グループウェア導入のオーダーで立ち上げ中のサーバーですが、CentOS6.7をminimal導入したため当然のことながらyum様が何度も降臨中です。毎度のことながら、サーバーの話や【備忘録】としている場合、記事というより完全なる覚書きなので、検索で来られた方以外にはおそらく何の役にも立たないシリーズです。
今回、特にハマったということはなく、「買ってきただけの2TB以上のHDDを吊るしでマウントして自動バックアップまで設定する」方針が見えてるオペレーションです。
未来のオレ鯖缶へのメモなわけですが、毎度のごとくLinuxとハードウェアの進化がことごとくこうした備忘録を軽く追い越してくれていることを期待しています。
ちなみに、バックアップには当然コストがかかります。買ってきたパソコンなりスマホなりに対して、どれだけのバックアッププランを立てるかによりますが、外付け型USBのHDDで1万円はラインでしょう。ポータブルHDDも流通が増えていますが、バックアップ用の媒体としては経験上USBメモリと同じくらい危険です。無料のクラウドですがデータをふっとばされる危険性があるので、バックアップのポリシーとしては、こんな感じが一番お値打ちでは。
1.本体でデータ保持(マスターデータ)
→壊れるか廃棄寸前までデータ母艦として。
→軽めの(小さめのファイルのみなら3.のクラウド運用かUSBメモリ)
→入らなくなったら、2.のようにバックアップ媒体は二基必要に。
2.外付けHDDかNASを二基
→デジカメ画像や動画など、大容量が必要でかつ、思い出満載の場合は必然的にこう。
→録画サーバーなどはこんなもんじゃない。
3.クラウドでバックアップ(各サービス元が提供するソフトウェアで自動化)
→ファイルサイズの小さいワード、エクセルなどのドキュメントが中心
書いててこんがらがってきたので、本題へ。
epelリポジトリ
rpm -ivh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
ntfs-3g : CentOS6.x上で、NTFSフォーマットのHDDの読み書き
yum -y install ntfs-3g
parted : Over 2TBでGPTなHDDは、fdiskに怒られます。
ひとまず定番のfdisk。見るだけ。
fdiskであぶり出すと、外付けHDDは見えますが、警告もいただけます。
でも、fdisk -l で見えても、parted -l では見えない罠。
警告: GPT (GUID パーティションテーブル) が ‘/dev/sdf’ に検出されました! この fdisk ユーティリティは GPT をサポートしません。GNU Parted を使ってください。
yum -y install parted
起動。今回ディスク操作を伴わないけど一応。
parted
GNU Parted 2.1
/dev/sda を使用
GNU Parted へようこそ! コマンド一覧を見るには ‘help’ と入力してください。
(parted)
parted終了時 : (parted) quit
parted -l
必要に応じて。
今回は、吊るしのNTFS(要は購入時そのまま)でマウントさせるのでHDDを見るだけ。
blkidで見える、HDDのLABELとUUID(真打ち)
blkid
中略
/dev/sd●: LABEL=”USB外付け2TBHDD名(ハードウェアネーム)” UUID=”ユニークID” TYPE=”ntfs”
sd●として、外付けHDDがNTFSで見えてます。
外付けHDDのマウントポイント作成
ナニはともあれ、Linuxはマウントしなくちゃ。
mnt以下に、今回 usbexthdd2tb としてディレクトリ作成。
いきなり fstab でマウント情報編集、か。
vi /etc/fstab
というのが定石です。
しかし、今回blkidで外付けHDDのLABELとUUIDを引いたのは、USB接続ポート、タイミングによってsdが変更される恐れが強いから。
心を引き締めます。
ですが、こう。
マウントされました。
起動時に自動マウントされているかひとまずリブートでチェック。
OK。
バックアップの方針をもとにrsyncの設定。
Linux界隈では、バックアップソリューションの rsync は、かんたんで人気者。
でも、オプションは豊富。
rsyncオプション一覧
-v、冗長性を高める–verbose
-q、–quietは、非エラーメッセージを抑止します
–no-motdを抑制デーモンモードMOTD(マンページの警告を参照してください)
-c、–checksumチェックサムではなく、MOD-時間&サイズに基づいてスキップ
-a、–archiveアーカイブモード。 -rlptgoDに等しい(無-H、-A、-X)
–no-OPTIONは、(例えば、–no-D)暗黙のオプションをオフにします
-r、–recursive再帰的にディレクトリに
-R、–relative使用相対パス名
–no-暗黙の-dirsには–relativeで暗黙のdirsにを送信しません
-b、–backupバックアップを作成する(–suffix&–backup-dirのを参照してください)
DIR—backup = DIRをDIRに基づく階層にバックアップを作成します
–suffix = SUFFIXバックアップ・セット接尾辞(デフォルト〜W / O –backup-dirの)
-u、–updateは、受信機に新しいファイルをスキップ
インプレース–inplace更新先ファイル(manページを参照してください)
–append短いファイルにデータを追加
–append似ていますが、ファイルのチェックサムの古いデータで–append-確認します
-d、再帰なしで転送ディレクトリを–dirs
-l、–linksはシンボリックリンクとしてシンボリックリンクをコピーします
-L、–copy-リンクは、参照先のファイル/ディレクトリへのシンボリックリンクを変換します
–copy-危険なリンクのみ “安全でない”シンボリックリンクが変換されています
–safe-リンクは、ソースツリーの外を指したシンボリックリンクを無視します
-k、–copy-dirlinksは、参照先のディレクトリにディレクトリへのシンボリックリンクを変換します
-K、–keep-dirlinksは、dirのように、受信機にシンボリックリンクディレクトリを扱います
-H、–hard-リンクはハードリンクを保存します
-p、権限を保持–perms
-E、ファイルの実行可能性を維持する–executability
–chmod = CHMODはファイルおよび/またはディレクトリのアクセス権に影響を与えます
-Aは、(–permsを意味する)のACLを維持–acls
-Xは、拡張属性を保持–xattrs
-o、–ownerは、所有者(スーパユーザのみ)を保存します
-g、グループを保存–group
–devicesデバイスファイル(スーパユーザのみ)を保存します
–copy-デバイスは、通常のファイルのようなデバイスの内容をコピー
–specials特殊ファイルを保存します
–devices –specialsと同じ-D
-t、修正時刻を保存–times
-O、–omit-DIR-時間が–timesからディレクトリを省略します
–super受信機は、スーパーユーザーの活動をしようとします
–fakeスーパーストア/ xattrsを使用して、特権attrsにを回復
-S、–sparse効率的にスパースファイルを扱います
-n、–dry-runが作られた変更なしで試運転を行います
-W、(デルタXFERアルゴリズムなし)–wholeファイルコピーファイル全体
-x、–one-ファイルシステムファイルシステムの境界を越えることはありません。
-B、–block-サイズ= SIZE力固定のチェックサム・ブロック・サイズ
-e、–rsh = COMMANDが使用するリモートシェルを指定します
–rsyncパス= PROGRAMは、リモートマシン上で実行するためにrsyncを指定します
–existing受信機上に新しいファイルを作成するスキップ
すでに受信機上に存在するファイルを更新–ignore-既存のスキップ
–remove-ソース・ファイルの送信者が同期されたファイルを削除(非のdirs)
–delete-中のエイリアスを–del
–delete先のdirsから余分なファイルを削除
–delete-前にレシーバがない時に、転送する前に削除されます
–delete-中に受信機が転送中に削除されます(デフォルト)
–delete-遅延は後に削除、中に欠失を見つけます
–delete-後の受信機はない時に、転送後に削除されます
また、先のdirsから除外されたファイルを削除–delete-除外
–ignore-エラーは、I / Oエラーがあっても削除します
–force力ディレクトリの削除場合でもない空
–max-削除よりNUMファイルを削除しない= NUMを
–max-サイズ= SIZEはサイズよりも大きい任意のファイルを転送しません。
SIZEより–minサイズ= SIZEは任意のファイルを転送しない小さいです
部分的に転送されたファイルを保持–partial
–partial-dir = DIRを指定しますがDIRの中に部分的に転送されたファイルを置きます
–delay-更新は、転送の終了時に所定の場所に更新されたすべてのファイルを置きます
-m、–prune空-dirsには、ファイルリストから空のディレクトリのチェーンをプルーニング
–numeric-IDは、ユーザー/グループ名でのuid / gidの値をマップすることはありません
–timeout = SECONDSは、秒単位でI / Oタイムアウトを設定します
–contimeout = SECONDS秒でデーモン接続タイムアウトを設定します
-Iは、–ignore-時間はサイズやMOD-時間に一致するファイルをスキップしません。
–size-サイズのみに一致するファイルをスキップ
–modifyウィンドウ= NUMは、減少した精度でのmod-時間を比較します
-T、–temp-dir = DIRを指定しますが、ディレクトリDIRに一時ファイルを作成します
無DESTファイル場合-y、基礎のための同様のファイルを見つける–fuzzy
–compare-destが= DIRも先を比較DIRからの相対ファイル
–copy-DEST = DIR …と変更されていないファイルのコピーを含みます
DIR内のファイルへの–link-DEST = DIRのハードリンク時に変わりません
-z、–compress転送中にファイルデータを圧縮
–compressレベル= NUM明示的に設定された圧縮レベル
リスト内の接尾辞を持つファイルを圧縮–skip-圧縮= LISTスキップ
-Cは、ファイルをCVSと同じ方法を自動的に無視する除外–cvs
-f、–filter = RULEファイルフィルタリングルールを追加
-F –filter = ‘DIR-マージ/.rsync-filter’と同じ
繰り返し:–filter = ‘ – .rsyncフィルター」
–exclude = PATTERNはパターンに一致するファイルを除外します
–exclude-から= FILEファイルからパターンを除外する読み
パターンに一致するファイルを除外しない–include = PATTERN
–include-から=読みFILEは、ファイルからパターンを含みます
–files-から= FILEファイルからソース・ファイル名のリストを読み込みます
-0、–from0すべて* -from /フィルタファイルは0で区切られています
-s、–protect-argsを隙間なく分割。ワイルドカードのみ特殊文字
デーモンへの発信ソケットの–address = ADDRESSバインドアドレス
–port = PORTダブルコロン代替ポート番号を指定します
–sockopts = OPTIONSカスタムTCPオプションを指定
–blocking-ioの使用をリモートシェルのI / Oをブロック
–statsいくつかのファイル転送の統計を与えます
-8、–8ビットの出力は、出力にエスケープされていない高ビットの文字を残します
人間が読める形式で-h、–human読み取り可能な出力番号
転送中に進行状況を表示–progress
–partial –progressと同じ-P
-i、–itemize-変化出力すべての更新の変更サマリー
指定された形式を使用して、–out-フォーマット= FORMAT出力の更新
–log-ファイル= FILE指定したファイルに私たちがやっているログイン
–log-ファイル形式=指定されたFMTを使用して、FMTログの更新
–password-ファイル= FILEファイルからデーモンアクセス・パスワードを読み取ります
–list-のみコピーするのではなく、ファイルを一覧表示
–bwlimit = KBPSは、I / O帯域幅を制限します。毎秒キロバイト
–writeバッチ=ファイルは、ファイルにバッチ更新を書き込みます
–only-書き込みバッチ= –writeバッチのようなファイルが、W / O更新先
–read-バッチ= FILEファイルからバッチ更新を読んで
–protocol = NUM使用する古いプロトコルバージョンを強制します
ファイル名の–iconv = CONVERT_SPEC要求文字セット変換
-4、IPv4のを好む–ipv4
-6、IPv6を好む–ipv6
–versionバージョン番号
(-h)(他のオプションなしで動作します-h)このヘルプを表示–help
豊富・・・ですね。ありがたや。
けど、必要なのは
・差分ファイルのみの取得
・世代は作らない
・圧縮もしない
・更新は当然確認して欲しい。
です。
注意点は、ディレクトリの指定に有り。
指定の最後に「/(スラッシュ)」を含めるかどうかで動作が変わるんですね。
rsyncの使い方
rsyncの基本的な文法はかなりシンプルだ。単に「rsync [options] source destination」とすれば、「source」で指定したファイル(複数可)が「destination」で指定した場所にコピーされる。
例えば、ホームディレクトリの下にあるファイルをUSBストレージデバイスにコピーしたければ、「rsync -a /home/user/dir/ /media/disk/dir/」とすればよい。ちなみに、rsyncは“/home/usr/dir/”と“/home/usr/dir”を区別する。最後のスラッシュがない場合、rsyncはそのディレクトリも含めて全体をコピーする。スラッシュがある場合、ディレクトリの中身をコピーするが、ディレクトリそのものは作られない。例えば、/var/wwwを別のマシンか何かにミラーリングするなど、rsyncを使ってディレクトリ構造を複製しようとする場合は、最後のスラッシュを除く必要があるわけだ。
引用元:http://www.itmedia.co.jp/enterprise/articles/0707/19/news059_2.html
となると、shはこうかな。
-a 指定したディレクトリに含まれるファイル、パーミッション、所有者、タイムスタンプをそのままコピー
-u 追加、更新されたファイルだけコピー
-r 指定したディレクトリの下層のディレクトリも再帰的にコピー
rsync -aur
※ –delete オプションで、ソースのファイルの削除状況もバックアップ先に反映されますが、不意の削除も想定してこれは無し。バックアップドライブが満杯にならないと決めてのこと。
ひとまずテスト実行で問題なし。バックアップ先にてファイル確認。
shに記述。
といったところですが、さくっとcronに登録。
以上です。
が、さらに備忘録。
#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
バックアップを保持する日数
KEEPDAY=30
削除する日付のディレクトリ名を生成
RMDIR=date --date="$KEEPDAY day ago" +'%Y%m%d'
GWのバックアップ先
B_DIR=ディレクトリ名/
cd $B_DIR
バックアップディレクトリの階層から、バックアップディレクトリ一覧を取得
for DELDIR in find ${B_DIR}* -type d -name "[0-9]*" -prune
;
do
ディレクトリの名前から、バックアップ日時を特定する
D_DATE=echo $DELDIR | sed -e "s/.*\([0-9]\{8\}\)[0-9]\{5\}$/\1/g"
日付の比較
if [ expr $D_DATE + 0
-le expr $RMDIR + 0
] ; then
#ファイル削除
rm -rf $DELDIR
fi
done;
引用:
ありがとうございました。

ネイヴル代表の髙村(たかむら)です。
個人ブログ「takamura.jp」やSNSでも情報発信しています。