Zálohovanie Linuxu od spoločnosti Veeam na OS Elbrus. Náhrada importu ['?" | '.' | '!']

Ahoj všetci
Posledné články o Habrém Nahradenie dovozu v praxi. Časť 1. Možnosti и Hudba nehrala dlho... alebo ako sa Elbrus OS nikdy nestal voľným nenechal ma ľahostajným. Rozhodol som sa študovať tento problém v kontexte úlohy zálohovania. Navyše v v tomto článku Spomínajú sa produkty Veeam Software, čo znamená, že problém môže byť relevantný najmä v kontexte nahrádzania dovozu.

Zálohovanie Linuxu od spoločnosti Veeam na OS Elbrus. Náhrada importu ['?" | '.' | '!']
pôvodný zdroj obrazu

V prvom rade som sa rozhodol stiahnuť si OS Elbrus, respektíve iba dostupnú distribúciu pre architektúru x86_64, pozrieť sa ako funguje a skúsiť na ňu nainštalovať Veeam Agent for Linux. Ak chcete vedieť, čo z toho vzišlo, pozrite si prosím kat.

Takže malá odbočka, ak niekto nevie. "Elbrus" je taký procesor s pomerne špecifickým systémom príkazov. Okrem neho existuje softvér Elbrus OS. A – na rozdiel od všeobecného presvedčenia – na prevádzku operačného systému Elbrus nie je potrebné mať hardvérový systém založený na procesore Elbrus. Existuje „PDK „Elbrus“ pre x86“ - v skutočnosti sa objavil vo verejnej doméne vo forme inštalačného disku. Mimochodom, je tam poznámka pod čiarou „PDK - platform development kit, developer kit“ - skvelé, to znamená, že tam je aspoň kompilátor.

Ďalší malý nútený ústup. Faktom je, že som sa kedysi zaoberal domácim softvérom, ako je MSVS a Baguette RTOS. Mal som skúsenosti s prácou s domácimi komponentmi, vrátane procesora od MCST. Preto môžem s plnou zodpovednosťou povedať, že v tejto oblasti existuje určité špecifikum a pokúsim sa ho v článku nedotknúť. Keď naozaj budem chcieť, dám štítok [TBD]. Pokúsime sa teda zaobísť bez vysloveného trollingu a banálneho nariekania. Nakoniec treba pochopiť ruský obranný priemysel a vládne agentúry. Veľká krajina – malý rozpočet.. [TBD].

Nulté štádium - Stiahnuť ▼. Je pozoruhodné, že správa o sprístupnení operačného systému Elbrus spôsobila takú rezonanciu, že distribučný server vypadol. [TBD] Ďakujem spoločnosti Yandex a inžinierovi, ktorý myslel, že to tam presunie. Rýchlosť sťahovania je teda dobrá.

prvá etapa - inštalácia. Nainštaloval som ho na prvý hypervízor, ktorý bol k dispozícii na bezplatné použitie. Pridelil som dve jadrá, pár giga RAM, 32 MB na video (myslím, že bude grafické rozhranie). Disk je ako obvykle – 32 GB.
Spustil som inštaláciu. Nepoužil som návod na inštaláciu, takže sa k nemu nemôžem vyjadriť. Inštalačné rozhranie TUI je výrazne minimalistické.

Zálohovanie Linuxu od spoločnosti Veeam na OS Elbrus. Náhrada importu ['?" | '.' | '!']
No super, vystačíme si aj s myšou.

Ďalšie okno sa mi podarilo na druhý pokus. Prečo pri inštalácii z disku nevybrať predvolené zariadenie sr0 [TBD]?
Vyberte zdroj CD-ROM a pokračujte.

Zálohovanie Linuxu od spoločnosti Veeam na OS Elbrus. Náhrada importu ['?" | '.' | '!']

Pri výbere časového pásma som si zrazu uvedomil, že systém používa init bootovací proces a ja pracujem z TTY0.

Zálohovanie Linuxu od spoločnosti Veeam na OS Elbrus. Náhrada importu ['?" | '.' | '!']

Dobre, potom klasifikujme „Elbrus“ ako komunitu Starí veriaci[TBD]. V zásade je to dobré: nemusíte žiadať o zdrojový kód, aby ste videli, ako proces sťahovania funguje, pretože všetko je napísané skriptom.

Zvyšok je takmer nedôležitý: dáme všetko a súhlasíme. Po ceste zisťujeme, že jadro je použité 3.14.79-13.84. Hmm, Debian 7 mal 3.2 [TBD].

Ďalej vyberte predvolené rozdelenie disku a... Vidíme varovanie:

Zálohovanie Linuxu od spoločnosti Veeam na OS Elbrus. Náhrada importu ['?" | '.' | '!']

Hmm, automatické rozdelenie si nejako neporadilo s 32 gig diskom. Disk som nemenil, úlohu som dokončil manuálnym rozdelením disku v štýle „všetko v jednom“. Musel som nainštalovať ext3, pretože /boot nemohol byť v ext4.
Systém fungoval bez incidentov.

Druhá etapa - hľadať alternatívy.
Po prehrabávaní sa v obsahu druhého disku som si uvedomil, že ide o úložisko s prídavnými. v balíkoch. A pri pohľade na /etc/apt/sources.list som si uvedomil, že ho treba pripojiť do /mnt/cdrom. Ale nenašiel som /etc/os-release. Existuje však /etc/mcst-version s obsahom 3.0-rc36. 3.0 je pravdepodobne verzia - zdá sa, že sedí, ale rc36? Vo všeobecnosti softvér tretích strán s najväčšou pravdepodobnosťou nebude schopný rozpoznať túto distribúciu klasickým spôsobom.

V koreňovom oddiele mi padne do oka adresár /mcst a tam som s potápajúcim sa srdcom objavil /mcst/backup. To znamená, že existuje nástroj na zálohovanie a je zabudovaný do systému! "Super," pomyslel som si, "uvidíme, ako to funguje!"

Ukázalo sa, že existuje 4Kb bash skript /mcst/bin/backup, ktorý poskytuje kopírovanie súborov. Štandardne - do adresára /mcst/backup. V zdrojovom kóde som očakával, že uvidím príkaz rsync, ale nie je v predvolenej konfigurácii. Skript jednoducho skopíruje súbory. Príkaz vyzerá asi takto:

cp -rpdx <file backup> <file>

Celý súbor /mcst/bin/backup je tuHneď vás varujem, že tento skript sám o sebe nestačí na úplné pochopenie. Sťahuje funkcie z /mcst/bin/source, čo je niečo ako knižnica funkcií. Nezahrnul som 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

Aj keď, možno som niečomu nerozumel? Možno niekto môže v komentároch vysvetliť: ako tento skript zabezpečuje bezpečné a spoľahlivé zálohovanie údajov? [TBD]

rsync, mimochodom, je súčasťou doplnku. úložiská. Verzia 3.1.3. Myslím si, že používanie rsync je stále lepšou alternatívou k aplikácii /mcst/bin/backup.

Ďalej som sa rozhodol dať nový Veeam Agent pre Linux. Niekto sa opýta: „Čo s tým má spoločné Veeam a nahradenie importu?“ Áno, nie je v registri, ale je certifikovaný FSTEC, čo znamená, že ak neexistujú alternatívy, môže byť použitý. Stráviť pätnásť minút alternatívami od registra, podarilo sa mi nájsť 3 odkazy na slovo „záloha“ (žiaden nesúvisí s mojou otázkou na slovo „rezerva“). Nerobil som hĺbkovú analýzu týchto programov, takže sa nebudem pokúšať posudzovať, nakoľko sú vhodné na zálohovanie počítačov so systémom Linux. Kto potrebuje, urobí si vlastný záver a podelí sa oň v komentároch.

tretia fáza — inštalácia Veeam Agent pre Linux.
Veeam Agent pre Linux teda pozostáva z dvoch balíkov: modulu jadra veeamsnap (mimochodom, zdroj tu) a proprietárny kód používateľského priestoru vo forme balíka veeam.

Pri inštalácii modulu jadra sa vyskytol jeden malý problém – chýbajúci balík dkms. Toto je služba, ktorá vám umožňuje zostavovať moduly jadra zo zdroja. Spravidla je k dispozícii na všetkých distribúciách deb. Musel som si ho stiahnuť z deb úložiska tretej strany. Jedna vec, ktorá ma potešila je, že balík nezávisí od architektúry, takže sedí ako natívny. Prečo nebol zahrnutý do zoznamu dostupných balíkov, alebo skôr nebol vyvinutý [TBD]? Možno sa predpokladá, že nikto by nemal zostavovať a spúšťať moduly jadra, ktoré nie sú MCST. Naozaj tu existuje rozpor - keďže existujú hlavičky linuxu. To znamená, že modul, ak je to potrebné, môže byť zostavený ručne a spustený pomocou skriptu pri spustení stroja. Myslím, že by ste od MCST [TBD] nemali očakávať časté aktualizácie.

„OK, modul je nainštalovaný – najťažšia časť je za nami,“ pomyslel som si... Balík veeam pre úložisko deb je pre platformu amd64 a operačný systém Elbrus má platformu x86_64 [TBD]. Rozdiel je, samozrejme, iba v názve, ale tento rozdiel spôsobuje, že takmer všetky balíky z deb úložísk tretích strán sú nekompatibilné s OS Elbrus. Toto nepríjemné nedorozumenie sa dá jednoducho odstrániť: stačí balík rozobrať, opraviť informácie o architektúre a dať ich späť dohromady. Ako to spraviť Vygooglite si to okamžite.

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

Ďalším problémom sú závislosti. Zdá sa, že potrebné súbory tam sú, ale balíky nie sú. Vznikol dojem, že názvy balíkov sa líšili od ich „importovaných analógov“. Možno sú knižnice zabalené inak. Nezachádzal som do prílišných podrobností, odstránil som takmer všetky závislosti a inštalácia pokračovala.

Potom sa objavili problémy so štartovacím kódom služby. Chýbal skript /lib/init/vars.sh. Z nejakého dôvodu sa Elbrus zaobíde aj bez neho, takže ho tiež odstránime. Ďalej sme museli nahradiť funkciu výstupu správ: chýbali funkcie log_daemon_msg a log_end_msg. Po prehrabávaní sa v súbore /lib/lsb/init-functions som našiel funkciu log_success_msg - bude sa nám hodiť na experimenty. Mimochodom, v súbore /lib/lsb/init-functions je riadok „# Source SuSE`s rc functions“ na začiatku súboru [TBD].

Po takomto hrubom spracovaní balíka so súborom sa úspešne spustila záloha celého stroja na zdieľanie NFS. Záložné pripojenie bolo tiež úspešné. Verím teda, že na zálohovanie stroja s Elbrus PDK stiahnutým „len tak“ bez záväzkov je Veeam Agent pre Linux určite vhodný. Aj po všetkých úpravách s pilníkom.

Distribučná súprava Elbrus OS samozrejme nie je formálne podporovaná, pretože nie je zahrnutá v zozname podporovaných. Navyše, Veeam Agent for Linux na ňom nebol testovaný oddelením QA, takže tie. neexistuje podpora (aspoň v čase publikovania článku).

Dúfam, že článok bude užitočný pre tých, ktorí sa snažia realizovať príkaz č.334 zo dňa 29.06.2017. Môj vám... [TBD].

Zdroj: hab.com

Pridať komentár