ايلبرس او ايس تي Veeam کان لينڪس بيڪ اپ. درآمد متبادل ['؟' | '.' | '!']

سڀني کي سلام.
Habré تي تازو مضمون عملي طور درآمد متبادل. حصو 1. اختيارن и موسيقي گهڻي دير تائين نه هليو... يا ڪيئن ايلبرس او ايس ڪڏهن به آزاد نه ٿيو مون کي لاتعلق نه ڇڏيو. مون فيصلو ڪيو ته هن مسئلي کي بيڪ اپ ڪم جي حوالي سان پڙهو. ان کان علاوه، ۾ اهو مضمون Veeam سافٽ ويئر پراڊڪٽس جو ذڪر ڪيو ويو آهي، جنهن جو مطلب آهي ته مسئلو خاص طور تي درآمد جي متبادل جي حوالي سان لاڳاپيل هجي.

ايلبرس او ايس تي Veeam کان لينڪس بيڪ اپ. درآمد متبادل ['؟' | '.' | '!']
اصل تصوير جو ذريعو

سڀ کان پهريان، مون ايلبرس او ايس کي ڊائون لوڊ ڪرڻ جو فيصلو ڪيو، يا بلڪه، صرف x86_64 فن تعمير لاء دستياب تقسيم، ڏسو ته اهو ڪيئن ڪم ڪري ٿو، ۽ ان تي لينڪس لاء Veeam ايجنٽ انسٽال ڪرڻ جي ڪوشش ڪريو. جيڪڏھن توھان ڄاڻڻ چاھيو ٿا ته ھن مان ڇا نڪتو، مھرباني ڪري ٻلي کي ڏسو.

تنهن ڪري، هڪ ننڍڙو تڪرار، صورت ۾ ڪنهن کي خبر ناهي. ”ايلبرس“ ائين ئي آهي سي پي يو بلڪه مخصوص ڪمانڊ سسٽم سان. ان کان علاوه ايلبرس او ايس سافٽ ويئر آهي. ۽ - هڪ عام غلط فڪر جي برعڪس - ايلبرس او ايس ڪم ڪرڻ لاءِ، اهو ضروري ناهي ته هارڊويئر سسٽم هجي جيڪو ايلبرس پروسيسر تي ٻڌل هجي. اتي آهي "PDK "Elbrus" x86 لاءِ - حقيقت ۾، اهو عوامي ڊومين ۾ انسٽاليشن ڊسڪ جي صورت ۾ ظاهر ٿيو. رستي ۾، اتي هڪ فوٽ نوٽ آهي "PDK - پليٽ فارم ڊولپمينٽ کٽ، ڊولپر کٽ" - عظيم، انهي جو مطلب آهي ته اتي گهٽ ۾ گهٽ هڪ مرتب ڪندڙ آهي.

ٻيو ننڍڙو زبردستي واپسي. حقيقت اها آهي ته مون هڪ ڀيرو گهريلو سافٽ ويئر سان معاملو ڪيو، جهڙوڪ MSVS ۽ Baguette RTOS. مون کي گهريلو اجزاء سان ڪم ڪرڻ جو تجربو هو، بشمول MCST کان هڪ پروسيسر. تنهن ڪري، مان پوري ذميواري سان چئي سگهان ٿو ته هن علائقي ۾ هڪ خاص خصوصيت آهي ۽ اهو ئي آهي ته آئون مضمون ۾ نه ڇڪڻ جي ڪوشش ڪندس. جڏهن مان واقعي چاهيان ٿو، ته آئون ٽيگ [TBD] وجهي ڇڏيندس. تنهن ڪري اسان ڪوشش ڪنداسين ته بغير ڪنهن سڌريل ٽرولنگ ۽ بينل ميننگ کان سواءِ. آخر ۾، روسي دفاعي صنعت ۽ سرڪاري ادارن کي سمجهڻ جي ضرورت آهي. وڏو ملڪ - ننڍي بجيٽ.. [TBD].

