การสำรองข้อมูล Linux จาก Veeam บน Elbrus OS นำเข้าการทดแทน ['?' | '.' | '!']

สวัสดีทุกคน
บทความล่าสุดเกี่ยวกับฮาเบร การทดแทนการนำเข้าในทางปฏิบัติ ส่วนที่ 1 ตัวเลือก и เพลงไม่ได้เล่นนาน... หรือว่า Elbrus OS ไม่เคยเป็นอิสระเลย ไม่ได้ทิ้งฉันไว้เฉยๆ ฉันตัดสินใจศึกษาปัญหานี้ในบริบทของงานสำรองข้อมูล นอกจากนี้ใน บทความนี้ มีการกล่าวถึงผลิตภัณฑ์ซอฟต์แวร์ Veeam ซึ่งหมายความว่าปัญหาอาจเกี่ยวข้องโดยเฉพาะในบริบทของการทดแทนการนำเข้า

การสำรองข้อมูล Linux จาก Veeam บน Elbrus OS นำเข้าการทดแทน ['?' | '.' | '!']
แหล่งที่มาของภาพต้นฉบับ

ก่อนอื่น ฉันตัดสินใจดาวน์โหลด Elbrus OS หรือดาวน์โหลดเฉพาะการแจกจ่ายที่มีสำหรับสถาปัตยกรรม x86_64 ดูวิธีการทำงาน และลองติดตั้ง Veeam Agent สำหรับ Linux บนมัน หากอยากรู้ว่าเกิดอะไรขึ้น โปรดดูที่ cat

เอาเป็นว่าขอพูดนอกเรื่องหน่อยเผื่อใครไม่รู้ “เอลบรุส” ก็เป็นเช่นนั้น หน่วยประมวลผล ด้วยระบบสั่งการที่ค่อนข้างเฉพาะเจาะจง นอกจากนั้นยังมีซอฟต์แวร์ Elbrus OS และ - ตรงกันข้ามกับความเข้าใจผิดทั่วไป - เพื่อให้ Elbrus OS ทำงานได้ ไม่จำเป็นต้องมีระบบฮาร์ดแวร์ที่ใช้โปรเซสเซอร์ Elbrus มี "PDK "Elbrus" สำหรับ x86 - อันที่จริงแล้วมันปรากฏในสาธารณสมบัติในรูปแบบของดิสก์การติดตั้ง อย่างไรก็ตาม มีเชิงอรรถ “PDK - ชุดพัฒนาแพลตฟอร์ม ชุดนักพัฒนา” เยี่ยมมาก นั่นหมายความว่าอย่างน้อยก็มีคอมไพเลอร์อยู่ที่นั่น

การบังคับล่าถอยเล็กๆ อีกแห่งหนึ่ง ความจริงก็คือครั้งหนึ่งฉันเคยจัดการกับซอฟต์แวร์ในประเทศ เช่น MSVS และ Baguette RTOS ฉันมีประสบการณ์ในการทำงานกับส่วนประกอบภายในประเทศ รวมถึงโปรเซสเซอร์จาก MCST ดังนั้นฉันสามารถพูดด้วยความรับผิดชอบอย่างเต็มที่ว่ามีความเฉพาะเจาะจงในด้านนี้และฉันจะพยายามไม่พูดถึงมันในบทความ เมื่อฉันต้องการจริงๆ ฉันจะใส่แท็ก [TBD] ดังนั้นเราจะพยายามทำโดยไม่หลอกและเสียงครวญครางซ้ำซาก ท้ายที่สุดแล้ว จำเป็นต้องเข้าใจอุตสาหกรรมการป้องกันประเทศและหน่วยงานของรัฐของรัสเซีย ประเทศใหญ่-งบน้อย.. [TBD].

เวทีเป็นศูนย์ - ดาวน์โหลด เป็นที่น่าสังเกตว่าข่าวที่ Elbrus OS พร้อมใช้งานทำให้เกิดเสียงสะท้อนมากจนเซิร์ฟเวอร์การแจกจ่ายล่ม [TBD] ขอบคุณ Yandex และวิศวกรที่คิดจะย้ายมันไปที่นั่น ดังนั้นความเร็วในการดาวน์โหลดจึงดี

ขั้นตอนแรก - การติดตั้ง. ฉันติดตั้งมันบนไฮเปอร์ไวเซอร์ตัวแรกที่เปิดให้ใช้งานฟรี ฉันจัดสรรสองคอร์, RAM สองสามกิ๊ก, 32 MB สำหรับวิดีโอ (ฉันคิดว่าจะมีอินเทอร์เฟซแบบกราฟิก) ดิสก์เป็นปกติ - 32 GB
ฉันเริ่มการติดตั้ง ฉันไม่ได้ใช้คำแนะนำในการติดตั้ง ดังนั้นฉันจึงไม่สามารถแสดงความคิดเห็นได้ อินเทอร์เฟซการติดตั้ง TUI นั้นเรียบง่ายมาก

