Elbrus operatsion tizimida Veeam-dan Linux zaxira nusxasi. Import almashtirish ['?' | '.' | '!']

Hammaga salom.
Habré haqidagi so'nggi maqolalar Amalda import o'rnini bosish. 1-qism. Variantlar и Musiqa uzoq vaqt o'ynamadi ... yoki qanday qilib Elbrus OS hech qachon bepul bo'lmadi meni befarq qoldirmadi. Men bu masalani zaxira vazifasi kontekstida o'rganishga qaror qildim. Bundan tashqari, in Ushbu maqola Veeam dasturiy ta'minot mahsulotlari eslatib o'tilgan, ya'ni muammo import o'rnini bosish kontekstida ayniqsa dolzarb bo'lishi mumkin.

Elbrus operatsion tizimida Veeam-dan Linux zaxira nusxasi. Import almashtirish ['?' | '.' | '!']
original tasvir manbai

Avvalo, men Elbrus OS-ni, aniqrog'i, faqat x86_64 arxitekturasi uchun mavjud tarqatishni yuklab olishga, uning qanday ishlashini ko'rishga va unga Linux uchun Veeam Agent-ni o'rnatishga qaror qildim. Agar bundan nima chiqqanini bilmoqchi bo'lsangiz, mushukka qarang.

Shunday qilib, kimdir bilmasa, kichik bir chekinish. "Elbrus" xuddi shunday protsessor ancha o'ziga xos buyruq tizimi bilan. Unga qo'shimcha ravishda Elbrus OS dasturi mavjud. Va - mashhur e'tiqodga qaramasdan - Elbrus OS-ni ishlatish uchun Elbrus protsessoriga asoslangan apparat tizimiga ega bo'lish shart emas. "X86 uchun "PDK "Elbrus"" mavjud - aslida u o'rnatish diski ko'rinishida jamoat mulkida paydo bo'lgan. Aytgancha, "PDK - platformani ishlab chiqish to'plami, ishlab chiquvchilar to'plami" izohi bor - bu ajoyib, demak u erda hech bo'lmaganda kompilyator bor.

Yana bir kichik majburiy chekinish. Gap shundaki, men bir vaqtlar MSVS va Baguette RTOS kabi mahalliy dasturlar bilan shug'ullanganman. Mahalliy komponentlar, shu jumladan MCST protsessorlari bilan ishlash tajribam bor edi. Shuning uchun men to'liq mas'uliyat bilan aytishim mumkinki, bu sohada ma'lum bir o'ziga xoslik bor va men maqolada unga tegmaslikka harakat qilaman. Men chindan ham xohlasam, [TBD] tegini qo'yaman. Shunday qilib, biz ochiqchasiga trolling va nola qilmasdan qilishga harakat qilamiz. Oxir-oqibat, Rossiya mudofaa sanoati va davlat idoralarini tushunish kerak. Katta davlat - kichik byudjet.. [TBD].

Nolinchi bosqich - yuklab olish. Shunisi e'tiborga loyiqki, Elbrus OS mavjud bo'lganligi haqidagi xabar rezonansga sabab bo'ldi, shuning uchun tarqatish serveri ishlamay qoldi. [TBD] Yandex va uni u erga ko'chirishni o'ylagan muhandisga rahmat. Shunday qilib, yuklab olish tezligi yaxshi.

birinchi bosqichi - o'rnatish. Men uni bepul foydalanish mumkin bo'lgan birinchi gipervizorga o'rnatdim. Men ikkita yadro, bir nechta operativ xotira, video uchun 32 MB ajratdim (grafik interfeys bo'ladi, deb o'yladim). Disk odatdagidek - 32 GB.
Men o'rnatishni boshladim. Men o'rnatish ko'rsatmalaridan foydalanmadim, shuning uchun unga izoh berolmayman. TUI o'rnatish interfeysi juda minimalist.

Elbrus operatsion tizimida Veeam-dan Linux zaxira nusxasi. Import almashtirish ['?' | '.' | '!']
Xo'sh, ajoyib, biz sichqonchasiz ham qila olamiz.

Men ikkinchi urinishda keyingi oynani boshqardim. Nima uchun diskdan o'rnatishda standart qurilma sr0 [TBD] ni tanlamaysiz?
CD-ROM manbasini tanlang va davom eting.

Elbrus operatsion tizimida Veeam-dan Linux zaxira nusxasi. Import almashtirish ['?' | '.' | '!']

Vaqt mintaqasini tanlashda men to'satdan tizim ishga tushirish jarayonidan foydalanishini tushunib etdim va men TTY0 dan ishlayapman.

