研究用パソコンのバックアップ

これまで定期的なバックアップは取っていなかったのですが、
ちょっと肝が冷える出来事があったので定期的にバックアップを取ろうと思いました。

研究用パソコンはlinuxで使っているのはfedora.
バックアップ用に2.0TBのハードディスクを用意しました。

色々なサイトを見て、オンライン、差分にすることにしました。

毎週日曜にフルバックアップ、
日曜日以外は毎日に差分バックアップを取ります。

取ったバックアップは最大2日間保管しておきます。

pythonでコードを書きました。
完全自己流なので、
真似してデータが飛ぶ等のトラブルが起きたとしても責任は取れません。
改善点などあればコメントいただけると幸いです。

##################

ホームディレクトリ下にbackupというディレクトリを作って
以下の3つのファイルを置きます。
backup_0.py: フルバックアップ
backup_1.py:差分バックアップ
full_backup_log.csv:フルバックアップのログ
パスは変更すること。

HDDの中には以下の2つの空ディレクトリを作ります。
data0
data1
今週data0にバックアップを保存したら来週はdata1に保存して、
再来週はdata0の中身を消してdata0に新しく保存する...みたいな感じです。

試しに走らせてみて、動きそうだったらcronで定期実行の設定
##################

##############
#backup_0.pyの中身#
##############
import os
import csv
import datetime
import numpy as np

###### parameter ######
full_backup_log="/home/mmm/backup/full_backup_log.csv" #csvファイルのパス
#######################

log_file=os.path.join(full_backup_log)
f=open(log_file,'r')
csvdata=csv.reader(f)
header=next(csvdata)
num_lines=np.sum(1 for line in csvdata) #include header 

f=open(log_file,'r')
csvdata=csv.reader(f)
header=next(csvdata)
for line in csvdata:
    if float(line[0])==num_lines:
        last_backup=line

f.close()

number=float(line[0])
next_dir=line[2]

###### parameter ######
backup_from="/home/mmm" #バックアップを取るディレクトリのパス
backup_to="/run/media/mmm/PC_backup/data"+next_dir+"/" #バックアップを保存するHDDのパス
#######################
os.system('rm '+backup_to+'*')

time=datetime.datetime.now().strftime('%Y%m%d')
timer=datetime.datetime.now().strftime('%Y-%m-%d')
print('tar cfvz '+backup_to+'full'+time+'.tar.gz '+backup_from)

os.system('tar cfvz '+backup_to+'full'+time+'.tar.gz '+backup_from)

a=0
log=[a,a,a]
log[0]=number+1
log[1]=timer
if next_dir=='0':
    log[2]=1
if next_dir=='1':
    log[2]=0
with open(log_file,'a') as f:
    writer=csv.writer(f)
    writer.writerow(log)
f.close()


##############
#backup_1.pyの中身#
##############
import os
import csv
import datetime
import numpy as np

###### parameter ######
full_backup_log="/home/mmm/backup/full_backup_log.csv"
#######################

log_file=os.path.join(full_backup_log)
f=open(log_file,'r')
csvdata=csv.reader(f)
header=next(csvdata)
num_lines=np.sum(1 for line in csvdata) #include header 

f=open(log_file,'r')
csvdata=csv.reader(f)
header=next(csvdata)
for line in csvdata:
    if float(line[0])==num_lines:
        last_backup=line

f.close()

number=float(line[0])
timer=line[1]
next_dir=float(line[2])

print(next_dir)

if next_dir==0:
    this_time_dir=str(1)
if next_dir==1:
    this_time_dir=str(0)

###### parameter ######
backup_from="/home/mmm"
backup_to="/run/media/mmm/PC_backup/data"+this_time_dir+"/"
#######################

time=datetime.datetime.now().strftime('%Y%m%d')
#timer=datetime.datetime.now().strftime('%Y-%m-%d')
print(timer)
os.system('tar cfz '+backup_to+'sabun'+time+'.tar.gz -N '+timer+' '+backup_from)


######################
#full_backup_log.csvの初期の中身#
######################
number,date_time,account
1,2018-09-05,0  #その日の日付

コメント

このブログの人気の投稿

TypeError: ufunc 'bitwise_xor' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

overleafで画像が表示されない!

エラー: ""C:\U" で始まる文字列の中で 8 進文字なしに '\U' が使われています