Linux biztonsági mentés a Veeam-től Elbrus operációs rendszeren. Import helyettesítés ['?' | '.' | '!']

Üdvözlet mindenkinek.
Friss cikkek Habréról Importhelyettesítés a gyakorlatban. 1. rész. Opciók и A zene nem szólt sokáig... vagy hogy az Elbrus OS soha nem vált szabaddá nem hagyott közömbösen. Úgy döntöttem, hogy ezt a kérdést a biztonsági mentési feladattal összefüggésben tanulmányozom. Ráadásul be ezt a cikket A Veeam Software termékek említésre kerülnek, ami azt jelenti, hogy a probléma kifejezetten az import helyettesítéssel összefüggésben lehet releváns.

Linux biztonsági mentés a Veeam-től Elbrus operációs rendszeren. Import helyettesítés ['?' | '.' | '!']
eredeti képforrás

Először is úgy döntöttem, hogy letöltöm az Elbrus operációs rendszert, vagy inkább csak az x86_64 architektúrához elérhető disztribúciót, megnézem, hogyan működik, és megpróbálom telepíteni rá a Veeam Agent for Linuxot. Ha tudni szeretné, mi sült ki ebből, kérjük, nézze meg a macskát.

Szóval egy kis kitérő, ha valaki nem tudná. Az "Elbrus" ilyen feldolgozó meglehetősen sajátos parancsrendszerrel. Ezen kívül van Elbrus OS szoftver. És - a közhiedelemmel ellentétben - az Elbrus OS működtetéséhez nem szükséges Elbrus processzorra épülő hardverrendszer. Létezik „PDK „Elbrus” az x86-hoz – valójában egy telepítőlemez formájában jelent meg a nyilvánosság számára. Egyébként van egy lábjegyzet: „PDK - platformfejlesztői készlet, fejlesztői készlet” – remek, ez azt jelenti, hogy ott legalább van egy fordító.

Újabb kis kényszerű visszavonulás. Az tény, hogy valamikor hazai szoftverekkel foglalkoztam, mint például az MSVS és a Baguette RTOS. Volt tapasztalatom hazai alkatrészekkel, köztük egy MCST processzorral. Ezért teljes felelősséggel kijelenthetem, hogy van egy bizonyos sajátosság ezen a területen, és megpróbálom nem érinteni a cikkben. Amikor nagyon akarom, felteszem a [TBD] címkét. Tehát megpróbáljuk elkerülni a nyílt trollkodást és a banális nyögdécselést. Végül is meg kell érteni az orosz védelmi ipart és a kormányzati szerveket. Nagy ország – kis költségvetés.. [TBD].

Nulladik szakasz - Letöltés. Figyelemre méltó, hogy az Elbrus operációs rendszer elérhetővé válásának híre olyan visszhangot váltott ki, hogy a terjesztési szerver leállt. [TBD] Köszönet a Yandexnek és a mérnöknek, aki arra gondolt, hogy áthelyezi. Szóval jó a letöltési sebesség.

Az első szakasz - telepítés. Feltelepítettem az első ingyenesen használható hypervisorra. Kiosztottam két magot, pár giga RAM-ot, 32 MB-ot videóra (lesz grafikus felület, gondoltam). A lemez a szokásos módon - 32 GB.
Elkezdtem a telepítést. Nem használtam a telepítési útmutatót, így nem tudok róla nyilatkozni. A TUI telepítési felülete erősen minimalista.

Linux biztonsági mentés a Veeam-től Elbrus operációs rendszeren. Import helyettesítés ['?' | '.' | '!']
Remek, megbírjuk egér nélkül is.

Második próbálkozásra sikerült a következő ablak. Miért nem az alapértelmezett sr0 [TBD] eszközt választja lemezről történő telepítéskor?
Válassza ki a CD-ROM forrást, és lépjen tovább.

Linux biztonsági mentés a Veeam-től Elbrus operációs rendszeren. Import helyettesítés ['?' | '.' | '!']

Az időzóna kiválasztása közben hirtelen rájöttem, hogy a rendszer az init rendszerindítási folyamatot használja, és TTY0-ról dolgozom.

