Linux Backup od Veeam na Elbrus OS. Náhrada importu ['?' | '.' | '!']

Ahoj všichni
Nedávné články o Habrém Substituce importu v praxi. Část 1. Možnosti и Dlouho nehrála hudba ... aneb jak se OS Elbrus nestal svobodným nenechal mě lhostejným. Rozhodl jsem se prostudovat tento problém v kontextu úlohy zálohování. Navíc v tento článek Jsou zmíněny produkty Veeam Software, což znamená, že tento problém může být relevantní konkrétně v kontextu nahrazování importu.

Linux Backup od Veeam na Elbrus OS. Náhrada importu ['?' | '.' | '!']
původní zdroj obrázku

V první řadě jsem se rozhodl stáhnout si OS Elbrus, respektive pouze dostupnou distribuci pro architekturu x86_64, podívat se, jak funguje, a zkusit na ni nainstalovat Veeam Agent for Linux. Pokud chcete vědět, co z toho vzešlo, podívejte se na kočku.

Takže malá odbočka, kdyby někdo nevěděl. "Elbrus" je takový procesoru s poměrně specifickým systémem velení. Kromě toho existuje software Elbrus OS. A - na rozdíl od všeobecného přesvědčení - pro provoz operačního systému Elbrus není nutné mít hardwarový systém založený na procesoru Elbrus. Existuje „PDK „Elbrus“ pro x86“ - ve skutečnosti se objevil ve veřejné doméně ve formě instalačního disku. Mimochodem, je tam poznámka pod čarou „PDK - platform development kit, developer kit“ - skvělé, to znamená, že tam je alespoň kompilátor.

Další malý nucený ústup. Faktem je, že jsem se kdysi zabýval domácím softwarem, jako je MSVS a Baguette RTOS. Měl jsem zkušenosti s prací s domácími komponenty včetně procesoru od MCST. Mohu tedy s plnou odpovědností říci, že určitá specifika v této oblasti existuje a pokusím se toho v článku nedotýkat. Když opravdu budu chtít, dám štítek [TBD]. Pokusíme se tedy obejít bez přímého trollingu a banálního naříkání. Nakonec je třeba pochopit ruský obranný průmysl a vládní agentury. Velká země – malý rozpočet.. [TBD].

Nultý stupeň - stažení. Je pozoruhodné, že zpráva o zpřístupnění operačního systému Elbrus vyvolala takovou rezonanci, že distribuční server spadl. [TBD] Díky Yandexu a inženýrovi, kterého napadlo to tam přesunout. Rychlost stahování je tedy dobrá.

První etapa - instalace. Nainstaloval jsem ho na první hypervizor, který byl k dispozici zdarma. Přidělil jsem dvě jádra, pár giga RAM, 32 MB pro video (bude tam grafické rozhraní, myslel jsem). Disk je jako obvykle - 32 GB.
Spustil jsem instalaci. Nepoužil jsem návod k instalaci, takže se k němu nemohu vyjádřit. Instalační rozhraní TUI je výrazně minimalistické.

Linux Backup od Veeam na Elbrus OS. Náhrada importu ['?' | '.' | '!']
No super, obejdeme se i bez myši.

Další okno se mi povedlo na druhý pokus. Proč nevybrat výchozí zařízení sr0 [TBD] při instalaci z disku?
Vyberte zdroj CD-ROM a pokračujte.

Linux Backup od Veeam na Elbrus OS. Náhrada importu ['?' | '.' | '!']

Při výběru časového pásma jsem si najednou uvědomil, že systém používá proces init boot a já pracuji z TTY0.

Linux Backup od Veeam na Elbrus OS. Náhrada importu ['?' | '.' | '!']

Dobře, pak klasifikujme „Elbrus“ jako komunitu Staří věřící[TBD]. V zásadě je to dobré: nemusíte žádat o zdrojový kód, abyste viděli, jak proces stahování funguje, protože vše je napsáno skripty.

Zbytek je téměř nedůležitý: dáme všechno a souhlasíme. Cestou zjišťujeme, že se používá jádro 3.14.79-13.84. Hmm, Debian 7 měl 3.2 [TBD].

Dále vyberte výchozí rozdělení disku a... Zobrazí se varování:

Linux Backup od Veeam na Elbrus OS. Náhrada importu ['?' | '.' | '!']

Hmm, automatické dělení si nějak neporadilo s 32gigovým diskem. Disk jsem neměnil, úkol jsem dokončil ručním rozdělením disku ve stylu „vše v jednom“. Musel jsem nainstalovat ext3, protože /boot nemohl být v ext4.
Systém fungoval bez incidentů.

Druhá etapa - hledat alternativy.
Po prohrabání obsahu druhého disku jsem si uvědomil, že se jedná o úložiště s přídavnými. v balíčcích. A při pohledu na /etc/apt/sources.list jsem si uvědomil, že je třeba jej připojit do /mnt/cdrom. Ale nenašel jsem /etc/os-release. Existuje však /etc/mcst-version s obsahem 3.0-rc36. 3.0 je pravděpodobně verze - zdá se, že sedí, ale rc36? Obecně platí, že software třetích stran s největší pravděpodobností nebude schopen tuto distribuci klasickým způsobem rozpoznat.

V kořenovém oddílu mě zaujal adresář /mcst a tam jsem s potápějícím se srdcem objevil /mcst/backup. To znamená, že existuje nástroj pro zálohování a je zabudován do systému! "Skvělé," pomyslel jsem si, "podíváme se, jak to funguje!"

