Linux Backup gikan sa Veeam sa Elbrus OS. Import substitution ['?' | '.' | '!']

Kumusta tanan.
Bag-ong mga artikulo bahin sa Habré Import substitution sa praktis. Bahin 1. Mga Opsyon и Ang musika wala magdula sa dugay nga panahon ... o kung giunsa ang Elbrus OS wala mahimong libre wala ko biyai nga walay pagtagad. Nakahukom ko nga tun-an kini nga isyu sa konteksto sa backup nga buluhaton. Dugang pa, sa kini nga artikulo Gihisgotan ang mga produkto sa Veeam Software, nga nagpasabot nga ang isyu mahimong may kalabotan ilabina sa konteksto sa pagpuli sa import.

Linux Backup gikan sa Veeam sa Elbrus OS. Import substitution ['?' | '.' | '!']
orihinal nga tinubdan sa hulagway

Una sa tanan, nakahukom ko nga i-download ang Elbrus OS, o hinoon, ang anaa lamang nga pag-apod-apod alang sa x86_64 nga arkitektura, tan-awa kung giunsa kini pagtrabaho, ug pagsulay sa pag-instalar sa Veeam Agent para sa Linux niini. Kung gusto nimo mahibal-an kung unsa ang migawas niini, palihug tan-awa ang iring.

Busa, usa ka gamay nga pagtipas, kung adunay wala makahibalo. Ang "Elbrus" ingon niana tigproseso nga adunay usa ka piho nga sistema sa pagmando. Dugang pa niini, adunay Elbrus OS software. Ug - sukwahi sa popular nga pagtuo - sa pag-operate sa Elbrus OS, dili kinahanglan nga adunay usa ka hardware nga sistema base sa Elbrus processor. Adunay "PDK "Elbrus" alang sa x86" - sa tinuud, kini nagpakita sa publiko nga domain sa porma sa usa ka disk sa pag-install. Pinaagi sa dalan, adunay footnote nga "PDK - platform development kit, developer kit" - maayo, kana nagpasabot nga adunay labing menos usa ka compiler didto.

Laing gamay nga pinugos nga pag-atras. Ang tinuod mao nga kaniadto nakiglabot ako sa lokal nga software, sama sa MSVS ug Baguette RTOS. Ako adunay kasinatian sa pagtrabaho sa mga domestic nga sangkap, lakip ang usa ka processor gikan sa MCST. Busa, makaingon ako uban ang bug-os nga responsibilidad nga adunay usa ka piho nga espesipiko sa kini nga lugar ug sulayan nako nga dili kini mahikap sa artikulo. Kung gusto gyud nako, ibutang nako ang tag [TBD]. Mao nga sulayan namon nga buhaton nga wala’y direkta nga pag-trolling ug pag-agulo. Sa katapusan, ang industriya sa depensa sa Russia ug mga ahensya sa gobyerno kinahanglan nga masabtan. Dako nga nasud - gamay nga badyet.. [TBD].

Zero nga yugto - download. Mamatikdan nga ang balita nga ang Elbrus OS nahimo nang hinungdan sa usa ka resonance, mao nga ang server sa pag-apod-apod nahulog. [TBD] Salamat sa Yandex ug sa engineer nga nakahunahuna sa pagbalhin niini didto. Busa ang katulin sa pag-download maayo.

Ang unang yugto - pag-instalar. Gi-install nako kini sa una nga hypervisor nga magamit nga libre. Gigahin nako ang duha ka mga cores, usa ka magtiayon nga gig sa RAM, 32 MB alang sa video (adunay usa ka graphical interface, sa akong hunahuna). Ang disk sama sa naandan - 32 GB.
Gisugdan nako ang pag-instalar. Wala nako gigamit ang mga panudlo sa pag-install, mao nga dili ako makakomento bahin niini. Ang interface sa pag-install sa TUI hilabihan ka minimalist.

Linux Backup gikan sa Veeam sa Elbrus OS. Import substitution ['?' | '.' | '!']
Aw, maayo, mahimo nato nga walay mouse.

Gidumala nako ang sunod nga bintana sa ikaduhang pagsulay. Ngano nga dili pilion ang default device sr0 [TBD] kung mag-install gikan sa disk?
Pilia ang tinubdan sa CD-ROM ug padayon.

Linux Backup gikan sa Veeam sa Elbrus OS. Import substitution ['?' | '.' | '!']

Samtang nagpili sa time zone, kalit nakong naamgohan nga ang sistema naggamit sa init nga proseso sa boot, ug nagtrabaho ako gikan sa TTY0.

