پشتیبان گیری لینوکس از Veeam در سیستم عامل Elbrus. جایگزینی واردات ['?' | '.' | '!']

سلام بر همه
مقالات اخیر در Habré جایگزینی واردات در عمل بخش 1. گزینه ها и موسیقی برای مدت طولانی پخش نشد... یا اینکه چگونه سیستم عامل Elbrus هرگز رایگان نشد من را بی تفاوت نگذاشت تصمیم گرفتم این موضوع را در چارچوب وظیفه پشتیبان گیری مطالعه کنم. علاوه بر این، در این مقاله محصولات نرم افزار Veeam ذکر شده است، به این معنی که این موضوع ممکن است به طور خاص در زمینه جایگزینی واردات مرتبط باشد.

پشتیبان گیری لینوکس از Veeam در سیستم عامل Elbrus. جایگزینی واردات ['?' | '.' | '!']
منبع تصویر اصلی

اول از همه تصمیم گرفتم سیستم عامل Elbrus یا بهتر است بگوییم فقط توزیع موجود برای معماری x86_64 را دانلود کنم، ببینم چگونه کار می کند و سعی کنم Veeam Agent برای لینوکس را روی آن نصب کنم. اگر می خواهید بدانید از این چه نتیجه ای حاصل شد، لطفا گربه را ببینید.

بنابراین، یک انحراف کوچک، در صورتی که کسی نداند. «البروس» هم همینطور است پردازنده با یک سیستم فرماندهی نسبتاً خاص. علاوه بر آن، نرم افزار Elbrus OS نیز وجود دارد. و - برخلاف تصور رایج - برای راه اندازی سیستم عامل Elbrus، نیازی به داشتن یک سیستم سخت افزاری مبتنی بر پردازنده Elbrus نیست. "PDK "Elbrus" برای x86 وجود دارد - در واقع، به شکل یک دیسک نصب در دامنه عمومی ظاهر شد. به هر حال، یک پاورقی وجود دارد "PDK - کیت توسعه پلت فرم، کیت توسعه دهنده" - عالی است، یعنی حداقل یک کامپایلر در آنجا وجود دارد.

یک عقب نشینی اجباری کوچک دیگر. واقعیت این است که من زمانی با نرم افزارهای داخلی مانند MSVS و Baguette RTOS سر و کار داشتم. من تجربه کار با قطعات داخلی، از جمله پردازنده MCST را داشتم. بنابراین، با مسئولیت کامل می توانم بگویم که در این زمینه یک ویژگی خاص وجود دارد و سعی می کنم در مقاله به آن اشاره نکنم. وقتی واقعاً بخواهم، برچسب [TBD] را می گذارم. بنابراین ما سعی خواهیم کرد بدون ترول کردن آشکار و ناله های پیش پا افتاده این کار را انجام دهیم. در پایان، صنعت دفاعی روسیه و سازمان‌های دولتی باید درک شوند. کشور بزرگ - بودجه کوچک.. [TBD].

مرحله صفر - دانلود. قابل ذکر است که خبر در دسترس قرار گرفتن سیستم عامل البروس طنین انداز شد به طوری که سرور توزیع از کار افتاد. [TBD] با تشکر از Yandex و مهندس که به فکر انتقال آن به آنجا بود. بنابراین سرعت دانلود خوب است.

مرحله اول - نصب و راه اندازی. من آن را روی اولین هایپروایزر که برای استفاده رایگان در دسترس بود نصب کردم. من دو هسته، چند گیگ رم، 32 مگابایت برای ویدیو اختصاص دادم (فکر کردم یک رابط گرافیکی وجود خواهد داشت). دیسک طبق معمول است - 32 گیگابایت.
نصب رو شروع کردم من از دستورالعمل نصب استفاده نکردم، بنابراین نمی توانم در مورد آن نظر بدهم. رابط نصب TUI به شدت مینیمالیستی است.

پشتیبان گیری لینوکس از Veeam در سیستم عامل Elbrus. جایگزینی واردات ['?' | '.' | '!']
خوب، عالی است، ما می توانیم بدون ماوس انجام دهیم.

من پنجره بعدی را در تلاش دوم مدیریت کردم. چرا هنگام نصب از دیسک، دستگاه پیش‌فرض sr0 [TBD] را انتخاب نمی‌کنید؟
منبع CD-ROM را انتخاب کرده و ادامه دهید.

پشتیبان گیری لینوکس از Veeam در سیستم عامل Elbrus. جایگزینی واردات ['?' | '.' | '!']

هنگام انتخاب منطقه زمانی، ناگهان متوجه شدم که سیستم از فرآیند بوت اولیه استفاده می کند و من از TTY0 کار می کنم.

