Linux öryggisafrit frá Veeam á Elbrus OS. Flytja inn staðgöngu ['?' | '.' | '!']

Hæ allir
Nýlegar greinar um Habré Innflutningsskipti í reynd. Hluti 1. Valkostir и Tónlistin lék ekki lengi ... eða hvernig Elbrus OS varð aldrei ókeypis lét mig ekki afskiptalaus. Ég ákvað að kynna mér þetta mál í samhengi við öryggisafritið. Þar að auki, í Þessi grein Veeam Software vörur eru nefndar, sem þýðir að málið gæti átt við sérstaklega í tengslum við innflutningsskipti.

Linux öryggisafrit frá Veeam á Elbrus OS. Flytja inn staðgöngu ['?' | '.' | '!']
upprunalega myndheimild

Í fyrsta lagi ákvað ég að hlaða niður Elbrus stýrikerfinu, eða réttara sagt, aðeins tiltæka dreifingu fyrir x86_64 arkitektúrinn, sjá hvernig það virkar og reyna að setja upp Veeam Agent fyrir Linux á það. Ef þú vilt vita hvað kom út úr þessu, vinsamlegast sjáðu kött.

Svo, smá frávik, ef einhver veit það ekki. "Elbrus" er svona örgjörva með frekar ákveðnu stjórnkerfi. Auk þess er Elbrus OS hugbúnaður. Og - þvert á það sem almennt er talið - til að stjórna Elbrus stýrikerfinu er ekki nauðsynlegt að hafa vélbúnaðarkerfi sem byggir á Elbrus örgjörvanum. Það er „PDK „Elbrus“ fyrir x86“ - í raun birtist það á almenningi í formi uppsetningardisks. Við the vegur, það er neðanmálsgrein „PDK - vettvangsþróunarsett, þróunarsett“ - frábært, það þýðir að það er að minnsta kosti þýðandi þar.

Önnur lítil þvinguð hörfa. Staðreyndin er sú að ég fékkst einu sinni við innlendan hugbúnað eins og MSVS og Baguette RTOS. Ég hafði reynslu af því að vinna með innlenda íhluti, þar á meðal örgjörva frá MCST. Þess vegna get ég sagt með fullri ábyrgð að það er ákveðin sérstaða á þessu sviði og ég mun reyna að koma ekki inn á það í greininni. Þegar ég virkilega vil, set ég merkið [TBD]. Þannig að við munum reyna að gera það án þess að vera beinlínis trolla og banal styn. Að lokum þarf að skilja rússneska varnariðnaðinn og ríkisstofnanir. Stórt land - lítið fjárhagsáætlun. [TBD].

Núll stig - niðurhal. Það er athyglisvert að fréttirnar um að Elbrus OS sé orðið fáanlegt olli ómun, svo mikið að dreifingarþjónninn fór niður. [TBD] Þökk sé Yandex og verkfræðingnum sem datt í hug að flytja það þangað. Þannig að niðurhalshraðinn er góður.

Í fyrsta áfanga - uppsetning. Ég setti það upp á fyrsta hypervisor sem var fáanlegur til ókeypis notkunar. Ég úthlutaði tveimur kjarna, nokkrum tónleikum af vinnsluminni, 32 MB fyrir myndband (það verður grafískt viðmót, hélt ég). Diskurinn er eins og venjulega - 32 GB.
Ég byrjaði á uppsetningunni. Ég notaði ekki uppsetningarleiðbeiningarnar, svo ég get ekki tjáð mig um það. TUI uppsetningarviðmótið er mjög naumhyggjulegt.

Linux öryggisafrit frá Veeam á Elbrus OS. Flytja inn staðgöngu ['?' | '.' | '!']
Jæja, frábært, við getum verið án músar.

Ég stjórnaði næsta glugga í annarri tilraun. Af hverju ekki að velja sjálfgefið tæki sr0 [TBD] þegar þú setur upp af diski?
Veldu geisladiskinn og haltu áfram.

Linux öryggisafrit frá Veeam á Elbrus OS. Flytja inn staðgöngu ['?' | '.' | '!']

Þegar ég valdi tímabeltið áttaði ég mig skyndilega á því að kerfið notar init ræsingarferlið og ég er að vinna frá TTY0.

