Линук резервна копија од Вееам-а на Елбрус ОС-у. Замена увоза ['?' | '.' | '!']

Поздрав свима.
Недавни чланци о Хабреу Замена увоза у пракси. Део 1. Опције и Музика није пуштала дуго... или како Елбрус ОС никада није постао слободан није ме оставио равнодушним. Одлучио сам да проучим ово питање у контексту резервног задатка. Штавише, у Овај чланак Помињу се Вееам софтверски производи, што значи да проблем може бити релевантан посебно у контексту замене увоза.

Линук резервна копија од Вееам-а на Елбрус ОС-у. Замена увоза ['?' | '.' | '!']
изворни извор слике

Пре свега, одлучио сам да преузмем Елбрус ОС, тачније, само доступну дистрибуцију за архитектуру к86_64, да видим како функционише и покушам да инсталирам Вееам Агент за Линук на њега. Ако желите да знате шта је изашло из овога, погледајте мачку.

Дакле, мала дигресија, ако неко не зна. „Елбрус“ је такав процесор са прилично специфичним системом командовања. Поред њега, ту је и софтвер Елбрус ОС. И – супротно популарном веровању – за рад са Елбрус ОС-ом није неопходно имати хардверски систем заснован на Елбрус процесору. Постоји „ПДК „Елбрус“ за к86“ - у ствари, појавио се у јавном власништву у облику инсталационог диска. Узгред, постоји фуснота „ПДК - комплет за развој платформе, комплет за програмере“ - одлично, то значи да постоји барем компајлер.

Још једно мало принудно повлачење. Чињеница је да сам се некада бавио домаћим софтвером, као што су МСВС и Багуетте РТОС. Имао сам искуства у раду са домаћим компонентама, укључујући процесор из МЦСТ-а. Стога, могу са пуном одговорношћу да кажем да постоји одређена специфичност у овој области и трудићу се да је не дотичем у чланку. Када заиста желим, ставићу ознаку [ТБД]. Зато ћемо покушати без директног троловања и баналног кукања. На крају, руску одбрамбену индустрију и владине агенције треба разумети. Велика земља - мали буџет.. [ТБД].

Зеро стаге - преузимање. Важно је напоменути да је вест да је Елбрус ОС постао доступан изазвала резонанцију, толико да је сервер за дистрибуцију пао. [ТБД] Хвала Иандек-у и инжењеру који је смислио да га премести тамо. Дакле, брзина преузимања је добра.

Прва фаза - инсталација. Инсталирао сам га на првом хипервизору који је био доступан за бесплатно коришћење. Одвојио сам два језгра, пар гига РАМ-а, 32 МБ за видео (постојаће графички интерфејс, мислио сам). Диск је као и обично - 32 ГБ.
Почео сам инсталацију. Нисам користио упутства за инсталацију, тако да не могу да коментаришем. ТУИ инсталациони интерфејс је веома минималистички.

Линук резервна копија од Вееам-а на Елбрус ОС-у. Замена увоза ['?' | '.' | '!']
Па, супер, можемо и без миша.

Успео сам у следећем прозору из другог покушаја. Зашто не бисте изабрали подразумевани уређај ср0 [ТБД] приликом инсталирања са диска?
Изаберите ЦД-РОМ извор и наставите даље.

Линук резервна копија од Вееам-а на Елбрус ОС-у. Замена увоза ['?' | '.' | '!']

Док сам бирао временску зону, изненада сам схватио да систем користи инит боот процес, а ја радим са ТТИ0.

Линук резервна копија од Вееам-а на Елбрус ОС-у. Замена увоза ['?' | '.' | '!']

У реду, онда хајде да класификујемо „Елбрус“ као заједницу староверци[ТБД]. У принципу, ово је добро: не морате да тражите изворни код да бисте видели како процес преузимања функционише, пошто је све скриптовано.

Остало је готово неважно: стављамо све и слажемо се. Успут сазнајемо да се кернел користи 3.14.79-13.84. Хмм, Дебиан 7 је имао 3.2 [ТБД].

Затим изаберите подразумевано партиционисање диска и... Видимо упозорење:

Линук резервна копија од Вееам-а на Елбрус ОС-у. Замена увоза ['?' | '.' | '!']

Хмм, некако се аутоматско партиционисање није добро носило са диском од 32 гигабајта. Нисам променио диск, завршио сам потрагу са ручним партиционисањем диска у стилу „све у једном“. Морао сам да инсталирам ект3, пошто /боот није могао бити у ект4.
Систем је прошао без инцидената.

Друга фаза - тражење алтернатива.
Након што сам претурао по садржају другог диска, схватио сам да је ово спремиште са додатним. у пакетима. И гледајући /етц/апт/соурцес.лист, схватио сам да га треба монтирати у /мнт/цдром. Али нисам нашао /етц/ос-релеасе. Али постоји /етц/мцст-верзија са садржајем 3.0-рц36. 3.0 је вероватно верзија - изгледа да одговара, али рц36? Генерално, софтвер треће стране највероватније неће моћи да препозна ову дистрибуцију на класичан начин.

У основној партицији, директоријум /мцст ми упада у очи, и тамо, са срцем који тоне, открио сам /мцст/бацкуп. То јест, постоји алатка за прављење резервних копија, и она је уграђена у систем! „Одлично“, помислио сам, „Да видимо како ово функционише!“