پشتیبان گیری لینوکس از Veeam در سیستم عامل Elbrus. جایگزینی واردات ['?' | '.' | '!']

خوب، پس بیایید "البروس" را به عنوان یک جامعه طبقه بندی کنیم مومنان قدیمی[TBD]. در اصل، این خوب است: برای مشاهده نحوه عملکرد فرآیند دانلود، نیازی به درخواست کد منبع ندارید، زیرا همه چیز اسکریپت شده است.

بقیه تقریباً بی اهمیت است: ما همه چیز را قرار می دهیم و توافق می کنیم. در طول مسیر متوجه می شویم که هسته از 3.14.79-13.84 استفاده می شود. هوم، دبیان 7 3.2 [TBD] داشت.

در مرحله بعد پارتیشن بندی دیسک پیش فرض را انتخاب کنید و... یک اخطار می بینیم:

پشتیبان گیری لینوکس از Veeam در سیستم عامل Elbrus. جایگزینی واردات ['?' | '.' | '!']

هوم، به نوعی پارتیشن بندی خودکار به خوبی با دیسک 32 گیگ کنار نمی آمد. من دیسک را تغییر ندادم؛ من تلاش را با پارتیشن بندی دستی دیسک به سبک "همه در یک" تکمیل کردم. من مجبور شدم ext3 را نصب کنم، زیرا /boot نمی تواند در ext4 باشد.
سیستم بدون هیچ حادثه ای بالا آمد.

در مرحله دوم - جستجو برای جایگزین
پس از جستجو در محتویات دیسک دوم، متوجه شدم که این یک مخزن با اضافی است. در بسته بندی ها و با نگاه کردن به /etc/apt/sources.list، متوجه شدم که باید در /mnt/cdrom نصب شود. اما /etc/os-release را پیدا نکردم. اما ‎/etc/mcst-version با محتویات 3.0-rc36 وجود دارد. 3.0 احتمالا نسخه است - به نظر می رسد مناسب است، اما rc36؟ به طور کلی، نرم افزارهای شخص ثالث به احتمال زیاد نمی توانند این توزیع را به روش کلاسیک تشخیص دهند.

در پارتیشن ریشه، دایرکتوری mcst/ توجه من را به خود جلب می کند و در آنجا، با یک قلب در حال غرق، /mcst/backup را کشف کردم. یعنی یک ابزار پشتیبان وجود دارد و در سیستم تعبیه شده است! فکر کردم: «عالی، بیایید ببینیم چگونه کار می‌کند!»

مشخص شد که یک اسکریپت bash 4Kb /mcst/bin/backup وجود دارد که کپی فایل را فراهم می کند. به طور پیش فرض - به پوشه /mcst/backup. در کد منبع انتظار داشتم دستور rsync را ببینم، اما در پیکربندی پیش فرض نیست. اسکریپت به سادگی فایل ها را کپی می کند. دستور چیزی شبیه به این است:

cp -rpdx <file backup> <file>

کل فایل /mcst/bin/backup اینجاستمن بلافاصله به شما هشدار می دهم که این فیلمنامه به تنهایی برای درک کامل کافی نیست. توابع را از /mcst/bin/source می کشد، که چیزی شبیه به کتابخانه ای از توابع است. من آن را وارد نکردم (44 کیلوبایت).

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

اگرچه، شاید من چیزی را نفهمیدم؟ شاید کسی بتواند در نظرات توضیح دهد: چگونه این اسکریپت پشتیبان گیری امن و قابل اعتماد داده را تضمین می کند؟ [TBD]

rsync، به هر حال، در افزونه گنجانده شده است. مخازن نسخه 3.1.3. من فکر می کنم استفاده از rsync هنوز جایگزین بهتری برای برنامه /mcst/bin/backup است.

بعد، تصمیم گرفتم یک مورد تازه بگذارم Veeam Agent برای لینوکس. یکی می پرسد: "ویم و جایگزینی واردات چه ربطی به آن دارد؟" بله، در رجیستر نیست، اما توسط FSTEC تایید شده است، به این معنی که در صورت عدم وجود جایگزین می توان از آن استفاده کرد. صرف پانزده دقیقه روی گزینه های جایگزین از ثبت، من توانستم 3 لینک برای کلمه "پشتیبان گیری" پیدا کنم (هیچ پیوند مربوط به سوال من برای کلمه "رزرو" نیست). من تجزیه و تحلیل عمیقی از این برنامه ها انجام نداده ام، بنابراین سعی نمی کنم قضاوت کنم که چقدر برای پشتیبان گیری از ماشین هایی که لینوکس دارند مناسب هستند. هر کس به آن نیاز دارد نتیجه گیری خود را می کند و آن را در نظرات به اشتراک می گذارد.

