Hifadhi nakala ya Linux kutoka Veeam kwenye Elbrus OS. Leta badala ['?' | '.' | '!']

Sema kila mtu
Nakala za hivi majuzi kuhusu Habre Ingiza badala kwa vitendo. Sehemu ya 1. Chaguzi и Muziki haukucheza kwa muda mrefu ... au jinsi Elbrus OS haijawahi kuwa huru haikuniacha nikiwa tofauti. Niliamua kusoma suala hili katika muktadha wa kazi ya chelezo. Aidha, katika Makala hii Bidhaa za Programu ya Veeam zimetajwa, ambayo ina maana kwamba suala hilo linaweza kuwa muhimu hasa katika muktadha wa uingizwaji wa uingizaji.

Hifadhi nakala ya Linux kutoka Veeam kwenye Elbrus OS. Leta badala ['?' | '.' | '!']
chanzo cha picha asili

Kwanza kabisa, niliamua kupakua Elbrus OS, au tuseme, tu usambazaji unaopatikana kwa usanifu wa x86_64, angalia jinsi inavyofanya kazi, na jaribu kufunga Veeam Agent kwa Linux juu yake. Ikiwa unataka kujua ni nini kilitoka kwa hii, tafadhali tazama paka.

Kwa hivyo, ukiukaji mdogo, ikiwa mtu hajui. "Elbrus" ni hivyo processor na mfumo maalum wa amri. Mbali na hayo, kuna programu ya Elbrus OS. Na - kinyume na dhana potofu ya kawaida - kwa Elbrus OS kufanya kazi, si lazima kuwa na mfumo wa vifaa kulingana na processor Elbrus. Kuna "PDK "Elbrus" ya x86" - kwa kweli, ilionekana kwenye kikoa cha umma katika mfumo wa diski ya usakinishaji. Kwa njia, kuna tanbihi "PDK - vifaa vya ukuzaji wa jukwaa, vifaa vya wasanidi programu" - vyema, hiyo inamaanisha kuwa kuna mkusanyaji hapo.

Mafungo mengine madogo ya kulazimishwa. Ukweli ni kwamba niliwahi kushughulika na programu za nyumbani, kama vile MSVS na Baguette RTOS. Nilikuwa na uzoefu wa kufanya kazi na vifaa vya nyumbani, pamoja na processor kutoka MCST. Kwa hiyo, naweza kusema kwa wajibu kamili kwamba kuna maalum fulani katika eneo hili na ni hasa hii ambayo nitajaribu kutogusa katika makala hiyo. Ninapotaka sana, nitaweka lebo [TBD]. Kwa hivyo tutajaribu kufanya bila kuteleza moja kwa moja na kulia kwa banal. Mwishowe, tasnia ya ulinzi ya Urusi na mashirika ya serikali yanahitaji kueleweka. Nchi kubwa - bajeti ndogo.. [TBD].

Hatua ya sifuri - pakua. Ni vyema kutambua kwamba habari kwamba Elbrus OS imepatikana ilisababisha resonance, kiasi kwamba seva ya usambazaji ilipungua. [TBD] Shukrani kwa Yandex na mhandisi ambaye alifikiria kuihamisha hapo. Kwa hivyo kasi ya upakuaji ni nzuri.

hatua ya kwanza - ufungaji. Niliiweka kwenye hypervisor ya kwanza ambayo ilikuwa inapatikana kwa matumizi ya bure. Nilitenga cores mbili, gigs kadhaa za RAM, 32 MB kwa video (kutakuwa na kielelezo cha picha, nilidhani). Diski ni kama kawaida - 32 GB.
Nilianza ufungaji. Sikutumia maagizo ya usakinishaji, kwa hivyo siwezi kutoa maoni juu yake. Kiolesura cha usakinishaji wa TUI ni mdogo sana.

Hifadhi nakala ya Linux kutoka Veeam kwenye Elbrus OS. Leta badala ['?' | '.' | '!']
Kweli, nzuri, tunaweza kufanya bila panya.

Nilisimamia dirisha lililofuata kwenye jaribio la pili. Kwa nini usichague kifaa chaguo-msingi sr0 [TBD] wakati wa kusakinisha kutoka kwa diski?
Chagua chanzo cha CD-ROM na uendelee.

Hifadhi nakala ya Linux kutoka Veeam kwenye Elbrus OS. Leta badala ['?' | '.' | '!']

Wakati wa kuchagua eneo la saa, ghafla niligundua kuwa mfumo unatumia mchakato wa boot ya init, na ninafanya kazi kutoka TTY0.