Linux biztonsági mentés a Veeam-től Elbrus operációs rendszeren. Import helyettesítés ['?' | '.' | '!']

Rendben, akkor soroljuk be az „Elbrust” a közösségek közé Régi hívők[TBD]. Ez elvileg jó: nem kell forráskódot kérni ahhoz, hogy megnézzük, hogyan működik a letöltés, hiszen minden scriptelve van.

A többi szinte lényegtelen: mindent feltesszük és megegyezünk. Útközben megtudjuk, hogy a kernelt 3.14.79-13.84 használják. Hmm, a Debian 7-ben 3.2 [TBD] volt.

Ezután válassza ki az alapértelmezett lemezparticionálást, és... Figyelmeztetést látunk:

Linux biztonsági mentés a Veeam-től Elbrus operációs rendszeren. Import helyettesítés ['?' | '.' | '!']

Hmm, az automatikus particionálás valahogy nem bírt jól egy 32 gigás lemezzel. Nem cseréltem le a lemezt; a küldetést kézi lemezparticionálással „mindent az egyben” stílusban teljesítettem. Az ext3-at kellett telepítenem, mivel a /boot nem lehetett az ext4-ben.
A rendszer incidens nélkül jött létre.

A második szakasz - alternatívák keresése.
Miután áttúrtam a második lemez tartalmát, rájöttem, hogy ez egy tárhely további kiegészítőkkel. csomagokban. És az /etc/apt/sources.list fájlt nézve rájöttem, hogy az /mnt/cdrom könyvtárba kell csatolni. De nem találtam /etc/os-release. De van az /etc/mcst-version 3.0-rc36 tartalommal. Valószínűleg a 3.0 a verzió – úgy tűnik, hogy megfelel, de az rc36? Általánosságban elmondható, hogy a harmadik féltől származó szoftverek valószínűleg nem fogják tudni felismerni ezt a terjesztést a klasszikus módon.

A gyökérpartícióban megakad a szemem a /mcst könyvtáron, és ott süllyedő szívvel fedeztem fel az /mcst/backup-ot. Vagyis van egy biztonsági mentési eszköz, és be van építve a rendszerbe! „Remek” – gondoltam –, lássuk, hogyan működik ez!

Kiderült, hogy létezik egy 4Kb-os bash script /mcst/bin/backup, amely fájlmásolást biztosít. Alapértelmezés szerint a /mcst/backup könyvtárba. A forráskódban az rsync parancsot vártam, de nem az alapértelmezett konfigurációban. A szkript egyszerűen másolja a fájlokat. A parancs valahogy így néz ki:

cp -rpdx <file backup> <file>

