Linux Backup kubva kuVeeam paElbrus OS. Kupinza kunze ['?' | '.' | '!']

Mhoroi munhu wese.
Zvichangoburwa zvinyorwa zveHabré Import substitution mukuita. Chikamu 1. Sarudzo и Mimhanzi haina kutamba kwenguva yakareba ... kana kuti Elbrus OS haina kumbosununguka sei hazvina kundisiya ndisina hanya. Ndakasarudza kudzidza nyaya iyi mumamiriro ezvinhu ekuchengetedza basa. Uyezve, mu ichi chinyorwa Veeam Software zvigadzirwa zvakataurwa, zvinoreva kuti nyaya yacho inogona kunge yakakosha mumamiriro ezvinhu ekuchinjanisa.

Linux Backup kubva kuVeeam paElbrus OS. Kupinza kunze ['?' | '.' | '!']
original image source

Chekutanga pane zvese, ndakafunga kudhawunirodha iyo Elbrus OS, kana kuti, chete kugoverwa kuripo kweiyo x86_64 architecture, ona kuti inoshanda sei, uye edza kuisa Veeam Agent yeLinux pairi. Kana iwe uchida kuziva zvakabuda mune izvi, ndapota ona katsi.

Saka, diki digression, kana mumwe munhu asingazivi. "Elbrus" akadaro CPU ine yakasarudzika system yekuraira. Pamusoro payo, kune Elbrus OS software. Uye - zvinopesana nemafungiro asina kunaka - kuti Elbrus OS ishande, hazvidikanwi kuva ne hardware system inobva paElbrus processor. Pane "PDK "Elbrus" ye x86" - kutaura zvazviri, yakaonekwa munharaunda yeruzhinji nenzira yekuisa disk. Nenzira, kune chinyorwa chepasi "PDK - chikuva chekuvandudza kit, yekuvandudza kit" - yakanaka, zvinoreva kuti pane angangoita compiler ipapo.

Imwe diki yekumanikidzwa kudzoka. Chokwadi ndechekuti ndakambobata nesoftware yemumba, senge MSVS neBaguette RTOS. Ndakanga ndine ruzivo rwekushanda nemidziyo yemumba, kusanganisira processor kubva kuMCST. Naizvozvo, ndinogona kutaura nemutoro wakazara kuti pane humwe hunhu munzvimbo ino uye ini ndichaedza kusabata pairi muchinyorwa. Pandinoda chaizvo, ndinoisa iyo tag [TBD]. Saka isu tichaedza kuita pasina kutsika-tsika uye banal moaning. Pakupedzisira, indasitiri yekudzivirira yeRussia uye masangano ehurumende anoda kunzwisiswa. Nyika huru - bhajeti diki.. [TBD].

Zero stage - download. Zvinokosha kuziva kuti nhau dzekuti Elbrus OS yave kuwanikwa dzakakonzera ruzha, zvekuti sevha yekugovera yakadzika. [TBD] Kutenda kuYandex uye injiniya akafunga kuiendesa ikoko. Saka kumhanya kwekurodha kwakanaka.

Nzvimbo yekutanga - kuiswa. Ndakaiisa pane yekutanga hypervisor yaivepo yemahara kushandiswa. Ndakagovera macores maviri, akati wandei e RAM, 32 MB yevhidhiyo (pachave neiyo graphical interface, ndakafunga). Iyo dhisiki seyakajairika - 32 GB.
Ndakatanga kuisa. Ini handina kushandisa mirairo yekuisa, saka handigone kutaura nezvazvo. Iyo TUI yekuisa interface yakanyanya minimalistic.

Linux Backup kubva kuVeeam paElbrus OS. Kupinza kunze ['?' | '.' | '!']
Zvakanaka, zvakanaka, tinogona kuita pasina mbeva.

Ndakakwanisa hwindo rinotevera pakuedza kwechipiri. Wadii kusarudza iyo default mudziyo sr0 [TBD] paunenge uchiisa kubva kudhisiki?
Sarudza kunobva CD-ROM woenderera mberi.

Linux Backup kubva kuVeeam paElbrus OS. Kupinza kunze ['?' | '.' | '!']

Ndichiri kusarudza nguva yenguva, ndakaerekana ndaona kuti sisitimu inoshandisa init boot process, uye ndiri kushanda kubva kuTTY0.

