ایلبرس OS پر Veeam سے لینکس بیک اپ۔ درآمد متبادل ['?' | '.' | '!']

سب کو سلام۔
Habré پر حالیہ مضامین عملی طور پر متبادل درآمد کریں۔ حصہ 1. اختیارات и موسیقی زیادہ دیر تک نہیں چلی... یا کیسے ایلبرس OS کبھی آزاد نہیں ہوا۔ مجھے لاتعلق نہیں چھوڑا. میں نے بیک اپ ٹاسک کے تناظر میں اس مسئلے کا مطالعہ کرنے کا فیصلہ کیا۔ اس کے علاوہ، میں یہ مضمون Veeam سافٹ ویئر پروڈکٹس کا ذکر کیا گیا ہے، جس کا مطلب ہے کہ یہ مسئلہ درآمدی متبادل کے تناظر میں خاص طور پر متعلقہ ہو سکتا ہے۔

Elbrus OS پر Veeam سے Linux بیک اپ۔ درآمد متبادل ['?' | '.' | '!']
اصل تصویر کا ذریعہ

سب سے پہلے، میں نے ایلبرس OS ڈاؤن لوڈ کرنے کا فیصلہ کیا، یا اس کے بجائے، صرف x86_64 فن تعمیر کے لیے دستیاب تقسیم، دیکھیں کہ یہ کیسے کام کرتا ہے، اور اس پر لینکس کے لیے Veeam ایجنٹ انسٹال کرنے کی کوشش کریں۔ اگر آپ جاننا چاہتے ہیں کہ اس سے کیا نکلا ہے تو براہ کرم بلی کو دیکھیں۔

لہذا، ایک چھوٹا سا اختلاف، اگر کسی کو معلوم نہ ہو۔ "ایلبرس" ایسا ہی ہے۔ پروسیسر ایک مخصوص کمانڈ سسٹم کے ساتھ۔ اس کے علاوہ ایلبرس او ایس سافٹ ویئر بھی ہے۔ اور - عام خیال کے برعکس - Elbrus OS کو چلانے کے لیے، Elbrus پروسیسر پر مبنی ہارڈویئر سسٹم کا ہونا ضروری نہیں ہے۔ x86 کے لیے "PDK "Elbrus" ہے - درحقیقت، یہ پبلک ڈومین میں انسٹالیشن ڈسک کی شکل میں ظاہر ہوا ہے۔ ویسے، ایک فوٹ نوٹ ہے "PDK - پلیٹ فارم ڈویلپمنٹ کٹ، ڈویلپر کٹ" - بہت اچھا، اس کا مطلب ہے کہ وہاں کم از کم ایک کمپائلر موجود ہے۔

ایک اور چھوٹی جبری پسپائی۔ حقیقت یہ ہے کہ میں نے ایک بار گھریلو سافٹ ویئر، جیسے MSVS اور Baguette RTOS سے نمٹا تھا۔ مجھے گھریلو اجزاء کے ساتھ کام کرنے کا تجربہ تھا، بشمول MCST کا پروسیسر۔ لہذا، میں پوری ذمہ داری کے ساتھ کہہ سکتا ہوں کہ اس علاقے میں ایک خاصیت ہے اور میں مضمون میں اس کو چھونے کی کوشش نہیں کروں گا۔ جب میں واقعی چاہوں گا، میں ٹیگ [TBD] ڈالوں گا۔ لہذا ہم مکمل طور پر ٹرولنگ اور عام آہوں کے بغیر کرنے کی کوشش کریں گے۔ آخر میں، روسی دفاعی صنعت اور حکومتی اداروں کو سمجھنے کی ضرورت ہے۔ بڑا ملک - چھوٹا بجٹ.. [TBD]۔

زیرو اسٹیج - ڈاؤن لوڈ کریں. یہ بات قابل ذکر ہے کہ ایلبرس او ایس کے دستیاب ہونے کی خبر نے ایک گونج پیدا کر دی، اتنا کہ تقسیم کا سرور نیچے چلا گیا۔ [TBD] Yandex اور انجینئر کا شکریہ جنہوں نے اسے وہاں منتقل کرنے کا سوچا۔ تو ڈاؤن لوڈ کی رفتار اچھی ہے۔

