एल्ब्रस ओएस पर वीम से लिनक्स बैकअप। आयात प्रतिस्थापन ['?' | '.' | '!']

नमस्कार.
हैबे पर हाल के लेख व्यवहार में आयात प्रतिस्थापन। भाग 1. विकल्प и संगीत लंबे समय तक नहीं चला... या कैसे एल्ब्रस ओएस कभी मुफ़्त नहीं हुआ मुझे उदासीन नहीं छोड़ा. मैंने बैकअप कार्य के संदर्भ में इस मुद्दे का अध्ययन करने का निर्णय लिया। इसके अलावा, में यह लेख वीम सॉफ्टवेयर उत्पादों का उल्लेख किया गया है, जिसका अर्थ है कि यह मुद्दा विशेष रूप से आयात प्रतिस्थापन के संदर्भ में प्रासंगिक हो सकता है।

एल्ब्रस ओएस पर वीम से लिनक्स बैकअप। आयात प्रतिस्थापन ['?' | '.' | '!']
मूल छवि स्रोत

सबसे पहले, मैंने एल्ब्रस ओएस डाउनलोड करने का फैसला किया, या बल्कि, केवल x86_64 आर्किटेक्चर के लिए उपलब्ध वितरण, देखें कि यह कैसे काम करता है, और उस पर लिनक्स के लिए वीम एजेंट स्थापित करने का प्रयास करें। यदि आप जानना चाहते हैं कि इससे क्या निकला, तो कृपया बिल्ली देखें।

तो, यदि किसी को पता नहीं है तो एक छोटा सा विषयांतर। "एल्ब्रस" वैसा ही है प्रोसेसर एक विशिष्ट कमांड सिस्टम के साथ। इसके अतिरिक्त, एल्ब्रस ओएस सॉफ्टवेयर है। और - आम धारणा के विपरीत - एल्ब्रस ओएस को संचालित करने के लिए, एल्ब्रस प्रोसेसर पर आधारित हार्डवेयर सिस्टम का होना आवश्यक नहीं है। x86 के लिए "पीडीके "एल्ब्रस" है - वास्तव में, यह एक इंस्टॉलेशन डिस्क के रूप में सार्वजनिक डोमेन में दिखाई दिया। वैसे, एक फ़ुटनोट है "पीडीके - प्लेटफ़ॉर्म डेवलपमेंट किट, डेवलपर किट" - बढ़िया, इसका मतलब है कि वहां कम से कम एक कंपाइलर है।

एक और छोटा सा मजबूर पीछे हटना। तथ्य यह है कि मैं एक बार एमएसवीएस और बागुएट आरटीओएस जैसे घरेलू सॉफ्टवेयर से निपट चुका था। मुझे एमसीएसटी के प्रोसेसर सहित घरेलू घटकों के साथ काम करने का अनुभव था। इसलिए, मैं पूरी जिम्मेदारी के साथ कह सकता हूं कि इस क्षेत्र में एक निश्चित विशिष्टता है और मैं कोशिश करूंगा कि लेख में इसे न छूऊं। जब मैं वास्तव में चाहूँगा, मैं टैग [टीबीडी] डालूँगा। इसलिए हम पूरी तरह से ट्रोलिंग और सामान्य विलाप के बिना काम करने की कोशिश करेंगे। अंत में, रूसी रक्षा उद्योग और सरकारी एजेंसियों को समझने की जरूरत है। बड़ा देश - छोटा बजट.. [टीबीडी]।

शून्य अवस्था - डाउनलोड करना। यह उल्लेखनीय है कि एल्ब्रस ओएस के उपलब्ध होने की खबर इतनी गूंजी कि वितरण सर्वर डाउन हो गया। [टीबीडी] यांडेक्स और उस इंजीनियर को धन्यवाद जिन्होंने इसे वहां ले जाने के बारे में सोचा। तो डाउनलोड स्पीड अच्छी है.

