Linux Backup från Veeam på Elbrus OS. Importersättning ['?' | '.' | '!']

Hej alla.
Senaste artiklar om Habré Importsubstitution i praktiken. Del 1. Alternativ и Musiken spelade inte länge... eller hur Elbrus OS aldrig blev gratis lämnade mig inte oberörd. Jag bestämde mig för att studera denna fråga i samband med säkerhetskopieringsuppgiften. Dessutom, i den här artikeln Veeam Software-produkter nämns, vilket betyder att frågan kan vara relevant specifikt i samband med importsubstitution.

Linux Backup från Veeam på Elbrus OS. Importersättning ['?' | '.' | '!']
originalbildkälla

Först och främst bestämde jag mig för att ladda ner Elbrus OS, eller snarare, bara den tillgängliga distributionen för x86_64-arkitekturen, se hur det fungerar och försök installera Veeam Agent för Linux på det. Om du vill veta vad som kom ut av detta, se katt.

Så, en liten utvikning, om någon inte vet. "Elbrus" är så processor med ett ganska specifikt kommandosystem. Utöver det finns Elbrus OS-programvara. Och - i motsats till en vanlig missuppfattning - för att Elbrus OS ska fungera är det inte nödvändigt att ha ett hårdvarusystem baserat på Elbrus-processorn. Det finns "PDK "Elbrus" för x86" - i själva verket dök den upp i det offentliga området i form av en installationsskiva. Förresten, det finns en fotnot "PDK - plattformsutvecklingskit, utvecklarkit" - bra, det betyder att det finns åtminstone en kompilator där.

Ännu en liten påtvingad reträtt. Faktum är att jag en gång sysslade med inhemsk programvara, som MSVS och Baguette RTOS. Jag hade erfarenhet av att arbeta med inhemska komponenter, inklusive en processor från MCST. Därför kan jag med fullt ansvar säga att det finns en viss specificitet på detta område och jag kommer att försöka att inte beröra det i artikeln. När jag verkligen vill sätter jag taggen [TBD]. Så vi ska försöka klara oss utan direkt trolling och banala stön. I slutändan måste den ryska försvarsindustrin och statliga myndigheter förstås. Stort land - liten budget.. [TBD].

Noll steg - ladda ner. Det är anmärkningsvärt att nyheten att Elbrus OS har blivit tillgängligt orsakade resonans, så mycket att distributionsservern gick ner. [TBD] Tack till Yandex och ingenjören som tänkte flytta den dit. Så nedladdningshastigheten är bra.

Det första steget - installation. Jag installerade den på den första hypervisorn som var tillgänglig för fri användning. Jag tilldelade två kärnor, ett par spelningar RAM, 32 MB för video (det kommer att finnas ett grafiskt gränssnitt, trodde jag). Disken är som vanligt - 32 GB.
Jag startade installationen. Jag använde inte installationsinstruktionerna, så jag kan inte kommentera det. TUI-installationsgränssnittet är extremt minimalistiskt.

Linux Backup från Veeam på Elbrus OS. Importersättning ['?' | '.' | '!']
Bra, vi klarar oss utan en mus.

Jag klarade nästa fönster på andra försöket. Varför inte välja standardenheten sr0 [TBD] när du installerar från disk?
Välj CD-ROM-källa och gå vidare.

Linux Backup från Veeam på Elbrus OS. Importersättning ['?' | '.' | '!']

När jag valde tidszon insåg jag plötsligt att systemet använder startprocessen, och jag arbetar från TTY0.

Linux Backup från Veeam på Elbrus OS. Importersättning ['?' | '.' | '!']

OK, låt oss då klassificera "Elbrus" som en gemenskap Gamla troende[TBD]. I princip är detta bra: du behöver inte be om källkoden för att se hur nedladdningsprocessen fungerar, eftersom allt är skriptat.

Resten är nästan oviktigt: vi lägger allt och är överens. Längs vägen får vi reda på att kärnan används 3.14.79-13.84. Hmm, Debian 7 hade 3.2 [TBD].

Välj sedan standarddiskpartitioneringen och... Vi ser en varning:

Linux Backup från Veeam på Elbrus OS. Importersättning ['?' | '.' | '!']

Hmm, på något sätt klarade den automatiska partitioneringen inte bra med en 32 gig disk. Jag ändrade inte disken; jag slutförde uppdraget med manuell diskpartitionering i "allt-i-ett"-stilen. Jag var tvungen att installera ext3, eftersom /boot inte kunde vara i ext4.
Systemet kom upp utan incidenter.

Det andra steget - söka efter alternativ.
Efter att ha rotat igenom innehållet på den andra skivan insåg jag att detta är ett arkiv med ytterligare. i paket. Och när jag tittade på /etc/apt/sources.list insåg jag att den måste monteras i /mnt/cdrom. Men jag hittade inte /etc/os-release. Men det finns /etc/mcst-version med innehållet 3.0-rc36. 3.0 är förmodligen versionen - den verkar passa, men rc36? I allmänhet kommer programvara från tredje part sannolikt inte att kunna känna igen denna distribution på det klassiska sättet.

I rotpartitionen fångar katalogen /mcst mitt öga, och där, med ett sjunkande hjärta, upptäckte jag /mcst/backup. Det vill säga, det finns ett säkerhetskopieringsverktyg, och det är inbyggt i systemet! "Jättebra", tänkte jag, "låt oss se hur det här fungerar!"

Det visade sig att det finns ett 4Kb bash-skript /mcst/bin/backup som ger filkopiering. Som standard - till katalogen /mcst/backup. I källkoden förväntade jag mig att se kommandot rsync, men det är inte i standardkonfigurationen. Skriptet kopierar helt enkelt filer. Kommandot ser ut ungefär så här:

cp -rpdx <file backup> <file>

Hela filen /mcst/bin/backup finns härJag varnar dig direkt att det här manuset ensamt inte räcker för att helt förstå. Den hämtar funktioner från /mcst/bin/source, vilket är ungefär som ett bibliotek med funktioner. Jag inkluderade det inte (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

Fast jag kanske inte förstod något? Kanske kan någon förklara i kommentarerna: hur säkerställer detta skript en säker och pålitlig säkerhetskopiering av data? [TBD]

rsync, förresten, ingår i tillägget. förråd. Version 3.1.3. Jag tror att användningen av rsync fortfarande är ett bättre alternativ till /mcst/bin/backup-applikationen.

Därefter bestämde jag mig för att lägga en ny Veeam Agent för Linux. Någon kommer att fråga: "Vad har Veeam och importsubstitution att göra med det?" Ja, det finns inte i registret, men det är certifierat av FSTEC, vilket innebär att det i avsaknad av alternativ kan användas. Att lägga femton minuter på alternativ från register, jag kunde hitta 3 länkar för ordet "backup" (ingen relaterad till min fråga om ordet "reserv"). Jag har inte gjort en djupgående analys av dessa program, så jag ska inte försöka bedöma hur lämpliga de är för att säkerhetskopiera maskiner som kör Linux. Den som behöver det kommer att dra sin egen slutsats och dela den i kommentarerna.

Steg tre — installation av Veeam Agent för Linux.
Så Veeam Agent för Linux består av två paket: veeamsnap-kärnmodulen (förresten, källa här) och proprietär användarutrymmeskod i form av veeam-paketet.

Det fanns ett litet problem med att installera kärnmodulen - det saknade dkms-paketet. Detta är en tjänst som låter dig bygga kärnmoduler från källkod. Som regel finns det på alla debdistributioner. Jag var tvungen att ladda ner den från ett deb-förråd från tredje part. En sak som gjorde mig glad är att paketet inte är beroende av arkitekturen, så det passar som en infödd. Varför ingick det inte i listan över tillgängliga paket, eller snarare inte utvecklat [TBD]? Kanske antas det att ingen ska bygga och köra några icke-MCST-kärnmoduler. Det finns verkligen en diskrepans här - eftersom det finns linux-headers. Det vill säga att modulen, om så önskas, kan monteras för hand och startas av ett script när maskinen startar. Jag tror att du inte ska förvänta dig frekventa uppdateringar från MCST [TBD].

"OK, modulen är installerad - den svåraste delen är över," tänkte jag... Veeam-paketet för deb-förvaret är för amd64-plattformen, och Elbrus OS har en x86_64 [TBD]-plattform. Skillnaden ligger naturligtvis bara i namnet, men denna skillnad gör att nästan alla paket från tredjepartsdeb-lager är inkompatibla med Elbrus OS. Detta irriterande missförstånd kan helt enkelt elimineras: plocka bara isär paketet, korrigera informationen om arkitekturen och sätt ihop det igen. Hur man gör det Googlade det omedelbart.

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

Ett annat problem är beroenden. De nödvändiga filerna verkar finnas där, men paketen är det inte. Intrycket var att namnen på förpackningarna skilde sig från deras "importerade analoger". Kanske är biblioteken paketerade annorlunda. Jag gick inte in på för mycket detaljer, tog bort nästan alla beroenden och installationen gick vidare.

Sedan uppstod problem med tjänstens startkod. Skriptet /lib/init/vars.sh saknades. Av någon anledning klarar sig Elbrus utan den, så vi tar bort den också. Därefter var vi tvungna att ersätta meddelandeutgångsfunktionen: log_daemon_msg och log_end_msg funktionerna saknades. Efter att ha rotat runt i filen /lib/lsb/init-functions hittade jag funktionen log_success_msg - den kommer att vara bra för oss för experiment. Förresten, i filen /lib/lsb/init-functions finns raden "# Source SuSE:s rc-funktioner" i början av [TBD]-filen.

Efter en sådan grov bearbetning av paketet med en fil, lanserades säkerhetskopieringen av hela maskinen på NFS-resursen framgångsrikt. Säkerhetskopieringen lyckades också. Så, jag tror, ​​för att säkerhetskopiera en maskin med Elbrus PDK, laddad ner "bara sådär" utan några skyldigheter, är Veeam Agent för Linux definitivt lämplig. Även efter alla ändringar med en fil.

Naturligtvis stöds inte distributionssatsen Elbrus OS formellt, eftersom den inte ingår i listan över de som stöds. Dessutom testades inte Veeam Agent för Linux på den av QA-avdelningen, så de. det finns inget stöd (åtminstone vid tidpunkten för publicering av artikeln).

Jag hoppas att artikeln kommer att vara användbar för dem som försöker implementera order nr 334 av den 29.06.2017 juni XNUMX. Min till dig... [TBD].

Källa: will.com

Lägg en kommentar