صفر اسٽيج - ڊائون لوڊ. اهو قابل ذڪر آهي ته اها خبر آهي ته ايلبرس او ايس دستياب ٿي چڪي آهي هڪ گونج جو سبب بڻيو، ايتري قدر جو تقسيم سرور هيٺ ٿي ويو. [TBD] مهرباني Yandex ۽ انجنيئر جي جنهن ان کي اتي منتقل ڪرڻ جو سوچيو. تنهنڪري ڊائون لوڊ جي رفتار سٺي آهي.

پهريون اسٽيج - تنصيب. مون ان کي نصب ڪيو پهرين هائپر ويزر تي جيڪو مفت استعمال لاءِ دستياب هو. مون ٻه ڪور مختص ڪيا، رام جا ٻه گيگ، وڊيو لاءِ 32 MB (اتي هڪ گرافڪ انٽرفيس هوندو، مون سوچيو). ڊسڪ عام طور تي آهي - 32 GB.
مون انسٽاليشن شروع ڪئي. مون انسٽاليشن جون هدايتون استعمال نه ڪيون، تنهنڪري مان ان تي تبصرو نٿو ڪري سگهان. TUI تنصيب انٽرفيس سختي سان minimalistic آهي.

ايلبرس او ايس تي Veeam کان لينڪس بيڪ اپ. درآمد متبادل ['؟' | '.' | '!']
چڱو، عظيم، اسان مائوس کان سواء ڪري سگهون ٿا.

مون ٻئي ڪوشش تي ايندڙ ونڊو کي منظم ڪيو. ڊسڪ مان انسٽال ڪرڻ وقت ڊفالٽ ڊيوائس sr0 [TBD] ڇو نه چونڊيو؟
CD-ROM جو ذريعو چونڊيو ۽ اڳتي وڌو.

ايلبرس او ايس تي Veeam کان لينڪس بيڪ اپ. درآمد متبادل ['؟' | '.' | '!']

ٽائيم زون چونڊڻ دوران، مون اوچتو محسوس ڪيو ته سسٽم init بوٽ پروسيس استعمال ڪري ٿو، ۽ مان TTY0 کان ڪم ڪري رهيو آهيان.

ايلبرس او ايس تي Veeam کان لينڪس بيڪ اپ. درآمد متبادل ['؟' | '.' | '!']

ٺيڪ آهي، پوءِ اچو ته ”ايلبرس“ کي ڪميونٽي طور درجه بندي ڪريون پراڻا ايمان وارا[ٽي بي ڊي]. اصول ۾، اھو سٺو آھي: توھان کي ڏسڻ جي ضرورت نھ آھي ماخذ ڪوڊ لاءِ پڇڻ لاءِ ته ڊائون لوڊ جو عمل ڪيئن ڪم ڪري ٿو، ڇو ته سڀ ڪجھ اسڪرپٽ ٿيل آھي.

باقي تقريبا غير ضروري آهي: اسان سڀ ڪجهه رکون ٿا ۽ متفق آهيون. رستي ۾، اسان کي معلوم ٿئي ٿو ته ڪنيل استعمال ڪيو ويو آهي 3.14.79-13.84. هيم، ڊيبين 7 وٽ 3.2 [TBD] هو.

اڳيون، ڊفالٽ ڊسڪ ورهاڱي کي چونڊيو ۽... اسان هڪ ڊيڄاريندڙ ڏسون ٿا:

ايلبرس او ايس تي Veeam کان لينڪس بيڪ اپ. درآمد متبادل ['؟' | '.' | '!']

ها، ڪنهن به طريقي سان خودڪار ورهاڱي کي 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. اھو آھي، ھڪڙو بيڪ اپ اوزار آھي، ۽ اھو سسٽم ۾ ٺاھيو ويو آھي! ”زبردست،“ مون سوچيو، ”اچو ته ڏسون اهو ڪيئن ڪم ڪري ٿو!