Ukázalo se, že existuje 4Kb bash skript /mcst/bin/backup, který zajišťuje kopírování souborů. Standardně - do adresáře /mcst/backup. Ve zdrojovém kódu jsem očekával, že uvidím příkaz rsync, ale není ve výchozí konfiguraci. Skript jednoduše zkopíruje soubory. Příkaz vypadá asi takto:

cp -rpdx <file backup> <file>

Celý soubor /mcst/bin/backup je zdeHned vás varuji, že tento skript sám o sobě k úplnému pochopení nestačí. Vytahuje funkce z /mcst/bin/source, což je něco jako knihovna funkcí. Nezahrnul jsem to (44 kB).

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

I když, možná jsem něčemu nerozuměl? Možná někdo může v komentářích vysvětlit: jak tento skript zajišťuje bezpečné a spolehlivé zálohování dat? [TBD]

rsync, mimochodem, je součástí doplňku. úložišť. Verze 3.1.3. Myslím, že použití rsync je stále lepší alternativou k aplikaci /mcst/bin/backup.

Dále jsem se rozhodl dát nový Veeam Agent pro Linux. Někdo se zeptá: „Co s tím má společného Veeam a nahrazování importu?“ Ano, není v registru, ale je certifikován FSTEC, což znamená, že v případě neexistence alternativ může být použit. Strávit patnáct minut na alternativách od registru, podařilo se mi najít 3 odkazy pro slovo „záloha“ (žádný se netýká mého dotazu na slovo „rezerva“). Nedělal jsem hloubkovou analýzu těchto programů, takže se nebudu snažit posuzovat, jak jsou vhodné pro zálohování strojů s Linuxem. Kdo potřebuje, udělá si závěr sám a podělí se o něj v komentářích.

Třetí fáze — instalace Veeam Agent pro Linux.
Veeam Agent pro Linux se tedy skládá ze dvou balíčků: modulu jádra veeamsnap (mimochodem, zdroj zde) a proprietární kód uživatelského prostoru ve formě balíčku veeam.

Při instalaci modulu jádra se vyskytl jeden malý problém - chybějící balíček dkms. Toto je služba, která vám umožňuje sestavovat moduly jádra ze zdrojového kódu. Zpravidla je k dispozici na všech distribucích deb. Musel jsem to stáhnout z deb úložiště třetí strany. Jedna věc, která mě potěšila, je, že balíček nezávisí na architektuře, takže sedí jako nativní. Proč nebyl zahrnut do seznamu dostupných balíčků, nebo spíše nebyl vyvinut [TBD]? Možná se předpokládá, že by nikdo neměl stavět a spouštět žádné moduly jádra, které nejsou MCST. Zde skutečně existuje rozpor - protože existují linuxové hlavičky. To znamená, že modul, pokud je to požadováno, lze sestavit ručně a spustit pomocí skriptu při spuštění stroje. Myslím, že byste neměli očekávat časté aktualizace od MCST [TBD].

"OK, modul je nainstalován - nejtěžší část je za námi," pomyslel jsem si... Balíček veeam pro deb repository je pro platformu amd64 a Elbrus OS má platformu x86_64 [TBD]. Rozdíl je samozřejmě pouze v názvu, ale tento rozdíl způsobuje, že téměř všechny balíčky z deb repozitářů třetích stran jsou nekompatibilní s OS Elbrus. Toto nepříjemné nedorozumění lze jednoduše odstranit: stačí balíček rozebrat, opravit informace o architektuře a dát je zpět dohromady. Jak to udělat Google to okamžitě.

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

Dalším problémem jsou závislosti. Zdá se, že potřebné soubory tam jsou, ale balíčky nejsou. Vznikl dojem, že názvy balíčků se liší od jejich „importovaných analogů“. Možná jsou knihovny zabaleny jinak. Nezacházel jsem do přílišných podrobností, odstranil jsem téměř všechny závislosti a instalace pokračovala.

Pak se objevily problémy se startovacím kódem služby. Chyběl skript /lib/init/vars.sh. Z nějakého důvodu se Elbrus obejde bez něj, takže ho také odstraníme. Dále jsme museli nahradit funkci výstupu zpráv: chyběly funkce log_daemon_msg a log_end_msg. Po prohrabání se v souboru /lib/lsb/init-functions jsem našel funkci log_success_msg - bude se nám hodit na experimenty. Mimochodem, v souboru /lib/lsb/init-functions je řádek „# Source SuSE`s rc functions“ na začátku souboru [TBD].

Po takovém hrubém zpracování balíčku se souborem byla úspěšně spuštěna záloha celého stroje na sdílenou složku NFS. Záložní připojení bylo také úspěšné. Domnívám se tedy, že pro zálohování stroje pomocí Elbrus PDK, staženého „jen tak“ bez závazků, se Veeam Agent pro Linux rozhodně hodí. I po všech úpravách s pilníkem.

Distribuční sada Elbrus OS samozřejmě není formálně podporována, protože není zahrnuta v seznamu podporovaných. Veeam Agent pro Linux na něm navíc nebyl testován oddělením QA, takže ty. chybí podpora (alespoň v době zveřejnění článku).

Doufám, že článek bude užitečný těm, kteří se snaží realizovat příkaz č. 334 ze dne 29.06.2017. června XNUMX. Moje tobě... [TBD].

Zdroj: www.habr.com

Přidat komentář