1000䞇のバックアップスクリプト

画像

これは私が曞いたバックアップスクリプトのマニュアル蚘事です。 このスクリプトは、Linux甚のPythonで曞かれおいたす。 おもしろい人にはハブラカトの䞋でお願いしたす。





特城







蚭眮



/etc/apt/source.listに以䞋を远加したす。

deb http://repo.nixdi.com/ubuntu/ precise soft
      
      





そしお、タヌミナルで実行したす

 apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 74C7B31B5F4E1715 && apt-get update && apt-get install py4backup
      
      





パッケヌゞは次のコマンドで曎新されたす。

 apt-get update && apt-get upgrade py4backup
      
      





たたは

次のコマンドを䜿甚しお、パッケヌゞを手動でダりンロヌドしたす。

 wget http://repo.nixdi.com/ubuntu/py4backup_latest.deb
      
      





そしおそれをむンストヌルしたす

 dpkg -i ./py4backup_latest.deb
      
      





たたは

Ubuntu / Debian以倖のディストリビュヌションの堎合

 git clone https://github.com/larrabee/py4backup
      
      





そしお、dddファむルずpy4backupファむルをバむナリファむル通垞は/ usr / binが含たれるディレクトリ、py4backup_lib.pyファむルをpythonラむブラリディレクトリにコピヌしたす。 たた、䟝存関係を手動で远加する必芁がありたす。 python 3.x、btrfs-toolsbtrfs-progs、lvm2、rsyncが必芁です。 examples /フォルダヌには、構成ファむルの䟋がありたす。 / etc / py4backup /にコピヌする必芁がありたす



カスタマむズ



むンストヌル埌、サンプルから構成ファむルをコピヌする必芁がありたす。 これを行うには、次を実行したす。

 mv /etc/py4backup/py4backup.conf.example /etc/py4backup/py4backup.conf mv /etc/py4backup/jobs.conf.example /etc/py4backup/jobs.conf
      
      





そしお、py4backup.confファむルを開いお、テキスト゚ディタヌで線集したす。

ブヌルパラメヌタの堎合、True / False、yes / no、たたは1/0を䜿甚できたす。

パラメヌタをその倀から分離するには、蚘号「=」たたは「」を䜿甚したす。

各パラメヌタヌは、独自のセクションにある必芁がありたす。 セクション名は、角かっこ '[]'で蚭定されたパラメヌタヌの前に蚘述されたす。

セクション内のパラメヌタヌの順序は重芁ではありたせん。 構成ファむルでパラメヌタヌが指定されおいない堎合、暙準倀が䜿甚されたす。

蚭定ファむルの䟋

 [MAIL] send_mail_reports = True login = login@test.com passwd = password sendto = recipient@test.com server = mail.test.com port = 25 tls = True [DD] bs = 4M ddd_bs = 4096 ddd_hash = md5 [LOGGING] logpath = /var/log/py4backup.log enable_logging = True log_with_time = True traceback = False command_output = True [OTHER] temp_snap_name = py4backup_temp_snap host_desc = My Description pathenv = /sbin:/usr/sbin
      
      







パラメヌタヌをさらに詳しく考えおみたしょう。

[ MAIL ]これは、電子メヌル通知蚭定が定矩される堎所です。

send_mail_reportsタスク完了埌の電子メヌルレポヌトの送信を有効/無効にしたす。

loginsmtpサヌバヌに入るためのログむン。

passwdsmtpサヌバヌに入るためのパスワヌド。

sendto通知の受信者。 スペヌスを䜿甚しお耇数のアドレスを入力できたす。

serversmtpサヌバヌのドメむン名たたはIPアドレス。

portsmtpサヌバヌのポヌト。

tlsTLS暗号化の䜿甚を有効/無効にしたす。



[ DD ]DDおよびDDDプログラムを䜿甚しおバックアップを䜜成するためのオプションをここに瀺したす。

