Synology DSM増分バックアップにハードリンクを使用する





DSMシステムは非常に便利で、デフォルトでは、「すぐに使える」と呼ばれる普通の(そうではない)ユーザーのニーズの95%をカバーするモジュールがシステムにインストールされます。



組み込みのバックアップシステム、バックアップとレプリケーションもあります。 シンプルで明確で信頼性の高い。 ネットワーク宛先として、同様のSynologyサーバーまたはrsyncサーバーを使用できます。



残念ながら、このシステムは増分バックアップの方法を知りません。 これを回避する最も基本的な方法は、曜日ごとに個別のバックアップを設定することです。 したがって、バックアップを含む7つのフォルダーがありますが、明らかなマイナスは、各フォルダーに完全なコピーを保存することです。



だから-完全増分バックアップを設定します。



まず、重要なデータのアーカイブを保存するのに十分なディスクを備えたサーバーが必要です。 それが正確にインストールされる場所-それは皆の能力に依存します。 たとえば、共有ホスティング、古いシステムユニット、または稼働中のコンピューター上の仮想マシンなどです。 アーカイブサーバーの信頼性については議論の余地がありますが、その存在自体が個人データの安全性にとって大きなプラスです。 繰り返しになりますが、DSMでメール通知を有効にすると、バックアップ中にエラーが発生したかどうかを毎日把握し、「落ちた」サーバーをすぐにバックアップできます。



サーバーがSynologyと通信する方法(またはその逆)は、全員が自分で選択します。これは、VPN、ローカルエリアネットワーク、または通常のインターネットです。 私はVPNを好みますが、接続設定の説明はこの記事の範囲外です(微妙な違いがあるかもしれません。これについては後で説明します)。



これで、アーカイブが保存されるディスクのサイズ。



ホームストレージのコンテンツは、自信を持って映画、音楽、写真、通常のユーザーファイルに分けることができます。

また、シネマデータが失われた場合、再びダウンロードすることが可能かつ困難ではない場合、音楽-高い確率で、写真および個人ファイルを復元できなくなります。 私の個人的な経験からのそのようなデータの量は50-100GBを超えません。 たとえば、毎日および毎週のバックアップを行います。 最大で100GB + 100GBになります-200GBのディスクが必要です。 思う? 現在、これはまれですが、500GBは簡単に見つけることができます!



次に、仮想マシンの例について説明しますが、主なアイデアはすべてのLinuxベースのシステム(おそらくFreeBSD)に適用されます。



だから-Ubuntuサーバーをインストールし、SSHとrsyncを有効にします:

ファイルシステムにはハードリンクサポートが必要です。 したがって、デフォルトで提案されているext-4のままにしておきましょう。



原則として、rsyncはWindowsでも実行できますが、ハードリンクのサポートが必要であり、rsyncがWindows Junctionで正しく動作するかどうかはわかりません。



サーバーのセキュリティモデルについて明確にします-それは非常に簡単です:



-ログイン用の別のユーザー(Synologyの場合)

-rsync IPアドレスのフォルダー制限

-rsyncレベルでのユーザー検証-なし。ただし、簡単に構成できます。

-サーバーが信頼性の低いネットワークにある場合、ファイアウォールを有効にし、IPによるアクセスを制限することをお勧めします。



セットアップを開始します-アーカイブを保存するフォルダーを作成し、すべてのユーザーに権限を付与します。



$sudo mkdir -p /bakstorage/syno $sudo chmod 777 /bakstorage/syno
      
      





サーバー上で、Synologyがアーカイブコピーを保存する通常のユーザーを作成する必要があります。



 $sudo adduser backup
      
      





rsync設定を編集します。



 cat /etc/rsyncd.conf #  : motd file=/etc/motd log file=/var/log/rsyncd #    [syno] # IP address  Synology hosts allow = 192.168.xx # ,   comment = Syno archive #   ,          path = /bakstorage/syno #     use chroot = yes lock file = /var/lock/rsyncd read only = no list = yes uid = nobody gid = nogroup strict modes = yes ignore errors = no ignore nonreadable = yes transfer logging = no timeout = 600 refuse options = checksum dry-run dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
      
      





そして、それをスタートアップに入れます:



 $sudo update-rc.d rsync defaults
      
      





再起動し、すべてが上昇したことを確認します。



次に、DSMでアーカイブを構成します。 ネットワークバックアップ先を作成します。







「データバックアップタスク」を作成してから、毎日のバックアップ用のタスクを作成します。 保存するフォルダーをマークします。







アプリケーションにマークを付けます(オプション):







そして最も重要なこと-私たちは毎日それを作ります(最後のオプション):







メインアプリケーションウィンドウに移動し、作成したタスクを選択して[今すぐバックアップ]をクリックします。最初のコピーには時間がかかります。 後続のファイルははるかに高速に実行されます-新しいファイルまたは変更されたファイルのみが転送されます。