Hifadhi nakala ya Linux kutoka Veeam kwenye Elbrus OS. Leta badala ['?' | '.' | '!']

Sawa, basi hebu tuainishe "Elbrus" kama jumuiya Waumini Wazee[TBD]. Kimsingi, hii ni nzuri: hauitaji kuuliza msimbo wa chanzo ili kuona jinsi mchakato wa kupakua unavyofanya kazi, kwani kila kitu kimeandikwa.

Wengine ni karibu sio muhimu: tunaweka kila kitu na kukubaliana. Njiani, tunapata kwamba kernel hutumiwa 3.14.79-13.84. Hmm, Debian 7 ilikuwa na 3.2 [TBD].

Ifuatayo, chagua ugawaji wa diski chaguo-msingi na... Tunaona onyo:

Hifadhi nakala ya Linux kutoka Veeam kwenye Elbrus OS. Leta badala ['?' | '.' | '!']

Hmm, kwa namna fulani ugawaji wa moja kwa moja haukuweza kukabiliana vizuri na diski ya gig 32. Sikubadilisha diski; nilikamilisha jitihada na ugawaji wa diski ya mwongozo katika mtindo wa "yote-in-one". Ilinibidi kusakinisha ext3, kwani /boot haikuweza kuwa katika ext4.
Mfumo ulikuja bila tukio.

hatua ya pili - tafuta njia mbadala.
Baada ya kupekua yaliyomo kwenye diski ya pili, niligundua kuwa hii ni hazina iliyo na ziada. katika vifurushi. Na nikiangalia /etc/apt/sources.list, niligundua kuwa inahitaji kuwekwa ndani /mnt/cdrom. Lakini sikupata /etc/os-release. Lakini kuna /etc/mcst-version na yaliyomo 3.0-rc36. 3.0 labda ndio toleo - inaonekana inafaa, lakini rc36? Kwa ujumla, programu ya mtu wa tatu uwezekano mkubwa haitaweza kutambua usambazaji huu kwa njia ya classical.

Katika kizigeu cha mizizi, saraka ya /mcst inashika jicho langu, na huko, kwa moyo unaozama, niligundua /mcst/backup. Hiyo ni, kuna zana ya chelezo, na imejengwa kwenye mfumo! "Nzuri," nikawaza, "Hebu tuone jinsi hii inavyofanya kazi!"

Ilibadilika kuwa kuna hati ya 4Kb bash /mcst/bin/backup ambayo hutoa kunakili faili. Kwa chaguo-msingi - kwa saraka ya /mcst/backup. Kwenye msimbo wa chanzo nilitarajia kuona rsync amri, lakini haiko kwenye usanidi chaguo-msingi. Hati inakili faili tu. Amri inaonekana kitu kama hiki:

cp -rpdx <file backup> <file>

