Backup Linux ji Veeam li ser Elbrus OS. Veguheztina îthalatê ['?' | '.' | '!']

Hê her kesî
Gotarên dawî yên li ser Habré Di pratîkê de cîgirkirina importê. Beş 1. Vebijêrk и Muzîk demek dirêj nelîst... an jî çawa Elbrus OS qet azad nebû ez bêhemdî nehiştim. Min biryar da ku ez vê mijarê di çarçoweya peywira paşvekişînê de bixwînim. Wekî din, di vê gotara Berhemên Nermalava Veeam têne behs kirin, ku tê vê wateyê ku dibe ku pirsgirêk bi taybetî di çarçoveya veguheztina importê de têkildar be.

Backup Linux ji Veeam li ser Elbrus OS. Veguheztina îthalatê ['?' | '.' | '!']
çavkaniya wêneya orîjînal

Berî her tiştî, min biryar da ku ez OS-ya Elbrus dakêşim, an bêtir, tenê belavkirina berdest ji bo mîmariya x86_64, bibînim ka ew çawa dixebite, û hewl bidim ku Veeam Agent ji bo Linux-ê li ser saz bikim. Ger hûn dixwazin bizanibin ji vê yekê çi derket, ji kerema xwe pisîkê bibînin.

Ji ber vê yekê, dûrketinek piçûk, heke kesek nizane. "Elbrus" jî wisa ye CPU bi pergalek fermanî ya pir taybetî. Ji bilî wê, nermalava Elbrus OS-ê heye. Û - berevajî baweriya populer - ji bo xebitandina Elbrus OS-ê, ne hewce ye ku meriv pergalek hardware li ser bingeha pêvajoya Elbrus hebe. Ji bo x86 "PDK "Elbrus" heye - bi rastî, ew di forma dîskê sazkirinê de di qada gelemperî de xuya bû. Bi awayê, pênûsek heye "PDK - kîteya pêşkeftina platformê, kîta pêşdebiran" - pir baş e, ev tê vê wateyê ku bi kêmanî berhevkarek li wir heye.

Paşvekişînek din a bi zorê ya piçûk. Rastî ev e ku min carekê bi nermalava navxweyî, wek MSVS û Baguette RTOS re mijûl bû. Ez ezmûna xebata bi pêkhateyên navxweyî re, tevî pêvajoyek ji MCST, hebû. Ji ber vê yekê, ez dikarim bi tevahî berpirsiyarî bibêjim ku di vî warî de taybetmendiyek heye û ez ê hewl bidim ku di gotarê de dest neavêjim. Dema ku ez bi rastî dixwazim, ez ê nîşana [TBD] bixim. Ji ber vê yekê em ê hewl bidin ku bêyî trolling û nalînên banal bikin. Di dawiyê de, pêdivî ye ku pîşesaziya berevaniya Rûsyayê û saziyên hukûmetê bêne fêm kirin. Welatê mezin - budceya piçûk.. [TBD].

Qonaxa sifir - daxistin. Hêjayî gotinê ye ku nûçeya peydabûna Elbrus OS bû sedema dengvedanekê, lewra servera belavkirinê têk çû. [TBD] Spas ji Yandex û endezyarê ku fikirîn ku wê biguhezînin wir. Ji ber vê yekê leza dakêşanê baş e.

Yekem yekem - sazkirin. Min ew li ser hîpervisorê yekem ku ji bo karanîna belaş peyda bû saz kir. Min ji bo vîdyoyê du core, çend gig RAM, 32 MB veqetand (min fikirîn ku dê navgînek grafîkî hebe). Dîsk wekî berê ye - 32 GB.
Min dest bi sazkirinê kir. Min rêwerzên sazkirinê bikar neanî, ji ber vê yekê ez nikarim li ser şîrove bikim. Navbera sazkirinê ya TUI bi giranî hindiktirîn e.

Backup Linux ji Veeam li ser Elbrus OS. Veguheztina îthalatê ['?' | '.' | '!']
Welê, pir baş, em dikarin bêyî mişk bikin.

Min di hewldana duyemîn de pencereya paşîn birêve kir. Çima dema ku ji dîskê saz dikin amûra xwerû sr0 [TBD] hilbijêrin?
Çavkaniya CD-ROM-ê hilbijêre û biçe.

Backup Linux ji Veeam li ser Elbrus OS. Veguheztina îthalatê ['?' | '.' | '!']

Dema hilbijartina devera demjimêrê, min ji nişkê ve fêm kir ku pergal pêvajoya bootê ya destpêkê bikar tîne, û ez ji TTY0 dixebitim.

