Linuksa Rezervo de Veeam sur Elbrus OS. Import-anstataŭigo ['?' | '.' | '!']

Saluton
Lastatempaj artikoloj pri Habré Import-anstataŭigo en praktiko. Parto 1. Opcioj и La muziko ne ludis dum longa tempo ... aŭ kiel la Elbrus OS ne iĝis libera ne lasis min indiferenta. Mi decidis studi ĉi tiun aferon en la kunteksto de la rezerva tasko. Cetere, en ĉi tiu artikolo Veeam Software-produktoj estas menciitaj, kio signifas, ke la afero povas esti grava specife en la kunteksto de import-anstataŭigo.

Linuksa Rezervo de Veeam sur Elbrus OS. Import-anstataŭigo ['?' | '.' | '!']
originala bildfonto

Antaŭ ĉio, mi decidis elŝuti la Elbrus OS, aŭ pli ĝuste, nur la disponeblan distribuon por la arkitekturo x86_64, vidi kiel ĝi funkcias, kaj provi instali Veeam Agent por Linukso sur ĝi. Se vi volas scii kio eliris el tio, bonvolu vidi katon.

Do, malgranda deturniĝo, se iu ne scias. "Elbrus" estas tia CPU kun sufiĉe specifa komandsistemo. Aldone al ĝi, ekzistas programaro Elbrus OS. Kaj - kontraŭe al populara kredo - por funkciigi la Elbrus OS, ne necesas havi aparataron bazitan sur la procesoro Elbrus. Estas "PDK "Elbrus" por x86" - fakte, ĝi aperis en la publika havaĵo en formo de instala disko. Cetere, estas piednoto "PDK - platforma evoluilo, programilo" - bonega, tio signifas, ke tie almenaŭ estas kompililo.

Alia malgranda malvola retiriĝo. La fakto estas, ke mi iam traktis hejmajn programojn, kiel MSVS kaj Baguette RTOS. Mi havis sperton laborante kun hejmaj komponantoj, inkluzive de procesoro de MCST. Tial mi povas diri kun plena respondeco, ke estas certa specifeco en ĉi tiu areo kaj mi provos ne tuŝi ĝin en la artikolo. Kiam mi vere volas, mi metos la etikedon [TBD]. Do ni provos fari sen rekta trolado kaj banala ĝemado. En la fino, la rusa defenda industrio kaj registaraj agentejoj devas esti komprenitaj. Granda lando - malgranda buĝeto.. [TBD].

Nula etapo - elŝuti. Estas rimarkinde, ke la novaĵo, ke la Elbrus OS fariĝis disponebla, kaŭzis resonon, tiom ke la distribuservilo malfunkciis. [TBD] Dankon al Yandex kaj la inĝeniero, kiuj pensis movi ĝin tien. Do la elŝuta rapideco estas bona.

Unua etapo - instalado. Mi instalis ĝin sur la unua hiperviziero kiu estis disponebla por senpaga uzo. Mi asignis du kernojn, kelkajn gigojn da RAM, 32 MB por video (estos grafika interfaco, mi pensis). La disko estas kiel kutime - 32 GB.
Mi komencis la instaladon. Mi ne uzis la instalajn instrukciojn, do mi ne povas komenti ĝin. La TUI-instala interfaco estas severe minimumisma.

Linuksa Rezervo de Veeam sur Elbrus OS. Import-anstataŭigo ['?' | '.' | '!']
Nu, bonege, ni povas fari sen muso.

Mi administris la sekvan fenestron je la dua provo. Kial ne elekti la defaŭltan aparaton sr0 [TBD] dum instalado de disko?
Elektu la KD-ROM-fonton kaj pluiru.

Linuksa Rezervo de Veeam sur Elbrus OS. Import-anstataŭigo ['?' | '.' | '!']

Elektante la horzonon, mi subite rimarkis, ke la sistemo uzas la init-lanĉan procezon, kaj mi laboras de TTY0.

Linuksa Rezervo de Veeam sur Elbrus OS. Import-anstataŭigo ['?' | '.' | '!']

