Linux Reservekopy fan Veeam op Elbrus OS. Ymportearje ferfanging ['?' | '.' | '!']

Hi everyone
Resinte artikels oer Habré Ymportferfanging yn 'e praktyk. Diel 1. Opsjes и De muzyk spile net lang ... of hoe't Elbrus OS nea frij waard liet my net ûnferskillich. Ik besleat dit probleem te studearjen yn 'e kontekst fan' e reservekopystaak. Boppedat, yn dit artikel Veeam Software-produkten wurde neamd, wat betsjut dat it probleem spesifyk relevant kin wêze yn 'e kontekst fan ymportferfanging.

Linux Reservekopy fan Veeam op Elbrus OS. Ymportearje ferfanging ['?' | '.' | '!']
orizjinele ôfbylding boarne

Alderearst besleat ik it Elbrus OS te downloaden, of leaver, allinich de beskikbere distribúsje foar de x86_64-arsjitektuer, sjoch hoe't it wurket, en besykje Veeam Agent foar Linux derop te ynstallearjen. As jo ​​witte wolle wat der út kaam, sjoch dan kat.

Dus, in lytse ôfwiking, foar it gefal dat immen it net wit. "Elbrus" is sa CPU mei in nochal spesifyk kommando systeem. Neist it is d'r Elbrus OS-software. En - yn tsjinstelling ta populêr leauwen - om it Elbrus OS te betsjinjen, is it net nedich om in hardwaresysteem te hawwen basearre op 'e Elbrus-prosessor. D'r is "PDK "Elbrus" foar x86" - yn feite ferskynde it yn it publike domein yn 'e foarm fan in ynstallaasjeskiif. Trouwens, d'r is in fuotnoat "PDK - platfoarmûntwikkelingskit, ûntwikkelderkit" - geweldich, dat betsjut dat d'r teminsten in kompilator is.

In oare lytse twongen retreat. It feit is dat ik ienris mei ynlânske software behannele, lykas MSVS en Baguette RTOS. Ik hie ûnderfining mei wurkjen mei ynlânske komponinten, ynklusyf in prosessor út MCST. Dêrom kin ik mei folsleine ferantwurdlikens sizze dat d'r in bepaalde spesifisiteit is yn dit gebiet en it is krekt dit dat ik sil besykje net yn it artikel te berikken. As ik echt wol, set ik de tag [TBD]. Sa sille wy besykje te dwaan sûnder gewoane trolling en banale kreunen. Oan 'e ein moatte de Russyske definsje-yndustry en oerheidsynstânsjes begrepen wurde. Grut lân - lyts budzjet .. [TBD].

Nul poadium - download. It is opmerklik dat it nijs dat it Elbrus OS beskikber is in resonânsje feroarsake, sa folle dat de distribúsjetsjinner del gie. [TBD] Mei tank oan Yandex en de yngenieur dy't tocht om it dêr te ferpleatsen. Dat de downloadsnelheid is goed.