Elbrus operatsion tizimida Veeam-dan Linux zaxira nusxasi. Import almashtirish ['?' | '.' | '!']

OK, keling, "Elbrus" ni hamjamiyat sifatida tasniflaymiz Qadimgi imonlilar[TBD]. Aslida, bu yaxshi: yuklab olish jarayoni qanday ishlashini ko'rish uchun siz manba kodini so'rashingiz shart emas, chunki hamma narsa skriptlangan.

Qolganlari deyarli ahamiyatsiz: biz hamma narsani qo'yamiz va rozi bo'lamiz. Yo'l davomida biz yadro 3.14.79-13.84 ishlatilganligini bilib olamiz. Hmm, Debian 7 da 3.2 [TBD] bor edi.

Keyin, standart disk bo'limini tanlang va... Biz ogohlantirishni ko'ramiz:

Elbrus operatsion tizimida Veeam-dan Linux zaxira nusxasi. Import almashtirish ['?' | '.' | '!']

Hmm, qandaydir tarzda avtomatik bo'linish 32 gig disk bilan yaxshi ishlamadi. Men diskni o'zgartirmadim, men topshiriqni "hamma birida" uslubida diskni qo'lda bo'lish bilan yakunladim. Men ext3-ni o'rnatishim kerak edi, chunki /boot ext4-da bo'lishi mumkin emas edi.
Tizim hech qanday hodisasiz ishga tushdi.

Ikkinchi bosqich - muqobil variantlarni izlash.
Ikkinchi diskning mazmunini ko'rib chiqqach, men bu qo'shimchali ombor ekanligini angladim. paketlarda. Va /etc/apt/sources.list ga qarab, men uni /mnt/cdrom-ga o'rnatish kerakligini angladim. Lekin men /etc/os-release-ni topa olmadim. Ammo 3.0-rc36 mazmuniga ega /etc/mcst-version mavjud. 3.0, ehtimol, versiya - bu mos ko'rinadi, lekin rc36? Umuman olganda, uchinchi tomon dasturiy ta'minoti, ehtimol, bu taqsimotni klassik tarzda taniy olmaydi.

Ildiz bo'limida /mcst katalogi mening ko'zimni tortadi va u erda men chuqur yurak bilan /mcst/backup-ni topdim. Ya'ni, zaxira vositasi mavjud va u tizimga o'rnatilgan! "Ajoyib", deb o'yladim men, "Keling, bu qanday ishlashini ko'raylik!"

Ma'lum bo'lishicha, faylni nusxalashni ta'minlaydigan 4Kb bash skripti /mcst/bin/backup mavjud. Odatiy bo'lib - /mcst/backup katalogiga. Manba kodida men rsync buyrug'ini ko'rishni kutgandim, lekin u standart konfiguratsiyada emas. Skript shunchaki fayllarni nusxalaydi. Buyruq shunday ko'rinadi:

cp -rpdx <file backup> <file>

Butun fayl /mcst/bin/backup bu yerdaMen sizni darhol ogohlantiraman, bu skriptning o'zi to'liq tushunish uchun etarli emas. U funksiyalarni /mcst/bin/source dan tortib oladi, bu funksiyalar kutubxonasi kabi. Men uni qo'shmaganman (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

Garchi, ehtimol men biror narsani tushunmadim? Ehtimol, kimdir izohlarda tushuntirishi mumkin: bu skript qanday qilib xavfsiz va ishonchli ma'lumotlarni zaxiralashni ta'minlaydi? [TBD]

rsync, aytmoqchi, qo'shimchaga kiritilgan. omborlar. 3.1.3 versiyasi. Menimcha, rsync dan foydalanish hali ham /mcst/bin/backup ilovasiga yaxshiroq muqobildir.

Keyin men yangisini qo'yishga qaror qildim Linux uchun Veeam agent. Kimdir so'raydi: "Veeam va import o'rnini bosishning bunga nima aloqasi bor?" Ha, u reestrda yo'q, lekin u FSTEC tomonidan sertifikatlangan, ya'ni muqobillar bo'lmasa, undan foydalanish mumkin. Muqobil variantlarga o'n besh daqiqa sarflash ro'yxatga olish kitobi, Men "zaxira" so'zi uchun 3 ta havolani topa oldim ("zaxira" so'zi uchun mening savolimga hech qanday aloqasi yo'q). Men ushbu dasturlarni chuqur tahlil qilmaganman, shuning uchun ular Linux bilan ishlaydigan mashinalarni zaxiralash uchun qanchalik mos ekanligini baholashga harakat qilmayman. Kimga kerak bo'lsa, o'zi xulosa chiqaradi va sharhlarda baham ko'radi.

