Elbrus OS-də Veeam-dən Linux Yedəkləmə. İdxalın əvəzlənməsi ['?' | '.' | '!']

Salam.
Habré haqqında son məqalələr Təcrübədə idxalın əvəzlənməsi. Hissə 1. Seçimlər и Musiqi uzun müddət çalmadı ... və ya Elbrus OS necə pulsuz olmadı məni biganə qoymadı. Mən bu məsələni ehtiyat tapşırığı kontekstində öyrənmək qərarına gəldim. Üstəlik, in Bu məqalə Veeam Proqram təminatı məhsulları qeyd olunur, bu o deməkdir ki, məsələ idxalı əvəzləmə kontekstində xüsusilə aktual ola bilər.

Elbrus OS-də Veeam-dən Linux Yedəkləmə. İdxalın əvəzlənməsi ['?' | '.' | '!']
orijinal şəkil mənbəyi

İlk növbədə mən Elbrus ƏS-ni, daha doğrusu, yalnız x86_64 arxitekturası üçün mövcud paylanmanı yükləmək, onun necə işlədiyini görmək və Linux üçün Veeam Agent-i quraşdırmaq qərarına gəldim. Bundan nə çıxdığını bilmək istəyirsinizsə, pişiyə baxın.

Beləliklə, kimsə bilmirsə, kiçik bir sapma. “Elbrus” belədir prosessor kifayət qədər xüsusi bir komanda sistemi ilə. Bundan əlavə, Elbrus OS proqramı var. Və - məşhur inancın əksinə - Elbrus ƏS-ni idarə etmək üçün Elbrus prosessoru əsasında aparat sisteminə malik olmaq lazım deyil. X86 üçün "PDK "Elbrus" var - əslində, o, quraşdırma diski şəklində ictimai domendə ortaya çıxdı. Yeri gəlmişkən, "PDK - platforma inkişaf etdirmə dəsti, tərtibatçı dəsti" qeydi var - əla, yəni orada ən azı bir tərtibçi var.

Başqa bir kiçik məcburi geri çəkilmə. Fakt budur ki, mən bir dəfə MSVS və Baguette RTOS kimi yerli proqram təminatı ilə məşğul olmuşam. MCST-dən olan prosessor da daxil olmaqla yerli komponentlərlə işləmək təcrübəm var idi. Ona görə də tam məsuliyyətlə deyə bilərəm ki, bu sahədə müəyyən spesifiklik var və məqalədə məhz buna toxunmamağa çalışacağam. Həqiqətən istəsəm, [TBD] etiketini qoyacağam. Beləliklə, biz açıq trolling və banal inilti olmadan etməyə çalışacağıq. Sonda Rusiyanın müdafiə sənayesi və dövlət qurumlarını başa düşmək lazımdır. Böyük ölkə, kiçik büdcə... [TBD].

Sıfır mərhələ - yükləyin. Maraqlıdır ki, Elbrus ƏS-nin əlçatan olması xəbəri o qədər rezonansa səbəb olub ki, paylama serveri sıradan çıxıb. [TBD] Yandex və onu ora köçürməyi düşünən mühəndisə təşəkkür edirəm. Beləliklə, yükləmə sürəti yaxşıdır.

Birinci mərhələ - quraşdırma. Mən onu pulsuz istifadə üçün mövcud olan ilk hipervizora quraşdırdım. Mən iki nüvə, bir neçə gig RAM, video üçün 32 MB ayırdım (bir qrafik interfeys olacaq, düşündüm). Disk həmişəki kimidir - 32 GB.
Quraşdırmaya başladım. Quraşdırma təlimatlarından istifadə etməmişəm, ona görə də şərh verə bilmərəm. TUI quraşdırma interfeysi olduqca minimalistdir.

Elbrus OS-də Veeam-dən Linux Yedəkləmə. İdxalın əvəzlənməsi ['?' | '.' | '!']
Yaxşı, əla, siçan olmadan da edə bilərik.

İkinci cəhddə növbəti pəncərəni idarə etdim. Diskdən quraşdırarkən niyə defolt cihazı sr0 [TBD] seçməyək?
CD-ROM mənbəyini seçin və davam edin.

Elbrus OS-də Veeam-dən Linux Yedəkləmə. İdxalın əvəzlənməsi ['?' | '.' | '!']

Saat qurşağını seçərkən birdən sistemin başlanğıc yükləmə prosesindən istifadə etdiyini başa düşdüm və mən TTY0-dan işləyirəm.