पहले चरण - स्थापना। मैंने इसे पहले हाइपरवाइज़र पर स्थापित किया जो मुफ़्त उपयोग के लिए उपलब्ध था। मैंने दो कोर, कुछ गीगा रैम, वीडियो के लिए 32 एमबी (एक ग्राफिकल इंटरफ़ेस होगा, मैंने सोचा था) आवंटित किया। डिस्क हमेशा की तरह 32 जीबी है।
मैंने इंस्टालेशन शुरू कर दिया. मैंने इंस्टॉलेशन निर्देशों का उपयोग नहीं किया, इसलिए मैं इस पर टिप्पणी नहीं कर सकता। टीयूआई इंस्टॉलेशन इंटरफ़ेस गंभीर रूप से न्यूनतर है।

एल्ब्रस ओएस पर वीम से लिनक्स बैकअप। आयात प्रतिस्थापन ['?' | '.' | '!']
अच्छा, बढ़िया, हम चूहे के बिना भी काम कर सकते हैं।

मैंने दूसरे प्रयास में अगली विंडो प्रबंधित की। डिस्क से इंस्टॉल करते समय डिफ़ॉल्ट डिवाइस sr0 [TBD] का चयन क्यों नहीं किया जाता?
CD-ROM स्रोत का चयन करें और आगे बढ़ें।

एल्ब्रस ओएस पर वीम से लिनक्स बैकअप। आयात प्रतिस्थापन ['?' | '.' | '!']

समय क्षेत्र का चयन करते समय, मुझे अचानक एहसास हुआ कि सिस्टम init बूट प्रक्रिया का उपयोग करता है, और मैं TTY0 से काम कर रहा हूं।

एल्ब्रस ओएस पर वीम से लिनक्स बैकअप। आयात प्रतिस्थापन ['?' | '.' | '!']

ठीक है, तो आइए "एल्ब्रस" को एक समुदाय के रूप में वर्गीकृत करें पुराने विश्वासियों[टीबीडी]। सिद्धांत रूप में, यह अच्छा है: डाउनलोड प्रक्रिया कैसे काम करती है यह देखने के लिए आपको स्रोत कोड मांगने की ज़रूरत नहीं है, क्योंकि सब कुछ स्क्रिप्टेड है।

बाकी लगभग महत्वहीन है: हम सब कुछ डालते हैं और सहमत होते हैं। रास्ते में, हमें पता चला कि कर्नेल का उपयोग 3.14.79-13.84 किया गया है। हम्म, डेबियन 7 में 3.2 [टीबीडी] था।

इसके बाद, डिफ़ॉल्ट डिस्क विभाजन का चयन करें और... हमें एक चेतावनी दिखाई देती है:

एल्ब्रस ओएस पर वीम से लिनक्स बैकअप। आयात प्रतिस्थापन ['?' | '.' | '!']

हम्म, किसी तरह स्वचालित विभाजन 32 गीगा डिस्क के साथ अच्छी तरह से काम नहीं कर सका। मैंने डिस्क नहीं बदली; मैंने "ऑल-इन-वन" शैली में मैन्युअल डिस्क विभाजन के साथ खोज पूरी की। मुझे ext3 इंस्टॉल करना पड़ा, क्योंकि /boot ext4 में नहीं हो सका।
यह प्रणाली बिना किसी घटना के सामने आई।

दूसरे चरण - विकल्प खोजें।
दूसरी डिस्क की सामग्री को खंगालने के बाद, मुझे एहसास हुआ कि यह अतिरिक्त के साथ एक भंडार है। पैकेज में. और /etc/apt/sources.list को देखते हुए, मुझे एहसास हुआ कि इसे /mnt/cdrom में माउंट करने की आवश्यकता है। लेकिन मुझे /etc/os-रिलीज़ नहीं मिला। लेकिन सामग्री 3.0-rc36 के साथ /etc/mcst-version है। 3.0 शायद संस्करण है - यह फिट लगता है, लेकिन आरसी36? सामान्य तौर पर, तृतीय-पक्ष सॉफ़्टवेयर संभवतः इस वितरण को शास्त्रीय तरीके से पहचानने में सक्षम नहीं होगा।

रूट विभाजन में, /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 Agent for Linux состоит из двух пакетов: модуля ядра veeamsnap (кстати, स्रोत यहाँ) और वीईएएम पैकेज के रूप में मालिकाना उपयोगकर्ता-स्पेस कोड।