اهو ظاهر ٿيو ته اتي هڪ 4Kb بش اسڪرپٽ آهي /mcst/bin/backup جيڪو فائل ڪاپي ڪري ٿو. ڊفالٽ طور - /mcst/backup ڊاريڪٽري ڏانهن. سورس ڪوڊ ۾ مون کي rsync حڪم ڏسڻ جي اميد هئي، پر اهو ڊفالٽ ترتيب ۾ ناهي. اسڪرپٽ صرف فائلن کي نقل ڪري ٿو. حڪم ڪجهه هن طرح نظر اچي ٿو:

cp -rpdx <file backup> <file>

پوري فائل /mcst/bin/backup هتي آهيمان توهان کي فوري طور تي ڊيڄاريان ٿو ته هي اسڪرپٽ اڪيلو مڪمل طور تي سمجهڻ لاء ڪافي ناهي. اهو /mcst/bin/source مان افعال کي ڇڪي ٿو، جيڪو ڪجهه ڪمن جي لائبريري وانگر آهي. مون ان کي شامل نه ڪيو (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

جيتوڻيڪ، شايد مون کي ڪجهه سمجهي نه سگهيو آهي؟ ٿي سگهي ٿو ڪو ماڻهو تبصرن ۾ وضاحت ڪري سگهي ٿو: هي اسڪرپٽ ڪيئن محفوظ ۽ قابل اعتماد ڊيٽا بيڪ اپ کي يقيني بڻائي ٿو؟ [TBD]

rsync، رستي ۾، اضافو ۾ شامل ڪيو ويو آهي. ذخيرو. نسخو 3.1.3. منهنجو خيال آهي ته rsync استعمال ڪرڻ اڃا به بهتر متبادل آهي /mcst/bin/backup ايپليڪيشن.

اڳيون، مون هڪ تازو رکڻ جو فيصلو ڪيو لينڪس لاءِ ويم ايجنٽ. ڪو پڇندو: "ويم ۽ درآمد جي متبادل جو ان سان ڇا تعلق آهي؟" ها، اهو رجسٽر ۾ ناهي، پر اهو FSTEC پاران تصديق ٿيل آهي، جنهن جو مطلب آهي ته متبادل جي غير موجودگي ۾ اهو استعمال ڪري سگهجي ٿو. کان متبادل تي پندرهن منٽ خرچ رجسٽري، مان لفظ ”بيڪ اپ“ لاءِ 3 لنڪ ڳولڻ جي قابل ٿيس (ڪو به لفظ ”رزرو“ لاءِ منهنجي سوال سان لاڳاپيل ناهي). مون انهن پروگرامن جو ڪو گہرا تجزيو نه ڪيو آهي، تنهن ڪري مان اهو فيصلو ڪرڻ جي ڪوشش نه ڪندس ته اهي لينڪس تي هلندڙ مشينن کي بيڪ اپ ڪرڻ لاءِ ڪيترا مناسب آهن. جنھن کي ضرورت آھي اھو پنھنجو نتيجو ڪڍندو ۽ ان کي تبصرن ۾ حصيداري ڪندو.

اسٽيج ٽي - لينڪس لاءِ ويم ايجنٽ جي تنصيب.
تنهن ڪري، لينڪس لاء Veeam ايجنٽ ٻن پيڪيجز تي مشتمل آهي: veeamsnap ڪنييل ماڊل (رستي ذريعي، ذريعو هتي) ۽ ملڪيت وارو صارف-اسپيس ڪوڊ ويم پيڪيج جي صورت ۾.

kernel module انسٽال ڪرڻ ۾ ھڪڙو ننڍڙو مسئلو ھو - غائب dkms پيڪيج. هي هڪ خدمت آهي جيڪا توهان کي اجازت ڏئي ٿي ته ڪنيل ماڊلز کي ماخذ کان ٺاهي. ضابطي جي طور تي، اهو موجود آهي سڀني ڊيب تقسيم تي. مون کي ان کي ڊائون لوڊ ڪرڻو پيو ٽئين پارٽي ڊيب مخزن مان. ھڪڙي شيء جيڪا مون کي خوش ڪيو آھي اھو اھو آھي ته پيڪيج فن تعمير تي منحصر نه آھي، تنھنڪري اھو ھڪڙي اصلي وانگر آھي. ان کي دستياب پيڪيجز جي لسٽ ۾ ڇو شامل نه ڪيو ويو، يا بلڪه، ترقي يافته نه ڪيو ويو [TBD]؟ شايد اهو فرض ڪيو ويو آهي ته ڪو به غير MCST ڪنييل ماڊل ٺاهي ۽ هلائڻ نه گهرجي. هتي واقعي هڪ تفاوت آهي - ڇاڪاڻ ته هتي لينڪس-هيڊر آهن. اھو آھي، ماڊل، جيڪڏھن گھربل آھي، ھٿ سان گڏ ڪري سگھجي ٿو ۽ ھڪڙي رسم الخط ذريعي شروع ڪيو وڃي جڏھن مشين شروع ٿئي. منهنجو خيال آهي ته توهان کي MCST [TBD] کان بار بار اپڊيٽ جي توقع نه رکڻ گهرجي.

”ٺيڪ آهي، ماڊل انسٽال ٿيل آهي - تمام ڏکيو حصو ختم ٿي ويو آهي،“ مون سوچيو... ڊيب مخزن لاءِ ويم پيڪيج amd64 پليٽ فارم لاءِ آهي، ۽ ايلبرس او ايس وٽ هڪ x86_64 [TBD] پليٽ فارم آهي. فرق، يقينا، صرف نالي ۾ آهي، پر اهو فرق تقريبا سڀني پيڪيجز کي ٽئين پارٽي جي ڊيب مخزن جي ايلبرس OS سان مطابقت نه رکي ٿو. هي پريشان ڪندڙ غلط فهمي آسانيءَ سان ختم ڪري سگهجي ٿي: صرف پيڪيج کي ڌار ڪريو، فن تعمير بابت معلومات کي درست ڪريو ۽ ان کي گڏ ڪريو. اهو ڪيئن ڪجي گوگل ڪيو فوري طور تي.

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] فائل جي شروعات ۾ آهي.