Faili nzima /mcst/bin/backup iko hapaNinakuonya mara moja kwamba hati hii pekee haitoshi kuelewa kikamilifu. Inavuta kazi kutoka /mcst/bin/source, ambayo ni kitu kama maktaba ya kazi. Sikuijumuisha (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

Ingawa, labda sikuelewa kitu? Labda mtu anaweza kuelezea katika maoni: hati hii inahakikishaje nakala salama na ya kuaminika ya data? [TBD]

rsync, kwa njia, imejumuishwa kwenye programu-jalizi. hazina. Toleo la 3.1.3. Nadhani kutumia rsync bado ni mbadala bora kwa /mcst/bin/backup application.

Ifuatayo, niliamua kuweka mpya Wakala wa Veeam wa Linux. Mtu atauliza: "Veeam na uingizwaji wa nje una uhusiano gani nayo?" Ndiyo, haipo kwenye rejista, lakini imethibitishwa na FSTEC, ambayo ina maana kwamba kwa kutokuwepo kwa njia mbadala inaweza kutumika. Kutumia dakika kumi na tano kwa njia mbadala kutoka Usajili, niliweza kupata viungo 3 vya neno "chelezo" (hakuna kinachohusiana na swali langu kwa neno "hifadhi"). Sijafanya uchambuzi wa kina wa programu hizi, kwa hivyo sitajaribu kuhukumu jinsi zinavyofaa kwa kuhifadhi nakala za mashine zinazoendesha Linux. Yeyote anayehitaji atatoa hitimisho lake mwenyewe na kushiriki katika maoni.

Hatua ya Tatu - usakinishaji wa Wakala wa Veeam kwa Linux.
Kwa hivyo, Wakala wa Veeam wa Linux ana vifurushi viwili: moduli ya kernel ya veeamsnap (kwa njia, chanzo hapa) na msimbo wa nafasi ya mtumiaji wa umiliki katika mfumo wa kifurushi cha veeam.

Kulikuwa na shida moja ndogo ya kusakinisha moduli ya kernel - kifurushi cha dkms kilichokosekana. Hii ni huduma ambayo hukuruhusu kuunda moduli za kernel kutoka kwa chanzo. Kama sheria, inapatikana kwenye usambazaji wote wa deni. Ilinibidi kuipakua kutoka kwa hazina ya madeni ya mtu wa tatu. Jambo moja ambalo lilinifurahisha ni kwamba kifurushi hakitegemei usanifu, kwa hivyo inafaa kama ya asili. Kwa nini haikujumuishwa katika orodha ya vifurushi vinavyopatikana, au tuseme, haikutengenezwa [TBD]? Labda inadhaniwa kuwa hakuna mtu anayepaswa kujenga na kuendesha moduli zozote zisizo za MCST. Kweli kuna tofauti hapa - kwani kuna vichwa vya linux. Hiyo ni, moduli, ikiwa inataka, inaweza kukusanywa kwa mkono na kuzinduliwa na script wakati mashine inapoanza. Nadhani hupaswi kutarajia masasisho ya mara kwa mara kutoka kwa MCST [TBD].

"Sawa, moduli imewekwa - sehemu ngumu zaidi imekwisha," nilifikiri ... Kifurushi cha veeam cha hazina ya deb ni ya jukwaa la amd64, na Elbrus OS ina jukwaa la x86_64 [TBD]. Tofauti, bila shaka, iko kwa jina tu, lakini tofauti hii hufanya karibu vifurushi vyote kutoka kwa hazina za madeni ya tatu haziendani na Elbrus OS. Kutokuelewana huku kunaweza kuondolewa kwa urahisi: tenga kifurushi, rekebisha habari kuhusu usanifu na uirudishe pamoja. Jinsi ya kufanya hivyo Google papo hapo.

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

Tatizo jingine ni utegemezi. Faili zinazohitajika zinaonekana kuwa pale, lakini vifurushi hazipo. Maoni yalikuwa kwamba majina ya vifurushi yalitofautiana na "analogues zao zilizoingizwa". Labda maktaba zimefungwa kwa njia tofauti. Sikuingia kwa undani sana, nikaondoa karibu utegemezi wote, na ufungaji uliendelea.

Kisha matatizo yaliibuka na msimbo wa kuanza huduma. Hati /lib/init/vars.sh haikuwepo. Kwa sababu fulani, Elbrus inasimamia bila hiyo, kwa hivyo tutaiondoa pia. Ifuatayo, ilitubidi kuchukua nafasi ya kazi ya kutoa ujumbe: log_daemon_msg na log_end_msg vitendakazi havikuwepo. Baada ya kupekua-pekua katika faili ya /lib/lsb/init-functions, nilipata kazi ya log_success_msg - ni nzuri kwetu kwa majaribio. Kwa njia, katika faili ya /lib/lsb/init-functions mstari "# Source SuSE`s rc functions" iko mwanzoni mwa faili ya [TBD].

Baada ya usindikaji mbaya wa kifurushi na faili, nakala rudufu ya mashine nzima kwenye sehemu ya NFS ilizinduliwa kwa mafanikio. Kipachiko chelezo pia kilifaulu. Kwa hivyo, ninaamini, kwa kuhifadhi nakala ya mashine na Elbrus PDK, iliyopakuliwa "kama hivyo" bila majukumu yoyote, Wakala wa Veeam kwa Linux anafaa kabisa. Hata baada ya marekebisho yote na faili.

Bila shaka, kifaa cha usambazaji cha Elbrus OS hakitumiki rasmi, kwani haijajumuishwa katika orodha ya wale wanaoungwa mkono. Kwa kuongezea, Wakala wa Veeam wa Linux hakujaribiwa juu yake na idara ya QA, kwa hivyo hizo. hakuna msaada (angalau wakati wa kuchapishwa kwa makala).

Natumaini makala hiyo itakuwa na manufaa kwa wale wanaojaribu kutekeleza amri No. 334 ya Juni 29.06.2017, XNUMX. Yangu kwako... [TBD].

Chanzo: mapenzi.com

Kuongeza maoni