FreeNasでのバックアップ

こんにちは、Habrausers!



標準のFreeNasツールを使用してバックアップを整理した経験を皆さんと共有したいと思います



まず、読者が私のケースの状況を簡単にナビゲートできるように、最新の状態にしたいと思います。



ADネットワークには、関連するすべてのサービス、多くのユーザー、ドメインに優しいFreeNas(別名freeBSD)で実行されているファイルサーバーがあります。



FreeNas自体には、削除されたファイルを非表示の.recycleフォルダーに移動するオプションがあり、フォルダーにグループ化された削除済みファイルがあり、フォルダーの名前は削除されたファイルの%USERNAME%です 。 このソリューションで十分ですが、ユーザーが情報を削除せずに変更した場合はどうなりますか?

この場合、ファイル自体をロールバックする必要がありますが、ファイルサーバーは標準機能では実行できません。



したがって、cronを介して実行するスクリプトを作成します。





私は自分でスクリプトを2つの部分に分けることにしました。 最初の部分はバックアップを作成し、2番目の部分は削除します=)2番目の部分については、少し後で説明します。



通常のバックアップであるスクリプトのコショウ部分は複雑なものではありません。

バックアップを作成し、目的の場所に置き、作成日までにアーカイブに名前を付けて、重複を避けます



pax -wvzf /mnt/data/backup/Hartmann_backup/Hartmann-`date "+%Y%m%d"`.tar.gz /mnt/data/Users_data







したがって、空き領域がなくなるまでアーカイブを作成します。 これは悪いことです。アーカイブの最も古いコピーを削除する必要があります。 これはスクリプトの2番目の部分です。



しかし、ここで重要な決定がすでに始まっています。

どのアーカイブが最後であるかをどのようにして見つけるのですか? 最初に頭に浮かぶのは、アーカイブプロパティを確認し、そこから日付を取り、最も古いものを削除することです。 しかし、彼はこの日付をFreeNasシステムの日付と比較します。 つまり、ファイルサーバーで突然時間が失敗すると、すべてのアーカイブが失われる可能性があるため、このオプションは適切ではありません。



別のオプションは、アーカイブの名前を取得し、名前から最大数を比較することです...そして、たとえば、3つの最大数を残す、つまり、最新の3つのアーカイブを残すことです。 このオプションは私たちに適しています。 これらのソリューションを次のように実装しました



#search_to_bd

filename=/mnt/data/backup/Hartmann_backup/bd.txt

filename2=/mnt/data/backup/Hartmann_backup/sort.txt

echo "" > $filename2

ls /mnt/data/backup/Hartmann_backup/ | grep .gz > $filename

declare -a array1

array1=( `cat "$filename" | tr '\n' ' '`)

#search_to_bd/



kolel=${#array1[*]}

var0=1



#Cut_name_to_bd

while [ "$var0" -lt "$kolel" ]

do

eval var$var0= echo ${array1[$var0]:9:8} >> $filename2

var=array1[$var0]

var0=`expr $var0 + 1`

done

#Cut_name_to_bd/ from_var0_to_kolel



#Take_sort_from_bd

ARRAY=( `cat "$filename2" | tr '\n' ' '`)

#Take_sort_from_bd/



#Comperison

maxi=0

for ((i=0; i < "${#ARRAY[@]}"; i++));do [ "0${ARRAY[i]}" -gt "0${ARRAY[maxi]}" ] && maxi=$i; done

maxi1=${ARRAY[maxi]}



ARRAY[maxi]=

maxi=0

for ((i=0; i < "${#ARRAY[@]}"; i++));do [ "0${ARRAY[i]}" -gt "0${ARRAY[maxi]}" ] && maxi=$i; done

maxi2=${ARRAY[maxi]}



ARRAY[maxi]=

maxi=0

for ((i=0; i < "${#ARRAY[@]}"; i++));do [ "0${ARRAY[i]}" -gt "0${ARRAY[maxi]}" ] && maxi=$i; done

maxi3=${ARRAY[maxi]}

#Comperison/

#shopt -s extglob

#rm !(@("backup/Hartmann_backup/Hartmann-$maxi1.tar.gz"|"backup/Hartmann_backup/Hartmann-#$maxi2.tar.gz"|"backup/Hartmann_backup/Hartmann-$maxi3.tar.gz"))

cd /mnt/data/backup/Hartmann_backup

ls -1 | egrep -v "(Hartmann-$maxi1.tar.gz|Hartmann-$maxi2.tar.gz|Hartmann-$maxi3.tar.gz)" | xargs rm








つまり、 2つのファイル、 つまり DBを作成し、そこにフォルダーの内容全体を配置します。 次に、すべてを配列にスローします。 さらに、数字を比較するには、名前から文字を削除する必要がありますが、すでにそこに番号を保存し、古い数字を削除しています。 客観的な批判を待っています!



All Articles