Elbrus OS-də Veeam-dən Linux Yedəkləmə. İdxalın əvəzlənməsi ['?' | '.' | '!']

Yaxşı, gəlin “Elbrus”u icma kimi təsnif edək Köhnə möminlər[TBD]. Prinsipcə, bu yaxşıdır: yükləmə prosesinin necə işlədiyini görmək üçün mənbə kodu istəməyinizə ehtiyac yoxdur, çünki hər şey skriptlidir.

Qalanları demək olar ki, əhəmiyyətsizdir: biz hər şeyi qoyuruq və razılaşırıq. Yolda, nüvənin 3.14.79-13.84 istifadə edildiyini öyrənirik. Hmm, Debian 7-də 3.2 [TBD] var idi.

Sonra, standart disk bölməsini seçin və... Biz xəbərdarlıq görürük:

Elbrus OS-də Veeam-dən Linux Yedəkləmə. İdxalın əvəzlənməsi ['?' | '.' | '!']

Hmm, nədənsə avtomatik bölmə 32 giq diskin öhdəsindən gəlmədi. Mən diski dəyişmədim, axtarışı "hamısı bir yerdə" üslubunda diskin əllə bölməsi ilə tamamladım. /boot ext3-də ola bilmədiyi üçün ext4-ü quraşdırmalı oldum.
Sistem insidentsiz işə düşdü.

İkinci mərhələ - alternativləri axtarın.
İkinci diskin məzmununu araşdırdıqdan sonra bunun əlavə bir depo olduğunu başa düşdüm. paketlərdə. Və /etc/apt/sources.list-ə baxaraq onu /mnt/cdrom-a quraşdırmaq lazım olduğunu başa düşdüm. Ancaq /etc/os-release tapmadım. Lakin 3.0-rc36 məzmunlu /etc/mcst-version var. 3.0 yəqin ki, versiyadır - uyğun görünür, amma rc36? Ümumiyyətlə, üçüncü tərəf proqram təminatı çox güman ki, klassik şəkildə bu paylanmanı tanıya bilməyəcək.

Kök bölmədə, /mcst kataloqu diqqətimi çəkir və orada, batan bir ürəklə, /mcst/backup-ı kəşf etdim. Yəni, ehtiyat alət var və o, sistemə daxil edilib! "Əla," deyə düşündüm, "Gəlin bunun necə işlədiyini görək!"

Məlum oldu ki, faylın kopyalanmasını təmin edən 4Kb bash skripti /mcst/bin/backup var. Varsayılan olaraq - /mcst/backup qovluğuna. Mənbə kodunda rsync əmrini görməyi gözləyirdim, lakin o, standart konfiqurasiyada deyil. Skript sadəcə faylları kopyalayır. Komanda bu kimi görünür:

cp -rpdx <file backup> <file>