Backup Linux ji Veeam li ser Elbrus OS. Veguheztina îthalatê ['?' | '.' | '!']

Baş e, wê gavê em "Elbrus" wekî civakek dabeş bikin Bawermendên Kevin[TBD]. Di prensîbê de, ev baş e: hûn ne hewce ne ku koda çavkaniyê bipirsin da ku bibînin ka pêvajoya dakêşanê çawa dixebite, ji ber ku her tişt hatî nivîsandin.

Ya mayî hema hema ne girîng e: em her tiştî didin û li hev dikin. Di rê de, em fêr dibin ku kernel 3.14.79-13.84 tê bikar anîn. Hmm, Debian 7 3.2 [TBD] bû.

Piştre, dabeşkirina dîskê ya xwerû hilbijêrin û ... Em hişyariyek dibînin:

Backup Linux ji Veeam li ser Elbrus OS. Veguheztina îthalatê ['?' | '.' | '!']

Hmm, bi rengekî dabeşkirina otomatîkî bi dîskek 32 gig re baş nedihat. Min dîskê neguhert; Ez neçar bûm ku ext3 saz bikim, ji ber ku /boot nikare di ext4 de be.
Sîstem bê bûyer derket holê.

Qonaxa duyem - lêgerîna alternatîfan.
Piştî lêgerîna naveroka dîska duyemîn, min fêm kir ku ev depoyek bi pêvek e. di pakêtan de. Û li /etc/apt/sources.list mêze kir, min fêm kir ku pêdivî ye ku ew di /mnt/cdrom-ê de were danîn. Lê min /etc/os-release nedît. Lê /etc/mcst-guhertoya bi naveroka 3.0-rc36 heye. 3.0 belkî guhertoyek e - wusa dixuye ku tê, lê rc36? Bi gelemperî, nermalava partiya sêyemîn bi îhtîmalek mezin dê nikaribe vê belavkirinê bi awayê klasîk nas bike.

Di dabeşkirina root de, pelrêça /mcst çavê min dikişîne, û li wir, bi dilekî binavbûyî, min /mcst/backup keşf kir. Ango, amûrek hilanînê heye, û ew di pergalê de hatî çêkirin! "Gelî," min fikirîn, "Werin em bibînin ka ev çawa dixebite!"

Derket holê ku skrîptek bash 4Kb /mcst/bin/backup heye ku kopîkirina pelê peyda dike. Bi xwerû - li pelrêça /mcst/backup. Di koda çavkaniyê de min hêvî dikir ku ez fermana rsync bibînim, lê ew ne di veavakirina xwerû de ye. Skrîpta bi tenê pelan kopî dike. Ferman tiştek bi vî rengî xuya dike:

cp -rpdx <file backup> <file>