Linux öryggisafrit frá Veeam á Elbrus OS. Flytja inn staðgöngu ['?' | '.' | '!']

Allt í lagi, þá skulum við flokka „Elbrus“ sem samfélag Gamlir trúaðir[TBD]. Í grundvallaratriðum er þetta gott: þú þarft ekki að biðja um frumkóðann til að sjá hvernig niðurhalsferlið virkar, þar sem allt er skrifað.

Restin skiptir nánast engu máli: við setjum allt og erum sammála. Í leiðinni komumst við að því að kjarninn er notaður 3.14.79-13.84. Hmm, Debian 7 var með 3.2 [TBD].

Næst skaltu velja sjálfgefna diskskiptingu og ... Við sjáum viðvörun:

Linux öryggisafrit frá Veeam á Elbrus OS. Flytja inn staðgöngu ['?' | '.' | '!']

Hmm, einhvern veginn réði sjálfvirka skiptingin ekki vel við 32 gig disk. Ég breytti ekki disknum; ég kláraði leitina með handvirkri diskskiptingu í „allt-í-einn“ stíl. Ég þurfti að setja upp ext3, þar sem /boot gat ekki verið í ext4.
Kerfið kom upp án atvika.

The second leiksvið - leitaðu að valkostum.
Eftir að hafa grúfað í gegnum innihald seinni disksins áttaði ég mig á því að þetta er geymsla með viðbótar. í pakka. Og þegar ég skoðaði /etc/apt/sources.list áttaði ég mig á því að það þarf að tengja það í /mnt/cdrom. En ég fann ekki /etc/os-release. En það er /etc/mcst-útgáfa með innihaldinu 3.0-rc36. 3.0 er líklega útgáfan - hún virðist passa, en rc36? Almennt séð mun hugbúnaður frá þriðja aðila líklegast ekki geta þekkt þessa dreifingu á klassískan hátt.

Í rót skiptingunni grípur /mcst skrárinn auga mitt og þar, með sökkvandi hjarta, uppgötvaði ég /mcst/backup. Það er, það er öryggisafritunartæki og það er innbyggt í kerfið! „Frábært,“ hugsaði ég, „Við skulum sjá hvernig þetta virkar!

Það kom í ljós að það er 4Kb bash script /mcst/bin/backup sem veitir skráaafritun. Sjálfgefið - í /mcst/backup möppuna. Í frumkóðann bjóst ég við að sjá rsync skipunina, en hún er ekki í sjálfgefna stillingu. Handritið afritar einfaldlega skrár. Skipunin lítur einhvern veginn svona út:

cp -rpdx <file backup> <file>

