Elbrus операциялық жүйесінде Veeam ұсынған Linux сақтық көшірмесі. Импортты алмастыру ['?' | '.' | '!']

Всем привет.
Хабре туралы соңғы мақалалар Импортты алмастыру тәжірибеде. 1-бөлім. Параметрлер и Музыка ұзақ ойнамады ... немесе Elbrus OS қалай ешқашан тегін болмады мені бей-жай қалдырмады. Мен бұл мәселені резервтік тапсырма контекстінде зерттеуді шештім. Оның үстіне, в Бұл мақала Veeam бағдарламалық жасақтамасының өнімдері атап өтілді, бұл мәселе импортты алмастыру контекстінде өзекті болуы мүмкін дегенді білдіреді.

Elbrus операциялық жүйесінде Veeam ұсынған Linux сақтық көшірмесі. Импортты алмастыру ['?' | '.' | '!']
түпнұсқа сурет көзі

Ең алдымен, мен Elbrus ОЖ жүктеп алуды шештім, дәлірек айтсақ, тек x86_64 архитектурасы үшін қолжетімді дистрибутивті, оның қалай жұмыс істейтінін көріп, оған Linux үшін Veeam Agent орнатуға тырысамын. Бұдан не шыққанын білгіңіз келсе, мысықты қараңыз.

Сонымен, егер біреу білмесе, кішкене шегініс. «Эльбрус» солай процессор нақты командалық жүйемен. Оған қоса, Elbrus OS бағдарламалық құралы бар. Және - танымал сенімге қарамастан - Elbrus ОЖ-мен жұмыс істеу үшін Elbrus процессорына негізделген аппараттық жүйенің болуы міндетті емес. «X86 үшін «Elbrus» PDK» бар - шын мәнінде ол орнату дискі түрінде қоғамдық доменде пайда болды. Айтпақшы, «PDK - платформаны әзірлеу жинағы, әзірлеушілер жинағы» деген сілтеме бар - тамаша, бұл жерде кем дегенде компилятор бар дегенді білдіреді.

Тағы бір шағын мәжбүрлі шегіну. Мен бір кездері MSVS және Baguette RTOS сияқты отандық бағдарламалық жасақтамамен айналыстым. Менің отандық компоненттермен, соның ішінде MCST процессорымен жұмыс істеу тәжірибем болды. Сондықтан бұл салада белгілі бір ерекшелік бар деп толық жауапкершілікпен айта аламын және оны мақалада қозғамауға тырысамын. Мен шынымен қаласам, [TBD] тегін қоямын. Сондықтан біз ашық троллингсіз және банальды ыңғайсыз әрекет етуге тырысамыз. Түптеп келгенде, Ресейдің қорғаныс өнеркәсібі мен мемлекеттік органдарын түсіну керек. Үлкен ел – шағын бюджет.. [TBD].

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

бірінші кезең - орнату. Мен оны тегін пайдалануға болатын бірінші гипервизорға орнаттым. Мен екі ядроны, бірнеше гиг RAM, бейнеге 32 МБ бөлдім (графикалық интерфейс болады деп ойладым). Диск әдеттегідей - 32 ГБ.
Мен орнатуды бастадым. Мен орнату нұсқауларын пайдаланбадым, сондықтан оған түсініктеме бере алмаймын. TUI орнату интерфейсі өте минималистік.

Elbrus операциялық жүйесінде Veeam ұсынған Linux сақтық көшірмесі. Импортты алмастыру ['?' | '.' | '!']
Жақсы, біз тінтуірсіз жасай аламыз.

Мен екінші әрекетте келесі терезені басқардым. Неліктен дискіден орнату кезінде әдепкі sr0 [TBD] құрылғысын таңдамасқа?
CD-ROM көзін таңдап, жалғастырыңыз.

Elbrus операциялық жүйесінде Veeam ұсынған Linux сақтық көшірмесі. Импортты алмастыру ['?' | '.' | '!']

Уақыт белдеуін таңдаған кезде мен кенеттен жүйенің бастапқы жүктеу процесін қолданатынын түсіндім және мен TTY0-ден жұмыс істеп жатырмын.

Elbrus операциялық жүйесінде Veeam ұсынған Linux сақтық көшірмесі. Импортты алмастыру ['?' | '.' | '!']

