Linux Backup vu Veeam op Elbrus OS. Import Substitutioun ['?' | '.' | '!']

Salut alleguer.
Rezent Artikelen iwwer Habré Import Substitutioun an der Praxis. Deel 1. Optiounen и D'Musek huet net laang gespillt ... oder wéi den Elbrus OS ni fräi gouf huet mech net egal gelooss. Ech hu beschloss dëst Thema am Kontext vun der Backuptask ze studéieren. Ausserdeem, an dësen Artikel Veeam Software Produkter ginn ernimmt, dat heescht datt d'Thema speziell am Kontext vun der Importsubstitutioun relevant ka sinn.

Linux Backup vu Veeam op Elbrus OS. Import Substitutioun ['?' | '.' | '!']
original Bild Quell

Als éischt hunn ech décidéiert den Elbrus OS erofzelueden, oder éischter, nëmmen déi verfügbar Verdeelung fir d'x86_64 Architektur, kuckt wéi et funktionnéiert, a probéiert Veeam Agent fir Linux drop z'installéieren. Wann Dir wësse wëllt wat aus dësem erauskomm ass, kuckt w.e.g. Kaz.

Also, eng kleng Digression, am Fall wou een et net weess. "Elbrus" ass esou Prozessor mat engem zimlech spezifesche Kommandosystem. Zousätzlech dozou gëtt et Elbrus OS Software. An - am Géigesaz zum populäre Glawen - fir den Elbrus OS ze bedreiwen, ass et net néideg en Hardwaresystem ze hunn baséiert op dem Elbrus Prozessor. Et gëtt "PDK "Elbrus" fir x86" - tatsächlech erschéngt et am Domaine public a Form vun enger Installatiounsdisk. Iwwregens gëtt et eng Foussnote "PDK - Plattform Entwécklung Kit, Entwéckler Kit" - super, dat heescht datt et op d'mannst e Compiler do ass.

Eng aner kleng gezwongen Réckzuch. D'Tatsaach ass datt ech eemol mat Haussoftware beschäftegt hunn, wéi MSVS a Baguette RTOS. Ech hat Erfahrung mat Gewalt Komponente schaffen, dorënner engem Prozessor aus MCST. Dofir kann ech mat voller Verantwortung soen datt et eng gewësse Spezifizitéit an dësem Beräich ass an ech probéieren et net am Artikel ze beréieren. Wann ech wierklech wëll, setzen ech den Tag [TBD]. Also wäerte mir probéieren ouni direkt Trolling a banal Stéierungen ze maachen. Um Enn mussen d'russesch Verteidegungsindustrie a Regierungsagenturen verstane ginn. Grousst Land - klenge Budget .. [TBD].

Null Etapp - eroflueden. Et ass bemierkenswäert datt d'Nouvelle datt den Elbrus OS verfügbar ass eng Resonanz verursaacht huet, sou vill datt de Verdeelungsserver erofgaang ass. [TBD] Merci un Yandex an dem Ingenieur deen geduecht huet et dohinner ze plënneren. Also d'Downloadgeschwindegkeet ass gutt.

Déi éischt Stuf - Installatioun. Ech hunn et op den éischten Hypervisor installéiert, dee gratis benotzt gouf. Ech hunn zwee Kären zougewisen, e puer Optrëtter vum RAM, 32 MB fir Video (et gëtt eng grafesch Interface, hunn ech geduecht). D'Disk ass wéi gewinnt - 32 GB.
Ech hunn d'Installatioun ugefaangen. Ech hunn d'Installatiounsinstruktiounen net benotzt, also kann ech et net kommentéieren. D'TUI Installatioun Interface ass schwéier minimalistesch.

Linux Backup vu Veeam op Elbrus OS. Import Substitutioun ['?' | '.' | '!']
Gutt, mir kënnen ouni Maus maachen.

Ech hunn déi nächst Fënster op der zweeter Versuch gelongen. Firwat wielt net de Standardapparat sr0 [TBD] wann Dir vun der Disk installéiert?
Wielt d'CD-Rom Quell a fuert weider.

Linux Backup vu Veeam op Elbrus OS. Import Substitutioun ['?' | '.' | '!']

Wärend der Zäitzone auswielen, hunn ech op eemol gemierkt datt de System den Init Bootprozess benotzt, an ech schaffen vun TTY0.

