Elbrus OSдеги Veeamден Linux камдык көчүрмөсү. Импортту алмаштыруу ['?' | '.' | '!']

Баарына салам.
Habré боюнча акыркы макалалар Иш жүзүндө импортту алмаштыруу. 1-бөлүк. Параметрлер и Музыка көпкө чейин ойногон жок ... же Elbrus OS кантип бекер болгон жок мени кайдыгер калтырган жок. Мен бул маселени резервдик тапшырманын контекстинде изилдөөнү чечтим. Мындан тышкары, в бул макалада Veeam Программалык камсыздоо өнүмдөрү айтылган, бул маселе импортту алмаштыруунун контекстинде өзгөчө актуалдуу болушу мүмкүн дегенди билдирет.

Elbrus OSдеги Veeamден Linux камдык көчүрмөсү. Импортту алмаштыруу ['?' | '.' | '!']
баштапкы сүрөт булагы

Биринчиден, мен Elbrus OSти, тагыраак айтканда, x86_64 архитектурасы үчүн жеткиликтүү дистрибуцияны гана жүктөп алууну чечтим, анын кантип иштээрин көрүп, Linux үчүн Veeam Agentти орнотуп көрүүнү чечтим. Мындан эмне чыкканын билгиңиз келсе, мышыкка кайрылыңыз.

Ошентип, кимдир бирөө билбесе, кичине чегинүү. "Эльбрус" ушундай иштетүү өзгөчө бир буйрук системасы менен. Андан тышкары, Elbrus OS программасы бар. Жана - популярдуу ишенимге карама-каршы - Elbrus OS иштетүү үчүн, бул Elbrus процессордун негизинде аппараттык системасы болушу керек эмес. "X86 үчүн PDK "Elbrus" бар - чындыгында, ал орнотуу диск түрүндө коомдук доменде пайда болгон. Баса, "PDK - платформаны иштеп чыгуу комплекти, иштеп чыгуучу комплект" деген шилтеме бар - сонун, демек ал жерде жок дегенде компилятор бар.

Дагы бир кичинекей аргасыз чегинүү. Чындыгында, мен бир жолу MSVS жана Baguette RTOS сыяктуу ата мекендик программалык камсыздоо менен алектенгем. Менде ата мекендик компоненттер, анын ичинде MCST компаниясынын процессору менен иштөө тажрыйбасы бар болчу. Ошондуктан бул жаатта белгилуу бир специфика-лык бар деп толук жоопкерчилик менен айта алам жана макалада ага тийбе-генге аракет кылам. Мен чындап кааласам, [TBD] тэгин коём. Андыктан биз ачыктан-ачык троллингсиз жана баналдык онтобой жасаганга аракет кылабыз. Акыр-аягы, Россиянын коргонуу өнөр жайын жана мамлекеттик органдарын түшүнүү керек. Чоң өлкө, кичинекей бюджет... [ТБД].

Нөл этап - жүктөө. Белгилей кетчү нерсе, Elbrus OS жеткиликтүү болуп калды деген кабар резонанс жаратты, ошондуктан бөлүштүрүү сервери иштебей калды. [TBD] Яндекске жана аны ошол жакка жылдырууну ойлогон инженерге рахмат. Ошентип, жүктөө ылдамдыгы жакшы.

биринчи этап - орнотуу. Мен аны бекер колдонууга жеткиликтүү болгон биринчи гипервизорго орноттум. Мен эки ядрону, бир нече гиг оперативдик эстутумду, видео үчүн 32 МБ бөлдүм (графикалык интерфейс болот деп ойлогом). Диск адаттагыдай эле - 32 ГБ.
Мен орнотууну баштадым. Мен орнотуу нускамаларын колдонгон эмесмин, андыктан ага комментарий бере албайм. TUI орнотуу интерфейси өтө минималисттик.

Elbrus OSдеги Veeamден Linux камдык көчүрмөсү. Импортту алмаштыруу ['?' | '.' | '!']
Макул, сонун, чычкансыз эле жасай алабыз.

Мен экинчи аракетте кийинки терезени башкардым. Эмне үчүн дисктен орнотууда демейки түзмөк sr0 [TBD] тандалбайт?
CD-ROM булагын тандап, улантыңыз.

Elbrus OSдеги Veeamден Linux камдык көчүрмөсү. Импортту алмаштыруу ['?' | '.' | '!']

Убакыт алкагын тандап жатканда, мен күтүлбөгөн жерден система башталгыч жүктөө процессин колдоноорун түшүндүм жана мен TTY0дон иштеп жатам.

