Linuxi varundus Veeamilt Elbrus OS-is. Impordi asendus ['?' | '.' | '!']

Tere kõigile.
Viimased artiklid Habré kohta Impordi asendamine praktikas. Osa 1. Valikud и Muusika ei mänginud pikka aega ... või kuidas Elbruse OS ei saanud vabaks ei jätnud mind ükskõikseks. Otsustasin seda küsimust varundusülesande kontekstis uurida. Veelgi enam, sisse see artikkel Mainitud on Veeam Software tooted, mis tähendab, et probleem võib olla asjakohane just impordi asendamise kontekstis.

Linuxi varundus Veeamilt Elbrus OS-is. Impordi asendus ['?' | '.' | '!']
algne pildiallikas

Kõigepealt otsustasin alla laadida Elbruse OS-i või õigemini ainult x86_64 arhitektuuri jaoks saadaoleva distributsiooni, vaadata, kuidas see töötab, ja proovida sellele installida Veeam Agent for Linux. Kui soovite teada, mis sellest välja tuli, vaadake kassi.

Nii et väike kõrvalepõige juhuks, kui keegi ei tea. "Elbrus" on selline protsessor üsna spetsiifilise käsusüsteemiga. Lisaks sellele on Elbrus OS-i tarkvara. Ja – vastupidiselt levinud arvamusele – ei ole Elbruse OS-i kasutamiseks vaja Elbruse protsessoril põhinevat riistvarasüsteemi. Seal on “PDK “Elbrus” x86 jaoks” - tegelikult ilmus see avalikku omandisse installiketta kujul. Muide, seal on joonealune märkus "PDK - platvormi arenduskomplekt, arendajakomplekt" - suurepärane, see tähendab, et seal on vähemalt kompilaator.

Veel üks väike sunnitud taganemine. Fakt on see, et kunagi tegelesin kodumaise tarkvaraga, nagu MSVS ja Baguette RTOS. Mul oli kodumaiste komponentidega töötamise kogemus, sealhulgas MCST protsessor. Seetõttu võin täie vastutustundega öelda, et selles valdkonnas on teatud spetsiifilisus ja püüan seda artiklis mitte puudutada. Kui ma tõesti tahan, panen sildi [TBD]. Seega proovime ilma otsese trollimise ja banaalse oigamiseta hakkama. Lõpuks tuleb mõista Venemaa kaitsetööstust ja valitsusasutusi. Suur riik – väike eelarve.. [TBD].

Null etapp - lae alla. Tähelepanuväärne on see, et uudis Elbruse OS-i kättesaadavaks tegemisest tekitas nii palju vastukaja, et leviserver läks alla. [TBD] Aitäh Yandexile ja insenerile, kes mõtles selle sinna kolida. Nii et allalaadimiskiirus on hea.

Esimene etapp - paigaldus. Paigaldasin selle esimesse hüperviisorisse, mis oli tasuta kasutamiseks saadaval. Eraldasin kaks tuuma, paar giga RAM-i, 32 MB video jaoks (seal tuleb graafiline liides, arvasin). Ketas on nagu tavaliselt - 32 GB.
Alustasin installimist. Ma ei kasutanud paigaldusjuhiseid, seega ei oska ma seda kommenteerida. TUI installiliides on tõsiselt minimalistlik.

Linuxi varundus Veeamilt Elbrus OS-is. Impordi asendus ['?' | '.' | '!']
Noh, suurepärane, saame ilma hiireta hakkama.

Järgmise aknaga sain hakkama teisel katsel. Miks mitte valida kettalt installimisel vaikeseade sr0 [TBD]?
Valige CD-ROM-i allikas ja liikuge edasi.

Linuxi varundus Veeamilt Elbrus OS-is. Impordi asendus ['?' | '.' | '!']

Ajavööndit valides mõistsin järsku, et süsteem kasutab alglaadimisprotsessi ja töötan TTY0-st.