Linux Backup kubva kuVeeam paElbrus OS. Kupinza kunze ['?' | '.' | '!']

Zvakanaka, saka ngatiise "Elbrus" senharaunda Vatendi Vakwegura[TBD]. Muchidimbu, izvi zvakanaka: haufanire kubvunza iyo kodhi kodhi kuti uone kuti iyo yekurodha inoshanda sei, sezvo zvese zvakanyorwa.

Zvimwe zvacho zvinenge zvisingakoshi: tinoisa zvose uye tinobvumirana. Tiri munzira, tinoona kuti kernel inoshandiswa 3.14.79-13.84. Hmm, Debian 7 yaive ne3.2 [TBD].

Zvadaro, sarudza iyo default disk partitioning uye ... Tinoona yambiro:

Linux Backup kubva kuVeeam paElbrus OS. Kupinza kunze ['?' | '.' | '!']

Hmm, neimwe nzira iyo otomatiki partitioning haina kuita zvakanaka ne32 gig disk. Ini handina kushandura dhisiki; Ndakapedza kuda nemanyorero disk partitioning mune "zvese-mu-imwe" maitiro. Ndaifanira kuisa ext3, sezvo / boot yaisagona kuva mu ext4.
Iyo system yakauya pasina chiitiko.

Chikamu chechipiri - tsvaga dzimwe nzira.
Mushure mekupenengura zviri mukati medhisiki yechipiri, ndakaona kuti iyi inzvimbo ine zvimwe. mumapakeji. Uye kutarisa pa /etc/apt/sources.list, ndakaona kuti inoda kuiswa mukati /mnt/cdrom. Asi ini handina kuwana /etc/os-release. Asi pane /etc/mcst-version ine zviri mukati 3.0-rc36. 3.0 ingangove iyo vhezheni - inoita kunge yakakodzera, asi rc36? Kazhinji, yechitatu-bato software ingangove isingakwanise kuziva kugovera uku nenzira yechinyakare.

Muchikamu chemidzi, iyo /mcst dhairekitori inobata ziso rangu, uye ipapo, nemoyo unonyura, ndakawana /mcst/backup. Ndokunge, kune chekuchengetedza chishandiso, uye chakavakirwa muhurongwa! "Zvakanaka," ndakafunga, "Ngationei kuti izvi zvinoshanda sei!"

Zvakazoitika kuti kune 4Kb bash script /mcst/bin/backup inopa kukopa faira. By default - kune iyo /mcst/backup dhairekitori. Mune iyo kodhi kodhi ini ndaitarisira kuona iyo rsync murairo, asi haisi mune yekumisikidzwa. Iyo script inongokopa mafaera. Murairo unotaridzika seizvi:

cp -rpdx <file backup> <file>