コピーが構成されて動作した後(数日間見ることができます)-次の部分に進み、増分コピーを追加します。 これを行うには、優れたrsyncプロパティを使用します。



元のファイルが変更され、宛先ファイルがハードリンクである場合、ハードリンクをコピーすると「壊れ」、宛先ファイルは変更されたバージョンに置き換えられます。





前述のrsyncプロパティに基づいて、必要なのは、バックアップが完了した後のコマンドでアーカイブフォルダーのコピーを作成することだけです: cp -al



これにより完全なコピーが作成されますが、内部のすべてのファイルはハードリンクになるため、余分なディスク領域は使用されません。 おそらく、ディレクトリとサブディレクトリのツリーの下にあります。 これをスナップショットの作成と呼びます。 ちなみに、100GBフォルダーの場合、スナップショットの作成には1分もかかりません。



このコマンドは、バックアップの想定完了後、またはたとえば1時間前など、いつでも実行できます。

したがって、バックアップが3:00に開始して6時間続く場合(非常に好ましくないシナリオ-通常、すべての変更が1桁速くコピーされます)、午前10時にスナップショットを作成し、日中にすべてが正常に機能したことを確認できるようにします。



次のステップでは、N個のスナップショットを保存し、最も古いスナップショットを自動的に削除します。 ところで、この削除を実装すると、通常、N日より古いフォルダーが削除されます。 ただし、(さまざまな理由で)長期間アーカイブが行われていない場合、アーカイブのあるすべてのフォルダーが古いものとして削除される可能性がありますが、新しいフォルダーはありません! したがって、私たちはこれを学んでいます。



以下は、この作業をすべて行うスクリプトです。



 sudo cat /root/rotate_daily.sh #!/bin/bash #   echo -n "Started: " date # ,   ,   ,     if [[ /bakstorage/syno/daily -nt /bakstorage/syno/daily_full ]]; then #    - «»   /root/rotate_folders.sh /bakstorage/syno/daily_full 3 #     echo "Copying current backup..." cp -al /bakstorage/syno/daily /bakstorage/syno/daily_full else #  -     —    echo "No today backup found!" fi
      
      





 sudo cat /root/rotate_folders.sh #!/bin/bash # ver 1.0 path=$1 hold=$2 if [ -z $2 ]; then cat <<EOT Rotate folders script. Usage: $0 <path_to_folder_prefix> <folders_to_hold> Warning! Folders deleted and renamed by mask: path_to_folder_prefix* so please be sure that no any folders in the path Example: $0 /var/backup/daily 2 The result will be: /var/backup/daily -> /var/backup/daily.1 /var/backup/daily.1 -> /var/backup/daily.2 /var/backup/daily.2 -> Deleted EOT exit 1 fi num=$(ls -d $path* | wc -l) let "num=num-hold" if [ $num -gt 0 ]; then echo "ROTATE_FOLDERS: Found to delete: $num" del=$(ls -d $path* | sort | tail -n $num) echo "ROTATE_FOLDERS: Deleting folder(s):" echo "$del..." rm -r $del else echo "ROTATE_FOLDERS: Nothing to delete." fi # rename let "start=$hold-1" for i in $(seq $start -1 0); do let "y=i+1" if [ $i -eq 0 ]; then echo "ROTATE_FOLDERS: Renaming folders $path to $path.1 ..." mv "$path" "$path.1" else echo "ROTATE_FOLDERS: Renaming folders $path.$i to $path.$y ..." mv "$path.$i" "$path.$y" fi done
      
      





両方のスクリプトを実行可能にすることを忘れないでください:



 chmod 750 /root/rotate_folders.sh chmod 750 /root/rotate_daily.sh
      
      





cronに追加:



 $sudo crontab -e 0 10 * * * /root/rotate_daily.sh >>/var/log/rotate_daily.log 2>&1
      
      





すべての出力はファイル/var/log/rotate_daily.logに書き込まれることに注意してください。



実際、毎日すべてをコピーします!



毎週のバックアップを追加する場合は、次の2つの方法があります。



1.類推により、毎日と並行して設定します。 したがって、毎週、weekly.1、weekly.2などの完全に独立したフォルダーのセットがあります。 毎日のフォルダーと重複することはありません。 ただし、この場合、毎日のアーカイブと同じ量のディスク容量を占有します。



2.スクリプトを変更し、週に1回、毎日のフォルダーの追加のスナップショットを毎週のフォルダーに作成してから、毎週のフォルダーの名前をweekly.1、weekly.2などに変更します。非常に少数ですが、ファイルが破損した場合、すべてのフォルダーで一度に破損します!



ところで、上記の手法は、Synology DSMのバックアップだけでなく、rsyncとハードリンクをサポートするすべてのシステムに適用できます。



素敵な設定をしてください!



All Articles