Elbrus OS'ta Veeam'den Linux Yedeklemesi. İthalat ikamesi ['?' | '.' | '!']

Herkese Merhaba.
Habré ile ilgili son makaleler Uygulamada ithalat ikamesi. Bölüm 1. Seçenekler и Müzik uzun süre çalmadı… ya da Elbrus OS nasıl hiç özgür olmadı beni kayıtsız bırakmadı. Bu konuyu yedekleme görevi bağlamında incelemeye karar verdim. Üstelik Bu makalede Veeam Software ürünlerinden bahsediliyor, bu da sorunun özellikle ithal ikamesi bağlamında alakalı olabileceği anlamına geliyor.

Elbrus OS'ta Veeam'den Linux Yedeklemesi. İthalat ikamesi ['?' | '.' | '!']
orijinal resim kaynağı

Her şeyden önce Elbrus işletim sistemini veya daha doğrusu yalnızca x86_64 mimarisi için mevcut dağıtımı indirmeye, nasıl çalıştığını görmeye ve Linux için Veeam Agent'ı yüklemeye karar verdim. Bundan ne çıktığını bilmek istiyorsanız lütfen cat'e bakın.

Yani, birisinin bilmemesi durumunda küçük bir ara söz. "Elbrus" böyle işlemci oldukça spesifik bir komuta sistemi ile. Ayrıca Elbrus OS yazılımı da bulunmaktadır. Ve - popüler inanışın aksine - Elbrus işletim sistemini çalıştırmak için Elbrus işlemcisini temel alan bir donanım sistemine sahip olmak gerekli değildir. X86 için “PDK “Elbrus” var - aslında kamu malı bir kurulum diski şeklinde göründü. Bu arada, "PDK - platform geliştirme kiti, geliştirici kiti" diye bir dipnot var - harika, yani orada en azından bir derleyici var.

Başka bir küçük zorunlu geri çekilme. Gerçek şu ki, bir zamanlar MSVS ve Baguette RTOS gibi yerli yazılımlarla ilgileniyordum. MCST'den bir işlemci de dahil olmak üzere yerli bileşenlerle çalışma deneyimim vardı. Dolayısıyla bu alanda belli bir özgüllüğün olduğunu tüm sorumluluğumla söyleyebilirim ve yazıda buna değinmemeye çalışacağım. Gerçekten istediğimde [TBD] etiketini koyacağım. Bu yüzden düpedüz trollemeden ve banal inlemeden yapmaya çalışacağız. Sonuçta Rus savunma endüstrisinin ve devlet kurumlarının anlaşılması gerekiyor. Büyük ülke, küçük bütçe... [TBD]

Sıfır aşama - indirmek. Elbrus işletim sisteminin kullanıma sunulduğu haberinin büyük yankı uyandırması ve dağıtım sunucusunun çökmesi dikkat çekicidir. [TBD] Yandex'e ve onu oraya taşımayı düşünen mühendise teşekkürler. Yani indirme hızı iyi.

İlk aşamada - kurulum. Ücretsiz kullanıma sunulan ilk hiper yöneticiye yükledim. Video için iki çekirdek, birkaç gig RAM, 32 MB ayırdım (grafiksel bir arayüz olacak diye düşündüm). Disk her zamanki gibi - 32 GB.
Kuruluma başladım. Kurulum talimatlarını kullanmadığım için yorum yapamam. TUI kurulum arayüzü son derece minimalisttir.

Elbrus OS'ta Veeam'den Linux Yedeklemesi. İthalat ikamesi ['?' | '.' | '!']
Harika, fare olmadan da yapabiliriz.

İkinci denemede bir sonraki pencereyi başardım. Diskten kurulum yaparken neden varsayılan aygıt sr0 [TBD]'yi seçmiyorsunuz?
CD-ROM kaynağını seçin ve devam edin.

Elbrus OS'ta Veeam'den Linux Yedeklemesi. İthalat ikamesi ['?' | '.' | '!']

Saat dilimini seçerken birden sistemin init boot işlemini kullandığını fark ettim ve TTY0'dan çalışıyorum.

Elbrus OS'ta Veeam'den Linux Yedeklemesi. İthalat ikamesi ['?' | '.' | '!']