Linuxi varundus Veeamilt Elbrus OS-is. Impordi asendus ['?' | '.' | '!']

OK, siis liigitagem "Elbrus" kogukonnaks Vanausulised[TBD]. Põhimõtteliselt on see hea: allalaadimisprotsessi toimimise nägemiseks ei pea te lähtekoodi küsima, kuna kõik on skriptitud.

Ülejäänu on peaaegu ebaoluline: paneme kõik ja lepime kokku. Teel saame teada, et kernelit kasutatakse 3.14.79-13.84. Hmm, Debian 7-l oli 3.2 [TBD].

Järgmiseks valige ketta vaikepartitsioonid ja... Näeme hoiatust:

Linuxi varundus Veeamilt Elbrus OS-is. Impordi asendus ['?' | '.' | '!']

Hmm, millegipärast ei tulnud automaatne jaotus 32 GB kettaga hästi toime. Ma ei vahetanud ketast; täitsin ülesande käsitsi ketta partitsiooniga stiilis "kõik-ühes". Pidin installima ext3, kuna /boot ei saanud ext4-s olla.
Süsteem tekkis ilma vahejuhtumiteta.

Teine etapp - alternatiivide otsimine.
Pärast teise ketta sisus tuhnimist mõistsin, et see on hoidla, millel on lisa. pakendites. Ja vaadates faili /etc/apt/sources.list, sain aru, et see tuleb paigaldada kausta /mnt/cdrom. Kuid ma ei leidnud /etc/os-release. Kuid on olemas /etc/mcst-version sisuga 3.0-rc36. 3.0 on ilmselt versioon – tundub, et sobib, aga rc36? Üldiselt ei suuda kolmanda osapoole tarkvara seda levitamist klassikalisel viisil ära tunda.

Juursektsioonis hakkab silma kataloog /mcst ja sealt avastasin vajuva südamega /mcst/backup. See tähendab, et seal on varundustööriist ja see on süsteemi sisse ehitatud! "Tore," mõtlesin ma, "vaatame, kuidas see toimib!"

Selgus, et on olemas 4Kb bash skript /mcst/bin/backup, mis pakub failide kopeerimist. Vaikimisi - kataloogi /mcst/backup. Lähtekoodis eeldasin, et näen käsku rsync, kuid see pole vaikekonfiguratsioonis. Skript lihtsalt kopeerib failid. Käsk näeb välja umbes selline:

cp -rpdx <file backup> <file>

