Linux Backup от Veeam на Elbrus OS. Вносно заместване ['?' | '.' | '!']

Здравейте на всички.
Последни статии в Habré Заместването на вноса на практика. Част 1. Опции и Музиката не свири дълго време ... или как Elbrus OS не стана безплатна не ме остави безразличен. Реших да проуча този въпрос в контекста на задачата за архивиране. Освен това, в тази статия Споменават се софтуерните продукти на Veeam, което означава, че проблемът може да е актуален конкретно в контекста на заместването на вноса.

Linux Backup от Veeam на Elbrus OS. Вносно заместване ['?' | '.' | '!']
оригинален източник на изображение

Първо, реших да изтегля Elbrus OS или по-скоро само наличната дистрибуция за архитектурата x86_64, да видя как работи и да се опитам да инсталирам Veeam Agent за Linux върху него. Ако искате да знаете какво излезе от това, моля, вижте cat.

И така, едно малко отклонение, ако някой не знае. "Елбрус" е такъв процесор с доста специфична командна система. В допълнение към него има софтуер Elbrus OS. И - противно на общоприетото схващане - за да работите с Elbrus OS, не е необходимо да имате хардуерна система, базирана на процесора Elbrus. Има “PDK “Elbrus” за x86” - всъщност той се появи в публичното пространство под формата на инсталационен диск. Между другото, има бележка под линия „PDK - комплект за разработка на платформа, комплект за разработчици“ - страхотно, това означава, че там има поне компилатор.

Още едно малко принудително отстъпление. Факт е, че някога се занимавах с местен софтуер, като MSVS и Baguette RTOS. Имах опит в работата с домашни компоненти, включително процесор от MCST. Ето защо мога да кажа с пълна отговорност, че в тази област има определена специфика и ще се опитам да не я засягам в статията. Когато наистина искам, ще сложа етикета [TBD]. Така че ще се опитаме да се справим без откровено тролене и банално стенене. В крайна сметка трябва да се разбере руската отбранителна индустрия и държавни агенции. Голяма държава - малък бюджет.. [TBD].

Нулев етап - Изтегли. Трябва да се отбележи, че новината, че Elbrus OS е станала достъпна, предизвика резонанс до такава степен, че сървърът за разпространение падна. [TBD] Благодаря на Yandex и инженера, който се сети да го премести там. Така че скоростта на изтегляне е добра.

Първият етап - инсталация. Инсталирах го на първия хипервайзор, който беше достъпен за безплатно ползване. Разпределих две ядра, няколко гига RAM, 32 MB за видео (ще има графичен интерфейс, мислех си). Дискът е както обикновено - 32 GB.
Започнах инсталацията. Не съм използвал инструкциите за инсталиране, така че не мога да коментирам. Инсталационният интерфейс на TUI е силно минималистичен.

Linux Backup от Veeam на Elbrus OS. Вносно заместване ['?' | '.' | '!']
Е, страхотно, можем и без мишка.

Успях следващия прозорец от втория опит. Защо не изберете устройството по подразбиране sr0 [TBD] при инсталиране от диск?
Изберете CD-ROM източника и продължете напред.

Linux Backup от Veeam на Elbrus OS. Вносно заместване ['?' | '.' | '!']

Докато избирах часовата зона, внезапно разбрах, че системата използва процеса на стартиране на init, а аз работя от TTY0.

Linux Backup от Veeam на Elbrus OS. Вносно заместване ['?' | '.' | '!']

Добре, тогава нека класифицираме "Елбрус" като общност старообрядци[ТБД]. По принцип това е добре: не е нужно да питате за изходния код, за да видите как работи процесът на изтегляне, тъй като всичко е скриптирано.

Останалото е почти маловажно: поставяме всичко и се съгласяваме. По пътя откриваме, че ядрото се използва 3.14.79-13.84. Хм, Debian 7 имаше 3.2 [TBD].

След това изберете разделянето на диска по подразбиране и... Виждаме предупреждение:

Linux Backup от Veeam на Elbrus OS. Вносно заместване ['?' | '.' | '!']

Хм, по някакъв начин автоматичното разделяне не се справи добре с 32 гига диск. Не смених диска; завърших мисията с ръчно разделяне на диска в стил „всичко в едно“. Трябваше да инсталирам ext3, тъй като /boot не можеше да бъде в ext4.
Системата излезе без инциденти.

Вторият етап - търсене на алтернативи.
След като се разрових в съдържанието на втория диск, разбрах, че това е хранилище с доп. в пакети. И гледайки /etc/apt/sources.list, разбрах, че трябва да се монтира в /mnt/cdrom. Но не намерих /etc/os-release. Но има /etc/mcst-версия със съдържание 3.0-rc36. 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

Въпреки че може би не разбрах нещо? Може би някой може да обясни в коментарите: как този скрипт гарантира безопасно и надеждно архивиране на данни? [ТБД]

rsync, между другото, е включен в добавката. хранилища. Версия 3.1.3. Мисля, че използването на rsync все още е по-добра алтернатива на приложението /mcst/bin/backup.

След това реших да сложа нов Veeam Agent за Linux. Някой ще попита: „Какво общо имат Veeam и заместването на вноса?“ Да, няма го в регистъра, но е сертифициран от FSTEC, което означава, че при липса на алтернатива може да се използва. Прекарване на петнадесет минути за алтернативи от регистър, успях да намеря 3 връзки за думата „резервиране“ (нито една свързана с въпроса ми за думата „резервиране“). Не съм правил задълбочен анализ на тези програми, така че няма да се опитвам да преценя доколко са подходящи за архивиране на машини, работещи с Linux. Който има нужда сам ще си направи извода и ще го сподели в коментарите.

Трети етап — инсталиране на Veeam Agent за Linux.
И така, Veeam Agent за Linux се състои от два пакета: модула на ядрото veeamsnap (между другото, източник тук) и собствен код за потребителско пространство под формата на пакета veeam.

Имаше един малък проблем с инсталирането на модула на ядрото - липсващият пакет dkms. Това е услуга, която ви позволява да изграждате модули на ядрото от източника. По правило той е наличен във всички deb дистрибуции. Трябваше да го изтегля от deb хранилище на трета страна. Едно нещо, което ме зарадва е, че пакетът не зависи от архитектурата, така че пасва като роден. Защо не беше включен в списъка с налични пакети или по-скоро не беше разработен [TBD]? Може би се предполага, че никой не трябва да изгражда и изпълнява модули на ядрото, които не са MCST. Тук наистина има несъответствие - тъй като има linux-headers. Тоест, модулът, ако желаете, може да бъде сглобен на ръка и стартиран от скрипт, когато машината стартира. Мисля, че не трябва да очаквате чести актуализации от MCST [TBD].

„Добре, модулът е инсталиран - най-трудната част свърши“, помислих си... Пакетът на veeam за хранилището на deb е за платформата amd64, а Elbrus OS има платформа x86_64 [TBD]. Разликата, разбира се, е само в името, но тази разлика прави почти всички пакети от deb хранилища на трети страни несъвместими с Elbrus OS. Това досадно недоразумение може да бъде елиминирано просто: просто разглобете пакета, коригирайте информацията за архитектурата и го сглобете отново. Как да го направим Потърсих го в Google моментално.

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, изтеглен „просто така“ без никакви задължения, Veeam Agent за Linux определено е подходящ. Дори и след всички модификации с файл.

Разбира се, дистрибуторският комплект Elbrus OS не се поддържа официално, тъй като не е включен в списъка на поддържаните. Освен това Veeam Agent за Linux не е тестван върху него от QA отдела, така че тези. няма поддръжка (поне към момента на публикуване на статията).

Надявам се, че статията ще бъде полезна за тези, които се опитват да изпълнят заповед № 334 от 29.06.2017 юни XNUMX г. Моето за вас... [TBD].

Източник: www.habr.com

Добавяне на нов коментар