گام سوم - نصب Veeam Agent برای لینوکس.
بنابراین، Veeam Agent برای لینوکس از دو بسته تشکیل شده است: ماژول کرنل veeamsnap (به هر حال، منبع اینجا) و کد فضای کاربری اختصاصی در قالب بسته veeam.

یک مشکل کوچک در نصب ماژول هسته وجود داشت - بسته dkms از دست رفته. این سرویسی است که به شما امکان می دهد ماژول های هسته را از منبع بسازید. به عنوان یک قاعده، در همه توزیع های deb در دسترس است. مجبور شدم آن را از یک مخزن deb شخص ثالث دانلود کنم. یکی از چیزهایی که من را خوشحال کرد این است که بسته به معماری بستگی ندارد، بنابراین مانند یک بومی مناسب است. چرا در لیست بسته های موجود گنجانده نشده است، یا بهتر است بگوییم، [TBD] توسعه نیافته است؟ شاید فرض بر این باشد که هیچ کس نباید هیچ ماژول هسته غیر MCST را بسازد و اجرا کند. در اینجا واقعاً یک اختلاف وجود دارد - زیرا هدرهای لینوکس وجود دارد. یعنی در صورت تمایل، ماژول را می توان با دست مونتاژ کرد و با راه اندازی دستگاه توسط یک اسکریپت راه اندازی کرد. من فکر می کنم نباید انتظار به روز رسانی های مکرر از MCST [TBD] داشته باشید.

من فکر کردم "خوب، ماژول نصب شده است - سخت ترین بخش به پایان رسیده است." تفاوت، البته، فقط در نام است، اما این تفاوت باعث می‌شود که تقریباً تمام بسته‌های موجود در مخازن deb شخص ثالث با سیستم‌عامل Elbrus ناسازگار باشند. این سوء تفاهم آزاردهنده را می توان به سادگی از بین برد: فقط بسته را جدا کنید، اطلاعات مربوط به معماری را تصحیح کنید و آن را دوباره کنار هم قرار دهید. چگونه انجامش بدهیم گوگلش کرد فورا.

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

مشکل دیگر وابستگی هاست. به نظر می رسد فایل های لازم وجود دارد، اما بسته ها نیستند. تصور این بود که نام بسته ها با "آنالوگ های وارداتی" آنها متفاوت است. شاید بسته بندی کتابخانه ها متفاوت باشد. من خیلی وارد جزئیات نشدم، تقریباً تمام وابستگی ها را حذف کردم و نصب ادامه یافت.

سپس مشکلاتی با کد شروع سرویس ظاهر شد. اسکریپت /lib/init/vars.sh وجود نداشت. به دلایلی، البروس بدون آن مدیریت می کند، بنابراین ما آن را نیز حذف خواهیم کرد. سپس باید تابع خروجی پیام را جایگزین می‌کردیم: توابع log_daemon_msg و log_end_msg وجود نداشتند. پس از جستجو در فایل /lib/lsb/init-functions، تابع log_success_msg را پیدا کردم - برای آزمایش‌ها برای ما خوب است. به هر حال، در فایل /lib/lsb/init-functions خط "# Source SuSE`s rc functions" در ابتدای فایل [TBD] قرار دارد.

پس از چنین پردازش خشن بسته با یک فایل، پشتیبان گیری کل ماشین در سهم NFS با موفقیت راه اندازی شد. نصب پشتیبان نیز موفقیت آمیز بود. بنابراین، من معتقدم که برای تهیه نسخه پشتیبان از یک ماشین با Elbrus PDK، دانلود شده "درست مثل آن" بدون هیچ تعهدی، Veeam Agent برای لینوکس قطعا مناسب است. حتی بعد از تمام تغییرات با یک فایل.

البته، کیت توزیع سیستم عامل Elbrus به طور رسمی پشتیبانی نمی شود، زیرا در لیست موارد پشتیبانی شده قرار ندارد. علاوه بر این، Veeam Agent برای لینوکس بر روی آن توسط بخش QA آزمایش نشده است، بنابراین آنها. هیچ پشتیبانی وجود ندارد (حداقل در زمان انتشار مقاله).

امیدوارم مقاله برای کسانی که در تلاش برای اجرای دستور شماره 334 مورخ 29.06.2017 خرداد XNUMX هستند مفید واقع شود. مال من به تو... [TBD].

منبع: www.habr.com

اضافه کردن نظر