Жарайды, онда «Эльбрусты» қауымдастық ретінде жіктейік Ескі сенушілер[TBD]. Негізінде, бұл жақсы: жүктеу процесі қалай жұмыс істейтінін көру үшін бастапқы кодты сұраудың қажеті жоқ, өйткені бәрі сценарийде.

Қалғаны дерлік маңызды емес: біз бәрін қойып, келісеміз. Жолда біз ядроның 3.14.79-13.84 қолданылатынын білеміз. Хмм, Debian 7-де 3.2 [TBD] болды.

Содан кейін дискіні әдепкі бөлуді таңдаңыз және... Біз ескертуді көреміз:

Elbrus операциялық жүйесінде 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 файлын таптым. Яғни, сақтық көшірме құралы бар және ол жүйеге енгізілген! «Тамаша», - деп ойладым мен, «бұл қалай жұмыс істейтінін көрейік!»

Файлды көшіруді қамтамасыз ететін 4Kb bash сценарийі /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 Agent орнату.
Сонымен, Veeam Agent for Linux екі пакеттен тұрады: veeamsnap ядро ​​модулі (айтпақшы, көзі осында) және veeam бумасы түріндегі меншікті пайдаланушы-кеңістік коды.

Ядро модулін орнату кезінде бір кішкентай мәселе болды - жетіспейтін dkms бумасы. Бұл дереккөзден ядро ​​модульдерін құруға мүмкіндік беретін қызмет. Әдетте, ол барлық deb дистрибуцияларында қол жетімді. Мен оны үшінші тараптың дебиторлық репозиторийінен жүктеп алуым керек болды. Мені қуантқан бір нәрсе, пакет сәулетке тәуелді емес, сондықтан ол туған жеріне ұқсайды. Неліктен ол қолжетімді пакеттер тізіміне енгізілмеген, дәлірек айтсақ, [TBD] әзірленбеген? Мүмкін, MCST емес ядро ​​​​модульдерін ешкім құрастырмауы және іске қосуы қажет емес деп болжанады. Бұл жерде шын мәнінде сәйкессіздік бар - өйткені Linux-тақырыптары бар. Яғни, модуль, егер қажет болса, машина іске қосылған кезде қолмен жиналып, сценарий арқылы іске қосылуы мүмкін. Менің ойымша, сіз MCST [TBD] жиі жаңартуларын күтпеуіңіз керек.

«Жарайды, модуль орнатылды – ең қиын бөлігі аяқталды» деп ойладым... Deb репозиторийіне арналған veeam бумасы amd64 платформасына арналған, ал Elbrus ОЖ-да x86_64 [TBD] платформасы бар. Айырмашылық, әрине, тек атауында, бірақ бұл айырмашылық үшінші тараптың дебиторлық репозиторийлерінің барлық дерлік пакеттерін Elbrus ОЖ-мен үйлеспейді. Бұл тітіркендіргіш түсініспеушілікті жоюға болады: жай ғана пакетті бөлшектеңіз, архитектура туралы ақпаратты түзетіңіз және оны қайтадан біріктіріңіз. Бұны қалай істейді Гуглдан іздеді бірден.

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 функциялары» жолы [TBD] файлының басында орналасқан.

Буманы файлмен өрескел өңдеуден кейін NFS үлесіндегі бүкіл машинаның сақтық көшірмесі сәтті іске қосылды. Сақтық көшірме орнату да сәтті болды. Сонымен, ешқандай міндеттемесіз «дәл солай» жүктелген Elbrus PDK көмегімен машинаның сақтық көшірмесін жасау үшін Linux үшін Veeam Agent сөзсіз қолайлы деп есептеймін. Файлмен барлық өзгертулерден кейін де.

Әрине, Elbrus OS тарату жинағы ресми түрде қолдау көрсетпейді, өйткені ол қолдау көрсетілетіндер тізіміне кірмейді. Сонымен қатар, Linux-қа арналған Veeam Agent оны QA бөлімімен сынамаған, сондықтан олар. қолдау жоқ (кем дегенде мақала жарияланған кезде).

Мақала 334 жылғы 29.06.2017 маусымдағы NoXNUMX бұйрығын орындауға тырысатындарға пайдалы болады деп сенемін. Саған менікі... [TBD].

Ақпарат көзі: www.habr.com

пікір қалдыру