Linux Backup gikan sa Veeam sa Elbrus OS. Import substitution ['?' | '.' | '!']

OK, unya atong klasipikasyon ang "Elbrus" isip usa ka komunidad Mga Daang Magtutuo[TBD]. Sa prinsipyo, kini maayo: dili nimo kinahanglan pangutan-on ang source code aron makita kung giunsa ang proseso sa pag-download, tungod kay ang tanan gisulat.

Ang uban halos dili importante: gibutang namo ang tanan ug nagkauyon. Sa dalan, nahibal-an namon nga ang kernel gigamit 3.14.79-13.84. Hmm, ang Debian 7 adunay 3.2 [TBD].

Sunod, pilia ang default disk partitioning ug... Nakakita mi og pasidaan:

Linux Backup gikan sa Veeam sa Elbrus OS. Import substitution ['?' | '.' | '!']

Hmm, sa usa ka paagi ang awtomatik nga pagbahin dili maayo sa usa ka 32 gig disk. Wala nako giusab ang disk; Nakompleto nako ang pagpangita gamit ang manual disk partitioning sa "all-in-one" nga istilo. Kinahanglan kong i-install ang ext3, tungod kay ang /boot dili mahimo sa ext4.
Ang sistema mitungha nga walay insidente.

Ang ikaduhang yugto - pagpangita alang sa mga alternatibo.
Human sa pagpangita sa mga sulod sa ikaduha nga disk, nakaamgo ko nga kini mao ang usa ka repository uban sa dugang. sa mga pakete. Ug sa pagtan-aw sa /etc/apt/sources.list, akong naamgohan nga kini kinahanglan nga i-mount sa /mnt/cdrom. Apan wala nako makit-an ang /etc/os-release. Apan adunay /etc/mcst-version nga adunay sulod nga 3.0-rc36. 3.0 tingali ang bersyon - kini daw angay, apan ang rc36? Sa kinatibuk-an, ang software sa ikatulo nga partido lagmit dili makaila niini nga pag-apod-apod sa klasikal nga paagi.

Sa root partition, ang /mcst nga direktoryo nakakuha sa akong mata, ug didto, uban sa usa ka naunlod nga kasingkasing, akong nadiskobrehan /mcst/backup. Kana mao, adunay usa ka backup nga himan, ug kini gitukod sa sistema! “Nindot,” naghunahuna ko, “Atong tan-awon kon sa unsang paagi kini molihok!”

Kini nahimo nga adunay usa ka 4Kb bash script /mcst/bin/backup nga naghatag og pagkopya sa file. Sa default - sa /mcst/backup nga direktoryo. Sa source code akong gilauman nga makita ang rsync command, apan wala kini sa default configuration. Ang script nagkopya lang sa mga file. Ang sugo ingon niini:

cp -rpdx <file backup> <file>