Tamam o zaman “Elbrus”u bir topluluk olarak sınıflandıralım Eski İnananlar[Geçerli değil]. Prensip olarak bu iyidir: Her şey komut dosyasıyla yazıldığı için indirme işleminin nasıl çalıştığını görmek için kaynak kodunu sormanıza gerek yoktur.

Gerisi neredeyse önemsiz: her şeyi koyuyoruz ve anlaşıyoruz. Yol boyunca çekirdeğin 3.14.79-13.84 kullanıldığını öğreniyoruz. Hmm, Debian 7'de 3.2 [TBD] vardı.

Ardından, varsayılan disk bölümlemesini seçin ve... Bir uyarı görüyoruz:

Elbrus OS'ta Veeam'den Linux Yedeklemesi. İthalat ikamesi ['?' | '.' | '!']

Hmm, bir şekilde otomatik bölümleme 32 giglik bir diskle pek iyi başa çıkamadı. Diski değiştirmedim; görevi "hepsi bir arada" tarzında manuel disk bölümlemeyle tamamladım. /boot ext3'te olamayacağı için ext4'ü kurmam gerekiyordu.
Sistem sorunsuz bir şekilde devreye girdi.

İkinci aşamada - alternatifleri arayın.
İkinci diskin içeriğini karıştırdıktan sonra bunun ek bir depo olduğunu fark ettim. paketler halinde. Ve /etc/apt/sources.list'e baktığımda, bunun /mnt/cdrom'a bağlanması gerektiğini fark ettim. Ancak /etc/os-release'i bulamadım. Ancak 3.0-rc36 içeriğine sahip /etc/mcst-version var. Muhtemelen sürüm 3.0'dır - uygun görünüyor, ama rc36? Genel olarak, üçüncü taraf yazılımlar büyük olasılıkla bu dağıtımı klasik şekilde tanıyamayacaktır.

Kök bölümde /mcst dizini gözüme çarptı ve orada, içim acıyarak /mcst/backup'ı keşfettim. Yani bir yedekleme aracı var ve sistemin içine yerleştirilmiş! "Harika" diye düşündüm, "Bakalım bu nasıl çalışıyor!"

Dosya kopyalamayı sağlayan 4Kb'lik bir bash betiğinin /mcst/bin/backup olduğu ortaya çıktı. Varsayılan olarak - /mcst/backup dizinine. Kaynak kodunda rsync komutunu görmeyi bekliyordum, ancak bu varsayılan yapılandırmada değil. Komut dosyası yalnızca dosyaları kopyalar. Komut şuna benzer:

cp -rpdx <file backup> <file>

/mcst/bin/backup dosyasının tamamı buradaBu betiğin tek başına tam olarak anlaşılması için yeterli olmadığı konusunda sizi hemen uyarıyorum. İşlevleri, işlevler kitaplığı gibi bir şey olan /mcst/bin/source'dan çeker. Eklemedim (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

Yine de belki bir şey anlamadım? Belki birisi yorumlarda açıklayabilir: Bu komut dosyası güvenli ve güvenilir veri yedeklemeyi nasıl sağlıyor? [Bildirildi]

Bu arada rsync eklentiye dahil. depolar. Sürüm 3.1.3. Rsync kullanmanın hala /mcst/bin/backup uygulamasına daha iyi bir alternatif olduğunu düşünüyorum.

Sonra yeni bir tane koymaya karar verdim Linux için Veeam Agent. Birisi şunu soracaktır: "Veeam ve ithalat ikamesinin bununla ne alakası var?" Evet, kayıtta yok ama FSTEC sertifikasına sahip, bu da alternatif olmadığında kullanılabileceği anlamına geliyor. Alternatifler üzerinde on beş dakika harcamak kayıt, "yedekleme" kelimesi için 3 bağlantı bulabildim (hiçbiri "rezerv" kelimesine ilişkin sorumla ilgili değil). Bu programların derinlemesine bir analizini yapmadım, bu yüzden Linux çalıştıran makineleri yedeklemek için ne kadar uygun olduklarını yargılamaya çalışmayacağım. Kimin ihtiyacı varsa kendi sonucunu çıkaracak ve yorumlarda paylaşacaktır.

