Varnostno kopiranje Linuxa iz Veeama na Elbrus OS. Uvozna zamenjava ['?' | '.' | '!']

Pozdravljeni vsi.
Nedavni članki na Habréju Uvozna substitucija v praksi. 1. del. Možnosti и Glasba se ni predvajala dolgo ... ali kako Elbrus OS ni nikoli postal brezplačen me ni pustil ravnodušnega. Odločil sem se preučiti to vprašanje v okviru naloge varnostnega kopiranja. Še več, v ta članek Omenjeni so programski izdelki Veeam, kar pomeni, da je zadeva lahko pomembna prav v kontekstu uvozne substitucije.

Varnostno kopiranje Linuxa iz Veeama na Elbrus OS. Uvozna zamenjava ['?' | '.' | '!']
izvirni vir slike

Najprej sem se odločil, da prenesem Elbrus OS, oziroma samo distribucijo, ki je na voljo za arhitekturo x86_64, vidim, kako deluje, in poskusim namestiti Veeam Agent za Linux nanj. Če želite vedeti, kaj se je iz tega izcimilo, glejte cat.

Torej, majhna digresija, če kdo ne ve. "Elbrus" je tak procesor s precej specifičnim sistemom poveljevanja. Poleg tega je na voljo programska oprema Elbrus OS. In - v nasprotju s splošnim prepričanjem - za delovanje Elbrus OS ni potrebno imeti strojne opreme, ki temelji na procesorju Elbrus. Obstaja "PDK "Elbrus" za x86" - pravzaprav se je pojavil v javni domeni v obliki namestitvenega diska. Mimogrede, obstaja opomba "PDK - komplet za razvoj platforme, komplet za razvijalce" - super, to pomeni, da je tam vsaj prevajalnik.

Še en majhen prisilni umik. Dejstvo je, da sem se nekoč ukvarjal z domačo programsko opremo, kot sta MSVS in Baguette RTOS. Imel sem izkušnje z domačimi komponentami, vključno s procesorjem MCST. Zato lahko z vso odgovornostjo trdim, da na tem področju obstaja določena specifika in prav te se v članku ne bom dotikala. Ko bom res želel, bom dal oznako [TBD]. Poskušali bomo torej brez odkritega trolanja in banalnega jamranja. Na koncu je treba razumeti rusko obrambno industrijo in vladne agencije. Velika država - majhen proračun.. [TBD].

Ničelna stopnja - Prenesi. Omeniti velja, da je novica, da je Elbrus OS na voljo, povzročila tako velik odmev, da je distribucijski strežnik odpadel. [TBD] Hvala Yandexu in inženirju, ki se je zamislil, da bi ga preselil tja. Hitrost prenosa je torej dobra.

Prva faza - namestitev. Namestil sem ga na prvi hipervizor, ki je bil na voljo za brezplačno uporabo. Dodelil sem dve jedri, nekaj koncertov RAM-a, 32 MB za video (bo grafični vmesnik, sem mislil). Disk je kot običajno - 32 GB.
Začel sem namestitev. Navodil za namestitev nisem uporabil, zato jih ne morem komentirati. Namestitveni vmesnik TUI je hudo minimalističen.

Varnostno kopiranje Linuxa iz Veeama na Elbrus OS. Uvozna zamenjava ['?' | '.' | '!']
No, super, lahko tudi brez miške.

Naslednje okno mi je uspelo v drugem poskusu. Zakaj ne izberete privzete naprave sr0 [TBD] pri namestitvi z diska?
Izberite vir CD-ROM in nadaljujte.

Varnostno kopiranje Linuxa iz Veeama na Elbrus OS. Uvozna zamenjava ['?' | '.' | '!']

Med izbiro časovnega pasu sem nenadoma ugotovil, da sistem uporablja zagonski postopek init, jaz pa delam s TTY0.

Varnostno kopiranje Linuxa iz Veeama na Elbrus OS. Uvozna zamenjava ['?' | '.' | '!']

V redu, potem klasificirajmo "Elbrus" kot skupnost Staroverci[TBD]. Načeloma je to dobro: ni vam treba zahtevati izvorne kode, da vidite, kako poteka prenos, saj je vse skriptirano.

Ostalo je skoraj nepomembno: postavimo vse in se dogovorimo. Med potjo ugotovimo, da se uporablja jedro 3.14.79-13.84. Hmm, Debian 7 je imel 3.2 [TBD].

Nato izberite privzeto particioniranje diska in ... Vidimo opozorilo:

Varnostno kopiranje Linuxa iz Veeama na Elbrus OS. Uvozna zamenjava ['?' | '.' | '!']

Hmm, nekako se samodejno particioniranje ni dobro obneslo pri 32 gigabajtu. Nisem zamenjal diska; nalogo sem zaključil z ročnim particioniranjem diska v slogu "vse v enem". Moral sem namestiti ext3, ker /boot ni mogel biti v ext4.
Sistem je nastal brez incidentov.

Druga faza - iskanje alternativ.
Po brskanju po vsebini drugega diska sem ugotovil, da je to skladišče z dodatnimi. v paketih. Ko sem pogledal /etc/apt/sources.list, sem ugotovil, da ga je treba namestiti v /mnt/cdrom. Vendar nisem našel /etc/os-release. Obstaja pa različica /etc/mcst z vsebino 3.0-rc36. 3.0 je verjetno različica - zdi se, da ustreza, ampak rc36? Na splošno programska oprema tretjih oseb najverjetneje ne bo mogla prepoznati te distribucije na klasičen način.