การสำรองข้อมูล Linux จาก Veeam บน Elbrus OS นำเข้าการทดแทน ['?' | '.' | '!']
เยี่ยมเลย เราสามารถทำได้โดยไม่ต้องใช้เมาส์

ฉันจัดการหน้าต่างถัดไปในการลองครั้งที่สอง ทำไมไม่เลือกอุปกรณ์เริ่มต้น sr0 [TBD] เมื่อทำการติดตั้งจากดิสก์
เลือกแหล่งซีดีรอมและดำเนินการต่อ

การสำรองข้อมูล Linux จาก Veeam บน Elbrus OS นำเข้าการทดแทน ['?' | '.' | '!']

ขณะเลือกเขตเวลา ฉันก็นึกขึ้นได้ว่าระบบใช้กระบวนการบูตเริ่มต้น และฉันกำลังทำงานจาก TTY0

การสำรองข้อมูล Linux จาก Veeam บน Elbrus OS นำเข้าการทดแทน ['?' | '.' | '!']

ตกลง ถ้าอย่างนั้นเรามาจำแนก "Elbrus" เป็นชุมชนกันดีกว่า ผู้ศรัทธาเก่า[จะแจ้งภายหลัง]. โดยหลักการแล้ว นี่เป็นสิ่งที่ดี: คุณไม่จำเป็นต้องขอซอร์สโค้ดเพื่อดูว่ากระบวนการดาวน์โหลดทำงานอย่างไร เนื่องจากทุกอย่างมีสคริปต์ไว้

ที่เหลือแทบไม่สำคัญเลย เราใส่ทุกอย่างแล้วตกลง ระหว่างทางเราพบว่าใช้เคอร์เนล 3.14.79-13.84 อืม Debian 7 มี 3.2 [TBD]

จากนั้นเลือกการแบ่งพาร์ติชันดิสก์เริ่มต้นและ... เราเห็นคำเตือน:

การสำรองข้อมูล Linux จาก Veeam บน Elbrus OS นำเข้าการทดแทน ['?' | '.' | '!']

อืม การแบ่งพาร์ติชันอัตโนมัติไม่สามารถรับมือกับดิสก์ขนาด 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

แม้ว่าบางทีฉันอาจจะไม่เข้าใจอะไรบางอย่าง? อาจมีคนอธิบายในความคิดเห็นได้: สคริปต์นี้รับประกันการสำรองข้อมูลที่ปลอดภัยและเชื่อถือได้ได้อย่างไร [จะแจ้งภายหลัง]

อย่างไรก็ตาม rsync นั้นรวมอยู่ในส่วนเสริมแล้ว ที่เก็บ เวอร์ชัน 3.1.3 ฉันคิดว่าการใช้ rsync ยังคงเป็นทางเลือกที่ดีกว่าสำหรับ /mcst/bin/backup แอปพลิเคชัน

ต่อไปฉันตัดสินใจใส่อันใหม่ ตัวแทน Veeam สำหรับ Linux. บางคนจะถามว่า: “Veeam และการทดแทนการนำเข้าเกี่ยวข้องอะไรกับมัน” ใช่ มันไม่ได้อยู่ในทะเบียน แต่ได้รับการรับรองโดย FSTEC ซึ่งหมายความว่าหากไม่มีทางเลือกอื่นก็สามารถใช้ได้ ใช้เวลาสิบห้านาทีกับทางเลือกอื่นจาก ทะเบียนฉันสามารถค้นหาคำว่า "สำรอง" ได้ 3 ลิงก์ (ไม่เกี่ยวข้องกับคำถามของฉันสำหรับคำว่า "สำรอง") ฉันยังไม่ได้ทำการวิเคราะห์เชิงลึกเกี่ยวกับโปรแกรมเหล่านี้ ดังนั้นฉันจะไม่พยายามตัดสินว่าโปรแกรมเหล่านั้นมีความเหมาะสมเพียงใดในการสำรองข้อมูลเครื่องที่ใช้ Linux ใครก็ตามที่ต้องการมันจะได้ข้อสรุปของตัวเองและแบ่งปันในความคิดเห็น