Испоставило се да постоји басх скрипта од 4Кб /мцст/бин/бацкуп која омогућава копирање датотека. Подразумевано - у директоријум /мцст/бацкуп. Очекивао сам да ћу у изворном коду видети команду рсинц, али она није у подразумеваној конфигурацији. Скрипта једноставно копира датотеке. Команда изгледа отприлике овако:

cp -rpdx <file backup> <file>

Цела датотека /мцст/бин/бацкуп је овдеОдмах вас упозоравам да овај сценарио сам по себи није довољан за потпуно разумевање. Повлачи функције из /мцст/бин/соурце, што је нешто попут библиотеке функција. Нисам га укључио (44КБ).

#!/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

Мада, можда нешто нисам разумео? Можда неко може да објасни у коментарима: како ова скрипта обезбеђује сигурну и поуздану резервну копију података? [ТБД]

рсинц је, иначе, укључен у додатак. спремишта. Верзија 3.1.3. Мислим да је коришћење рсинц и даље боља алтернатива апликацији /мцст/бин/бацкуп.

Затим сам одлучио да ставим нови Вееам Агент за Линук. Неко ће питати: „Какве везе Вееам и замена увоза имају с тим?“ Да, није у регистру, али је сертификован од ФСТЕЦ-а, што значи да се у недостатку алтернатива може користити. Проводећи петнаест минута на алтернативе из registar, успео сам да пронађем 3 везе за реч „резервна копија“ (ниједна није повезана са мојим питањем за реч „резерва“). Нисам урадио дубоку анализу ових програма, тако да нећу покушавати да проценим колико су погодни за прављење резервних копија машина које користе Линук. Коме затреба извући ће свој закључак и поделити га у коментарима.

фаза три — инсталација Вееам Агент-а за Линук.
Дакле, Вееам Агент за Линук се састоји од два пакета: модул кернела вееамснап (успут, извор овде) и власнички код корисничког простора у облику вееам пакета.

Постојао је један мали проблем са инсталирањем модула кернела - недостајући дкмс пакет. Ово је услуга која вам омогућава да направите модуле кернела из извора. По правилу је доступан на свим деб дистрибуцијама. Морао сам да га преузмем из деб спремишта треће стране. Једна ствар која ме је обрадовала је то што пакет не зависи од архитектуре, па се уклапа као изворни. Зашто није уврштен на листу доступних пакета, односно није развијен [ТБД]? Можда се претпоставља да нико не треба да прави и покреће било које модуле кернела који нису МЦСТ. Овде заиста постоји неслагање - пошто постоје линук-заглавља. То јест, модул се, по жељи, може саставити ручно и покренути скриптом када се машина покрене. Мислим да не бисте требали очекивати честа ажурирања од МЦСТ-а [ТБД].

„У реду, модул је инсталиран – најтежи део је завршен“, помислио сам... Вееам пакет за деб спремиште је за платформу амд64, а Елбрус ОС има к86_64 [ТБД] платформу. Разлика је, наравно, само у имену, али ова разлика чини скоро све пакете из деб репозиторијума трећих страна некомпатибилним са Елбрус ОС-ом. Овај досадни неспоразум се може једноставно елиминисати: само раставите пакет, исправите информације о архитектури и поново га саставите. Како се то ради Гуглао сам одмах.

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

Други проблем су зависности. Чини се да потребне датотеке постоје, али пакети нису. Утисак је био да се називи пакета разликују од њихових „увезених аналога”. Можда су библиотеке другачије упаковане. Нисам улазио превише у детаље, уклонио сам скоро све зависности и инсталација је кренула.

Тада су се појавили проблеми са кодом за почетак услуге. Недостајала је скрипта /либ/инит/варс.сх. Елбрус се из неког разлога сналази и без њега, па ћемо и њега уклонити. Затим смо морали да заменимо функцију излаза поруке: недостајале су функције лог_даемон_мсг и лог_енд_мсг. Након што сам претурао по датотеци /либ/лсб/инит-фунцтионс, нашао сам функцију лог_суццесс_мсг - биће нам добра за експерименте. Иначе, у датотеци /либ/лсб/инит-фунцтионс ред „# Соурце СуСЕ`с рц фунцтионс“ налази се на почетку датотеке [ТБД].

После овако грубе обраде пакета са датотеком, успешно је покренута резервна копија целе машине на НФС дељеном простору. Резервно монтирање је такође било успешно. Дакле, верујем да је за прављење резервне копије машине са Елбрус ПДК-ом, преузетом „баш тако“ без икаквих обавеза, Вееам Агент за Линук дефинитивно прикладан. Чак и након свих модификација са датотеком.

Наравно, дистрибутивни комплет Елбрус ОС није формално подржан, јер није укључен у листу подржаних. Поред тога, Вееам Агент за Линук није тестиран на њему од стране КА одељења, тако да они. нема подршке (бар у време објављивања чланка).

Надам се да ће чланак бити користан онима који покушавају да спроведу наредбу број 334 од 29.06.2017. јуна XNUMX. године. Моје теби... [ТБД].

Извор: ввв.хабр.цом

Додај коментар