Linux Backup saka Veeam ing Elbrus OS. Impor substitusi ['?' | '.' | '!']

Halo kabeh.
Artikel paling anyar babagan Habré Impor substitusi ing laku. Part 1. Pilihan и Musik ora muter suwe ... utawa kepiye OS Elbrus ora tau dadi gratis ora ninggalake kula indifferent. Aku mutusake kanggo sinau masalah iki ing konteks tugas serep. Kajaba iku, ing artikel iki Produk Veeam Software kasebut, tegese masalah kasebut bisa uga relevan khusus ing konteks substitusi impor.

Linux Backup saka Veeam ing Elbrus OS. Impor substitusi ['?' | '.' | '!']
sumber gambar asli

Kaping pisanan, aku mutusake download Elbrus OS, utawa mung distribusi sing kasedhiya kanggo arsitektur x86_64, ndeleng cara kerjane, lan nyoba nginstal Veeam Agent kanggo Linux. Yen sampeyan pengin ngerti apa sing metu saka iki, deleng kucing.

Dadi, digression cilik, yen ana sing ora ngerti. "Elbrus" kaya ngono prosesor kanthi sistem perintah sing rada spesifik. Kajaba iku, ana piranti lunak Elbrus OS. Lan - nalisir misconception umum - kanggo Elbrus OS bisa, iku ora perlu kanggo duwe sistem hardware adhedhasar prosesor Elbrus. Ana "PDK "Elbrus" kanggo x86 - nyatane, katon ing domain umum ing wangun disk instalasi. Ngomong-ngomong, ana footnote "PDK - kit pangembangan platform, kit pangembang" - apik, tegese paling ora ana kompiler ing kana.

Liyane mundur dipeksa cilik. Kasunyatan iku aku tau urusan karo piranti lunak domestik, kayata MSVS lan Baguette RTOS. Aku duwe pengalaman nggarap komponen domestik, kalebu prosesor saka MCST. Mulane, aku bisa ngomong kanthi tanggung jawab yen ana spesifik tartamtu ing wilayah iki lan aku bakal nyoba ora ndemek ing artikel kasebut. Yen pancene pengin, aku bakal menehi tag [TBD]. Dadi kita bakal nyoba kanggo nindakake tanpa trolling outright lan moaning banal. Ing pungkasan, industri pertahanan Rusia lan lembaga pemerintah kudu dimangerteni. Negara gedhe - anggaran cilik.. [TBD].

Tahap nol - download. Wigati dimangerteni manawa kabar yen Elbrus OS wis kasedhiya nyebabake resonansi, saengga server distribusi mudhun. [TBD] Matur nuwun kanggo Yandex lan insinyur sing mikir mindhah menyang kana. Dadi kacepetan download apik.

Tataran kapisan - panginstalan. Aku diinstal ing hypervisor pisanan sing kasedhiya kanggo free nggunakake. Aku diparengake loro intine, saperangan gigs RAM, 32 MB kanggo video (bakal ana antarmuka grafis, Aku panginten). Disk kaya biasane - 32 GB.
Aku miwiti instalasi. Aku ora nggunakake instruksi instalasi, dadi aku ora bisa menehi komentar. Antarmuka instalasi TUI pancen minimalis.

Linux Backup saka Veeam ing Elbrus OS. Impor substitusi ['?' | '.' | '!']
Inggih, apik, kita bisa nindakake tanpa mouse.

Aku ngatur jendhela sabanjuré ing nyoba kapindho. Napa ora milih piranti standar sr0 [TBD] nalika nginstal saka disk?
Pilih sumber CD-ROM lan nerusake.

Linux Backup saka Veeam ing Elbrus OS. Impor substitusi ['?' | '.' | '!']

Nalika milih zona wektu, Aku dumadakan temen maujud sing sistem nggunakake proses boot init, lan aku digunakake saka TTY0.

Linux Backup saka Veeam ing Elbrus OS. Impor substitusi ['?' | '.' | '!']

OK, banjur nggolongake "Elbrus" minangka komunitas Wong Iman Lawas[TBD]. Ing asas, iki apik: sampeyan ora perlu takon kode sumber kanggo ndeleng carane proses download bisa, amarga kabeh wis scripted.

Liyane meh ora penting: kita sijine kabeh lan setuju. Sadawane dalan, kita ngerteni manawa kernel digunakake 3.14.79-13.84. Hmm, Debian 7 duwe 3.2 [TBD].

Sabanjure, pilih partisi disk standar lan ... Kita ndeleng bebaya:

Linux Backup saka Veeam ing Elbrus OS. Impor substitusi ['?' | '.' | '!']

Hmm, piye wae pemisahan otomatis ora bisa ngatasi disk 32 gig. Aku ora ngganti disk; Aku ngrampungake nggoleki kanthi partisi disk manual kanthi gaya "kabeh-ing-siji". Aku kudu nginstal ext3, amarga / boot ora bisa ing ext4.
Sistem kasebut muncul tanpa kedadeyan.

Tahap kapindho - nelusuri alternatif.
Sawise rummaging liwat isi disk kapindho, Aku temen maujud sing iki gudang karo tambahan. ing paket. Lan ndeleng ing /etc/apt/sources.list, Aku temen maujud sing kudu dipasang ing /mnt/cdrom. Nanging aku ora nemokake /etc/os-release. Nanging ana /etc/mcst-version karo isi 3.0-rc36. 3.0 mbokmenawa versi - misale jek pas, nanging rc36? Umumé, piranti lunak pihak katelu kemungkinan ora bisa ngenali distribusi iki kanthi cara klasik.

Ing partisi root, direktori / mcst nyekel mripatku, lan ing kana, kanthi ati sing klelep, aku nemokake /mcst/backup. Sing, ana alat serep, lan wis dibangun ing sistem! "Apik," pikirku, "Ayo dideleng kepiye cara iki!"