ขั้นตอนที่สาม — การติดตั้ง Veeam Agent สำหรับ Linux
ดังนั้น Veeam Agent สำหรับ Linux ประกอบด้วยสองแพ็คเกจ: โมดูลเคอร์เนล veamsnap (โดยวิธีการ, แหล่งที่มาที่นี่) และรหัสพื้นที่ผู้ใช้ที่เป็นกรรมสิทธิ์ในรูปแบบของแพ็คเกจ veeam

มีปัญหาเล็กน้อยอย่างหนึ่งในการติดตั้งโมดูลเคอร์เนล - แพ็คเกจ dkms ที่หายไป นี่คือบริการที่ช่วยให้คุณสามารถสร้างโมดูลเคอร์เนลจากแหล่งที่มาได้ ตามกฎแล้ว จะมีอยู่ในการกระจาย deb ทั้งหมด ฉันต้องดาวน์โหลดจากที่เก็บ deb ของบุคคลที่สาม สิ่งหนึ่งที่ทำให้ฉันมีความสุขก็คือแพ็คเกจไม่ได้ขึ้นอยู่กับสถาปัตยกรรม ดังนั้นจึงเข้ากันได้เหมือนของพื้นเมือง เหตุใดจึงไม่รวมอยู่ในรายการแพ็คเกจที่มีอยู่ หรือไม่ถูกพัฒนา [TBD] บางทีอาจสันนิษฐานได้ว่าไม่มีใครควรสร้างและรันโมดูลเคอร์เนลที่ไม่ใช่ MCST มีความคลาดเคลื่อนจริงๆ ที่นี่ - เนื่องจากมีส่วนหัวของ linux นั่นคือโมดูลสามารถประกอบได้ด้วยมือและเปิดใช้งานด้วยสคริปต์หากต้องการเมื่อเครื่องเริ่มทำงาน ฉันคิดว่าคุณไม่ควรคาดหวังการอัปเดตบ่อยครั้งจาก MCST [TBD]

“ตกลง โมดูลได้รับการติดตั้งแล้ว - ส่วนที่ยากที่สุดจบลงแล้ว” ฉันคิดว่า... แพ็คเกจ veeam สำหรับพื้นที่เก็บข้อมูล deb นั้นใช้สำหรับแพลตฟอร์ม amd64 และ Elbrus OS มีแพลตฟอร์ม x86_64 [TBD] แน่นอนว่าความแตกต่างนั้นอยู่ที่ชื่อเท่านั้น แต่ความแตกต่างนี้ทำให้แพ็คเกจเกือบทั้งหมดจากที่เก็บ deb ของบุคคลที่สามเข้ากันไม่ได้กับ Elbrus OS ความเข้าใจผิดที่น่ารำคาญนี้สามารถกำจัดได้ง่ายๆ เพียงแยกชิ้นส่วนบรรจุภัณฑ์ แก้ไขข้อมูลเกี่ยวกับสถาปัตยกรรม แล้วประกอบกลับเข้าไปใหม่ ทำอย่างไร Googled มัน ทันที

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 ฟังก์ชั่น” อยู่ที่จุดเริ่มต้นของไฟล์ [TBD]

หลังจากการประมวลผลแพ็กเกจอย่างคร่าวๆ ด้วยไฟล์แล้ว การสำรองข้อมูลทั้งเครื่องบนการแบ่งใช้ NFS ก็เริ่มต้นได้สำเร็จ การเมานต์สำรองก็ประสบความสำเร็จเช่นกัน ดังนั้น ฉันเชื่อว่าสำหรับการสำรองข้อมูลเครื่องด้วย Elbrus PDK ที่ดาวน์โหลด “แบบนั้น” โดยไม่มีข้อผูกมัดใดๆ Veeam Agent สำหรับ Linux จึงเหมาะสมอย่างยิ่ง แม้จะแก้ไขไฟล์ทั้งหมดแล้วก็ตาม

แน่นอนว่าชุดการแจกจ่าย Elbrus OS ไม่ได้รับการรองรับอย่างเป็นทางการ เนื่องจากไม่รวมอยู่ในรายการชุดที่รองรับ นอกจากนี้ Veeam Agent สำหรับ Linux ไม่ได้รับการทดสอบโดยแผนก QA ดังนั้นสิ่งเหล่านั้น ไม่มีการสนับสนุน (อย่างน้อยก็ตอนที่ตีพิมพ์บทความ)

ฉันหวังว่าบทความนี้จะเป็นประโยชน์สำหรับผู้ที่พยายามดำเนินการตามคำสั่งซื้อหมายเลข 334 ของวันที่ 29.06.2017 มิถุนายน XNUMX ของฉันให้คุณ... [TBD]

ที่มา: will.com

เพิ่มความคิดเห็น