कर्नेल मॉड्यूल को स्थापित करने में एक छोटी सी समस्या थी - गायब dkms पैकेज। यह एक ऐसी सेवा है जो आपको स्रोत से कर्नेल मॉड्यूल बनाने की अनुमति देती है। एक नियम के रूप में, यह सभी डिबेट वितरणों पर उपलब्ध है। मुझे इसे तृतीय-पक्ष डिबेट रिपॉजिटरी से डाउनलोड करना पड़ा। एक बात जिसने मुझे खुश किया वह यह कि पैकेज आर्किटेक्चर पर निर्भर नहीं है, इसलिए यह देशी पैकेज की तरह फिट बैठता है। इसे उपलब्ध पैकेजों की सूची में शामिल क्यों नहीं किया गया, या यूँ कहें कि विकसित नहीं किया गया [टीबीडी]? शायद यह माना जाता है कि किसी को भी गैर-एमसीएसटी कर्नेल मॉड्यूल का निर्माण और संचालन नहीं करना चाहिए। यहाँ वास्तव में एक विसंगति है - चूँकि यहाँ लिनक्स-हेडर हैं। यानी, यदि वांछित हो तो मॉड्यूल को हाथ से इकट्ठा किया जा सकता है और मशीन शुरू होने पर स्क्रिप्ट द्वारा लॉन्च किया जा सकता है। मुझे लगता है कि आपको एमसीएसटी [टीबीडी] से बार-बार अपडेट की उम्मीद नहीं करनी चाहिए।

"ठीक है, मॉड्यूल स्थापित है - सबसे कठिन हिस्सा खत्म हो गया है," मैंने सोचा... डिब रिपॉजिटरी के लिए वीम पैकेज एएमडी64 प्लेटफॉर्म के लिए है, और एल्ब्रस ओएस में एक x86_64 [टीबीडी] प्लेटफॉर्म है। बेशक, अंतर केवल नाम में है, लेकिन यह अंतर तीसरे पक्ष के डिबेट रिपॉजिटरी के लगभग सभी पैकेजों को एल्ब्रस ओएस के साथ असंगत बनाता है। इस कष्टप्रद गलतफहमी को आसानी से समाप्त किया जा सकता है: बस पैकेज को अलग करें, वास्तुकला के बारे में जानकारी को सही करें और इसे वापस एक साथ रखें। इसे कैसे करना है इसे गूगल पर खोजा तुरन्त।

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 फ़ाइल में लाइन "# सोर्स SuSE`s rc फ़ंक्शंस" [TBD] फ़ाइल की शुरुआत में है।

फ़ाइल के साथ पैकेज की इतनी कठिन प्रोसेसिंग के बाद, एनएफएस शेयर पर संपूर्ण-मशीन बैकअप सफलतापूर्वक लॉन्च किया गया था। बैकअप माउंट भी सफल रहा. इसलिए, मेरा मानना ​​​​है कि एल्ब्रस पीडीके के साथ एक मशीन का बैकअप लेने के लिए, बिना किसी दायित्व के "बस ऐसे ही" डाउनलोड किया गया, लिनक्स के लिए वीम एजेंट निश्चित रूप से उपयुक्त है। फ़ाइल के साथ सभी संशोधनों के बाद भी।

बेशक, एल्ब्रस ओएस वितरण किट औपचारिक रूप से समर्थित नहीं है, क्योंकि यह समर्थित लोगों की सूची में शामिल नहीं है। इसके अलावा, QA विभाग द्वारा Linux के लिए Veeam एजेंट का परीक्षण नहीं किया गया था, इसलिए वे। कोई समर्थन नहीं है (कम से कम लेख के प्रकाशन के समय)।

मुझे उम्मीद है कि यह लेख उन लोगों के लिए उपयोगी होगा जो 334 जून, 29.06.2017 के आदेश संख्या XNUMX को लागू करने का प्रयास कर रहे हैं। आपको मेरा... [टीबीडी]।

स्रोत: www.habr.com

एक टिप्पणी जोड़ें