Bone, do ni klasifiku "Elbrus" kiel komunumon Maljunaj Kredantoj[TBD]. Principe ĉi tio estas bona: vi ne bezonas peti la fontkodon por vidi kiel funkcias la elŝuta procezo, ĉar ĉio estas skribita.

La cetero estas preskaŭ negrava: ni metas ĉion kaj konsentas. Survoje, ni ekscias, ke la kerno estas uzata 3.14.79-13.84. Hmm, Debian 7 havis 3.2 [TBD].

Poste, elektu la defaŭltan diskpartigon kaj... Ni vidas averton:

Linuksa Rezervo de Veeam sur Elbrus OS. Import-anstataŭigo ['?' | '.' | '!']

Hmm, iel la aŭtomata dispartigo ne bone eltenis kun 32 giga disko. Mi ne ŝanĝis la diskon; mi kompletigis la serĉon per mana diskpartigo en la stilo "ĉio-en-unu". Mi devis instali ext3, ĉar /boot ne povis esti en ext4.
La sistemo aperis sen incidento.

Dua etapo - serĉi alternativojn.
Traserĉinte la enhavon de la dua disko, mi konstatis, ke ĉi tio estas deponejo kun pliaj. en pakoj. Kaj rigardante /etc/apt/sources.list, mi konstatis, ke ĝi devas esti muntita en /mnt/cdrom. Sed mi ne trovis /etc/os-release. Sed ekzistas /etc/mcst-versio kun la enhavo 3.0-rc36. 3.0 verŝajne estas la versio - ĝi ŝajnas taŭga, sed rc36? Ĝenerale, triaparta programaro plej verŝajne ne povos rekoni ĉi tiun distribuon laŭ la klasika maniero.

En la radikdisko, la dosierujo /mcst kaptas mian atenton, kaj tie, kun malleviĝa koro, mi malkovris /mcst/backup. Tio estas, ekzistas rezerva ilo, kaj ĝi estas enkonstruita en la sistemon! "Bonege," mi pensis, "Ni vidu kiel tio funkcias!"

Montriĝis, ke ekzistas 4Kb bash-skripto /mcst/bin/backup, kiu provizas dosierkopiadon. Defaŭlte - al la dosierujo /mcst/backup. En la fontkodo mi atendis vidi la komandon rsync, sed ĝi ne estas en la defaŭlta agordo. La skripto simple kopias dosierojn. La komando aspektas kiel ĉi tio:

cp -rpdx <file backup> <file>