Öll skráin /mcst/bin/backup er hérÉg vara þig strax við því að þetta handrit eitt og sér er ekki nóg til að skilja það til fulls. Það dregur aðgerðir frá /mcst/bin/source, sem er eitthvað eins og aðgerðasafn. Ég lét það ekki fylgja með (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

Þó, kannski skildi ég ekki eitthvað? Kannski getur einhver útskýrt í athugasemdunum: hvernig tryggir þetta handrit öruggt og áreiðanlegt öryggisafrit af gögnum? [TBD]

rsync, við the vegur, er innifalinn í viðbótinni. geymslum. Útgáfa 3.1.3. Ég held að notkun rsync sé samt betri valkostur við /mcst/bin/afritunarforritið.

Næst ákvað ég að setja ferskan Veeam Agent fyrir Linux. Einhver mun spyrja: "Hvað hefur Veeam og innflutningsskipti með það að gera?" Já, það er ekki í skránni, en það er vottað af FSTEC, sem þýðir að það er hægt að nota það ef ekki eru valkostir. Að eyða fimmtán mínútum í val frá skrásetning, Ég gat fundið 3 tengla fyrir orðið „afrit“ (enginn tengdur spurningunni minni um orðið „varasjóður“). Ég hef ekki gert djúpa greiningu á þessum forritum, svo ég mun ekki reyna að dæma hversu hentug þau eru til að taka öryggisafrit af vélum sem keyra Linux. Sá sem þarf á því að halda dregur sína eigin ályktun og deilir henni í athugasemdum.

Stage þrjú — uppsetning á Veeam Agent fyrir Linux.
Svo, Veeam Agent fyrir Linux samanstendur af tveimur pökkum: veeamsnap kjarnaeiningunni (við the vegur, heimild hér) og sérnotendarýmiskóði í formi veeam pakkans.

Það var eitt lítið vandamál við að setja upp kjarnaeininguna - dkms pakkann sem vantar. Þetta er þjónusta sem gerir þér kleift að smíða kjarnaeiningar frá uppruna. Að jafnaði er það fáanlegt á öllum skuldadreifingum. Ég þurfti að hlaða því niður frá þriðja aðila deb geymslu. Eitt sem gladdi mig er að pakkinn er ekki háður arkitektúrnum, svo hann passar eins og innfæddur. Af hverju var það ekki innifalið á listanum yfir tiltæka pakka, eða öllu heldur, ekki þróað [TBD]? Kannski er gert ráð fyrir að enginn ætti að byggja og keyra neinar kjarnaeiningar sem ekki eru MCST. Það er í raun misræmi hér - þar sem það eru linux-hausar. Það er að segja að eininguna, ef þess er óskað, er hægt að setja saman í höndunum og ræsa hana með handriti þegar vélin fer í gang. Ég held að þú ættir ekki að búast við tíðum uppfærslum frá MCST [TBD].

„Allt í lagi, einingin er uppsett - erfiðasta hlutinn er búinn,“ hugsaði ég... Veeam pakkinn fyrir deb geymsluna er fyrir amd64 pallinn og Elbrus OS er með x86_64 [TBD] vettvang. Munurinn er auðvitað aðeins í nafninu, en þessi munur gerir næstum alla pakka frá þriðja aðila deb geymslum ósamrýmanlegir Elbrus OS. Hægt er að útrýma þessum pirrandi misskilningi einfaldlega: Taktu pakkann í sundur, leiðréttu upplýsingarnar um arkitektúrinn og settu hann saman aftur. Hvernig á að gera það Googlaði það samstundis.

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

Annað vandamál er ósjálfstæði. Nauðsynlegar skrár virðast vera til staðar, en pakkarnir eru það ekki. Tilfinningin var sú að nöfn pakkninganna væru frábrugðin „innfluttum hliðstæðum“ þeirra. Kannski eru bókasöfnin öðruvísi pakkað. Ég fór ekki í smáatriði, fjarlægði næstum öll ósjálfstæði og uppsetningin hélt áfram.

Þá komu upp vandamál með upphafskóða þjónustunnar. Handritið /lib/init/vars.sh vantaði. Af einhverjum ástæðum tekst Elbrus án þess, svo við munum fjarlægja það líka. Næst þurftum við að skipta út skilaboðaúttaksaðgerðinni: log_daemon_msg og log_end_msg aðgerðirnar vantaði. Eftir að hafa grúfað um í /lib/lsb/init-functions skránni fann ég log_success_msg fallið - það mun vera gott fyrir okkur fyrir tilraunir. Við the vegur, í /lib/lsb/init-functions skránni er línan „# Source SuSE`s rc functions“ í upphafi [TBD] skráarinnar.

Eftir svona grófa vinnslu á pakkanum með skrá tókst að hleypa afriti allrar vélarinnar á NFS-hlutinn af stað. Afritunarfestingin tókst einnig. Svo ég tel að til að taka öryggisafrit af vél með Elbrus PDK, hlaðið niður „svona“ án nokkurra skuldbindinga, henti Veeam Agent fyrir Linux örugglega. Jafnvel eftir allar breytingar með skrá.

Auðvitað er Elbrus OS dreifingarsettið ekki formlega stutt þar sem það er ekki innifalið á listanum yfir þau sem eru studd. Að auki var Veeam Agent fyrir Linux ekki prófað á því af QA deildinni, þannig að þeir. það er enginn stuðningur (a.m.k. við birtingu greinarinnar).

Ég vona að greinin nýtist þeim sem eru að reyna að innleiða pöntun nr. 334 frá 29.06.2017. júní XNUMX. Mitt til þín... [TBD].

Heimild: www.habr.com

Bæta við athugasemd