Uchinchi bosqich — Linux uchun Veeam Agentni o'rnatish.
Shunday qilib, Linux uchun Veeam Agent ikkita paketdan iborat: veeamsnap yadro moduli (darvoqe, manba bu yerda) va veeam to'plami ko'rinishidagi xususiy foydalanuvchi kosmik kodi.

Yadro modulini o'rnatishda bitta kichik muammo bor edi - etishmayotgan dkms paketi. Bu manbadan yadro modullarini yaratish imkonini beruvchi xizmatdir. Qoida tariqasida, u barcha debi tarqatishlarda mavjud. Men uni uchinchi tomon debi omboridan yuklab olishim kerak edi. Meni xursand qilgan narsa shundaki, paket arxitekturaga bog'liq emas, shuning uchun u mahalliy kabi mos keladi. Nega u mavjud paketlar ro'yxatiga kiritilmagan, aniqrog'i [TBD] ishlab chiqilmagan? Ehtimol, hech kim MCST bo'lmagan yadro modullarini yaratmasligi va ishga tushirmasligi kerak deb taxmin qilinadi. Bu erda haqiqatan ham nomuvofiqlik bor - chunki Linux-sarlavhalari mavjud. Ya'ni, agar so'ralsa, modulni qo'lda yig'ish va mashina ishga tushganda skript orqali ishga tushirish mumkin. Menimcha, siz MCST [TBD] dan tez-tez yangilanishlarni kutmasligingiz kerak.

“OK, modul o‘rnatildi – eng qiyin qismi tugadi”, deb o‘yladim... Deb ombori uchun veeam paketi amd64 platformasi uchun, Elbrus OSda esa x86_64 [TBD] platformasi mavjud. Farqi, albatta, faqat nomda, ammo bu farq uchinchi tomon deb nomli omborlaridan deyarli barcha paketlarni Elbrus OS bilan mos kelmaydi. Bu zerikarli tushunmovchilikni oddiygina yo'q qilish mumkin: shunchaki paketni qismlarga ajratish, arxitektura haqidagi ma'lumotlarni to'g'rilash va uni bir joyga qo'yish kifoya. Buni qanday qilish kerak Googleda topdim darhol.

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

Yana bir muammo - bu qaramlik. Kerakli fayllar borga o'xshaydi, lekin paketlar yo'q. Paketlarning nomlari ularning "import qilingan analoglari" dan farq qilgani taassurot qoldirdi. Ehtimol, kutubxonalar boshqacha tarzda paketlangan. Men juda ko'p tafsilotlarga kirmadim, deyarli barcha bog'liqliklarni olib tashladim va o'rnatish davom etdi.

Keyin xizmatni boshlash kodi bilan bog'liq muammolar paydo bo'ldi. /lib/init/vars.sh skripti yo'q edi. Ba'zi sabablarga ko'ra, Elbrus busiz boshqaradi, shuning uchun biz uni ham olib tashlaymiz. Keyinchalik, biz xabarni chiqarish funksiyasini almashtirishimiz kerak edi: log_daemon_msg va log_end_msg funksiyalari yo'q edi. /lib/lsb/init-functions faylini aylanib chiqqach, log_success_msg funksiyasini topdim - bu biz uchun tajribalar uchun yaxshi bo'ladi. Aytgancha, /lib/lsb/init-functions faylida “# Source SuSE`s rc functions” qatori [TBD] faylining boshida joylashgan.

Paketni fayl bilan qo'pol qayta ishlashdan so'ng, NFS ulushidagi butun mashinaning zaxira nusxasi muvaffaqiyatli ishga tushirildi. Zaxira o'rnatish ham muvaffaqiyatli bo'ldi. Shunday qilib, menimcha, hech qanday majburiyatsiz "xuddi shunday" yuklab olingan Elbrus PDK bilan mashinaning zaxira nusxasini yaratish uchun Linux uchun Veeam Agent albatta mos keladi. Fayl bilan barcha o'zgarishlardan keyin ham.

Albatta, Elbrus OS tarqatish to'plami rasmiy ravishda qo'llab-quvvatlanmaydi, chunki u qo'llab-quvvatlanadiganlar ro'yxatiga kiritilmagan. Bundan tashqari, Linux uchun Veeam Agent QA bo'limi tomonidan sinovdan o'tkazilmagan, shuning uchun ular. hech qanday qo'llab-quvvatlash yo'q (hech bo'lmaganda maqola nashr etilganda).

Umid qilamanki, maqola 334 yil 29.06.2017 iyundagi XNUMX-son buyrug'ini amalga oshirishga harakat qilayotganlar uchun foydali bo'ladi. Meni senga... [TBD].

Manba: www.habr.com

a Izoh qo'shish