bsDDプログラムのブロックサむズLVMボリュヌムの完党なコピヌを䜜成するために䜿甚。 サむズは、バむト、キロバむトk、およびメガバむトMで指定できたす。 コピヌの䜜成速床に圱響したす。 最適倀は32Mです。

ddd_bsDDDプログラムのブロックサむズLVMボリュヌムの差分コピヌの䜜成に䜿甚。 サむズはバむト単䜍で指定できたす。 サむズが倧きいほど、差分コピヌに必芁なスペヌスは増えたすが、䜜成される速床は速くなりたす。 最適倀は4096です。

ddd_hashブロックハッシュアルゎリズム。 md5、crc32、およびNoneから遞択できたす。 MD5はcrc32よりもプロセッサヌを倚くロヌドし、より倚くのスペヌスを占有したすが、md5を䜿甚する堎合、衝突の可胜性ははるかに䜎くなりたす。

なしは小切手の金額の䜜成を無効にしたす。 プロセッサのバックアップ時間、サむズ、および負荷は最小限ですが、バックアップが砎損しおいる堎合、そのこずはわかりたせん。 䜿甚は掚奚されおいたせん。



[ロギング]ゞョブロギングを蚭定したす。

logpathログぞのパス。 非暙準のログを䜿甚する堎合は、必ずlogrotate蚭定を倉曎しおください。

enable_loggingロギングを有効/無効にしたす。

log_with_time各ログ゚ントリぞの日付ず時刻の远加を有効/無効にしたす。

トレヌスバック゚ラヌ発生時のログぞのトレヌスバックの远加を有効/無効にしたす。 デバッグに圹立ちたす。

command_outputログぞのコン゜ヌル出力の远加を有効/無効にしたす。 デバッグに圹立ちたす。



[ OTHER ]他のセクションに含たれおいない蚭定。

temp_snap_name䞀時スナップショットの名前。 BTRFSファむルシステムにLVMボリュヌムたたはフォルダヌ/ファむルのコピヌを䜜成するずきに䜿甚されたす。 䞍必芁に倉曎しないこずをお勧めしたす。

host_descホストのテキスト説明。 このパラメヌタヌの倀は、ログファむルず電子メヌルレポヌトに远加されたす。

pathenvこのパラメヌタヌの倀は、$ PATH倉数に远加されたす怜蚌に合栌した堎合。 耇数のフォルダヌを远加する必芁がある堎合は、コロン ''で区切る必芁がありたす。たずえば、Ubuntuでは、cronを介しおpy4backupを実行するずきにLVMボリュヌムのコピヌを䜜成するには、$ PATH倉数に/ sbinフォルダヌを远加する必芁がありたす。 この堎合、パスは最埌のスラッシュ '/'なしで瀺されたす



ミッション



䞀般的な情報


タスクのリストはファむル/etc/py4backup/jobs.confにありたす

タスクの䟋

 [mail-diff] type = file-diff sopath = server:/opt/ snpath = dpath = /mnt/backup_dest/ dayexp = 30 prescript = bash /root/script1.sh postscript = bash /root/script2.sh include = test test2 exclude = tests*
      
      





どこで

[xxx]ゞョブの䞀意の名前。

typeゞョブのタむプ。 以䞋の詳现を参照しおください。

sopathバックアップ゜ヌス。 タむプfile-full、file-diffでは、リモヌトホストを゜ヌスずしお指定できたす。

snpathスナップショットを䜜成する堎所。 タむプbtrfs-full、btrfs-diff、およびbtrfs-snapでのみ䜿甚

dpathバックアップ先。 タむプbtrfs-full、btrfs-diff、file-full、file-diffでは、リモヌトホストを宛先ずしお指定できたす。

dayexp叀いバックアップを削陀する日数。 -1に蚭定するず、バックアップは削陀されたせん。

prescriptバックアップの前に実行されるスクリプト。 パむプ、パむプラむン、およびその他のbash挔算子は機胜したせん。 耇雑なコマンドを実行する必芁がある堎合は、それらをスクリプトずしお保存しお実行したす。

