Linux-varmuuskopio Veeamista Elbrus-käyttöjärjestelmässä. Tuontikorvaus ['?' | '.' | '!']

Hei kaikki
Viimeisimmät artikkelit Habresta Tuonnin korvaaminen käytännössä. Osa 1. Vaihtoehdot и Musiikki ei soinut pitkään... tai kuinka Elbrus OS ei koskaan tullut vapaaksi ei jättänyt minua välinpitämättömäksi. Päätin tutkia tätä asiaa varmuuskopiointitehtävän yhteydessä. Lisäksi sisään tässä artikkelissa Veeam Software -tuotteet mainitaan, mikä tarkoittaa, että ongelmalla voi olla merkitystä erityisesti tuonnin korvaamisen yhteydessä.

Linux-varmuuskopio Veeamista Elbrus-käyttöjärjestelmässä. Tuontikorvaus ['?' | '.' | '!']
alkuperäinen kuvan lähde

Ensinnäkin päätin ladata Elbrus-käyttöjärjestelmän, tai pikemminkin vain saatavilla olevan jakelun x86_64-arkkitehtuurille, nähdä kuinka se toimii ja yrittää asentaa Veeam Agent for Linux -agentin siihen. Jos haluat tietää, mitä tästä tuli, katso kissa.

Eli pieni poikkeama, jos joku ei tiedä. "Elbrus" on sellainen suoritin melko erityisellä komentojärjestelmällä. Sen lisäksi on Elbrus OS -ohjelmisto. Ja - toisin kuin yleinen väärinkäsitys - Elbrus-käyttöjärjestelmän toimiminen ei edellytä Elbrus-prosessoriin perustuvaa laitteistojärjestelmää. On olemassa "PDK "Elbrus" x86: lle - itse asiassa se ilmestyi julkisesti asennuslevyn muodossa. Muuten, siellä on alaviite "PDK - alustan kehityspaketti, kehittäjäpaketti" - hienoa, se tarkoittaa, että siellä on ainakin kääntäjä.

Toinen pieni pakkoperääntyminen. Tosiasia on, että olen joskus käsitellyt kotimaisia ​​ohjelmistoja, kuten MSVS ja Baguette RTOS. Minulla oli kokemusta työskentelystä kotimaisten komponenttien kanssa, mukaan lukien MCST:n prosessori. Siksi voin sanoa täydellä vastuulla, että tällä alalla on tietty erityispiirre, ja yritän olla käsittelemättä sitä artikkelissa. Kun todella haluan, laitan tunnisteen [TBD]. Joten yritämme pärjätä ilman suoraa trollausta ja banaalia valittamista. Lopulta Venäjän puolustusteollisuus ja valtion virastot on ymmärrettävä. Suuri maa - pieni budjetti.. [TBD].

Nolla vaihe - ladata. On huomionarvoista, että uutinen Elbrus-käyttöjärjestelmän saatavuudesta aiheutti resonanssia niin paljon, että jakelupalvelin kaatui. [TBD] Kiitos Yandexille ja insinöörille, joka ajatteli siirtää sen sinne. Latausnopeus on siis hyvä.

Ensimmäisessä vaiheessa - asennus. Asensin sen ensimmäiseen hypervisoriin, joka oli saatavilla ilmaiseksi. Varasin kaksi ydintä, pari keikkaa RAM-muistia, 32 Mt videota varten (josta tulee graafinen käyttöliittymä, ajattelin). Levy on tavalliseen tapaan - 32 Gt.
Aloitin asennuksen. En käyttänyt asennusohjeita, joten en voi kommentoida sitä. TUI-asennusliittymä on erittäin minimalistinen.

Linux-varmuuskopio Veeamista Elbrus-käyttöjärjestelmässä. Tuontikorvaus ['?' | '.' | '!']
Hienoa, pärjäämme ilman hiirtä.

Seuraava ikkuna onnistui toisella yrittämällä. Mikset valitse oletuslaitetta sr0 [TBD], kun asennat levyltä?
Valitse CD-ROM-lähde ja siirry eteenpäin.

Linux-varmuuskopio Veeamista Elbrus-käyttöjärjestelmässä. Tuontikorvaus ['?' | '.' | '!']

Kun valitsin aikavyöhykettä, tajusin yhtäkkiä, että järjestelmä käyttää init boot -prosessia, ja työskentelen TTY0: sta.