V korenski particiji mi pade v oči imenik /mcst in tam sem z upadlo srcem odkril /mcst/backup. To pomeni, da obstaja orodje za varnostno kopiranje in je vgrajeno v sistem! "Super," sem si mislil, "Poglejmo, kako to deluje!"

Izkazalo se je, da obstaja 4Kb bash skript /mcst/bin/backup, ki omogoča kopiranje datotek. Privzeto - v imenik /mcst/backup. V izvorni kodi sem pričakoval, da bom videl ukaz rsync, vendar ga ni v privzeti konfiguraciji. Skript preprosto kopira datoteke. Ukaz izgleda nekako takole:

cp -rpdx <file backup> <file>

Celotna datoteka /mcst/bin/backup je tukajTakoj vas opozorim, da samo ta scenarij ni dovolj za popolno razumevanje. Funkcije črpa iz /mcst/bin/source, ki je nekaj podobnega knjižnici funkcij. Nisem ga vključil (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

Čeprav morda česa nisem razumel? Morda lahko kdo v komentarjih pojasni: kako ta skript zagotavlja varno in zanesljivo varnostno kopiranje podatkov? [TBD]

Mimogrede, rsync je vključen v dodatek. repozitorije. Različica 3.1.3. Menim, da je uporaba rsync še vedno boljša alternativa aplikaciji /mcst/bin/backup.

Nato sem se odločil, da dam novega Veeam Agent za Linux. Nekdo se bo vprašal: "Kaj imata Veeam in uvozna substitucija s tem?" Da, ni v registru, vendar je certificiran s strani FSTEC, kar pomeni, da se lahko uporablja, če ni drugih možnosti. Porabiti petnajst minut za alternative iz register, sem lahko našel 3 povezave za besedo "varnostna kopija" (nobena ni bila povezana z mojim vprašanjem za besedo "rezerva"). Nisem naredil poglobljene analize teh programov, zato ne bom poskušal oceniti, kako primerni so za varnostno kopiranje strojev, ki poganjajo Linux. Kdor jo potrebuje, bo sam naredil zaključek in ga delil v komentarjih.

tristopenjski — namestitev Veeam Agent za Linux.
Torej je Veeam Agent za Linux sestavljen iz dveh paketov: jedrnega modula veeamsnap (mimogrede, vir tukaj) in lastniško kodo uporabniškega prostora v obliki paketa veeam.

Pri namestitvi modula jedra je prišlo do majhne težave - manjkajoči paket dkms. To je storitev, ki vam omogoča izdelavo modulov jedra iz izvorne kode. Praviloma je na voljo v vseh distribucijah deb. Moral sem ga prenesti iz repozitorija deb tretjih oseb. Ena stvar, ki me je razveselila, je, da paket ni odvisen od arhitekture, tako da ustreza kot domači. Zakaj ni bil vključen na seznam razpoložljivih paketov oziroma ni bil razvit [TBD]? Morda se domneva, da nihče ne bi smel graditi in izvajati modulov jedra, ki niso MCST. Tukaj res obstaja neskladje - saj obstajajo glave linux. To pomeni, da lahko modul po želji sestavite ročno in ga zaženete s skriptom, ko se stroj zažene. Mislim, da od MCST ne bi smeli pričakovati pogostih posodobitev [TBD].

“V redu, modul je nameščen - najtežji del je mimo,” sem pomislil ... Paket veeam za repozitorij deb je za platformo amd64, Elbrus OS pa ima platformo x86_64 [TBD]. Razlika je seveda le v imenu, vendar zaradi te razlike skoraj vsi paketi iz deb repozitorijev tretjih oseb niso združljivi z Elbrus OS. Ta nadležni nesporazum lahko preprosto odpravite: samo razstavite paket, popravite podatke o arhitekturi in ga sestavite nazaj. Kako narediti Googlal takoj.

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

Druga težava so odvisnosti. Zdi se, da so potrebne datoteke tam, paketi pa ne. Vtis je bil, da se imena paketov razlikujejo od njihovih "uvoženih analogov". Morda so knjižnice zapakirane drugače. Nisem šel preveč v podrobnosti, odstranil sem skoraj vse odvisnosti in namestitev je stekla naprej.

Nato so se pojavile težave z zagonsko kodo storitve. Manjka skript /lib/init/vars.sh. Elbrus iz nekega razloga deluje brez njega, zato ga bomo tudi odstranili. Nato smo morali zamenjati funkcijo izpisa sporočila: funkciji log_daemon_msg in log_end_msg sta manjkali. Po brskanju po datoteki /lib/lsb/init-functions sem našel funkcijo log_success_msg - dobra nam bo za poskuse. Mimogrede, v datoteki /lib/lsb/init-functions je vrstica “# Source SuSE`s rc functions” na začetku datoteke [TBD].

Po tako grobi obdelavi paketa z datoteko je bila varnostna kopija celotnega stroja na NFS deležu uspešno zagnana. Tudi rezervna namestitev je bila uspešna. Zato verjamem, da je Veeam Agent za Linux vsekakor primeren za varnostno kopiranje stroja z Elbrus PDK, prenesenim »kar tako« brez kakršnih koli obveznosti. Tudi po vseh spremembah z datoteko.

Seveda distribucijski komplet Elbrus OS formalno ni podprt, saj ni na seznamu podprtih. Poleg tega oddelek za zagotavljanje kakovosti ni testiral agenta Veeam za Linux, zato so tisti. podpore ni (vsaj v času objave članka).

Upam, da bo članek koristen tistim, ki poskušajo izvajati odredbo št. 334 z dne 29.06.2017. junija XNUMX. Moje tebi ... [TBD].

Vir: www.habr.com

Dodaj komentar