Bütün fayl /mcst/bin/backup buradadırDərhal xəbərdarlıq edirəm ki, tam başa düşmək üçün tək bu skript kifayət deyil. O, funksiyaları /mcst/bin/source-dan götürür, bu da funksiyalar kitabxanası kimi bir şeydir. Mən onu daxil etməmişəm (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

Baxmayaraq ki, bəlkə bir şey başa düşmədim? Bəlkə kimsə şərhlərdə izah edə bilər: bu skript məlumatların təhlükəsiz və etibarlı ehtiyat nüsxəsini necə təmin edir? [TBD]

rsync, yeri gəlmişkən, əlavəyə daxildir. depolar. Versiya 3.1.3. Düşünürəm ki, rsync-dən istifadə hələ də /mcst/bin/backup proqramına daha yaxşı alternativdir.

Sonra təzəsini qoymağa qərar verdim Linux üçün Veeam Agent. Kimsə soruşacaq: "Veeam və idxalı əvəzləmənin bununla nə əlaqəsi var?" Bəli, reyestrdə yoxdur, lakin FSTEC tərəfindən sertifikatlaşdırılıb, yəni alternativlər olmadıqda istifadə edilə bilər. Alternativlərə on beş dəqiqə sərf etmək reyestr, mən “backup” sözü üçün 3 keçid tapa bildim (“ehtiyat” sözü ilə bağlı sualıma heç biri aidiyyatı yoxdur). Mən bu proqramların dərin təhlilini etməmişəm, ona görə də onların Linux ilə işləyən maşınların ehtiyat nüsxəsini çıxarmaq üçün nə dərəcədə uyğun olduğunu mühakimə etməyə çalışmayacağam. Kimə lazım olsa, özü nəticə çıxaracaq və şərhlərdə paylaşacaq.

Mərhələ üç — Linux üçün Veeam Agent quraşdırılması.
Beləliklə, Linux üçün Veeam Agent iki paketdən ibarətdir: veeamsnap nüvə modulu (yeri gəlmişkən, mənbə burada) və veeam paketi şəklində xüsusi istifadəçi məkan kodu.

Kernel modulunun quraşdırılması ilə bağlı kiçik bir problem var idi - çatışmayan dkms paketi. Bu, mənbədən nüvə modulları yaratmağa imkan verən bir xidmətdir. Bir qayda olaraq, bütün debt paylamalarında mövcuddur. Mən onu üçüncü tərəfin deb deposundan yükləməli oldum. Məni sevindirən bir şey paketin arxitekturadan asılı olmamasıdır, ona görə də yerli kimi uyğun gəlir. Niyə mövcud paketlər siyahısına daxil edilmədi, daha doğrusu [TBD] hazırlanmadı? Ola bilsin ki, heç kimin MCST olmayan nüvə modullarını qurmamalı və işlətməməsi ehtimal edilir. Burada həqiqətən bir uyğunsuzluq var - çünki linux başlıqları var. Yəni, istəsən modul əl ilə yığıla və maşın işə salındıqda skriptlə işə salına bilər. Düşünürəm ki, MCST [TBD]-dən tez-tez yeniləmələr gözləməməlisiniz.

“Yaxşı, modul quraşdırılıb – ən çətin hissə bitdi” deyə düşündüm... Deb deposu üçün veeam paketi amd64 platforması üçündür, Elbrus ƏS-də isə x86_64 [TBD] platforması var. Fərq, əlbəttə ki, yalnız addadır, lakin bu fərq üçüncü tərəfin deb anbarlarından olan demək olar ki, bütün paketləri Elbrus OS ilə uyğunsuz edir. Bu zəhlətökən anlaşılmazlıq sadəcə aradan qaldırıla bilər: sadəcə paketi sökün, arxitektura haqqında məlumatı düzəldin və yenidən bir yerə qoyun. Bunu necə etmək olar Google-da axtardım dərhal.

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

Başqa bir problem asılılıqdır. Lazımi fayllar orada görünür, lakin paketlər yoxdur. Təəssürat yarandı ki, paketlərin adları onların “idxal edilən analoqlarından” fərqlənir. Ola bilsin ki, kitabxanalar fərqli şəkildə qablaşdırılıb. Çox təfərrüata girmədim, demək olar ki, bütün asılılıqları aradan qaldırdım və quraşdırma davam etdi.

Sonra xidmətin başlanğıc kodu ilə bağlı problemlər yarandı. /lib/init/vars.sh skripti yox idi. Nədənsə, Elbrus onsuz idarə edir, biz də onu siləcəyik. Sonra mesajın çıxış funksiyasını əvəz etməli olduq: log_daemon_msg və log_end_msg funksiyaları yox idi. /lib/lsb/init-functions faylında dolaşdıqdan sonra log_success_msg funksiyasını tapdım - bu, təcrübələr üçün bizim üçün yaxşı olacaq. Yeri gəlmişkən, /lib/lsb/init-functions faylında “# Source SuSE`s rc funksiyaları” sətri [TBD] faylının əvvəlindədir.

Paketin fayl ilə belə kobud işlənməsindən sonra NFS paylaşımında bütün maşın ehtiyat nüsxəsi uğurla işə salındı. Ehtiyat montaj da uğurlu oldu. Beləliklə, mən inanıram ki, heç bir öhdəlik götürmədən yüklənmiş Elbrus PDK ilə maşının ehtiyat nüsxəsini çıxarmaq üçün Linux üçün Veeam Agent mütləq uyğun gəlir. Bir fayl ilə bütün dəyişikliklərdən sonra belə.

Əlbəttə ki, Elbrus OS paylama dəsti rəsmi olaraq dəstəklənmir, çünki dəstəklənənlər siyahısına daxil deyil. Bundan əlavə, Linux üçün Veeam Agent QA şöbəsi tərəfindən sınaqdan keçirilməmişdir. heç bir dəstək yoxdur (ən azı məqalənin dərci zamanı).

Ümid edirəm ki, məqalə 334 iyun 29.06.2017-ci il tarixli XNUMX nömrəli əmri həyata keçirməyə çalışanlar üçün faydalı olacaqdır. Mənim sənə... [TBD].

Mənbə: www.habr.com

Добавить комментарий