Linux-varmuuskopio Veeamista Elbrus-käyttöjärjestelmässä. Tuontikorvaus ['?' | '.' | '!']

OK, luokitellaan sitten "Elbrus" yhteisöksi Vanhoja uskovia[TBD]. Periaatteessa tämä on hyvä: sinun ei tarvitse kysyä lähdekoodia nähdäksesi kuinka latausprosessi toimii, koska kaikki on käsikirjoitettu.

Muu on melkein merkityksetöntä: laitamme kaiken ja olemme samaa mieltä. Matkan varrella saamme selville, että ydin on käytössä 3.14.79-13.84. Hmm, Debian 7:ssä oli 3.2 [TBD].

Valitse seuraavaksi oletuslevyn osiointi ja... Näemme varoituksen:

Linux-varmuuskopio Veeamista Elbrus-käyttöjärjestelmässä. Tuontikorvaus ['?' | '.' | '!']

Hmm, jotenkin automaattinen osiointi ei selvinnyt hyvin 32 gigan levystä. En vaihtanut levyä; suoritin tehtävän manuaalisella levyosiolla "all-in-one"-tyylillä. Minun piti asentaa ext3, koska /boot ei voinut olla ext4:ssä.
Järjestelmä toimi ilman tapauksia.

Toisessa vaiheessa - etsi vaihtoehtoja.
Tutkittuani toisen levyn sisältöä tajusin, että tämä on arkisto, jossa on muita. paketeissa. Ja katsoessani tiedostoa /etc/apt/sources.list, tajusin, että se on asennettava kansioon /mnt/cdrom. Mutta en löytänyt /etc/os-release. Mutta on /etc/mcst-version, jonka sisältö on 3.0-rc36. 3.0 on luultavasti versio - se näyttää sopivan, mutta rc36? Yleisesti ottaen kolmannen osapuolen ohjelmistot eivät todennäköisesti pysty tunnistamaan tätä jakelua perinteisellä tavalla.

Juuriosiossa /mcst-hakemisto kiinnittää huomioni, ja sieltä vajoavalla sydämellä löysin /mcst/backup. Eli varmuuskopiointityökalu on olemassa, ja se on sisäänrakennettu järjestelmään! "Hienoa", ajattelin, "Katsotaan kuinka tämä toimii!"

Kävi ilmi, että on olemassa 4 kt:n bash-skripti /mcst/bin/backup, joka tarjoaa tiedostojen kopioinnin. Oletuksena - /mcst/backup-hakemistoon. Lähdekoodissa odotin näkeväni rsync-komennon, mutta se ei ole oletuskokoonpanossa. Skripti yksinkertaisesti kopioi tiedostoja. Komento näyttää suunnilleen tältä:

cp -rpdx <file backup> <file>

Koko tiedosto /mcst/bin/backup on täälläVaroitan sinua heti, että tämä käsikirjoitus ei yksin riitä ymmärtämään täysin. Se hakee funktioita hakemistosta /mcst/bin/source, joka on jotain funktiokirjaston kaltaista. En sisällyttänyt sitä (44 kt).

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

Ehkä en kuitenkaan ymmärtänyt jotain? Ehkä joku voi selittää kommenteissa: miten tämä skripti varmistaa turvallisen ja luotettavan tietojen varmuuskopioinnin? [TBD]

rsync, muuten, sisältyy lisäosaan. arkistot. Versio 3.1.3. Mielestäni rsyncin käyttö on edelleen parempi vaihtoehto /mcst/bin/backup-sovellukselle.

Seuraavaksi päätin laittaa uuden Veeam Agent Linuxille. Joku kysyy: "Mitä tekemistä Veeamilla ja tuontikorvauksella on sen kanssa?" Kyllä, se ei ole rekisterissä, mutta se on FSTEC:n sertifioima, mikä tarkoittaa, että vaihtoehtojen puuttuessa sitä voidaan käyttää. Vietät viisitoista minuuttia vaihtoehtoihin alkaen rekisteri, Löysin 3 linkkiä sanalle "varmuuskopio" (ei mikään liittynyt kysymykseeni sanasta "reservi"). En ole tehnyt syvällistä analyysiä näistä ohjelmista, joten en yritä arvioida niiden soveltuvuutta Linuxia käyttävien koneiden varmuuskopiointiin. Se, joka sitä tarvitsee, tekee omat johtopäätöksensä ja jakaa sen kommenteissa.