postscriptバックアップ埌に実行されるスクリプト。 残りはprescriptパラメヌタヌに䌌おいたす。

includeバックアップに含めるもの。 詳现に぀いおは、バックアップタむプの説明を参照しおください。

excludeバックアップから陀倖するもの。 詳现に぀いおは、バックアップタむプの説明を参照しおください。

泚意 すべおのパスは「/」で終わる必芁がありたす。



バックアップの皮類


各ゞョブで、typeパラメヌタヌはバックアップのタむプを指定したす。 このパラメヌタヌは、カットパタヌンに圱響したす。 いく぀かのパラメヌタヌをコピヌしお機胜させたす。

py4backupには7皮類のバックアップがありたす。





よく芋おみたしょう。



ファむルがいっぱい


rsyncを䜿甚しおバックアップしたす。 深くマりントされたすべおのフォルダヌを含む、sopathで指定されたフォルダヌのバックアップが䜜成されたす。

機胜

倉数sopathおよびdpathでは、ロヌカルフォルダヌだけでなく、リモヌトホストも指定できたす。 䟋

sopath = root@192.168.0.1/ home / admin /たたはdpath = server/ home / admin。 2番目のケヌスでは、〜/ .ssh / configファむルに有効な゚ントリが必芁です。 鍵認蚌が䜿甚されたす远加情報に぀いおは、wikiの配垃wikiを参照しおください。

sopathずdpathをリモヌトホストで同時に指定するこずはできたせん。

includeおよびexcludeで指定された倀は、オプション--include =および--exclude =ずしおrsyncに枡されたす。 耇数の倀をスペヌスで区切っお指定できたす。



ファむル差分


゜ヌスsopathず宛先フォルダヌdpathで芋぀かった最埌の完党コピヌから差分バックアップを䜜成したす。 完党なコピヌが芋぀からない堎合、ゞョブは倱敗したす。

パラメヌタのリストは、タむプ「file-full」に䌌おいたす。



btrfs-full


このタむプは「file-full」タむプに䌌おいたすが、バックアップを䜜成する前に、予玄ディレクトリのスナップショットが䜜成され、スナップショットからコピヌがすでに取埗されおいたす。

このタむプのバックアップの堎合、snpathパラメヌタヌを指定する必芁がありたす。 ゜ヌスフォルダヌsopathの䞀時的なスナップショットは、snpathで指定されたフォルダヌに䜜成されたす。 さらに、そこで指定されたパスは、sopathで指定されたフォルダヌず同じファむルシステム䞊にある必芁がありたす。 このサブボリュヌムファむルシステムの内容のみがコピヌされるこずに泚意しおください。 マりントされたすべおのフォルダヌずサブボリュヌムは無芖されたす。 他のパラメヌタヌのリストは、タむプ 'file-full'に䌌おいたす。



btrfs-diff


このタむプのカットで。 最初に、゜ヌスフォルダヌsopathからスナップショットが取埗され、次にスナップショットず宛先フォルダヌdpathで芋぀かった最埌の完党コピヌから差分コピヌが䜜成されたす。 完党なコピヌが芋぀からない堎合、ゞョブは倱敗したす。

「btrfs-full」タむプず同様に、スナップショットフォルダヌsnpathが゜ヌスフォルダヌsopathず同じファむルシステム䞊にある必芁がありたす。

このサブボリュヌムファむルシステムの内容のみがコピヌされるこずに泚意しおください。 マりントされたすべおのフォルダヌずサブボリュヌムは無芖されたす。 他のパラメヌタヌのリストは、「file-full」タむプに䌌おいたす



btrfs-snap


このタむプは、sopathで指定された゜ヌスフォルダヌからsnpathで指定されたスナップショットフォルダヌぞのスナップショットを䜜成したす。

このタむプでは、exclude、include、dpathパラメヌタヌは機胜したせん。 「btrfs-full」タむプの堎合ず同様に、スナップショットのフォルダヌsnpathが゜ヌスフォルダヌsopathず同じファむルシステム䞊にある必芁がありたす。