La tuta dosiero /mcst/bin/backup estas ĉi tieMi avertas vin tuj, ke tiu ĉi skripto sole ne sufiĉas por plene kompreni. Ĝi tiras funkciojn de /mcst/bin/source, kio estas io kiel biblioteko de funkcioj. Mi ne inkludis ĝin (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

Kvankam, eble mi ne komprenis ion? Eble iu povas klarigi en la komentoj: kiel ĉi tiu skripto certigas sekuran kaj fidindan sekurkopion de datumoj? [TBD]

rsync, cetere, estas inkluzivita en la aldonaĵo. deponejoj. Versio 3.1.3. Mi pensas, ke uzi rsync estas ankoraŭ pli bona alternativo al la /mcst/bin/backup-apliko.

Poste, mi decidis meti freŝan Veeam Agento por Linukso. Iu demandos: "Kion rilatas al ĝi Veeam kaj import-anstataŭado?" Jes, ĝi ne estas en la registro, sed ĝi estas atestita de FSTEC, kio signifas, ke se manko de alternativoj ĝi povas esti uzata. Pasigante dek kvin minutojn por alternativoj de registro, mi povis trovi 3 ligilojn por la vorto "rezervo" (neniu rilata al mia demando por la vorto "rezervo"). Mi ne faris profundan analizon de ĉi tiuj programoj, do mi ne provos juĝi kiom taŭgaj ili estas por sekurkopii maŝinojn kurantajn Linukso. Kiu bezonas ĝin, tiu faros sian propran konkludon kaj dividos ĝin en la komentoj.

Stadio Tri — instalado de Veeam Agent por Linukso.
Do, Veeam Agent por Linukso konsistas el du pakaĵoj: la veeamsnap-kerna modulo (cetere, fonto ĉi tie) kaj proprieta uzantspaca kodo en la formo de la veeam-pakaĵo.

Estis unu malgranda problemo pri instalo de la kernomodulo - la mankanta dkms-pakaĵo. Ĉi tio estas servo, kiu ebligas al vi konstrui kernajn modulojn el la fonto. Kiel regulo, ĝi haveblas ĉe ĉiuj deb-distribuoj. Mi devis elŝuti ĝin el triaparta deb-deponejo. Unu afero, kiu ĝojigis min, estas, ke la pako ne dependas de la arkitekturo, do ĝi taŭgas kiel denaska. Kial ĝi ne estis inkluzivita en la listo de disponeblaj pakaĵoj, aŭ pli ĝuste, ne disvolvita [TBD]? Eble oni supozas, ke neniu devus konstrui kaj ruli iujn ajn ne-MCST-kernajn modulojn. Vere estas diferenco ĉi tie - ĉar estas linuksaj kaplinioj. Tio estas, la modulo, se ĝi deziras, povas esti kunvenita mane kaj lanĉita per skripto kiam la maŝino komenciĝas. Mi pensas, ke vi ne devus atendi oftajn ĝisdatigojn de MCST [TBD].

"Bone, la modulo estas instalita - la plej malfacila parto finiĝis," mi pensis... La pako veeam por la deponejo deb estas por la platformo amd64, kaj la Elbrus OS havas platformon x86_64 [TBD]. La diferenco, kompreneble, estas nur en la nomo, sed ĉi tiu diferenco faras preskaŭ ĉiujn pakaĵojn de triaj deb-deponejoj malkongruaj kun la Elbrus OS. Ĉi tiu ĝena miskompreno povas esti forigita simple: simple malmunti la pakaĵon, korekti la informojn pri la arkitekturo kaj kunmeti ĝin denove. Kiel fari ĝin Guglos ĝin tuj.

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

Alia problemo estas dependecoj. La necesaj dosieroj ŝajnas esti tie, sed la pakaĵoj ne estas. La impreso estis, ke la nomoj de la pakaĵoj diferencis de siaj "importitaj analogoj". Eble la bibliotekoj estas pakitaj alimaniere. Mi ne eniris tro da detaloj, forigis preskaŭ ĉiujn dependecojn, kaj la instalado daŭrigis.

Tiam aperis problemoj kun la servo-komenckodo. La skripto /lib/init/vars.sh mankis. Ial, Elbrus sukcesas sen ĝi, do ni ankaŭ forigos ĝin. Poste, ni devis anstataŭigi la mesaĝan eligfunkcion: mankis la funkcioj log_daemon_msg kaj log_end_msg. Foŝinte en la dosieron /lib/lsb/init-functions, mi trovis la funkcion log_success_msg - ĝi estos bona por ni por eksperimentoj. Cetere, en la /lib/lsb/init-functions dosiero la linio "# Source SuSE`s rc functions" estas komence de la [TBD] dosiero.

Post tia malglata prilaborado de la pakaĵo kun dosiero, la tutmaŝina sekurkopio sur la NFS-akcio estis sukcese lanĉita. La rezerva monto ankaŭ estis sukcesa. Do, mi kredas, ke por sekurkopii maŝinon per la Elbrus PDK, elŝutita "tiele" sen iuj obligacioj, Veeam Agent por Linukso certe taŭgas. Eĉ post ĉiuj modifoj kun dosiero.

Kompreneble, la dissenda ilaro de Elbrus OS ne estas formale subtenata, ĉar ĝi ne estas inkluzivita en la listo de subtenataj. Krome, Veeam Agent por Linukso ne estis testita sur ĝi fare de la QA-sekcio, do tiuj. ne estas subteno (almenaŭ en la momento de publikigo de la artikolo).

Mi esperas, ke la artikolo estos utila al tiuj, kiuj provas efektivigi la ordon n-ro 334 de la 29.06.2017-a de junio XNUMX. Mia al vi... [TBD].

fonto: www.habr.com

Aldoni komenton