پہلے مرحلے - تنصیب. میں نے اسے پہلے ہائپر وائزر پر انسٹال کیا جو مفت استعمال کے لیے دستیاب تھا۔ میں نے ویڈیو کے لیے دو کور، ریم کے چند گِگس، 32 MB مختص کیے (ایک گرافیکل انٹرفیس ہوگا، میں نے سوچا)۔ ڈسک ہمیشہ کی طرح ہے - 32 جی بی۔
میں نے انسٹالیشن شروع کر دی۔ میں نے انسٹالیشن کی ہدایات کا استعمال نہیں کیا، اس لیے میں اس پر تبصرہ نہیں کر سکتا۔ TUI انسٹالیشن انٹرفیس انتہائی کم سے کم ہے۔

Elbrus OS پر Veeam سے Linux بیک اپ۔ درآمد متبادل ['?' | '.' | '!']
ٹھیک ہے، بہت اچھا، ہم ایک ماؤس کے بغیر کر سکتے ہیں.

میں نے دوسری کوشش میں اگلی ونڈو کا انتظام کیا۔ ڈسک سے انسٹال کرتے وقت ڈیفالٹ ڈیوائس sr0 [TBD] کو کیوں نہ منتخب کریں؟
CD-ROM ذریعہ منتخب کریں اور آگے بڑھیں۔

Elbrus OS پر Veeam سے Linux بیک اپ۔ درآمد متبادل ['?' | '.' | '!']

ٹائم زون کا انتخاب کرتے وقت، مجھے اچانک احساس ہوا کہ سسٹم init بوٹ کے عمل کو استعمال کرتا ہے، اور میں TTY0 سے کام کر رہا ہوں۔

Elbrus OS پر Veeam سے Linux بیک اپ۔ درآمد متبادل ['?' | '.' | '!']

ٹھیک ہے، پھر آئیے "ایلبرس" کو ایک کمیونٹی کے طور پر درجہ بندی کریں۔ پرانے ماننے والے[TBD]۔ اصولی طور پر، یہ اچھا ہے: آپ کو یہ دیکھنے کے لیے سورس کوڈ مانگنے کی ضرورت نہیں ہے کہ ڈاؤن لوڈ کا عمل کیسے کام کرتا ہے، کیونکہ سب کچھ اسکرپٹڈ ہے۔

باقی تقریبا غیر اہم ہے: ہم سب کچھ ڈالتے ہیں اور متفق ہیں. راستے میں، ہمیں پتہ چلا کہ دانا 3.14.79-13.84 استعمال ہوتا ہے۔ ہمم، Debian 7 میں 3.2 [TBD] تھا۔

اگلا، ڈیفالٹ ڈسک پارٹیشننگ کو منتخب کریں اور... ہمیں ایک انتباہ نظر آتا ہے:

Elbrus OS پر Veeam سے Linux بیک اپ۔ درآمد متبادل ['?' | '.' | '!']

ہمم، کسی نہ کسی طرح خودکار تقسیم نے 32 گیگ ڈسک کا مقابلہ نہیں کیا۔ میں نے ڈسک کو تبدیل نہیں کیا؛ میں نے "آل ان ون" انداز میں دستی ڈسک تقسیم کے ساتھ تلاش مکمل کی۔ مجھے ext3 انسٹال کرنا پڑا، کیونکہ /boot ext4 میں نہیں ہو سکتا۔
سسٹم بغیر کسی واقعے کے سامنے آیا۔

دوسرے مرحلے - متبادل تلاش کریں۔
دوسری ڈسک کے مشمولات کو چھاننے کے بعد، میں نے محسوس کیا کہ یہ اضافی کے ساتھ ایک ذخیرہ ہے۔ پیکجوں میں اور /etc/apt/sources.list کو دیکھتے ہوئے، میں نے محسوس کیا کہ اسے /mnt/cdrom میں نصب کرنے کی ضرورت ہے۔ لیکن مجھے /etc/os-release نہیں ملا۔ لیکن مواد 3.0-rc36 کے ساتھ /etc/mcst-version موجود ہے۔ 3.0 شاید ورژن ہے - ایسا لگتا ہے کہ یہ فٹ ہے، لیکن rc36؟ عام طور پر، تھرڈ پارٹی سافٹ ویئر غالباً اس تقسیم کو کلاسیکی انداز میں پہچاننے کے قابل نہیں ہوگا۔