Linux Backup vu Veeam op Elbrus OS. Import Substitutioun ['?' | '.' | '!']

OK, da loosst eis "Elbrus" als Gemeinschaft klassifizéieren Al Gleeweger[TBD]. Am Prinzip ass dëst gutt: Dir musst net de Quellcode froen fir ze kucken wéi den Downloadprozess funktionnéiert, well alles ass scripted.

De Rescht ass bal onwichteg: mir setzen alles an averstanen. Ënnerwee fanne mir eraus datt de Kernel 3.14.79-13.84 benotzt gëtt. Hmm, Debian 7 hat 3.2 [TBD].

Als nächst wielt d'Standarddiskpartitionéierung an ... Mir gesinn eng Warnung:

Linux Backup vu Veeam op Elbrus OS. Import Substitutioun ['?' | '.' | '!']

Hmm, iergendwéi huet d'automatesch Partitionéierung net gutt mat enger 32 Gig Disk gepackt. Ech hunn d'Disk net geännert; Ech hunn d'Quest mat manueller Diskpartitionéierung am "All-in-One" Stil ofgeschloss. Ech hu missen ext3 installéieren, well /boot konnt net an ext4 sinn.
De System koum ouni Tëschefall op.

Déi zweet Stuf - Sich no Alternativen.
Nodeems ech d'Inhalter vun der zweeter Disk geraumt hunn, hunn ech gemierkt datt dëst e Repository mat zousätzlech ass. a Packagen. A kuckt op /etc/apt/sources.list, hunn ech gemierkt datt et an /mnt/cdrom muss montéiert ginn. Awer ech hunn /etc/os-release net fonnt. Awer et gëtt /etc/mcst-Versioun mat dem Inhalt 3.0-rc36. 3.0 ass wahrscheinlech d'Versioun - et schéngt ze passen, awer rc36? Am Allgemengen, wäert Drëtt Partei Software héchstwahrscheinlech dës Verdeelung op déi klassesch Manéier net erkennen.

An der Root-Partition fënnt den /mcst Verzeichnis meng Aen, an do, mat engem ënnerzegoen Häerz, hunn ech /mcst/backup entdeckt. Dat ass, et gëtt e Backup-Tool, an et ass an de System agebaut! "Ganz", hunn ech geduecht, "loosst eis kucken wéi dat funktionnéiert!"

Et huet sech erausgestallt datt et e 4Kb Bash-Skript /mcst/bin/Backup gëtt deen d'Dateikopéierung ubitt. Par défaut - an den /mcst/backup Verzeechnes. Am Quellcode hunn ech erwaart de Kommando rsync ze gesinn, awer et ass net an der Standardkonfiguratioun. De Skript kopéiert einfach Dateien. De Kommando gesäit sou eppes aus:

cp -rpdx <file backup> <file>

Déi ganz Datei /mcst/bin/backup ass heiEch warnen Iech direkt datt dëst Skript eleng net genuch ass fir voll ze verstoen. Et zitt Funktiounen aus /mcst/bin/source, wat eppes ass wéi eng Bibliothéik vu Funktiounen. Ech hunn et net abegraff (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

Obwuel, vläicht hunn ech eppes net verstanen? Vläicht kann iergendeen an de Kommentaren erklären: wéi garantéiert dëse Skript eng sécher an zouverléisseg Datebackup? [TBD]

rsync, iwwregens, ass am Add-on abegraff. Repositories. Versioun 3.1.3. Ech denken datt d'Benotzung vun rsync nach ëmmer eng besser Alternativ zu der /mcst/bin/Backup Applikatioun ass.

Als nächst hunn ech decidéiert eng frësch ze setzen Veeam Agent fir Linux. Eppes wäert froen: "Wat huet Veeam an Importsubstitutioun domat ze maachen?" Jo, et ass net am Register, awer et ass vun FSTEC zertifizéiert, dat heescht datt et an der Verontreiung vun Alternativen benotzt ka ginn. Ausgaben fofzéng Minutten op Alternativen aus Enregistrement, Ech konnt 3 Linken fir d'Wuert "Backup" fannen (keen am Zesummenhang mat menger Fro fir d'Wuert "Reserve"). Ech hunn keng déif Analyse vun dëse Programmer gemaach, also wäert ech net probéieren ze beurteelen wéi gëeegent si fir Backup vun Maschinnen mat Linux lafen. Wien et brauch, deen seng eege Conclusioun zéien an se an de Kommentaren deelen.

Stage Three - Installatioun vum Veeam Agent fir Linux.
Also, Veeam Agent fir Linux besteet aus zwee Packagen: de veeamsnap Kernel Modul (iwwregens, Quell hei) a propriétaire Benotzerraumcode a Form vum veeam Package.

Et gouf e klenge Problem mat der Installatioun vum Kernelmodul - de fehlenden dkms Package. Dëst ass e Service deen Iech erlaabt Kernel Moduler aus der Quell ze bauen. Als Regel ass et op all Deb Verdeelungen verfügbar. Ech hu missen et vun engem Drëtt Partei Deb Repository eroflueden. Eng Saach déi mech glécklech gemaach huet ass datt de Package net vun der Architektur hänkt, also passt et wéi eng gebierteg. Firwat war et net an der Lëscht vun verfügbare Packagen abegraff, oder éischter, net entwéckelt [TBD]? Vläicht gëtt ugeholl datt keen net-MCST Kernel Moduler bauen an ausféieren. Et gëtt wierklech eng Diskrepanz hei - well et Linux-Header gëtt. Dat ass, de Modul, wann Dir wëllt, kann mat der Hand zesummegesat ginn a vun engem Skript lancéiert ginn wann d'Maschinn ufänkt. Ech mengen Dir sollt net dacks Updates vu MCST [TBD] erwaarden.

"OK, de Modul ass installéiert - den haardsten Deel ass eriwwer", hunn ech geduecht ... De veeam Package fir den Deb Repository ass fir d'amd64 Plattform, an d'Elbrus OS huet eng x86_64 [TBD] Plattform. Den Ënnerscheed ass natierlech nëmmen am Numm, awer dësen Ënnerscheed mécht bal all Packagen vun Drëtt Partei Deb Repositories inkompatibel mam Elbrus OS. Dëst lästeg Mëssverständnis kann einfach eliminéiert ginn: einfach de Package ofbauen, d'Informatioun iwwer d'Architektur korrigéieren an erëm zesummesetzen. Wéi et ze maachen Googlet et direkt.

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

En anere Problem ass Ofhängegkeet. Déi néideg Dateie schéngen do ze sinn, awer d'Packagen sinn net. Den Androck war datt d'Nimm vun de Packagen vun hiren "importéierten Analoga" ënnerscheeden. Vläicht sinn d'Bibliothéike anescht verpackt. Ech sinn net ze vill Detailer gaang, bal all Ofhängegkeete geläscht, an d'Installatioun ass viru gaangen.

Dunn sinn Probleemer mam Startcode vum Service entstanen. De Skript /lib/init/vars.sh fehlt. Aus e puer Grënn geréiert den Elbrus et ouni, also wäerte mir et och ewechhuelen. Als nächst musse mir d'Messageausgangsfunktioun ersetzen: d'log_daemon_msg a log_end_msg Funktiounen fehlen. Nodeems ech an der Datei /lib/lsb/init-functions geraumt hunn, hunn ech d'log_success_msg Funktioun fonnt - et wäert gutt fir eis fir Experimenter sinn. Iwwregens, an der /lib/lsb/init-functions Datei ass d'Linn "# Source SuSE's rc functions" um Ufank vun der [TBD] Datei.

No sou enger rauer Veraarbechtung vum Package mat enger Datei, gouf de ganze Maschinn Backup op der NFS Share erfollegräich gestart. De Backup Mount war och erfollegräich. Also, ech gleewen datt fir eng Maschinn mat der Elbrus PDK ze backen, "just esou" erofgelueden ouni Obligatiounen, Veeam Agent fir Linux ass definitiv gëeegent. Och no all Ännerungen mat engem Fichier.

Natierlech gëtt den Elbrus OS Verdeelungskit net formell ënnerstëtzt, well et net an der Lëscht vun ënnerstëtzten abegraff ass. Ausserdeem gouf de Veeam Agent fir Linux net vun der QA Departement getest, also déi. et gëtt keng Ënnerstëtzung (op d'mannst zum Zäitpunkt vun der Verëffentlechung vum Artikel).

Ech hoffen den Artikel wäert nëtzlech sinn fir déi, déi probéieren d'Bestellung Nr 334 vum 29.06.2017. Juni XNUMX ëmzesetzen. Meng fir Iech ... [TBD].

Source: will.com

Setzt e Commentaire