Ternyata ana skrip bash 4Kb /mcst/bin/backup sing nyedhiyakake salinan file. Kanthi gawan - menyang direktori /mcst/backup. Ing kode sumber aku samesthine ndeleng rsync printah, nanging ora ing konfigurasi gawan. Skrip mung nyalin file. Printah katon kaya iki:

cp -rpdx <file backup> <file>

Kabeh file /mcst/bin/backup ana ing keneAku langsung ngelingake yen naskah iki mung ora cukup kanggo ngerti kanthi lengkap. Iku narik fungsi saka / mcst / bin / sumber, kang kaya perpustakaan fungsi. Aku ora kalebu (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

Senajan, Mungkin aku ora ngerti soko? Mungkin ana sing bisa nerangake ing komentar: kepiye skrip iki njamin serep data sing aman lan dipercaya? [TBD]

rsync, kanthi cara, kalebu ing add-on. repositori. Versi 3.1.3. Aku nggunakake rsync isih alternatif sing luwih apik kanggo / mcst / bin / aplikasi serep.

Sabanjure, aku mutusake kanggo nyelehake sing seger Agen Veeam kanggo Linux. Ana sing bakal takon: "Apa hubungane Veeam lan substitusi impor?" Ya, ora ana ing daftar, nanging wis disertifikasi dening FSTEC, tegese yen ora ana alternatif bisa digunakake. Nglampahi limalas menit ing alternatif saka pendaptaran, Aku bisa nemokake 3 pranala kanggo tembung "serep" (ora ana hubungane karo pitakonanku kanggo tembung "cadangan"). Aku durung nindakake analisis jero babagan program kasebut, mula aku ora bakal nyoba ngadili kepiye cocog kanggo nggawe serep mesin sing nganggo Linux. Sapa wae sing mbutuhake bakal nggawe kesimpulan dhewe lan nuduhake ing komentar.

Panggung Telung - instalasi Veeam Agent kanggo Linux.
Dadi, Veeam Agent kanggo Linux kasusun saka rong paket: modul kernel veeamsnap (kanthi cara, sumber kene) lan kode spasi pangguna kepemilikan ing wangun paket veeam.

Ana masalah cilik nalika nginstal modul kernel - paket dkms sing ilang. Iki minangka layanan sing ngidini sampeyan mbangun modul kernel saka sumber. Minangka aturan, kasedhiya ing kabeh distribusi deb. Aku kudu ngundhuh saka repositori deb pihak katelu. Siji-sijine sing nggawe aku seneng yaiku paket kasebut ora gumantung karo arsitektur, mula cocog karo wong asli. Napa ora kalebu ing dhaptar paket sing kasedhiya, utawa ora dikembangake [TBD]? Mbok menawa ora ana sing kudu mbangun lan mbukak modul kernel non-MCST. Pancen ana bedo ing kene - amarga ana linux-header. Yaiku, modul kasebut, yen dikarepake, bisa dirakit kanthi tangan lan diluncurake kanthi naskah nalika mesin diwiwiti. Aku sampeyan ora kudu ngarep-arep nganyari saka MCST [TBD].

"OK, modul wis diinstal - bagean paling angel wis rampung," Aku panginten ... Paket veeam kanggo repositori deb kanggo platform amd64, lan Elbrus OS wis x86_64 [TBD] platform. Bentenipun, mesthi, mung ing jeneng, nanging prabédan iki ndadekake meh kabeh paket saka repositori deb pihak katelu ora kompatibel karo Elbrus OS. Kesalahpahaman sing ngganggu iki bisa diilangi kanthi gampang: mung mbongkar paket kasebut, mbenerake informasi babagan arsitektur lan sijine maneh. Carane nindakake Googled iku enggal.

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

Masalah liyane yaiku dependensi. File sing dibutuhake katon ana, nanging paket kasebut ora ana. Kesan kasebut yaiku jeneng paket kasebut beda karo "analog sing diimpor". Mbok menawa perpustakaan dikemas kanthi beda. Aku ora nerangake kakehan rinci, mbusak meh kabeh dependensi, lan instalasi nerusake.

Banjur masalah muncul karo kode wiwitan layanan. Skrip /lib/init/vars.sh ilang. Kanggo sawetara alesan, Elbrus ngatur tanpa iku, supaya kita uga bakal mbusak. Sabanjure, kita kudu ngganti fungsi output pesen: fungsi log_daemon_msg lan log_end_msg ilang. Sawise ngubengi file / lib / lsb / init-functions, aku nemokake fungsi log_success_msg - bakal apik kanggo eksperimen. Miturut cara, ing file /lib/lsb/init-functions baris "# Source SuSE`s rc functions" ana ing wiwitan file [TBD].

Sawise proses kasar saka paket kasebut kanthi file, serep kabeh mesin ing bagean NFS kasil diluncurake. Gunung serep uga sukses. Dadi, aku yakin, kanggo nggawe serep mesin karo Elbrus PDK, diundhuh "kaya" tanpa kewajiban, Veeam Agent kanggo Linux mesthi cocok. Malah sawise kabeh modifikasi karo file.

Mesthine, kit distribusi Elbrus OS ora didhukung sacara resmi, amarga ora kalebu ing dhaptar sing didhukung. Kajaba iku, Veeam Agent kanggo Linux ora dites dening departemen QA, dadi sing. ora ana dhukungan (paling ora nalika diterbitake artikel).

Muga-muga artikel kasebut bisa migunani kanggo sing nyoba ngetrapake pesenan nomer 334 tanggal 29.06.2017 Juni XNUMX. Kula kanggo sampeyan ... [TBD].

Source: www.habr.com

Add a comment