De earste poadium - ynstallaasje. Ik haw it ynstalleare op 'e earste hypervisor dy't beskikber wie foar fergees gebrûk. Ik haw twa kearnen tawiisd, in pear optredens fan RAM, 32 MB foar fideo (d'r sil in grafyske ynterface wêze, tocht ik). De skiif is as gewoanlik - 32 GB.
Ik begon de ynstallaasje. Ik haw de ynstallaasje-ynstruksjes net brûkt, dus ik kin der gjin kommentaar oer jaan. De TUI-ynstallaasje-ynterface is slim minimalistysk.

Linux Reservekopy fan Veeam op Elbrus OS. Ymportearje ferfanging ['?' | '.' | '!']
No, geweldich, wy kinne sûnder in mûs.

Ik slagge it folgjende finster by de twadde poging. Wêrom net selektearje it standert apparaat sr0 [TBD] by it ynstallearjen fan skiif?
Selektearje de CD-ROM boarne en gean troch.

Linux Reservekopy fan Veeam op Elbrus OS. Ymportearje ferfanging ['?' | '.' | '!']

By it selektearjen fan de tiidsône, realisearre ik ynienen dat it systeem it init-bootproses brûkt, en ik wurkje fan TTY0.

Linux Reservekopy fan Veeam op Elbrus OS. Ymportearje ferfanging ['?' | '.' | '!']

OK, dan litte wy "Elbrus" klassifisearje as in mienskip Alde leauwigen[TBD]. Yn prinsipe is dit goed: jo hoege net om de boarnekoade te freegjen om te sjen hoe't it ynlaadproses wurket, om't alles skript is.

De rest is hast ûnbelangryk: wy sette alles en iens. Oan 'e wei fine wy ​​út dat de kernel 3.14.79-13.84 brûkt wurdt. Hmm, Debian 7 hie 3.2 [TBD].

Selektearje dêrnei de standert skiif partitioning en ... Wy sjogge in warskôging:

Linux Reservekopy fan Veeam op Elbrus OS. Ymportearje ferfanging ['?' | '.' | '!']

Hmm, op ien of oare manier koe de automatyske partitionearring net goed omgean mei in 32 gig-skiif. Ik haw de skiif net feroare; Ik foltôge de syktocht mei manuele skiifdieling yn 'e "all-in-one" styl. Ik moast ext3 ynstallearje, om't /boot net yn ext4 koe wêze.
It systeem kaam sûnder ynsidint op.

De twadde poadium - sykje nei alternativen.
Nei it rommeljen fan 'e ynhâld fan' e twadde skiif, realisearre ik dat dit in repository is mei ekstra. yn pakketten. En sjoch op /etc/apt/sources.list, ik realisearre dat it moat wurde monteard yn /mnt/cdrom. Mar ik fûn /etc/os-release net. Mar d'r is /etc/mcst-ferzje mei de ynhâld 3.0-rc36. 3.0 is wierskynlik de ferzje - it liket te passen, mar rc36? Yn 't algemien sil software fan tredden nei alle gedachten dizze ferdieling net op' e klassike manier kinne werkenne.

Yn 'e root-partysje falt de map /mcst myn each, en dêr, mei in sinkend hert, ûntduts ik /mcst/backup. Dat is, d'r is in reservekopy-ark, en it is ynboud yn it systeem! "Geweldich," tocht ik, "lit ús sjen hoe't dit wurket!"

It die bliken dat d'r in 4Kb bash-skript /mcst/bin/backup is dat it kopiearjen fan bestân leveret. Standert - nei de map /mcst/backup. Yn 'e boarnekoade ferwachte ik it rsync-kommando te sjen, mar it is net yn' e standertkonfiguraasje. It skript kopiearret gewoan bestannen. It kommando sjocht der sa út:

cp -rpdx <file backup> <file>

De hiele triem /mcst/bin/backup is hjirIk warskôgje jo daliks dat dit skript allinich net genôch is om folslein te begripen. It lûkt funksjes út /mcst/bin/source, dat is wat as in bibleteek fan funksjes. Ik haw it net opnommen (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

Hoewol, miskien haw ik wat net begrepen? Miskien kin immen yn 'e kommentaren útlizze: hoe soarget dit skript foar feilige en betroubere backup fan gegevens? [TBD]

rsync, trouwens, is opnommen yn 'e add-on. repositories. Ferzje 3.1.3. Ik tink dat it brûken fan rsync noch altyd in better alternatyf is foar de /mcst/bin/backup-applikaasje.

Dêrnei besleat ik in frisse te setten Veeam Agent foar Linux. Immen sil freegje: "Wat hat Veeam en ymportferfanging dêrmei te krijen?" Ja, it is net yn it register, mar it is sertifisearre troch FSTEC, wat betsjut dat by it ûntbrekken fan alternativen it kin wurde brûkt. Fyftjin minuten besteegje oan alternativen fan register, Ik koe 3 keppelings fine foar it wurd "reservekopy" (gjin relatearre oan myn fraach foar it wurd "reservearje"). Ik haw gjin djippe analyse fan dizze programma's dien, dus ik sil net besykje te beoardieljen hoe geskikt se binne foar reservekopy fan masines mei Linux. Wa't it nedich hat, sil syn eigen konklúzje lûke en diele yn 'e kommentaren.

Stage Three - ynstallaasje fan Veeam Agent foar Linux.
Dus, Veeam Agent foar Linux bestiet út twa pakketten: de veeamsnap kernel module (troch de manier, boarne hjir) en proprietêre brûkersromtekoade yn 'e foarm fan it veeam-pakket.

D'r wie ien lyts probleem mei it ynstallearjen fan de kernelmodule - it ûntbrekkende dkms-pakket. Dit is in tsjinst wêrmei jo kernelmodules kinne bouwe fan boarne. As regel is it beskikber op alle deb-distribúsjes. Ik moast it downloade fan in deb-repository fan tredden. Ien ding dat my bliid makke is dat it pakket net ôfhinklik is fan 'e arsjitektuer, dus it past as in lânseigen. Wêrom wie it net opnommen yn 'e list mei beskikbere pakketten, of leaver net ûntwikkele [TBD]? Miskien wurdt oannommen dat gjinien gjin net-MCST kernel modules moat bouwe en útfiere. D'r is hjir echt in diskrepânsje - om't d'r linux-headers binne. Dat is, de module, as winske, kin wurde gearstald mei de hân en lansearre troch in skript as de masine begjint. Ik tink dat jo net moatte ferwachtsje faak updates fan MCST [TBD].

"OK, de module is ynstalleare - it hurdste diel is foarby," tocht ik ... It veeam-pakket foar it deb-repository is foar it amd64-platfoarm, en it Elbrus OS hat in x86_64 [TBD]-platfoarm. It ferskil is fansels allinich yn 'e namme, mar dit ferskil makket hast alle pakketten fan deb-repositories fan tredden ynkompatibel mei it Elbrus OS. Dit ferfelende misferstân kin gewoan elimineare wurde: gewoan it pakket demontearje, de ynformaasje oer de arsjitektuer korrigearje en it wer byinoar sette. Hoe it te dwaan Google hat it daliks.

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

In oar probleem is ôfhinklikens. De nedige triemmen lykje der te wêzen, mar de pakketten binne net. De yndruk wie dat de nammen fan 'e pakketten ferskille fan har "ymporteare analogen". Miskien binne de bibleteken oars ynpakt. Ik gie net yn te folle detail, fuorthelle hast alle ôfhinklikens, en de ynstallaasje gie foarút.

Doe ûntstiene problemen mei de startkoade fan 'e tsjinst. It skript /lib/init/vars.sh ûntbrekt. Om ien of oare reden slagget Elbrus sûnder, dat wy sille it ek fuortsmite. Dêrnei moasten wy de berjochtútfierfunksje ferfange: de funksjes log_daemon_msg en log_end_msg ûntbrekken. Nei it rommeljen yn it /lib/lsb/init-functions-bestân, fûn ik de funksje log_success_msg - it sil goed wêze foar ús foar eksperiminten. Trouwens, yn it /lib/lsb/init-functions-bestân stiet de rigel "# Source SuSE's rc-funksjes" oan it begjin fan it [TBD]-bestân.

Nei sa'n rûge ferwurking fan it pakket mei in bestân, waard de reservekopy fan 'e hiele masine op it NFS-diel mei súkses lansearre. De reservekopy mount wie ek suksesfol. Dat, ik leau dat Veeam Agent foar Linux perfoarst geskikt is foar it meitsjen fan in reservekopy fan in masine mei de Elbrus PDK, "krekt sa" downloade sûnder ferplichtingen. Ek nei alle oanpassings mei in triem.

Fansels wurdt de Elbrus OS-distribúsjekit net formeel stipe, om't it net is opnommen yn 'e list mei stipe. Derneist waard Veeam Agent foar Linux der net op testen troch de QA-ôfdieling, dus dy. der is gjin stipe (op syn minst op it momint fan publikaasje fan it artikel).

Ik hoopje dat it artikel nuttich wêze sil foar dyjingen dy't besykje bestelling nr. 334 fan 29.06.2017 juny XNUMX út te fieren. Myn oan dy ... [TBD].

Boarne: www.habr.com

Add a comment