Aşama Üç — Linux için Veeam Agent kurulumu.
Yani Linux için Veeam Agent iki paketten oluşur: veeamsnap çekirdek modülü (bu arada, kaynak burada) ve veeam paketi biçiminde özel kullanıcı alanı kodu.

Çekirdek modülünün kurulumunda küçük bir sorun vardı; eksik dkms paketi. Bu, kaynaktan çekirdek modülleri oluşturmanıza olanak tanıyan bir hizmettir. Kural olarak tüm borç dağıtımlarında mevcuttur. Bunu üçüncü taraf bir borç deposundan indirmek zorunda kaldım. Beni sevindiren şeylerden biri de paketin mimariye bağlı olmaması, dolayısıyla native gibi uyum sağlamasıydı. Neden mevcut paketler listesine dahil edilmedi, daha doğrusu geliştirilmedi [TBD]? Belki de hiç kimsenin MCST olmayan çekirdek modüllerini oluşturup çalıştırmaması gerektiği varsayılmaktadır. Burada gerçekten bir tutarsızlık var - çünkü linux başlıkları var. Yani istenirse modül elle monte edilebilir ve makine başlatıldığında bir komut dosyasıyla başlatılabilir. MCST'den [TBD] sık sık güncelleme beklememeniz gerektiğini düşünüyorum.

"Tamam, modül kuruldu - en zor kısım bitti" diye düşündüm... Deb deposu için veeam paketi amd64 platformu içindir ve Elbrus işletim sistemi x86_64 [TBD] platformuna sahiptir. Fark elbette sadece isimde, ancak bu fark üçüncü taraf hata havuzlarındaki neredeyse tüm paketleri Elbrus işletim sistemiyle uyumsuz hale getiriyor. Bu sinir bozucu yanlış anlama basit bir şekilde ortadan kaldırılabilir: sadece paketi parçalara ayırın, mimari hakkındaki bilgileri düzeltin ve tekrar bir araya getirin. Nasıl yapılır Google'da arattım aniden.

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

Diğer bir sorun ise bağımlılıklardır. Gerekli dosyalar orada görünüyor, ancak paketler yok. İzlenim, paketlerin adlarının “ithal analoglarından” farklı olduğu yönündeydi. Belki kütüphaneler farklı şekilde paketlenmiştir. Çok fazla ayrıntıya girmedim, neredeyse tüm bağımlılıkları kaldırdım ve kurulum devam etti.

Daha sonra hizmet başlatma kodunda sorunlar ortaya çıktı. /lib/init/vars.sh betiği eksikti. Bazı nedenlerden dolayı Elbrus onsuz idare ediyor, bu yüzden onu da kaldıracağız. Daha sonra mesaj çıkış fonksiyonunu değiştirmek zorunda kaldık: log_daemon_msg ve log_end_msg fonksiyonları eksikti. /lib/lsb/init-functions dosyasını karıştırdıktan sonra log_success_msg işlevini buldum; deneyler için bizim için iyi. Bu arada, /lib/lsb/init-functions dosyasında “# Source SuSE`s rc Functions” satırı [TBD] dosyasının başında yer alıyor.

Paketin bir dosyayla bu kadar kaba bir şekilde işlenmesinden sonra, NFS paylaşımındaki tüm makinenin yedeği başarıyla başlatıldı. Yedekleme montajı da başarılı oldu. Bu nedenle, herhangi bir yükümlülük altına girmeden "aynen bu şekilde" indirilen Elbrus PDK ile bir makineyi yedeklemek için Veeam Agent for Linux'un kesinlikle uygun olduğuna inanıyorum. Bir dosyadaki tüm değişikliklerden sonra bile.

Elbette Elbrus OS dağıtım kiti, desteklenenler listesinde yer almadığı için resmi olarak desteklenmiyor. Ayrıca Linux için Veeam Agent, QA departmanı tarafından test edilmedi. destek yok (en azından makalenin yayınlandığı tarihte).

Yazının 334 Haziran 29.06.2017 tarih ve XNUMX sayılı kararı uygulamaya çalışanlara faydalı olmasını diliyorum. Benimki sana... [TBD]

Kaynak: habr.com

Yorum ekle