Iyo yese faira /mcst/bin/backup iri panoNdinokuyambira pakarepo kuti script iyi chete haina kukwana kunyatsonzwisisa. Inodhonza mabasa kubva /mcst/bin/source, chiri chinhu chakafanana neraibhurari yemabasa. Ini handina kuisanganisira (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

Kunyange, zvichida handina kunzwisisa chimwe chinhu? Pamwe mumwe munhu anogona kutsanangura mune zvakataurwa: iyi script inoita sei yakachengeteka uye yakavimbika data backup? [TBD]

rsync, nenzira, inosanganisirwa mune yekuwedzera. repositories. Shanduro 3.1.3. Ini ndinofunga kushandisa rsync ichiri imwe nzira iri nani kune iyo /mcst/bin/backup application.

Zvadaro, ndakasarudza kuisa itsva Veeam Mumiririri weLinux. Mumwe munhu anozobvunza kuti: "Veeam uye kutsiva kwekunze kune chekuita nazvo?" Hongu, haisi murejista, asi inosimbiswa neFSTEC, zvinoreva kuti kana pasina dzimwe nzira dzinogona kushandiswa. Kupedza maminitsi gumi nemashanu pane dzimwe nzira kubva registry, Ndakakwanisa kuwana 3 zvinongedzo zvezwi rekuti "backup" (hapana inoenderana nemubvunzo wangu wezwi rekuti "chengetera"). Ini handina kuita ongororo yakadzama yezvirongwa izvi, saka ini handisi kuzoedza kutonga kuti dzakakodzera sei pakutsigira michina inoshandisa Linux. Ani nani anoida anozvisarudzira ega uye agogovera mumhinduro.

Chikamu Chechitatu -kuiswa kweVeeam Agent yeLinux.
Saka, Veeam Agent yeLinux ine mapakeji maviri: iyo veeamsnap kernel module (nenzira, source here) uye kodhi yemushandisi-nzvimbo muchimiro cheveeam package.

Paive nedambudziko rimwe diki nekuisa iyo kernel module - iyo isipo dkms package. Iri ibasa rinokutendera iwe kuvaka kernel modules kubva kunobva. Sezvo mutemo, inowanikwa pane zvese zvekugovera zvikwereti. Ini ndaifanira kuitora kubva kune yechitatu-bato deb repository. Chinhu chimwe chakandifadza ndechekuti pasuru yacho haienderane nekuvaka, saka inokodzera kunge yemuno. Nei isina kuverengerwa murondedzero yemapakeji aripo, kana kuti, isina kugadzirwa [TBD]? Zvichida zvinofungidzirwa kuti hapana munhu anofanirwa kuvaka nekumhanyisa chero asiri-MCST kernel modules. Pane chaizvo mutsauko pano - sezvo paine linux-misoro. Ndiko kuti, iyo module, kana ichidiwa, inogona kuunganidzwa nemaoko uye kutangwa ne script kana muchina watanga. Ini ndinofunga haufanire kutarisira kudzokororwa kazhinji kubva kuMCST [TBD].

"Zvakanaka, iyo module yakaiswa - iyo yakaoma chikamu yapera," ndakafunga ... Veeam package ye deb repository ndeye amd64 platform, uye Elbrus OS ine x86_64 [TBD] platform. Musiyano, hongu, uri muzita chete, asi mutsauko uyu unoita anenge ese mapakeji kubva kune wechitatu-bato deb repositories aenderane neElbrus OS. Uku kusanzwisisa kunogumbura kunogona kubviswa zviri nyore: ingo patsanura pasuru, gadzirisa ruzivo nezve chivakwa uye dzosera pamwe chete. Kuzviita sei Googled it pakarepo.

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

Rimwe dambudziko nderokutsamira. Mafaira anodiwa anoita kunge aripo, asi mapakeji haasi. Mhedzisiro yaive yekuti mazita emapakeji akasiyana ne "analogues atorwa". Zvichida maraibhurari acho akarongwa zvakasiyana. Ini handina kupinda mune zvakawanda zvakadzama, ndakabvisa zvinenge zvese zvinotsamira, uye kuiswa kwakaenderera mberi.

Ipapo matambudziko akabuda nekodhi yekutanga sevhisi. Iyo script /lib/init/vars.sh yanga isipo. Nekuda kwechimwe chikonzero, Elbrus inokwanisa isina iyo, saka isu tichaibvisa futi. Tevere, taifanira kutsiva meseji yekubuda basa: iyo log_daemon_msg uye log_end_msg mabasa aive asipo. Mushure mekutenderera mu /lib/lsb/init-functions faira, ndakawana iyo log_success_msg basa - zvichatinakira isu pakuedza. Nenzira, mu /lib/lsb/init-functions faira mutsara "# Source SuSE`s rc mabasa" iri pakutanga kwe [TBD] faira.

Mushure mekuita kwakashata kudaro kwepakeji nefaira, iyo yese-muchina backup paNFS share yakatangwa zvinobudirira. The backup mount yakabudirirawo. Saka, ndinotenda, yekutsigira muchina neElbrus PDK, yakatorwa “saizvozvo” pasina zvisungo, Veeam Mumiriri weLinux akanyatsokodzera. Kunyangwe mushure mekugadziriswa kwese nefaira.

Ehe, iyo Elbrus OS yekugovera kit haina kutsigirwa zviri pamutemo, sezvo isina kuverengerwa murondedzero yevanotsigirwa. Pamusoro pezvo, Veeam Agent yeLinux haina kuyedzwa pairi nedhipatimendi reQA, saka avo. hapana kutsigirwa (kunyanya panguva yekubudiswa kwechinyorwa).

Ndinotarisira kuti nyaya yacho ichave yakakosha kune avo vari kuedza kushandisa urongwa Nhamba 334 yaJune 29.06.2017, XNUMX. Zvangu kwauri... [TBD].

Source: www.habr.com

Voeg