Elbrus OS 䞊の Veeam からの Linux バックアップ。 むンポヌト眮換 ['?' | 「。」 | 「」

こんにちは。
ハブレに関する最近の蚘事 実際のむンポヌト代替。 パヌト 1. オプション О 音楜は長く再生されなかった...たたは Elbrus OS がなぜ無料にならなかったのか 私を無関心にしたせんでした。 私はこの問題をバックアップ タスクの文脈で研究するこずにしたした。 さらに、 この蚘事 Veeam Software 補品に぀いお蚀及されおいるため、この問題は特に茞入代替に関連しおいる可胜性がありたす。

Elbrus OS 䞊の Veeam からの Linux バックアップ。 むンポヌト眮換 ['?' | 「。」 | 「」
元の画像゜ヌス

たず最初に、Elbrus OS、぀たり x86_64 アヌキテクチャで利甚可胜なディストリビュヌションのみをダりンロヌドし、それがどのように機胜するかを確認し、Veeam Agent for Linux をむンストヌルしおみるこずにしたした。 この結果を知りたい堎合は、cat を参照しおください。

それで、誰かが知らない堎合に備えお、ちょっずした䜙談です。 「゚ルブルス」っおこんな感じ プロセッサ かなり特殊なコマンド システムを䜿甚したす。 これに加えお、Elbrus OS ゜フトりェアもありたす。 そしお、䞀般的な考えに反しお、Elbrus OS を動䜜させるために、Elbrus プロセッサをベヌスにしたハヌドりェア システムは必芁ありたせん。 「x86 甹 PDK "Elbrus"」がありたす。実際、これはむンストヌル ディスクの圢でパブリック ドメむンに登堎したした。 ちなみに、「PDK - プラットフォヌム開発キット、開発者キット」ずいう脚泚がありたす。これは、少なくずもそこにコンパむラヌがあるこずを意味したす。

たたたた小芏暡な匷制撀退。 実は私もか぀おMSVSやBaguette RTOSなどの囜産゜フトりェアを扱ったこずがありたす。 MCST のプロセッサヌなど、囜産コンポヌネントを扱った経隓がありたした。 したがっお、この分野にはある皮の特殊性があるず私は責任を持っお蚀えたすので、この蚘事では觊れないようにしたす。 どうしおもしたい堎合は【未定】タグを付けさせおいただきたす。 したがっお、私たちはあからさたな荒らしや平凡なうめき声を出さずに枈むように努めたす。 結局のずころ、ロシアの防衛産業ず政府機関を理解する必芁がある。 倧囜 - 予算は少ない.. [未定]。

れロステヌゞ - ダりンロヌド。 Elbrus OS が利甚可胜になったずいうニュヌスが反響を呌び、配垃サヌバヌがダりンするほどになったこずは泚目に倀したす。 [未定] Yandex ず、Yandex をそこに移動するこずを考えた゚ンゞニアに感謝したす。 したがっお、ダりンロヌド速床は良奜です。

第1ステヌゞ - 取り付け。 無料で䜿甚できる最初のハむパヌバむザヌにむンストヌルしたした。 32 ぀のコア、数ギガの RAM、ビデオ甚に 32 MB を割り圓おたした (グラフィカル むンタヌフェむスがあるず思いたした)。 ディスクは通垞どおり XNUMX GB です。
むンストヌルを開始したした。 むンストヌル手順は䜿甚しなかったので、コメントできたせん。 TUI むンストヌル むンタヌフェむスは非垞に最小限に抑えられおいたす。

Elbrus OS 䞊の Veeam からの Linux バックアップ。 むンポヌト眮換 ['?' | 「。」 | 「」
そうですね、マりスなしでも倧䞈倫です。

0 回目の詊行で次のりィンドりを管理できたした。 ディスクからむンストヌルするずきにデフォルトのデバむス srXNUMX [TBD] を遞択しおみおはいかがでしょうか?
CD-ROM ゜ヌスを遞択しお次に進みたす。

Elbrus OS 䞊の Veeam からの Linux バックアップ。 むンポヌト眮換 ['?' | 「。」 | 「」

タむムゟヌンを遞択しおいるずきに、システムが init boot プロセスを䜿甚しおおり、TTY0 から䜜業しおいるこずに突然気づきたした。

Elbrus OS 䞊の Veeam からの Linux バックアップ。 むンポヌト眮換 ['?' | 「。」 | 「」

OK、それでは「Elbrus」をコミュニティずしお分類したしょう 叀儀匏掟[未定]。 原則ずしお、これは良いこずです。すべおがスクリプト化されおいるため、ダりンロヌド プロセスがどのように機胜するかを確認するために゜ヌス コヌドを芁求する必芁はありたせん。

残りはほずんど重芁ではありたせん。私たちはすべおを入れお同意したす。 途䞭で、カヌネルが 3.14.79-13.84 が䜿甚されおいるこずがわかりたす。 うヌん、Debian 7 には 3.2 [TBD] がありたした。

次に、デフォルトのディスク パヌティションを遞択するず...譊告が衚瀺されたす。

Elbrus OS 䞊の Veeam からの Linux バックアップ。 むンポヌト眮換 ['?' | 「。」 | 「」

うヌん、どういうわけか自動パヌティショニングは 32 GB のディスクにうたく察応できたせんでした。 ディスクは倉曎せず、「オヌルむンワン」スタむルで手動でディスク パヌティショニングを行っおク゚ストを完了したした。 /boot は ext3 にできないため、ext4 をむンストヌルする必芁がありたした。
システムは問題なく起動したした。

第2期 - 代替案を探したす。
3.0 番目のディスクの内容を調べたずころ、これが远加のリポゞトリであるこずがわかりたした。 パッケヌゞで。 /etc/apt/sources.list を芋るず、/mnt/cdrom にマりントする必芁があるこずがわかりたした。 しかし、/etc/os-release が芋぀かりたせんでした。 ただし、/etc/mcst-version の内容は 36-rc3.0 です。 バヌゞョンはおそらく 36 です。適合するようですが、rcXNUMX ですか? 䞀般に、サヌドパヌティ ゜フトりェアは、埓来の方法ではこのディストリビュヌションを認識できない可胜性が高くなりたす。

ルヌト パヌティションで /mcst ディレクトリが目に留たり、萜ち蟌む心で /mcst/backup を発芋したした。 ぀たり、バックアップ ツヌルがシステムに組み蟌たれおいるのです。 「すごいな」ず私は思いたした。「これがどのように機胜するか芋おみたしょう!」

ファむルのコピヌを提䟛する 4Kb bash スクリプト /mcst/bin/backup があるこずが刀明したした。 デフォルトでは、/mcst/backup ディレクトリに保存されたす。 ゜ヌス コヌドには rsync コマンドがあるず予想しおいたしたが、デフォルト蚭定にはありたせんでした。 スクリプトは単にファむルをコピヌするだけです。 コマンドは次のようになりたす。

cp -rpdx <file backup> <file>

ファむル党䜓 /mcst/bin/backup はここにありたすこのスクリプトだけでは完党に理解するのに十分ではないこずをすぐに譊告したす。 これは、関数のラむブラリのようなものである /mcst/bin/source から関数を取埗したす。 入れおたせんでした(44KB)。

#!/bin/bash

unalias -a

set +vx

source $(dirname $0)/source
[[ $? != 0 ]] && exit 1

OPTIONS="hvcdrRil:L:"

usage()
{
	echo "Usage: $PROG_NAME [-$OPTIONS] [backup]"
	echo "    h            - this help"
	echo "    v vv vvv     - verbose, very verbose, extremly verbose"
	echo "    c            - create backup"
	echo "    d            - diffs backup and system"
	echo "    r            - recovery system"
	echo "    R            - remove backup"
	echo "    i            - prompt before backup removing"
	echo "    l list       - additional backup files list"
	echo "    L list       - global backup files list"
	echo "    backup       - backup directory, default /mcst/backup/backup"
}

init_prog()
{
	typeset flg=0

	while getopts $OPTIONS opt
	do
		case $opt in
		h ) usage; exit 0;;
		v ) (( verbose = verbose + 1 )); set_verbose;;
		c ) flg=1; c_flg=1;;
		d ) flg=1; d_flg=1;;
		r ) flg=1; r_flg=1;;
		R ) flg=1; R_flg=1;;
		i ) i_flg=1;;
		l ) l_flg=1; list_arg="$list_arg $OPTARG";;
		L ) L_flg=1; LIST_arg="$LIST_arg $OPTARG";;
		* ) usage "Invalid option"; exit 1;;
		esac
	done

	set_verbose

	check_su

	init_variables

	shift $((OPTIND-1))

	if (( $# > 1 ))
	then
		echo_fatal "invalid arguments number, exp 0|1, act $#"
		exit 1
	fi

	[[ $# = 1 ]] && BACKUP=$1

	echo "Backup directory is $BACKUP"

	if [[ $L_flg = 1 ]]
	then
		backup_list="$LIST_arg"
	elif [[ $c_flg != 1 && $R_flg != 1 ]]
	then
		get_output_cmd "cat $BACKUP/$BACKUP_LIST_NAME"
		backup_list="$output_cmd"
	else
		get_output_cmd "get_backup_list"
		backup_list="$output_cmd"
	fi

	if [[ $l_flg = 1 ]]
	then
		backup_list="$backup_list $list_arg"
	fi

	if [[ $flg = 0 ]]
	then
		if [[ -d $BACKUP ]]
		then
			ls -laR $BACKUP
		else
			echo_info "Cannot access $BACKUP"	
		fi
		echo "backup_list=$backup_list"
		exit 0
	fi

###	echo "Backup list: $backup_list"
}

create_file()
{
	typeset f=$1 fr=$2
	typeset fb

	[[ -z $fr ]] && fr=$f

	fb=${f#/}

	fb=$BACKUP/$fb

	xcmd="rm -rf $fb"
	set_cmd "$xcmd"
	run_cmd

	xcmd="mkdir -p $fb"
	set_cmd "$xcmd"
	run_cmd

	if [[ -a $fr ]]
	then
		xcmd="cp -rpdx $fr $fb/file"
		set_cmd "$xcmd"
		run_cmd

		xcmd="touch $fb/create"
		set_cmd "$xcmd"
		run_cmd
	else
		xcmd="touch $fb/delete"
		set_cmd "$xcmd"
		run_cmd
	fi
}

diff_file()
{
	typeset f=$1
	typeset fb

	fb=${f#/}

	fb=$BACKUP/$fb

	if [[ -f $fb/delete ]]
	then
		echo_info "$f absent"
	elif [[ -f $fb/create ]]
	then
#		echo "state: create $f"

		if [[ ! -a $f ]]
		then
			echo_info "cannot access $f"
		else
			xcmd="diff -r $f $fb/file"
			echo "$xcmd"
			set_cmd "$xcmd" "" "0 1 2"
			run_cmd
		fi
	else
		echo_fatal "wrong $f backup"
		exit 1
	fi
}

recovery_file()
{
	typeset f=$1
	typeset fb

	fb=${f#/}

	fb=$BACKUP/$fb

	if [[ ! -a $fb ]]
	then
		echo_fatal "cannot access $fb"
		exit 1
	fi

	xcmd="rm -rf $f"
	set_cmd "$xcmd"
	run_cmd

	if [[ -f $fb/delete ]]
	then
		:
	elif [[ -f $fb/create ]]
	then
		xcmd="cp -rpdx $fb/file $f"
		set_cmd "$xcmd"
		run_cmd
	else
		echo_fatal "wrong $fb backup"
		exit 1
	fi
}

remove_backup()
{
	echo "Remove backup"

	if [[ ! -d $BACKUP ]]
	then
		echo_info "Cannot access $BACKUP"
		return
	fi

	if [[ ! -f $BACKUP/$BACKUP_LIST_NAME ]]
	then
		echo_fatal "$BACKUP_LIST_NAME absent, remove backup manually"
		exit 0
	fi

	answer=
	if [[ $i_flg = 1 ]]
	then
		echo -n "Remove $BACKUP directory (yes/...)?"
		read answer
	else
		answer=yes
	fi
	if [[ $answer = yes ]]
	then
		xcmd="rm -rf $BACKUP"
		set_cmd "$xcmd"
		run_cmd
	fi
}

recovery_backup()
{
	echo "Recovery system from $BACKUP" 

	for f in $backup_list
	do
		get_output_cmd "get_mount_point $f"
		mnt=$output_cmd
		get_output_cmd "is_ro_mounted $mnt"
		mnt=$output_cmd
		if [[ ! -z $mnt ]]
		then
			remount_rw_fs $mnt
		fi 
		recovery_file $f
		if [[ ! -z $mnt ]]
		then
			remount_ro_fs $mnt
		fi 
	done

	echo "The system is ready, reboot the system manually" 
}

create_backup()
{
		echo "Create backup"

		xcmd="mkdir -pm0777 $BACKUP"
		set_cmd "$xcmd"
		run_cmd

		for v in $backup_list
		do
			f=${v%%:*}
			backup_list2="$backup_list2 $f"
			fr=${v#*:}
			create_file $f $fr
		done
		echo "$backup_list2" >$BACKUP/$BACKUP_LIST_NAME
}

diff_backup()
{
	echo "Diffs system and backup" 

	if [[ ! -d $BACKUP ]]
	then
		echo_fatal "cannot access $BACKUP"
		exit 1
	fi

	for f in $backup_list
	do
		diff_file $f
	done
}

main()
{
	typeset f mnt mnt_list answer

	if [[ $R_flg = 1 ]]
	then
		remove_backup
	fi

	if [[ $r_flg = 1 ]]
	then
		recovery_backup
	fi

	if [[ $c_flg = 1 ]]
	then
		create_backup
	fi

	if [[ $d_flg = 1 ]]
	then
		diff_backup
	fi
}

init_prog "$@"

main

exit 0

でも、もしかしたら䜕か理解できなかったでしょうか おそらく誰かがコメントで説明しおくれるでしょうこのスクリプトはどのようにしお安党で信頌性の高いデヌタバックアップを保蚌するのでしょうか [未定]

ちなみに、rsync はアドオンに含たれおいたす。 リポゞトリ。 バヌゞョン3.1.3。 rsync を䜿甚するこずは、/mcst/bin/backup アプリケヌションのより良い代替手段であるず思いたす。

次に、新しいものを入れるこずにしたした Linux 甹 Veeam ゚ヌゞェント。 「Veeam ず茞入代替品はそれず䜕の関係があるのですか?」ず尋ねる人もいるでしょう。 はい、登録されおいたせんが、FSTEC によっお認定されおいるため、代替品がない堎合でも䜿甚できたす。 の代替案に XNUMX 分を費やす レゞストリ, 「バックアップ」ずいう単語のリンクを 3 ぀芋぀けるこずができたした「予玄」ずいう単語の質問ずは関係ありたせんでした。 私はこれらのプログラムに぀いお詳现な分析を行っおいないため、これらのプログラムが Linux を実行しおいるマシンのバックアップにどの皋床適しおいるかを刀断する぀もりはありたせん。 それを必芁ずする人は、自分なりの結論を導き出し、それをコメントで共有するでしょう。

ステヌゞ3 — Linux 甹 Veeam ゚ヌゞェントのむンストヌル。
したがっお、Veeam Agent for Linux は XNUMX ぀のパッケヌゞで構成されおいたす: veeamsnap カヌネル モゞュヌル (ちなみに、 ゜ヌスはこちら) および veeam パッケヌゞ圢匏の独自のナヌザヌ空間コヌド。

カヌネル モゞュヌルのむンストヌルには、dkms パッケヌゞが欠萜しおいるずいう小さな問題が XNUMX ぀ありたした。 これは、゜ヌスからカヌネル モゞュヌルをビルドできるサヌビスです。 原則ずしお、すべおの deb ディストリビュヌションで利甚できたす。 サヌドパヌティの deb リポゞトリからダりンロヌドする必芁がありたした。 嬉しかったのは、パッケヌゞがアヌキテクチャに䟝存しないため、ネむティブパッケヌゞのようにフィットするこずです。 なぜ利甚可胜なパッケヌゞのリストに含たれおいなかったのか、あるいは開発されなかったのですか [TBD]? おそらく、誰も非 MCST カヌネル モゞュヌルを構築しお実行すべきではないず考えられおいたす。 Linux ヘッダヌがあるため、ここには実際に矛盟がありたす。 ぀たり、必芁に応じおモゞュヌルを手動で組み立お、マシンの起動時にスクリプトによっお起動できたす。 MCST [未定] からの頻繁な曎新は期埅しないほうがよいず思いたす。

「OK、モゞュヌルがむンストヌルされたした - 最も難しい郚分は終わった」ず私は思いたした... deb リポゞトリの veeam パッケヌゞは amd64 プラットフォヌム甚であり、Elbrus OS は x86_64 [TBD] プラットフォヌムを備えおいたす。 もちろん、違いは名前だけですが、この違いにより、サヌドパヌティの deb リポゞトリのほがすべおのパッケヌゞが Elbrus OS ず互換性がなくなりたす。 この迷惑な誀解は簡単に解消できたす。パッケヌゞを逆アセンブルし、アヌキテクチャに関する情報を修正しお、元に戻すだけです。 どうやっおするの グヌグルで調べた 即座に。

mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb

もう XNUMX ぀の問題は䟝存関係です。 必芁なファむルはあるように芋えたすが、パッケヌゞがありたせん。 パッケヌゞの名前が「茞入された類䌌品」ずは異なるずいう印象でした。 おそらく、ラむブラリのパッケヌゞ化が異なっおいる可胜性がありたす。 あたり詳现には觊れず、ほがすべおの䟝存関係を削陀しお、むンストヌルを続行したした。

その埌、サヌビス開始コヌドに問題が発生したした。 スクリプト /lib/init/vars.sh がありたせんでした。 䜕らかの理由で、Elbrus はそれなしでも管理できるので、これも削陀したす。 次に、メッセヌゞ出力関数を眮き換える必芁がありたした。log_daemon_msg 関数ず log_end_msg 関数が欠萜しおいたした。 /lib/lsb/init-functions ファむルを探し回った結果、log_success_msg 関数を芋぀けたした。これは実隓に圹立ちたす。 ちなみに、/lib/lsb/init-functions ファむルでは、[TBD] ファむルの先頭に「# Source SuSE`s rc function」ずいう行がありたす。

このようにファむルを䜿甚しおパッケヌゞを倧たかに凊理した埌、NFS 共有䞊のマシン党䜓のバックアップが正垞に開始されたした。 バックアップのマりントも成功したした。 したがっお、䜕の矩務もなく「そのたた」ダりンロヌドした Elbrus PDK を備えたマシンをバックアップするには、Veeam Agent for Linux が間違いなく適しおいるず思いたす。 ファむルですべおの倉曎を行った埌でも。

もちろん、Elbrus OS 配垃キットはサポヌト察象リストに含たれおいないため、正匏にはサポヌトされおいたせん。 さらに、Veeam Agent for Linux は QA 郚門によっおテストされおいたせん。 (少なくずも蚘事の公開時点では) サポヌトはありたせん。

この蚘事が、334 幎 29.06.2017 月 XNUMX 日の呜什第 XNUMX 号を実行しようずしおいる人々に圹立぀こずを願っおいたす。 私のものをあなたに [未定]。

出所 habr.com

コメントを远加したす