Kogu fail /mcst/bin/backup on siinHoiatan kohe, et sellest skriptist üksi ei piisa täielikuks mõistmiseks. See tõmbab funktsioone failist /mcst/bin/source, mis on midagi funktsioonide teegi sarnast. Ma ei lisanud seda (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

Kuigi võib-olla ma ei saanud millestki aru? Äkki keegi oskab kommentaarides selgitada: kuidas see skript tagab turvalise ja usaldusväärse andmete varundamise? [TBD]

rsync, muide, sisaldub lisandmoodulis. hoidlad. Versioon 3.1.3. Arvan, et rsynci kasutamine on siiski parem alternatiiv rakendusele /mcst/bin/backup.

Järgmiseks otsustasin uue panna Veeam Agent Linuxi jaoks. Keegi küsib: "Mis on Veeamil ja impordi asendamisel sellega pistmist?" Jah, seda ei ole registris, kuid see on FSTECi poolt sertifitseeritud, mis tähendab, et alternatiivide puudumisel saab seda kasutada. Kulutades viisteist minutit alternatiividele alates register, suutsin leida 3 linki sõna "varukoopia" jaoks (ükski pole seotud minu küsimusega sõna "reserv" kohta). Ma ei ole nende programmide kohta põhjalikku analüüsi teinud, mistõttu ma ei püüa hinnata, kui sobivad need Linuxiga töötavate masinate varundamiseks. Kes vajab, teeb oma järelduse ja jagab seda kommentaarides.

Kolmas etapp — Veeam Agenti installimine Linuxile.
Niisiis koosneb Veeam Agent for Linux kahest paketist: veeamsnapi kerneli moodulist (muide, allikas siin) ja varaline kasutajaruumi kood paketi veeam kujul.

Kerneli mooduli paigaldamisel oli üks väike probleem – puuduv pakett dkms. See on teenus, mis võimaldab luua allikast kerneli mooduleid. Reeglina on see saadaval kõigil deb-jaotustel. Pidin selle alla laadima kolmanda osapoole deb-hoidlast. Üks asi, mis mind rõõmustas, on see, et pakett ei sõltu arhitektuurist, nii et see sobib nagu omapärane. Miks seda saadaolevate pakettide loendisse ei lisatud või pigem ei välja töötatud [TBD]? Võib-olla eeldatakse, et keegi ei peaks ehitama ega käivitama mitte-MCST-tuumamooduleid. Siin on tõesti lahknevus – kuna seal on linuxi päised. See tähendab, et mooduli saab soovi korral käsitsi kokku panna ja masina käivitumisel skripti abil käivitada. Arvan, et te ei tohiks oodata MCST-lt [TBD] sagedasi värskendusi.

"OK, moodul on installitud - raskeim osa on möödas," arvasin ma... Veeam pakett deb-hoidla jaoks on amd64 platvormi jaoks ja Elbrus OS-il on x86_64 [TBD] platvorm. Erinevus on muidugi ainult nimes, kuid see erinevus muudab peaaegu kõik kolmanda osapoole deb-hoidlatest pärit paketid Elbruse OS-iga ühildumatuks. Selle tüütu arusaamatuse saab lihtsalt kõrvaldada: lihtsalt võtke pakett lahti, parandage teave arhitektuuri kohta ja pange see uuesti kokku. Kuidas seda teha googeldas seda koheselt.

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

Teine probleem on sõltuvused. Tundub, et vajalikud failid on olemas, aga pakette pole. Jäi mulje, et pakendite nimetused erinevad nende “imporditud analoogidest”. Võib-olla on raamatukogud erinevalt pakitud. Ma ei laskunud liiga palju üksikasjadesse, eemaldasin peaaegu kõik sõltuvused ja installimine läks edasi.

Seejärel ilmnesid probleemid teenuse alguskoodiga. Skript /lib/init/vars.sh puudus. Mingil põhjusel saab Elbrus ilma selleta hakkama, nii et eemaldame ka selle. Järgmisena pidime asendama sõnumiväljundi funktsiooni: puuduvad funktsioonid log_daemon_msg ja log_end_msg. Pärast failis /lib/lsb/init-functions tuhnimist leidsin funktsiooni log_success_msg – see on meile katsete jaoks kasulik. Muide, failis /lib/lsb/init-functions on rida “# Source SuSE`s rc functions” faili [TBD] alguses.

Pärast paketi sellist jämedat töötlemist failiga käivitati edukalt kogu masina varundamine NFS-i jagamisel. Ka varukinnitus õnnestus. Seega usun, et ilma kohustusteta “niisama” alla laaditud masina varundamiseks Elbrus PDK-ga sobib Veeam Agent Linuxile kindlasti. Isegi pärast kõiki failiga tehtud muudatusi.

Loomulikult ei toetata Elbruse OS-i levitamiskomplekti ametlikult, kuna see pole toetatud loendis. Lisaks ei testinud kvaliteedikontrolli osakond Veeam Agent for Linuxit selle peal, nii et need. toetus puudub (vähemalt artikli ilmumise ajal).

Loodan, et artikkel on kasulik neile, kes püüavad ellu viia 334. juuni 29.06.2017 korraldust nr XNUMX. Minu oma teile... [TBD].

Allikas: www.habr.com

Lisa kommentaar