Ang tibuok file /mcst/bin/backup ania dinhiGipasidan-an ko ikaw dayon nga kini nga script lamang dili igo aron hingpit nga masabtan. Gibira niini ang mga gimbuhaton gikan sa /mcst/bin/source, nga sama sa librarya sa mga gimbuhaton. Wala nako kini giapil (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

Bisan pa, tingali wala ako makasabut sa usa ka butang? Tingali adunay makapatin-aw sa mga komento: giunsa kini nga script pagsiguro nga luwas ug kasaligan nga pag-backup sa datos? [TBD]

rsync, sa dalan, gilakip sa add-on. mga tipiganan. Bersyon 3.1.3. Sa akong hunahuna ang paggamit sa rsync usa gihapon ka mas maayo nga alternatibo sa /mcst/bin/backup nga aplikasyon.

Sunod, nakahukom ko nga magbutang ug bag-o Veeam Ahente alang sa Linux. Adunay mangutana: "Unsa may kalabotan sa Veeam ug import substitution niini?" Oo, wala kini sa rehistro, apan gipamatud-an kini sa FSTEC, nga nagpasabot nga kung wala ang mga alternatibo kini magamit. Paggugol ug kinse ka minuto sa mga alternatibo gikan sa pagpatala, Nakapangita kog 3 ka link para sa pulong nga “backup” (walay labot sa akong pangutana para sa pulong “reserve”). Wala pa ko makahimo og lawom nga pagtuki niini nga mga programa, mao nga dili ko mosulay sa paghukom kon unsa kini ka angay alang sa pag-back up sa mga makina nga nagpadagan sa Linux. Bisan kinsa nga nanginahanglan niini maghimo sa iyang kaugalingon nga konklusyon ug ipaambit kini sa mga komento.

Stage Tulo - pag-instalar sa Veeam Agent alang sa Linux.
Busa, ang Veeam Agent alang sa Linux naglangkob sa duha ka mga pakete: ang veeamsnap kernel module (sa dalan, tinubdan dinhi) ug proprietary user-space code sa porma sa veeam package.

Adunay usa ka gamay nga problema sa pag-install sa kernel module - ang nawala nga dkms package. Kini usa ka serbisyo nga nagtugot kanimo sa paghimo sa mga module sa kernel gikan sa gigikanan. Ingon sa usa ka lagda, kini anaa sa tanan nga deb distributions. Kinahanglan nako nga i-download kini gikan sa usa ka third-party nga deb repository. Usa ka butang nga nakapalipay kanako mao nga ang pakete wala magdepende sa arkitektura, mao nga kini mohaum sama sa usa ka lumad. Ngano nga wala kini gilakip sa lista sa magamit nga mga pakete, o hinoon, wala gipalambo [TBD]? Tingali gituohan nga walay usa nga kinahanglan magtukod ug magpadagan sa bisan unsang non-MCST kernel modules. Adunay gyud usa ka kalainan dinhi - tungod kay adunay mga linux-header. Sa ato pa, ang module, kung gusto, mahimong tipunon pinaagi sa kamot ug ilunsad pinaagi sa usa ka script kung magsugod ang makina. Sa akong hunahuna dili ka magdahom nga kanunay nga mga update gikan sa MCST [TBD].

"OK, ang module na-install - ang pinakalisud nga bahin nahuman na," ako naghunahuna ... Ang veeam package alang sa deb repository kay para sa amd64 nga plataporma, ug ang Elbrus OS adunay x86_64 [TBD] nga plataporma. Ang kalainan, siyempre, anaa lamang sa ngalan, apan kini nga kalainan naghimo sa halos tanan nga mga pakete gikan sa mga third-party nga deb repository nga dili mahiuyon sa Elbrus OS. Kining makalagot nga dili pagsinabtanay mahimong mawagtang sa yano: i-disassemble lang ang pakete, itul-id ang impormasyon bahin sa arkitektura ug ibalik kini. Unsaon pagbuhat niini Gi-Google kini diha-diha dayon.

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

Ang laing problema mao ang dependencies. Ang gikinahanglan nga mga file daw anaa, apan ang mga pakete wala. Ang impresyon mao nga ang mga ngalan sa mga pakete lahi sa ilang "imported analogues". Tingali lahi ang pagkaputos sa mga librarya. Wala ko maghisgot ug daghang detalye, gitangtang ang halos tanang dependency, ug nagpadayon ang pag-instalar.

Unya mitumaw ang mga problema sa service start code. Ang script /lib/init/vars.sh nawala. Sa pila ka rason, nagdumala si Elbrus nga wala kini, mao nga tangtangon usab namo kini. Sunod, kinahanglan namong ilisan ang message output function: ang log_daemon_msg ug log_end_msg function nawala. Human sa pagpangita sa /lib/lsb/init-functions file, akong nakit-an ang log_success_msg function - kini maayo alang kanato alang sa mga eksperimento. Pinaagi sa dalan, sa /lib/lsb/init-functions file ang linya nga "# Source SuSE's rc functions" anaa sa sinugdanan sa [TBD] file.

Pagkahuman sa ingon ka grabe nga pagproseso sa pakete nga adunay usa ka file, ang tibuuk nga makina nga backup sa bahin sa NFS malampuson nga gilunsad. Nagmalampuson usab ang backup mount. Mao nga, nagtuo ko nga alang sa pag-backup sa usa ka makina sa Elbrus PDK, na-download nga "sama ra" nga wala’y obligasyon, ang Veeam Agent alang sa Linux siguradong angay. Bisan human sa tanan nga mga pagbag-o sa usa ka file.

Siyempre, ang Elbrus OS distribution kit dili pormal nga gisuportahan, tungod kay wala kini gilakip sa listahan sa mga gisuportahan. Dugang pa, ang Veeam Agent para sa Linux wala gisulayan sa departamento sa QA, mao nga ang mga. walay suporta (labing menos sa panahon sa pagmantala sa artikulo).

Nanghinaut ko nga ang artikulo mahimong mapuslanon sa mga naningkamot sa pagpatuman sa mando No. 334 sa Hunyo 29.06.2017, XNUMX. Ang akoa kanimo... [TBD].

Source: www.habr.com

Idugang sa usa ka comment