バックアップについて

バックアップについて

2019年以降はm64k:/data/backupに入っているので、そこをバックアップ。バックアップ先はm32s /data/backup/m64k-backup。

ssh m32s
cd /data/backup/m64k-backup/backup
sudo rsync -av --progress --exclude '2011-02-25_OIST-SOLiD' /suikou/files/m64k/backup/* .

2020年以降のいくつかはm64g:/data/backup/rawdataに入っているので、そこをバックアップ。バックアップ先はm32s。

ssh m32s
cd /data/backup/m64g-backup/backup/rawdata
sudo rsync -av --progress --exclude '201?-*' /suikou/files/m64g/backup/rawdata/* .
$  for i in `qhost|tail -n+4|awk '{print $1}'`; do ssh $i cat /etc/crontab |grep -v "^#"|grep '*' > $i.txt; done
::::::::::::::
m208.txt
::::::::::::::
27 11 * * * yoshitake.kazutoshi /home/yoshitake.kazutoshi/runhpssacli.cron.sh
::::::::::::::
m24.txt
::::::::::::::
*/10 * * * * yoshitake.kazutoshi cd /home/yoshitake.kazutoshi/attendance; ./get-attend-data.sh > log.txt 2>&1
::::::::::::::
m256y.txt
::::::::::::::
20 2 1-7 * * root [ "$(date '+\%w')" -eq 3 ] && /root/backup-sakura-to-m256y-once.sh
20 2 1-7 * * root [ "$(date '+\%w')" -eq 4 ] && /root/backup-m768-to-m256y-once.sh
20 2 1-7 * * root [ "$(date '+\%w')" -eq 5 ] && /root/backup-suikou-m128y-once.sh
::::::::::::::
m32r.txt
::::::::::::::
33 2 * * * root rsync -av --delete m32s:/m2 /data/
::::::::::::::
m32s.txt
::::::::::::::
13 1 * * * root rsync -a --delete /m2/ /data/backup/suikou/
11 3 * * * root rsync -a --delete m768:/etc m768:/var/www/html /data/backup/m768-www/
::::::::::::::
m512p.txt
::::::::::::::
27 11 * * * yoshitake.kazutoshi /home/yoshitake.kazutoshi/runperccli.cron.m512p.sh
::::::::::::::
m768.txt
::::::::::::::
27 11 * * * yoshitake.kazutoshi /home/yoshitake.kazutoshi/runhpssacli.cron.sh
1 1 2 * * yoshitake.kazutoshi bash /home/yoshitake.kazutoshi/run-pull-pp-image.sh > /tmp/pull.log 2>&1
::::::::::::::
m96b.txt
::::::::::::::
17 14 * * * yoshitake.kazutoshi /data/backup/backup-sakura.sh
``
`
## Hyper-V

 P2Solo(192.168.251.213)上でbind, suikouvm, suikougwの3つのCentOS7サーバが稼働している。仮想ディスクの場所は```E:\Hyper-V```

 Windows11へはリモートデスクトップ接続で、ユーザsuikou, パスワードsuikou

 Windows11内でバックアップが実行されており、タスクマネージャで2時過ぎに「D:\backup」フォルダにバックアップが実行される。[[バックアップについて#Hyper-Vバックアップスクリプト]]←を```E:\Hyper-V\hyper-v-back.ps1```などという名前で保存しておく。

 5日分ほど保存するが、古いのは削除するようになっている。たまに「C:\Hyper-V\バックアップ定期」フォルダにバックアップを取っておくと良いかも。

 m96bの/data/backup/suikou/vm 以下に不定期にバックアップをコピーしている。

### 設定方法

D:\backupフォルダを作り、その中にCentOS7-bind, CentOS7-gw, CentOS7-vmフォルダを作る。

Powershellを管理者権限で開き、```Set-ExecutionPolicy RemoteSigned```を実行。

タスクスケジューラでタスクの作成を行い、プログラムとしてpowershell.exeを指定し、引数にhyper-v-back.ps1を指定。「最上位の特権で実行する」にチェックを入れる(管理者権限でないとVMのエクスポートは実行できない)。ユーザーがログインしていなくても実行にもチェック。


## www

 研究室のHP(このWikiも含む)は、m96b上でバックアップが14時に実行される。

 設定は/etc/crontabで設定されており、/data/backup/以下にバックアップが作成される。

 これはrsyncで上書きバックアップしている。

!/bin/bash

cd /data/backup/www echo “start”

>> /data/backup/backup-sakura.log

d

ate » /data/backup/backup-sakura.log rsync -a sakura:* . echo status: $? » /data/backup/backup-sakura.log echo “fin”

>> /data/backup/backup-sakura.log

d

ate » /data/backup/backup-sakura.log


dokuwikiのバックアップを起動したい場合は、m768の/var/www/html/dokuwikiに最新のデータをコピーした後、dokuwiki/.htaccessを削除し、

docker container run –name test1 –rm -p 8082:80 -v /var/www/html:/var/www/html php:7.4.24-apache


を起動すると、http://m768.s:8082/dokuwiki でアクセスできる。

## www さくらサーバでのバックアップ

 さくらのWEB管理画面から、CRONの設定で、毎日5時に下記のスクリプトを実行している

/home/webpark1634/tool/mysqldump.sh

$ more ~/tool/mysqldump.sh

!/usr/local/bin/bash

find /home/webpark1634/backup-mysql-5.7/ -mtime +10 -exec rm -f {} \; i=date "+%Y%m%d_%H%M%S" /usr/local/bin/mysqldump -Q -h mysql647.db.sakura.ne.jp -u webpark1634 -pOMEzimh7 webpark1634_blog > /home/webpark1634/backup-mysql-5.7/dump.$i.sql 2> /home/webpark1634/backup-mysql-5.7/err.$i.txt


## m768のwwwバックアップ

m32s上で毎日3:11にバックアップ

$ more /etc/crontab

11 3 * * * root rsync -a –delete m768:/etc m768:/var/www/html /data/backup/m768-www/


## 共有フォルダ(/m2 on m32s)

 m32s上のcrontabで下記のように毎日1時ごろバックアップ。

13 1 * * * root rsync -a –delete /m2/ /data/backup/suikou/


## 共有フォルダ(/suikou, /suikou/files/synology)

 m96b上で/data/backup以下にrsyncで1時ごろ上書きバックアップしている。

!/bin/bash

cd /data/backup/suikou echo “start”

>> /data/backup/backup-suikou.log

d

ate » /data/backup/backup-suikou.log

for i in download home root tool tool-all;

do rsync -a /suikou/$i .

done

for i in db download tool tool-all db; do rsync -a –delete /suikou/$i . done

rsync -a –delete /root . rsync -a –delete /home .

echo status: $? » /data/backup/backup-suikou.log echo “fin”

>> /data/backup/backup-suikou.log

d

ate » /data/backup/backup-suikou.log

echo “start shared” cd /data/backup/shared

rsync -a /suikou/files/rn104-Shared .

rsync -a –delete /suikou/files/synology . echo status: $? » /data/backup/backup-suikou.log echo “fin shared”

>> /data/backup/backup-suikou.log

d

ate » /data/backup/backup-suikou.log


DELL T1700上で、吉武のu-tokyo OneDriveアカウントと\\synology.s\sharedの同期をFreeFileSyncを使って1分毎に行っている。

また、synology上で、1日1回バックアップを行い、30日分のバックアップを保持するように設定している。

## m256yへバックアップ

m768:/etc m768:/var/www sakura:www sakura:backup-mysql-5.7 /suikou/tool /suikou/db /suikou/download /suikou/tool-all /root /home/yoshitake.kazutoshi

をm256yの/data/backup/にバックアップ


## ファイル数の多いディレクトリについて

ディスク使用量を計算するとき、du -hc, ncduなどのコマンドが戻ってくるのが遅くなるし、ディスクを移すときに時間がかかってしまうので、ファイル数の大きなディレクトリは基本的には

sudo zip -ry <dirname.zip> <dirname> sudo rm -rf <dir_name>

で一つのzipファイルにまとめてある。
zipならtar.gzと違って、zipinfoコマンドでファイル一覧をインデックスから素早く見られるし、zipの中の1ファイルだけを限定して解凍することも下記のように可能。

unzip zipfile.Zip path/inside/Zip/file.txt


## Hyper-Vバックアップスクリプト

<###

  このスクリプトについて:
仮想マシンをエクスポートする処理を行います。
(併せて、古いエクスポートを削除します)
 
このシェルはタスクスケジューラーによって毎日 AM 2:00 に起動されます。
 
 
STEP1: 仮想マシンをエクスポート
STEP2: 古いエクスポートを削除

###>

<###

  【STEP 1】
  仮想マシンを下記パスにエクスポートする
      E:\Daily_ExportedVM\<日付>\

###>

### 日付の取得 $NowDate = Get-Date -Format “yyyyMMddHHmmss” ### エクスポート対象の仮想マシンの指定 $TragetVM01 = “CentOS7-bind” $TragetVM02 = “CentOS7-gw” $TragetVM03 = “CentOS7-vm” ### エクスポート先のパスを指定 $ExportPath = “C:\Hyper-V\バックアップ\” ### Exportの成功 or 失敗の判断を STEP2(古いフォルダの削除)でするための変数($CheckCode)を定義 ### 最初に0(=成功)を代入しておく。(失敗を検知したら 1 が代入される) $CheckCode = 0 ### コマンドエラー時に Try-Catch の Catch 部分が実行されるように、デフォルトパラメータを Stopに変更 $ErrorActionPreference = “stop” ### TargetVM01のエクスポート ### try-catch を使って、エラー発生時の処理を実装(catch内がエラー時のアクション) Try { ### 仮想マシンのエクスポートを実行 Export-VM -Name $TragetVM01 -Path $ExportPath\$TragetVM01\$NowDate -ErrorVariable ExportError01 | Out-Null ### Out-Null することで Export-VM が終了するのを待つ。 ### Export-VM がエラーになったら、エラー内容をファイルに出力して、$CheckCode に 1を代入 }Catch{ ### エラーを このファイルに出力→ $ExportPath\ExportErrorCode-$TragetVM01-$NowDate.txt echo $ExportError01 | Out-File $ExportPath\$TragetVM01\$NowDate.txt ### エラーの場合は変数 'CheckCode'に 1 を代入(0以外の代入でSTEP2の際に中止ルーチンに移行) $CheckCode = 1 } Out-Null ### TargetVM02のエクスポート ### try-catch を使って、エラー発生時の処理を実装(catch内がエラー時のアクション) Try { ### 仮想マシンのエクスポートを実行 Export-VM -Name $TragetVM02 -Path $ExportPath\$TragetVM02\$NowDate -ErrorVariable ExportError02 | Out-Null ### Out-Null することで Export-VM が終了するのを待つ。 ### Export-VM がエラーになったら、エラー内容をファイルに出力して、$CheckCode に 1を代入 }Catch{ ### エラーを このファイルに出力→ $ExportPath\ExportErrorCode-$TragetVM02-$NowDate.txt echo $ExportError02 | Out-File $ExportPath\$TragetVM02\$NowDate.txt ### エラーの場合は変数 'CheckCode'に 1 を代入(0以外の代入でSTEP2の際に中止ルーチンに移行) $CheckCode = 1 } Out-Null ### TargetVM03のエクスポート ### try-catch を使って、エラー発生時の処理を実装(catch内がエラー時のアクション) Try { ### 仮想マシンのエクスポートを実行 Export-VM -Name $TragetVM03 -Path $ExportPath\$TragetVM03\$NowDate -ErrorVariable ExportError03 | Out-Null ### Out-Null することで Export-VM が終了するのを待つ。 ### Export-VM がエラーになったら、エラー内容をファイルに出力して、$CheckCode に 1を代入 }Catch{ ### エラーを このファイルに出力→ $ExportPath\ExportErrorCode-$TragetVM03-$NowDate.txt echo $ExportError03 | Out-File $ExportPath\$TragetVM03\$NowDate.txt ### エラーの場合は変数 'CheckCode'に 1 を代入(0以外の代入でSTEP2の際に中止ルーチンに移行) $CheckCode = 1 } Out-Null <### 【STEP 2】 古いエクスポートの削除 2世代(過去2日分)のこす ← HDDの使用状況を見ながら調整 $DeleteTime で経過時間を指定。 $DeleteTime = “-n”  n(分/min)。 n分前を指定するので、マイナスをつける 2日 = 2880min (60min * 24hour * 2day) 3日 = 4320min (60min * 24hour * 3day) 10日 = 14400min (60min * 24hour * 10day) ###> #$DeleteTime = “-5” ### 5分経過(テスト用) $DeleteTime = “-12320” ### 3日 ← 4320だと3日前のが残っちゃうので、4300 とかちょっと減らしておくのがいいかも。 ### Export-VM が例外処理で停止していなければ($CheckCode = 0)、古いフォルダの削除実施 if ( $CheckCode -eq 0 ) { ### 対象フォルダ配下のリストを取得 ### 作成されてから $DeleteTime の値を超過したフォルダ・ファイルを選択/抽出 ### 対象を絶対パスに変換し、削除 Get-ChildItem $ExportPath | Where-Object { $.CreationTime -lt (Get-Date).AddMinutes($DeleteTime)

  } |
  foreach {
      Remove-Item -Recurse -Force $_.FullName
  }

### $Code != 0 であれば(1が代入されていれば)処理を中止。 } else {

  exit

} ```