Kolmas vaihe — Veeam Agentin asennus Linuxille.
Joten Veeam Agent for Linux koostuu kahdesta paketista: veeamsnap-ydinmoduulista (muuten, lähde täällä) ja oma käyttäjätilakoodi veeam-paketin muodossa.

Ydinmoduulin asennuksessa oli yksi pieni ongelma - puuttuva dkms-paketti. Tämä on palvelu, jonka avulla voit rakentaa ydinmoduuleja lähdekoodista. Pääsääntöisesti se on saatavilla kaikissa deb-jakeluissa. Minun piti ladata se kolmannen osapuolen deb-varastosta. Yksi asia, joka teki minut iloiseksi, on se, että paketti ei riipu arkkitehtuurista, joten se sopii kuin natiivi. Miksi sitä ei sisällytetty saatavilla olevien pakettien luetteloon, tai pikemminkin sitä ei kehitetty [TBD]? Ehkä oletetaan, että kenenkään ei pitäisi rakentaa ja käyttää muita kuin MCST-ytimen moduuleja. Tässä on todellakin ristiriita - koska on linux-otsikoita. Toisin sanoen moduuli voidaan haluttaessa koota käsin ja käynnistää komentosarjalla koneen käynnistyessä. Mielestäni sinun ei pitäisi odottaa toistuvia päivityksiä MCST:ltä [TBD].

"OK, moduuli on asennettu - vaikein osa on ohi", ajattelin... Deb-varaston veeam-paketti on amd64-alustalle, ja Elbrus-käyttöjärjestelmässä on x86_64 [TBD]-alusta. Ero on tietysti vain nimessä, mutta tämä ero tekee lähes kaikista kolmannen osapuolen deb-tietovarastoista peräisin olevista paketeista yhteensopimattomia Elbrus-käyttöjärjestelmän kanssa. Tämä ärsyttävä väärinkäsitys voidaan poistaa yksinkertaisesti: pura paketti, korjaa tiedot arkkitehtuurista ja koota se takaisin. Kuinka tehdä se Googletti sen välittömästi.

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

Toinen ongelma on riippuvuudet. Tarvittavat tiedostot näyttävät olevan siellä, mutta paketteja ei ole. Vaikutelma oli, että pakkausten nimet poikkesivat niiden "tuoduista analogeista". Ehkä kirjastot on pakattu eri tavalla. En mennyt liian yksityiskohtiin, poistin melkein kaikki riippuvuudet ja asennus eteni.

Sitten ilmeni ongelmia palvelun aloituskoodin kanssa. Komentosarja /lib/init/vars.sh puuttui. Jostain syystä Elbrus pärjää ilman sitä, joten poistamme myös sen. Seuraavaksi jouduimme korvaamaan viestitulostusfunktion: log_daemon_msg- ja log_end_msg-funktiot puuttuivat. Tutkittuani /lib/lsb/init-functions-tiedostoa löysin log_success_msg-funktion - se on hyvä meille kokeisiin. Muuten, /lib/lsb/init-functions-tiedostossa rivi "# Source SuSE`s rc functions" on [TBD]-tiedoston alussa.

Paketin karkean käsittelyn jälkeen tiedostolla NFS-jaon koko koneen varmuuskopiointi käynnistettiin onnistuneesti. Myös varakiinnitys onnistui. Joten uskon, että Veeam Agent for Linux on ehdottomasti sopiva koneen varmuuskopiointiin Elbrus PDK:lla, joka on ladattu "juuri niin" ilman velvoitteita. Jopa kaikkien tiedostoon tehtyjen muutosten jälkeen.

Tietenkään Elbrus OS -jakelusarjaa ei tueta virallisesti, koska se ei sisälly tuettujen luetteloon. Lisäksi laadunvarmistusosasto ei testannut Veeam Agent for Linuxia sillä, joten ne. tukea ei ole (ainakaan artikkelin julkaisuhetkellä).

Toivon, että artikkelista on hyötyä niille, jotka yrittävät toteuttaa 334. kesäkuuta 29.06.2017 annettua määräystä nro XNUMX. Minun sinulle... [TBD].

Lähde: will.com

Lisää kommentti