Elbrus OSдеги Veeamден Linux камдык көчүрмөсү. Импортту алмаштыруу ['?' | '.' | '!']

Макул, анда "Эльбрусту" жамаат катары классификациялайлы Эски ыймандуулар[TBD]. Негизи, бул жакшы: жүктөө процесси кандайча иштээрин көрүү үчүн булак кодун сураштын кереги жок, анткени баары скрипт менен жазылган.

Калганы дээрлик маанилүү эмес: биз баарын коюп, макулбуз. Жолдо, биз ядро ​​3.14.79-13.84 колдонулганын билебиз. Ммм, Debian 7де 3.2 [TBD] болгон.

Андан кийин, демейки дискти бөлүүнү тандаңыз жана... Биз эскертүү көрөбүз:

Elbrus OSдеги Veeamден Linux камдык көчүрмөсү. Импортту алмаштыруу ['?' | '.' | '!']

Ммм, кандайдыр бир жол менен автоматтык бөлүү 32 гиг диск менен жакшы күрөшкөн жок. Мен дискти өзгөрткөн жокмун, мен "бардыгы бирде" стилинде дискти кол менен бөлүү менен тапшырманы аткардым. Мен ext3 орнотууга туура келди, анткени / boot ext4те болушу мүмкүн эмес.
Система эч кандай окуясыз ишке ашты.

экинчи буту - альтернативаларды издөө.
Экинчи дисктин мазмунун карап чыккандан кийин, мен бул кошумча бар репозиторий экенин түшүндүм. пакеттерде. Жана /etc/apt/sources.listти карап, мен аны /mnt/cdrom ичинде орнотуу керектигин түшүндүм. Бирок мен /etc/os-release таба алган жокмун. Бирок 3.0-rc36 мазмуну бар /etc/mcst-version бар. 3.0, балким, версия - туура окшойт, бирок rc36? Жалпысынан алганда, үчүнчү тараптын программалык камсыздоосу бул бөлүштүрүүнү классикалык түрдө тааный албайт.

Түпкү бөлүмдө / mcst каталогу менин көзүмчө турат жана ошол жерден жүрөгүм чөгүп, мен / mcst/backupти таптым. Башкача айтканда, резервдик курал бар жана ал системага орнотулган! "Сонун," деп ойлодум мен, "Келгиле, бул кандай иштээрин көрөлү!"

Файлды көчүрүүнү камсыз кылган 4Кб баш скрипти /mcst/bin/backup бар экени белгилүү болду. Демейки боюнча - /mcst/backup каталогуна. Булак кодунда мен rsync буйругун көрөм деп күттүм, бирок ал демейки конфигурацияда эмес. Скрипт жөн гана файлдарды көчүрөт. Буйрук төмөнкүдөй көрүнөт:

cp -rpdx <file backup> <file>