روٹ پارٹیشن میں، /mcst ڈائریکٹری میری آنکھ کو پکڑتی ہے، اور وہاں، ڈوبتے ہوئے دل کے ساتھ، میں نے /mcst/backup کو دریافت کیا۔ یعنی، ایک بیک اپ ٹول ہے، اور یہ سسٹم میں شامل ہے! "بہت اچھا،" میں نے سوچا، "آئیے دیکھتے ہیں کہ یہ کیسے کام کرتا ہے!"

پتہ چلا کہ ایک 4Kb bash اسکرپٹ /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 ایجنٹ کی تنصیب۔
لہذا، لینکس کے لیے Veeam ایجنٹ دو پیکجوں پر مشتمل ہے: veeamsnap کرنل ماڈیول (ویسے، یہاں کا ذریعہ) اور ویم پیکیج کی شکل میں ملکیتی یوزر اسپیس کوڈ۔

کرنل ماڈیول کو انسٹال کرنے میں ایک چھوٹا مسئلہ تھا - غائب dkms پیکیج۔ یہ ایک ایسی خدمت ہے جو آپ کو ذریعہ سے کرنل ماڈیول بنانے کی اجازت دیتی ہے۔ ایک اصول کے طور پر، یہ تمام deb تقسیم پر دستیاب ہے۔ مجھے اسے تھرڈ پارٹی ڈیب ریپوزٹری سے ڈاؤن لوڈ کرنا پڑا۔ ایک چیز جس نے مجھے خوش کیا وہ یہ ہے کہ پیکیج فن تعمیر پر منحصر نہیں ہے، لہذا یہ مقامی کی طرح فٹ بیٹھتا ہے۔ اسے دستیاب پیکجز کی فہرست میں کیوں شامل نہیں کیا گیا، یا اس کے بجائے، [TBD] تیار نہیں کیا گیا؟ شاید یہ فرض کیا جاتا ہے کہ کسی کو بھی غیر MCST کرنل ماڈیولز نہیں بنانا اور نہیں چلانا چاہیے۔ یہاں واقعی ایک تضاد ہے - چونکہ یہاں لینکس ہیڈر ہیں۔ یعنی، ماڈیول، اگر چاہیں، ہاتھ سے جمع کیا جا سکتا ہے اور مشین کے شروع ہونے پر اسکرپٹ کے ذریعے لانچ کیا جا سکتا ہے۔ میرے خیال میں آپ کو MCST [TBD] سے متواتر اپ ڈیٹس کی توقع نہیں کرنی چاہیے۔

"ٹھیک ہے، ماڈیول انسٹال ہو گیا ہے - سب سے مشکل حصہ ختم ہو گیا ہے،" میں نے سوچا... ڈیب ریپوزٹری کے لیے ویم پیکیج amd64 پلیٹ فارم کے لیے ہے، اور Elbrus OS کے پاس ایک 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 غائب تھا۔ کسی وجہ سے، Elbrus اس کے بغیر انتظام کرتا ہے، لہذا ہم اسے بھی ہٹا دیں گے۔ اگلا، ہمیں میسج آؤٹ پٹ فنکشن کو تبدیل کرنا پڑا: 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 ایجنٹ یقینی طور پر موزوں ہے۔ یہاں تک کہ ایک فائل کے ساتھ تمام تر ترمیم کے بعد۔

یقیناً، ایلبرس او ایس ڈسٹری بیوشن کٹ باضابطہ طور پر تعاون یافتہ نہیں ہے، کیونکہ یہ معاون کی فہرست میں شامل نہیں ہے۔ اس کے علاوہ، لینکس کے لیے Veeam ایجنٹ کا QA ڈیپارٹمنٹ کے ذریعے تجربہ نہیں کیا گیا، اس لیے وہ۔ کوئی حمایت نہیں ہے (کم از کم مضمون کی اشاعت کے وقت)۔

مجھے امید ہے کہ مضمون ان لوگوں کے لیے کارآمد ثابت ہو گا جو 334 جون 29.06.2017 کے آرڈر نمبر XNUMX کو نافذ کرنے کی کوشش کر رہے ہیں۔ میں آپ کے لیے... [TBD]۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں