Còpia de seguretat de Linux de Veeam al sistema operatiu Elbrus. Substitució d'importació ['?' | '.' | '!']

Hola a tots
Articles recents sobre Habré La substitució d'importacions a la pràctica. Part 1. Opcions и La música no va sonar durant molt de temps... o com l'Elbrus OS no es va fer lliure no em va deixar indiferent. Vaig decidir estudiar aquest problema en el context de la tasca de còpia de seguretat. A més, en aquest article S'esmenten els productes de Veeam Software, la qual cosa significa que el problema pot ser rellevant específicament en el context de la substitució d'importacions.

Còpia de seguretat de Linux de Veeam al sistema operatiu Elbrus. Substitució d'importació ['?' | '.' | '!']
font de la imatge original

En primer lloc, vaig decidir descarregar el sistema operatiu Elbrus, o millor dit, només la distribució disponible per a l'arquitectura x86_64, veure com funciona i intentar instal·lar-hi Veeam Agent per a Linux. Si voleu saber què va sortir d'això, consulteu cat.

Per tant, una petita digressió, per si algú no ho sap. "Elbrus" és així processador amb un sistema de comandament força específic. A més, hi ha el programari Elbrus OS. I, contràriament a la creença popular, per fer funcionar el sistema operatiu Elbrus, no és necessari disposar d'un sistema de maquinari basat en el processador Elbrus. Hi ha "PDK "Elbrus" per a x86"; de fet, va aparèixer en el domini públic en forma de disc d'instal·lació. Per cert, hi ha una nota a peu de pàgina "PDK - kit de desenvolupament de plataforma, kit de desenvolupador" - genial, això vol dir que hi ha almenys un compilador.

Una altra petita retirada forçada. El fet és que una vegada vaig tractar amb programari domèstic, com MSVS i Baguette RTOS. Vaig tenir experiència treballant amb components domèstics, inclòs un processador de MCST. Per tant, puc dir amb tota responsabilitat que hi ha una certa especificitat en aquest àmbit i intentaré no tocar-hi a l'article. Quan realment vull, posaré l'etiqueta [TBD]. Així que intentarem prescindir de trolls i gemecs banals. Al final, cal entendre la indústria de defensa russa i les agències governamentals. Gran país - petit pressupost... [TBD].

Etapa zero - descarregar. Cal destacar que la notícia que el sistema operatiu Elbrus ja està disponible va causar una ressonància, tant que el servidor de distribució va caure. [TBD] Gràcies a Yandex i a l'enginyer que va pensar a traslladar-lo allà. Així que la velocitat de descàrrega és bona.

La etapa primera - instal·lació. El vaig instal·lar al primer hipervisor que estava disponible per a ús gratuït. Vaig assignar dos nuclis, un parell de gigues de RAM, 32 MB per a vídeo (hi haurà una interfície gràfica, vaig pensar). El disc és com de costum: 32 GB.
Vaig començar la instal·lació. No he utilitzat les instruccions d'instal·lació, així que no puc comentar-hi. La interfície d'instal·lació de la TUI és molt minimalista.

Còpia de seguretat de Linux de Veeam al sistema operatiu Elbrus. Substitució d'importació ['?' | '.' | '!']
Bé, genial, podem prescindir del ratolí.

Vaig gestionar la següent finestra al segon intent. Per què no seleccioneu el dispositiu predeterminat sr0 [TBD] quan instal·leu des del disc?
Seleccioneu la font del CD-ROM i continueu.

Còpia de seguretat de Linux de Veeam al sistema operatiu Elbrus. Substitució d'importació ['?' | '.' | '!']

Mentre seleccionava la zona horària, de sobte em vaig adonar que el sistema utilitza el procés d'arrencada d'inici i estic treballant des de TTY0.

Còpia de seguretat de Linux de Veeam al sistema operatiu Elbrus. Substitució d'importació ['?' | '.' | '!']

D'acord, doncs classifiquem "Elbrus" com a comunitat Vells Creients[TBD]. En principi, això és bo: no cal demanar el codi font per veure com funciona el procés de descàrrega, ja que tot està escrit.

La resta gairebé no té importància: ho posem tot i estem d'acord. Al llarg del camí, descobrim que el nucli s'utilitza 3.14.79-13.84. Hmm, Debian 7 tenia 3.2 [TBD].

A continuació, seleccioneu la partició de disc per defecte i... Veiem un avís:

Còpia de seguretat de Linux de Veeam al sistema operatiu Elbrus. Substitució d'importació ['?' | '.' | '!']

Hmm, d'alguna manera la partició automàtica no va fer front bé amb un disc de 32 gig. No vaig canviar el disc; vaig completar la recerca amb la partició manual del disc a l'estil "tot en un". Vaig haver d'instal·lar ext3, ja que /boot no podia estar a ext4.
El sistema va sorgir sense incidents.

La segona etapa - buscar alternatives.
Després de recórrer el contingut del segon disc, em vaig adonar que es tracta d'un dipòsit amb addicionals. en paquets. I mirant /etc/apt/sources.list, em vaig adonar que cal muntar-lo a /mnt/cdrom. Però no he trobat /etc/os-release. Però hi ha /etc/mcst-version amb el contingut 3.0-rc36. 3.0 és probablement la versió; sembla que encaixa, però rc36? En general, el programari de tercers probablement no serà capaç de reconèixer aquesta distribució de la manera clàssica.

A la partició arrel, el directori /mcst em crida l'atenció i allà, amb el cor enfonsat, vaig descobrir /mcst/backup. És a dir, hi ha una eina de còpia de seguretat i està integrada al sistema! "Genial", vaig pensar, "A veure com funciona això!"

Va resultar que hi ha un script bash de 4Kb /mcst/bin/backup que proporciona la còpia de fitxers. Per defecte - al directori /mcst/backup. Al codi font esperava veure l'ordre rsync, però no es troba a la configuració predeterminada. L'script simplement copia els fitxers. L'ordre sembla una cosa així:

cp -rpdx <file backup> <file>

Tot el fitxer /mcst/bin/backup és aquíUs adverteixo de seguida que aquest guió per si sol no és suficient per entendre-ho completament. Treu funcions de /mcst/bin/source, que és una cosa així com una biblioteca de funcions. No el vaig incloure (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

Encara que potser no he entès res? Potser algú ho pot explicar als comentaris: com garanteix aquest script una còpia de seguretat de dades segura i fiable? [TBD]

rsync, per cert, s'inclou al complement. repositoris. Versió 3.1.3. Crec que utilitzar rsync encara és una millor alternativa a l'aplicació /mcst/bin/backup.

A continuació, vaig decidir posar-ne un de nou Veeam Agent per a Linux. Algú preguntarà: "Què hi tenen a veure Veeam i la substitució d'importacions?" Sí, no consta al registre, però està certificat per FSTEC, la qual cosa vol dir que a falta d'alternatives es pot utilitzar. Dedicar quinze minuts a alternatives de registre, he pogut trobar 3 enllaços per a la paraula "còpia de seguretat" (cap relacionat amb la meva pregunta per a la paraula "reserva"). No he fet una anàlisi profunda d'aquests programes, així que no intentaré jutjar com d'adequats són per fer còpies de seguretat de màquines amb Linux. Qui ho necessiti traurà la seva pròpia conclusió i la compartirà als comentaris.

L'etapa 3 — instal·lació de Veeam Agent per a Linux.
Per tant, Veeam Agent per a Linux consta de dos paquets: el mòdul del nucli veeamsnap (per cert, font aquí) i codi propietari d'espai d'usuari en forma de paquet veeam.

Hi va haver un petit problema amb la instal·lació del mòdul del nucli: el paquet dkms que falta. Aquest és un servei que us permet crear mòduls del nucli des de la font. Per regla general, està disponible a totes les distribucions de deb. Vaig haver de baixar-lo des d'un dipòsit de deb de tercers. Una cosa que em va fer feliç és que el paquet no depèn de l'arquitectura, de manera que encaixa com un nadiu. Per què no es va incloure a la llista de paquets disponibles, o més aviat, no es va desenvolupar [per determinar]? Potser se suposa que ningú hauria de construir i executar cap mòdul del nucli que no sigui MCST. Realment hi ha una discrepància aquí, ja que hi ha capçaleres linux. És a dir, el mòdul, si es vol, es pot muntar a mà i llançar-se mitjançant un script quan s'inicia la màquina. Crec que no hauríeu d'esperar actualitzacions freqüents de MCST [TBD].

"D'acord, el mòdul està instal·lat; la part més difícil s'ha acabat", vaig pensar... El paquet veeam per al dipòsit deb és per a la plataforma amd64 i el sistema operatiu Elbrus té una plataforma x86_64 [TBD]. La diferència, per descomptat, només està en el nom, però aquesta diferència fa que gairebé tots els paquets de repositoris de deb de tercers siguin incompatibles amb el sistema operatiu Elbrus. Aquest malentès molest es pot eliminar simplement: només cal desmuntar el paquet, corregir la informació sobre l'arquitectura i muntar-lo de nou. Com fer-ho Ho va buscar a Google instantàniament.

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

Un altre problema són les dependències. Sembla que hi ha els fitxers necessaris, però els paquets no. La impressió va ser que els noms dels paquets diferien dels seus "anàlegs importats". Potser les biblioteques estan empaquetades de manera diferent. No vaig entrar en massa detalls, vaig eliminar gairebé totes les dependències i la instal·lació va seguir endavant.

Aleshores van sorgir problemes amb el codi d'inici del servei. Faltava l'script /lib/init/vars.sh. Per alguna raó, Elbrus se'n gestiona sense, així que també l'eliminarem. A continuació, vam haver de substituir la funció de sortida del missatge: faltaven les funcions log_daemon_msg i log_end_msg. Després de rebuscar al fitxer /lib/lsb/init-functions, vaig trobar la funció log_success_msg: ens anirà bé per als experiments. Per cert, al fitxer /lib/lsb/init-functions la línia "# Source SuSE`s rc functions" es troba al començament del fitxer [TBD].

Després d'un processament tan aproximat del paquet amb un fitxer, la còpia de seguretat de tota la màquina a la compartició NFS es va llançar amb èxit. El muntatge de còpia de seguretat també va tenir èxit. Per tant, crec que per fer una còpia de seguretat d'una màquina amb Elbrus PDK, descarregat "així" sense cap obligació, Veeam Agent per a Linux és definitivament adequat. Fins i tot després de totes les modificacions amb un fitxer.

Per descomptat, el kit de distribució Elbrus OS no s'admet formalment, ja que no està inclòs a la llista de suports. A més, el departament de control de qualitat no va provar Veeam Agent per a Linux, així que aquests. no hi ha suport (almenys en el moment de la publicació de l'article).

Espero que l'article sigui útil per a aquells que intenten aplicar l'ordre núm. 334 de 29.06.2017 de juny de XNUMX. El meu per a tu... [TBD].

Font: www.habr.com

Afegeix comentari