/mcst/bin/backup файлынын баары бул жердеМен дароо эскертем, бул сценарий толук түшүнүү үчүн жетиштүү эмес. Ал функцияларды /mcst/bin/source тартып алат, бул функциялар китепканасы сыяктуу. Мен аны кошкон жокмун (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

Бирок, балким, мен бир нерсени түшүнгөн жокмун? Балким, кимдир бирөө комментарийлерде түшүндүрүп бере алат: бул скрипт маалыматтын коопсуз жана ишенимдүү камдык көчүрмөсүн кантип камсыз кылат? [TBD]

rsync, демек, кошумчага киргизилген. репозиторийлер. Версия 3.1.3. Менимче, rsync колдонуу дагы деле /mcst/bin/backup тиркемесине жакшы альтернатива.

Андан кийин мен жаңысын коюуну чечтим Linux үчүн Veeam Агент. Кимдир бирөө: "Veeam менен импортту алмаштыруунун буга кандай тиешеси бар?" Ооба, ал реестрде жок, бирок ал FSTEC тарабынан тастыкталган, демек, альтернатива жок болгон учурда аны колдонсо болот. Алтернативаларга он беш мүнөт сарптоо реэстра, Мен "резервдик" деген сөз үчүн 3 шилтемени таба алдым (эч кимиси "резерв" деген сөзгө менин суроомо тиешеси жок). Мен бул программаларга терең анализ жасаган жокмун, андыктан алардын Linux менен иштеген машиналардын резервдик көчүрмөсүн сактоо үчүн канчалык ылайыктуу экенин айтууга аракет кылбайм. Кимге керек болсо өз корутундусун чыгарып, комментарийге бөлүшөт.

Үчүнчү этап — Linux үчүн Veeam агентин орнотуу.
Ошентип, Linux үчүн Veeam Agent эки пакеттен турат: veeamsnap ядро ​​модулу (айтмакчы, булагы бул жерде) жана veeam пакети түрүндөгү менчик колдонуучу мейкиндик коду.

Ядро модулун орнотууда бир кичинекей көйгөй бар - жок dkms пакети. Бул булактан ядро ​​модулдарын курууга мүмкүндүк берген кызмат. Эреже катары, ал бардык деби бөлүштүрүүдө жеткиликтүү. Мен аны үчүнчү жактын деби репозиторийинен жүктөп алышым керек болчу. Мени кубандырган бир нерсе, пакет архитектурага көз каранды эмес, андыктан ал жергиликтүүдөй туура келет. Эмне үчүн ал жеткиликтүү пакеттердин тизмесине киргизилген эмес, тагыраак айтканда, [TBD] иштелип чыккан эмес? Балким, эч ким MCST эмес ядро ​​модулдарын куруп, иштетпеши керек деп болжолдонууда. Бул жерде чындап эле карама-каршылык бар - анткени Linux-башаттар бар. Башкача айтканда, модулду, эгер кааласа, кол менен чогултуп, машина иштей баштаганда скрипт менен ишке киргизсе болот. Менимче, сиз MCSTден [TBD] тез-тез жаңыртууларды күтпөшүңүз керек.

“Макул, модуль орнотулду – эң кыйын бөлүгү бүттү” деп ойлогом... Deb репозиторийинин veeam пакети amd64 платформасы үчүн, ал эми Elbrus ОЖде x86_64 [TBD] платформасы бар. Айырмасы, албетте, аталышында гана, бирок бул айырма үчүнчү тараптын деби репозиторийлеринин дээрлик бардык пакеттерин Elbrus OS менен шайкеш келбейт. Бул тажатма түшүнбөстүктү жөн эле жок кылса болот: жөн гана пакетти демонтаждап, архитектура жөнүндө маалыматты оңдоп, кайра бириктириңиз. Муну кандай жасаш керек Гуглдан издедим ошол замат.

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

Дагы бир көйгөй - көз карандылык. Керектүү файлдар бар окшойт, бирок пакеттер жок. Пакеттердин аталыштары алардын “импорттолгон аналогдорунан” айырмаланып тургандай таасир калтырды. Балким, китепканалар башкача пакеттелген. Мен өтө майда-чүйдөсүнө чейин кирген жокмун, дээрлик бардык көз карандылыкты алып салдым жана орнотуу уланды.

Андан кийин кызматтын баштоо коду менен көйгөйлөр пайда болду. /lib/init/vars.sh скрипти жок болчу. Эмнегедир Эльбрус ансыз башкарат, ошондуктан биз аны да алып салабыз. Андан кийин, билдирүү чыгаруу функциясын алмаштырууга туура келди: log_daemon_msg жана log_end_msg функциялары жок болчу. /lib/lsb/init-functions файлын карап чыккандан кийин, log_success_msg функциясын таптым - бул эксперимент үчүн биз үчүн жакшы. Айтмакчы, /lib/lsb/init-functions файлында “# Source SuSE`s rc functions” сабы [TBD] файлынын башында.

Пакетти файл менен ушундай одоно иштетүүдөн кийин, NFS үлүшү боюнча бүт машинанын камдык көчүрмөсү ийгиликтүү ишке киргизилди. Камдык орнотуу да ийгиликтүү болду. Ошентип, мен ишенем, Elbrus PDK менен машинанын камдык көчүрмөсүн сактоо үчүн, эч кандай милдеттенмесиз "ошондой эле" жүктөлүп алынган Linux үчүн Veeam Agent сөзсүз ылайыктуу. Файл менен бардык өзгөртүүлөрдөн кийин да.

Албетте, Elbrus OS бөлүштүрүү комплекти расмий түрдө колдоого алынбайт, анткени ал колдоого алынгандардын тизмесине кирбейт. Кошумчалай кетсек, Linux үчүн Veeam Agent аны QA бөлүмү сынаган эмес, ошондуктан алар. эч кандай колдоо жок (жок дегенде макала жарыяланган учурда).

Макала 334-жылдын 29.06.2017-июнундагы No XNUMX буйругун ишке ашырууга аракет кылгандар үчүн пайдалуу болот деп ишенем. Меники сага... [TBD].

Source: www.habr.com

Комментарий кошуу