Tevahiya pelê /mcst/bin/backup li vir eEz di cih de we hişyar dikim ku ev skrîpt tenê têrê nake ku bi tevahî were fam kirin. Ew fonksiyonan ji /mcst/bin/source dikişîne, ku tiştek mîna pirtûkxaneyek fonksiyonan e. Min ew nexist (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

Her çend, dibe ku min tiştek fêm nekir? Dibe ku kesek di şîroveyan de rave bike: ev skrîpt çawa hilanînê daneya ewledar û pêbawer peyda dike? [TBD]

rsync, bi awayê, di pêvekê de tê de heye. depoyên. Guhertoya 3.1.3. Ez difikirim ku karanîna rsync hîn jî alternatîfek çêtir e ji bo serîlêdana /mcst/bin/backup.

Dûv re, min biryar da ku yekî nû deynim Veeam Agent ji bo Linux. Dê kes bipirse: "Çi têkiliya Veeam û veguheztina import bi wê re heye?" Erê, ew ne di qeydê de ye, lê ew ji hêla FSTEC ve hatî pejirandin, ku tê vê wateyê ku di nebûna alternatîfan de ew dikare were bikar anîn. Xerc panzdeh deqeyan li ser alternatîfên ji qeydê, Min karîbû 3 lînkan ji bo peyva "piştgir" bibînim (ne girêdayî pirsa min ji bo peyva "rezervan"). Min analîzek kûr a van bernameyan nekiriye, ji ber vê yekê ez ê hewl nekim dadbar bikim ka ew ji bo piştgirkirina makîneyên ku Linux-ê dixebitin çiqas maqûl in. Kî jê re lazim be dê encama xwe derxe û di şîroveyan de parve bike.

Stage Three - sazkirina Veeam Agent ji bo Linux.
Ji ber vê yekê, Veeam Agent ji bo Linux ji du pakêtan pêk tê: modula kernel veeamsnap (bi awayê, çavkanî li vir) û koda cîhê bikarhênerê ya xwedan di forma pakêta veeam de.

Di sazkirina modula kernel de pirsgirêkek piçûk hebû - pakêta dkms ya winda. Ev karûbarek e ku dihêle hûn modulên kernelê ji çavkaniyê ava bikin. Wekî qaîdeyek, ew li ser hemî belavkirinên deb heye. Ez neçar bûm ku wê ji depoyek deb-ya sêyemîn dakêşim. Tiştek ku ez kêfxweş kirim ev e ku pakêt bi mîmariyê ve ne girêdayî ye, ji ber vê yekê ew mîna yekî xwemalî diguncîne. Çima ew di navnîşa pakêtên berdest de nebû, an jî, ne pêşkeftî [TBD]? Dibe ku tê texmîn kirin ku divê kes modulên kernelê yên ne-MCST ava neke û bimeşîne. Bi rastî li vir nakokî heye - ji ber ku sernavên linux hene. Ango, modul, heke bixwaze, dikare bi destan were berhev kirin û gava ku makîne dest pê dike ji hêla skrîptê ve were destpêkirin. Ez difikirim ku divê hûn ji MCST [TBD] nûvekirinên pir caran hêvî nekin.

"Baş e, modul hate saz kirin - beşa herî dijwar qediya," min fikirî... Pakêta veeam ji bo depoya deb ji bo platforma amd64 e, û Elbrus OS xwedan platformek x86_64 [TBD] ye. Cûdahî, bê guman, tenê di nav de ye, lê ev cûdahî hema hema hemî pakêtên ji depoyên deb-ya sêyemîn bi Elbrus OS-ê re hevaheng dike. Ev têgihîştina acizker bi hêsanî dikare were rakirin: tenê pakêtê ji hev veqetînin, agahdariya li ser mîmariyê rast bikin û dîsa li hev bikin. Çawa bikin Google kir derhal.

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

Pirsgirêkek din jî girêdayîbûnê ye. Pelên pêwîst li wir xuya dikin, lê pakêt ne. Diyar bû ku navên pakêtan ji "analogên wan ên îthalkirî" cuda bûn. Dibe ku pirtûkxane bi rengek cûda têne pak kirin. Min pir zêde neket nav hûrguliyan, hema hema hemî girêdan jêbirin, û sazkirin pêş de çû.

Dûv re pirsgirêk bi koda destpêka karûbarê re derketin. Nivîsara /lib/init/vars.sh winda bû. Ji ber hin sedeman, Elbrus bêyî wê birêve dibe, ji ber vê yekê em ê jî jêbirin. Dûv re, me neçar ma ku fonksiyona derketina peyamê biguhezîne: fonksiyonên log_daemon_msg û log_end_msg winda bûn. Piştî ku li dora pelê /lib/lsb/init-functions geriyam, min fonksiyona log_success_msg dît - ew ê ji bo ceribandinan ji me re baş be. Bi awayê, di pelê /lib/lsb/init-functions de rêza "# Fonksiyonên rc yên Çavkaniya SuSE" di destpêka pelê [TBD] de ye.

Piştî pêvajoyek wusa dijwar a pakêtê bi pelê re, paşvekêşana tevahiya makîneyê ya li ser parvekirina NFS bi serfirazî hate destpêkirin. Çiyayê paşvekişandinê jî serkeftî bû. Ji ber vê yekê, ez bawer dikim ku ji bo piştguhkirina makîneyek bi Elbrus PDK-ê, ku "wekî wusa" bêyî berpirsiyarî hatî dakêşandin, Veeam Agent ji bo Linux bê guman guncan e. Tewra piştî hemî guhertinên bi pelek.

Bê guman, kîtê belavkirina Elbrus OS bi fermî nayê piştgirî kirin, ji ber ku ew di navnîşa yên piştgirî de ne tê de ye. Wekî din, Veeam Agent ji bo Linux ji hêla beşa QA ve nehat ceribandin, lewra ew. piştgirî tune (qet nebe di dema weşandina gotarê de).

Hêvîdar im gotar ji bo kesên ku hewl didin fermana jimare 334 ya 29.06.2017ê Hezîrana XNUMXan bi cih bînin re bikêr be. Ya min ji te re... [TBD].

Source: www.habr.com

Add a comment