فائل سان گڏ پيڪيج جي اهڙي خراب پروسيسنگ کان پوء، اين ايف ايس شيئر تي پوري مشين بيڪ اپ ڪاميابي سان شروع ڪئي وئي. بيڪ اپ مائونٽ پڻ ڪامياب ٿي ويو. تنهن ڪري، مان سمجهان ٿو، ايلبرس PDK سان هڪ مشين کي بيڪ اپ ڪرڻ لاء، ڊائون لوڊ "بس انهي وانگر" بغير ڪنهن به ذميواري، لينڪس لاء ويم ايجنٽ ضرور مناسب آهي. جيتوڻيڪ هڪ فائل سان سڀني تبديلين کان پوء.

يقينن، ايلبرس او ايس ورهائڻ واري کٽ رسمي طور تي سپورٽ نه ڪئي وئي آهي، ڇاڪاڻ ته اهو سپورٽ وارن جي فهرست ۾ شامل نه آهي. ان کان سواء، لينڪس لاء ويم ايجنٽ ان تي آزمائشي نه ڪيو ويو QA ڊپارٽمينٽ، تنهن ڪري اهي. ڪابه مدد نه آهي (گهٽ ۾ گهٽ مضمون جي اشاعت جي وقت تي).

مون کي اميد آهي ته مضمون انهن لاء مفيد ثابت ٿيندو جيڪي 334 جون 29.06.2017 جي آرڊر نمبر XNUMX تي عمل ڪرڻ جي ڪوشش ڪري رهيا آهن. منهنجي تو لاءِ... [TBD].

جو ذريعو: www.habr.com

تبصرو شامل ڪريو