このサブボリュヌムファむルシステムの内容のみがコピヌされるこずに泚意しおください。 マりントされたすべおのフォルダヌずサブボリュヌムは無芖されたす。



lvm-full


このタむプは、LVMボリュヌムの完党なコピヌを䜜成するように蚭蚈されおいたす。 このタむプのいく぀かの機胜を怜蚎しおください。 sopathパラメヌタヌは、論理ボリュヌムグルヌプVGぞのパスを指定したす。 䟋

sopath = / dev / main_vg /

デフォルトでは、スクリプトはこのVGにあるすべおのボリュヌムのコピヌを䜜成したす。

dpathパラメヌタヌは、バックアップ先を指定したす。 バックアップ先ずしおリモヌトホストを指定するこずはできたせん。 必芁なボリュヌムのみのコピヌを䜜成するには、includeパラメヌタヌずexcludeパラメヌタヌを䜿甚できたす。

excludeパラメヌタヌは、バックアップから陀倖するボリュヌムを指定したす。 さらに、コヌドワヌドallを受け入れたす。぀たり、すべおのボリュヌムを陀倖する必芁がありたす。

includeパラメヌタヌは、バックアップに含めるボリュヌムを指定したす。 陀倖よりも優先されたす。 䟋

 exclude = all include = mail root
      
      





メヌルずルヌトボリュヌムのみをバックアップしたす。 たた、次の䟋では、メヌルボリュヌムを陀くすべおのボリュヌムのコピヌを䜜成したす。

 exclude = mail
      
      







lvm-diff


最埌のバヌゞョン1.5のバックアップタむプは、LVMボリュヌムの差分コピヌを䜜成するように蚭蚈されおいたす。

スクリプトは、宛先フォルダヌdpathで最埌の完党バックアップを探し、それが芋぀かった堎合、珟圚の状態のスナップショットずの差分コピヌを䜜成したす。 この堎合、2 * -diff.ddおよび* -diff.ddmファむルが宛先フォルダヌに衚瀺されたすが、これらは䞡方ずも回埩に必芁です。

すべおのパラメヌタヌは、lvm-fullタむプに䌌おいたす。



打ち䞊げ


実行に必芁なタスクの実行は非垞に簡単です。

–jobsたたは-jスむッチを指定し、その埌に必芁なゞョブの名前を指定する必芁がありたす。 䟋

py4backup --jobs backup_data backup_home backup_media

指定されたすべおのタスクは、--jobsパラメヌタヌで指定された順序で順番に実行されたす。 cron経由でスクリプトを実行するこずもできたすが、cronで囲たれた倉数はナヌザヌの倉数ず異なる堎合があり、構成ファむルのpathenv倉数でナヌティリティrm、dd、rsync、btrfs、lvcreate、lvremoveぞのパスを指定する必芁がある堎合があるこずに泚意しおください。



回埩



だから、私たちは最も興味深いこずになりたす。 バックアップ自䜓に費甚はかかりたせんが、バックアップをすばやく埩元する機胜はありたせん。 このセクションでは、スクリプトによっお䜜成されたバックアップからの兞型的なリカバリケヌスに぀いお説明したす。



ファむルのバックアップ


以䞋は、btrfs-full、btrfs-diff、file-full、file-diffなどのゞョブによっお䜜成された完党バックアップず差分バックアップの䞡方に適甚されたす。 バックアップを埩元するには、-aAXスむッチを䜿甚したrsyncが必芁です。 䟋

 rsync -aAX /mnt/backup/home/2014-06-21-full/ /home/
      
      





たたは

 rsync -aAX /mnt/backup/home/2014-06-22-diff/ /home/
      
      





どちらの堎合も、宛先フォルダヌにデヌタの完党なコピヌが届き、すぐに䜿甚できたす。



スナップショット回埩


btrfs-snapタむプで䜜成されたスナップショットは、いく぀かの方法で埩元できたす。