A teljes /mcst/bin/backup fájl itt találhatóAzonnal figyelmeztetem, hogy ez a forgatókönyv önmagában nem elég a teljes megértéshez. A függvényeket a /mcst/bin/source állományból vonja be, ami olyan, mint egy függvénykönyvtár. Nem tettem bele (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

Bár lehet, hogy nem értettem valamit? Esetleg valaki el tudja magyarázni a megjegyzésekben: hogyan biztosítja ez a szkript a biztonságos és megbízható adatmentést? [TBD]

Az rsync egyébként benne van a kiegészítőben. adattárak. 3.1.3 verzió. Szerintem az rsync használata még mindig jobb alternatíva a /mcst/bin/backup alkalmazással szemben.

Ezután úgy döntöttem, hogy teszek egy frisset Veeam Agent Linuxhoz. Valaki megkérdezi: "Mi köze van a Veeam-nek és az importhelyettesítésnek?" Igen, nincs benne a nyilvántartásban, de FSTEC tanúsítvánnyal rendelkezik, ami azt jelenti, hogy alternatívák hiányában használható. Tizenöt percet tölt az alternatívákra Iktató hivatal, 3 linket találtam a „tartalék” szóhoz (egyik sem kapcsolódik a „tartalék” szóra vonatkozó kérdésemhez). Nem végeztem mélyreható elemzést ezekről a programokról, így nem próbálom megítélni, mennyire alkalmasak Linuxot futtató gépek biztonsági mentésére. Akinek szüksége van rá, az levonja a következtetést, és megosztja kommentben.

Stage három — a Veeam Agent for Linux telepítése.
Tehát a Veeam Agent for Linux két csomagból áll: a veeamsnap kernel modulból (mellesleg, forrás itt) és a szabadalmaztatott felhasználói térkód a veeam csomag formájában.

Egy apró probléma volt a kernelmodul telepítésével – a hiányzó dkms csomag. Ez egy olyan szolgáltatás, amely lehetővé teszi a kernelmodulok forrásból történő felépítését. Általános szabály, hogy minden deb disztribúción elérhető. Le kellett töltenem egy harmadik fél deb repositoryjából. Egy dolog boldoggá tett, hogy a csomag nem függ az architektúrától, így illeszkedik, mint egy natív. Miért nem került fel az elérhető csomagok listájára, vagy inkább nem fejlesztették ki [TBD]? Talán azt feltételezik, hogy senkinek nem szabad nem MCST-kernelmodulokat készítenie és futtatnia. Valóban van itt eltérés – mivel vannak linux fejlécek. Vagyis a modult kívánság szerint kézzel is össze lehet rakni, és a gép indulásakor egy script segítségével elindítani. Szerintem ne számíts gyakori frissítésekre az MCST-től [TBD].

„Rendben, a modul telepítve van – a legnehezebb része véget ért” – gondoltam... A deb repository-hoz tartozó veeam csomag amd64 platformra való, az Elbrus operációs rendszer pedig x86_64 [TBD] platformmal rendelkezik. A különbség természetesen csak a névben rejlik, de ez a különbség szinte az összes, harmadik féltől származó deb repository-ból származó csomagot nem kompatibilis az Elbrus operációs rendszerrel. Ez a bosszantó félreértés egyszerűen kiküszöbölhető: csak szét kell szedni a csomagot, kijavítani az architektúrára vonatkozó információkat, majd összerakni. Hogyan kell csinálni a Google-lal azonnal.

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

Egy másik probléma a függőségek. Úgy tűnik, hogy a szükséges fájlok megvannak, de a csomagok nincsenek. Az volt a benyomás, hogy a csomagok neve eltér az „importált analógjaiktól”. Lehet, hogy a könyvtárak másképp vannak csomagolva. Nem mentem bele a részletekbe, szinte minden függőséget eltávolítottam, és ment a telepítés.

Ezután problémák merültek fel a szolgáltatás indítókódjával. A /lib/init/vars.sh szkript hiányzott. Valamiért az Elbrus nélküle is elboldogul, ezért azt is eltávolítjuk. Ezután le kellett cserélnünk az üzenetkimeneti függvényt: a log_daemon_msg és a log_end_msg függvények hiányoztak. A /lib/lsb/init-functions fájlban való turkálás után megtaláltam a log_success_msg függvényt - ez jó lesz nekünk a kísérletekhez. Egyébként a /lib/lsb/init-functions fájlban a „# Source SuSE`s rc functions” sor a [TBD] fájl elején található.

A csomag ilyen durva feldolgozása után egy fájllal sikeresen elindult a teljes gépre vonatkozó biztonsági mentés az NFS-megosztáson. A tartalék rögzítés is sikeres volt. Úgy gondolom tehát, hogy egy gép biztonsági mentésére az Elbrus PDK-val, amelyet „csak úgy” töltöttek le minden kötelezettség nélkül, a Veeam Agent for Linux mindenképpen alkalmas. Még az összes fájllal végzett módosítás után is.

Természetesen az Elbrus OS disztribúciós készlet formálisan nem támogatott, mivel nem szerepel a támogatottak listáján. Ráadásul a Veeam Agent for Linuxot nem tesztelte rajta a minőségbiztosítási osztály, így azok. nincs támogatás (legalábbis a cikk megjelenésekor).

Remélem, hogy a cikk hasznos lesz azoknak, akik megpróbálják végrehajtani a 334. június 29.06.2017-i XNUMX-es rendeletet. Az enyém neked... [TBD].

Forrás: will.com

Hozzászólás