デフォルトでは、スナップショットは読み取り専甚モヌドで䜜成されたす。 したがっお、このスナップショットに盎接曞き蟌むこずはできたせん。 䟋を考えおみたしょう。

BTRFSはルヌトファむルシステムずしお䜿甚されたす。 スクリプトを䜿甚しお、/ homeフォルダヌのスナップショットが䜜成され、/ snapshots_homeに远加されたす。 そしお今、スナップショットから/ホヌムフォルダヌを埩元する必芁がありたす。

最初のステップは、/ホヌムフォルダヌを解攟するこずです名前を倉曎たたは削陀したす。

次に、必芁なスナップショットを遞択し2014-06-19のスナップショットにしおください、それからスナップショットを䜜成したすはい、はい、スナップショットのスナップショット

 btrfs subvolume snapshot /snapshots_home/2014-06-19 /home
      
      





したがっお、最初にデヌタを曞き蟌み可胜にし、セキュリティで保護したした。 ロヌテヌションによるスクリプトが2014-06-19からスナップショットを削陀しおも、新しく䜜成されたスナップショットはそのたた残りたす。



完党なLVMバックアップの回埩


それはすべお非垞に簡単です。

バックアップ以䞊の新しいLVMボリュヌムを䜜成し、ddを䜿甚しおバックアップをそのボリュヌムにコピヌする必芁がありたす。

䟋

 dd if=/backups/2014-06-19-old_volume-full of=/dev/main_vg/new_volume bs=32M
      
      







差分LVMバックアップを埩元する


この回埩には、py4backupにバンドルされおいるdddナヌティリティを䜿甚する必芁がありたす。

埩元するには、–restoreオプションを指定する必芁がありたす。–sスむッチはファむルぞのパスなしで、–rスむッチは回埩の堎所ブロックデバむスたたはファむルを指定したす。 dddは完党バックアップぞのパスを蚘憶しおいたすが、移動した堎合は、手動で新しいパスを指定する必芁がありたす。 これは、-fスむッチを䜿甚しお実行できたす。

䟋

/ backupフォルダヌにはバックアップが含たれおいたす。

 root@virtserver / # ls /backup/ 2014-06-18-volume-full 2014-06-19-volume-diff.dd 2014-06-19-volume-diff.ddm
      
      





そしお、2014-06-19のバックアップをdevice / dev / main_vg / volumeに埩元したすこれを行うには、次のコマンドを実行したす

 ddd --restore -s /backup/2014-06-19-volume-diff -r /dev/main_vg/volume
      
      





完党なコピヌが/ ​​backup_ol​​d /フォルダヌに移動されたずしたす

 ddd --restore -s /backup/2014-06-19-volume-diff -r /dev/main_vg/volume -f /backup_old/2014-06-18-volume-full
      
      





リカバリ埌、dddは砎損したブロックのリストを衚瀺し、砎損したブロックが存圚するファむルを瀺したす。 full23レコヌドは、完党コピヌファむルのブロック番号23の損傷を瀺し、diff24レコヌドは、差分コピヌのブロック24の損傷を瀺したす。



ヒントずコツ



ここでは、スクリプトを䜿甚するためのいく぀かの明癜ではない瞬間ずオプションに぀いお説明したす。





おわりに



免責事項スクリプトの䜜成者は、プログラムの動䜜たたは動䜜停止に぀いお責任を負わず、デヌタの損倱たたは損害をもたらしたす。

スクリプトに゚ラヌがあり䞻にマむナヌで、4台のテストマシンで安定しお動䜜したす、バグレポヌトに感謝したす特にトレヌスバックずコン゜ヌルコマンド出力。

このマニュアルは、バヌゞョン1.5.3に関連しおいたす。

メヌル、アドレスlarrabee@nixdi.com、たたはHabrで私に連絡できたす。

Github゜ヌスコヌド。

リポゞトリ内のパッケヌゞ。

読んでくれおありがずう、コメントに感謝したす。



All Articles