Veeam Linux Backup على Elbrus OS. استيراد بديل ['؟' | '.' | '!']

مرحبا بالجميع.

مقالات حديثة عن استبدال Habré Import في الممارسة. الجزء 1. الخيارات وليس لفترة طويلة ، الموسيقى التي تم تشغيلها ... أو كيف أصبحت OS Elbrus مجانية ولم تتركني غير مبالية. قررت دراسة هذه المشكلة في مفتاح مهمة النسخ الاحتياطي. علاوة على ذلك ، تم ذكر منتجات Veeam Software في هذه المقالة ، مما يعني أن المشكلة قد تكون ذات صلة في سياق استبدال الاستيراد.

صورة
الصورة المصدر

أولاً وقبل كل شيء ، قررت تنزيل نظام التشغيل Elbrus OS ، أو بالأحرى مجموعة أدوات التوزيع المتاحة فقط للهيكل x86_64 ، ومعرفة كيفية عملها ، ومحاولة تثبيت Veeam Agent for Linux عليه. أولئك الذين يرغبون في معرفة ما جاء منه ، من فضلك ، تحت القط.

لذلك ، استطرادا صغيرا ، وإلا فجأة شخص لا يعرف. Elbrus هو المعالج مع نظام تعليمات محددة إلى حد ما. بالإضافة إلى ذلك ، هناك برنامج Elbrus OS. وخلافا لفكرة خاطئة شائعة - ليس من الضروري لنظام التشغيل Elbrus أن يكون لديه مجمع للأجهزة يعتمد على معالج Elbrus. هناك "Elbrus PDK for x86" - في الواقع ، ظهر في المجال العام كقرص تثبيت. بالمناسبة ، هناك حاشية "PDK - مجموعة تطوير النظام الأساسي ، مجموعة تطوير" - ممتازة ، مما يعني أن هناك مترجم على الأقل.

تراجع قسري صغير آخر. والحقيقة هي أنني تعاملت مرة واحدة مع البرامج المحلية ، مثل MSVS و RTO Baget. كانت لدي خبرة في العمل مع قاعدة العناصر المحلية ، بما في ذلك المعالج من MCST. لذلك ، أستطيع أن أقول بكل مسؤولية أن هناك خصوصية معينة في هذا المجال ، وسأحاول ألا أتطرق إليها في هذه المقالة. عندما أرغب حقًا في ذلك ، سأضع علامة [TBD]. لذلك سنحاول الاستغناء عن آذان صراخ صريح وصريح. في النهاية ، يجب فهم صناعة الدفاع الروسية والهيئات الحكومية. البلد كبير - الميزانية صغيرة .. [TBD].

مرحلة الصفر - تنزيل. تجدر الإشارة إلى أن الأخبار التي أصبحت متاحة Elbrus OS تسبب صدى ، مثل أن خادم التوزيع كان معطلا. [TBD] بفضل Yandex والمهندس الذي فكر في نقله إلى هناك. وبالتالي فإن سرعة التنزيل جيدة.

الخطوة الأولى هي التثبيت. أنا وضعت على أول برنامج Hypervisor المجاني المتاح. لقد خصصت اثنين من النوى ، بضع العربات من ذاكرة الوصول العشوائي ، 32 ميغابايت لكل فيديو (سيكون هناك واجهة رسومية ، وأعتقد). القرص كالمعتاد - 32 جيجابايت.
بدأ التثبيت. لم أستخدم إرشادات التثبيت ، لذلك لا يمكنني التعليق عليها. واجهة التثبيت TUI هو الحد الأدنى بقسوة.


حسنًا ، ممتاز ، بدون ماوس ، ثم سنتجاوز.

تعاملت مع النافذة التالية من المحاولة الثانية. لماذا لا يتم تثبيت sr0 [TBD] افتراضيًا عند التثبيت من القرص؟
حدد مصدر القرص المضغوط ، انتقل إلى أبعد من ذلك.



عند اختيار المنطقة الزمنية ، أدركت فجأة أن النظام يستخدم عملية التمهيد init ، وأنا أعمل من TTY0.



حسنًا ، لذلك دعونا نأخذ Elbrus إلى مجتمع Old Believer [TBD]. هذا جيد من حيث المبدأ: لا تحتاج إلى طلب المصدر لمعرفة كيفية عمل عملية التنزيل ، لأن كل شيء في نصوص برمجية.

الباقي غير مهم تقريبًا: نضع كل شيء ونتفق معه. على طول الطريق ، اكتشفنا أن النواة تستخدم 3.14.79-13.84. هم ، ديبيان 7 كان 3.2 [TBD].

بعد ذلك ، حدد تقسيم القرص افتراضيًا و ... نشاهد تحذيرًا:



هم ، التقسيم التلقائي بطريقة أو بأخرى سيئة تعاملت مع قرص 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. أي أن هناك أداة نسخ احتياطي ، وهي مدمجة في النظام! عظيم ، اعتقدت ، دعونا نرى كيف يعمل!

اتضح أن هناك نص bash / mcst / bin / backup بحجم 4 كيلوبايت ، والذي يوفر نسخ الملفات. بشكل افتراضي ، إلى الدليل / mcst / backup. في المصدر ، كنت أتوقع رؤية الأمر rsync ، لكنه ليس في التكوين الافتراضي. النصي ببساطة نسخ الملفات. يبدو الأمر شيئًا مثل هذا:

cp -rpdx <file backup> <file> 

الملف بأكمله / mcst / bin / backup موجود هنا
أحذرك فورًا من أن تفهم هذا النص تمامًا وحده لا يكفي. يقوم بسحب الوظائف من / mcst / bin / source ، والذي يشبه مكتبة الوظائف. لم أذكره (44 كيلو بايت).
 #!/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 


رغم أنني ربما لم أفهم ماذا؟ ربما يشرح شخص ما في التعليقات: كيف يوفر هذا البرنامج النصي نسخًا احتياطيًا آمنًا وموثوقًا للبيانات؟ [يحدد لاحقا]

رسينك ، بالمناسبة ، في الإضافة. مستودع. الإصدار 3.1.3. أعتقد أن استخدام rsync لا يزال البديل الأفضل لـ / mcst / bin / backup.

بعد ذلك ، قررت أن أضع وكيل Veeam الجديد لنظام Linux . سوف يسأل أحدهم: "ما علاقة Veeam باستبدال الاستيراد؟" نعم ، إنه ليس موجودًا في السجل ، لكنه معتمد من قبل FSTEC ، مما يعني أنه في حالة عدم وجود بدائل ، يمكن استخدامه. بعد أن أمضيت حوالي 15 دقيقة على بدائل من السجل ، تمكنت من العثور على 3 روابط على كلمة "احتياطية" (ليست واحدة مرتبطة بسؤالي عن كلمة "الاحتياطي"). لم أقم بإجراء تحليل عميق لهذه البرامج - لذلك لن أحاول أن أحكم على مدى ملاءمتها لعمل نسخ احتياطية للأجهزة في نظام Linux. من يحتاج إليها - سوف يستنتج خاتمة ويشاركها في التعليقات.

المرحلة الثالثة - تثبيت عامل Veeam لنظام التشغيل Linux.
لذلك ، يتكون Veeam Agent for Linux من حزمتين: وحدة veeamsnap kernel (بالمناسبة ، المصدر موجود هنا ) ورمز المستخدم الخاص بمساحة المستخدم في شكل حزمة veeam.

حدثت مشكلة صغيرة واحدة في تثبيت وحدة kernel - عدم وجود حزمة dkms. هذه خدمة تسمح لك بإنشاء وحدات kernel من المصدر. وكقاعدة عامة ، فهو على جميع توزيعات deb. اضطررت لتنزيله من مستودع Deb للجهة الخارجية. يسر واحد - الحزمة لا تعتمد على الهندسة المعمارية ، لذلك وقفت باعتبارها مواطن. لماذا لم يتم تضمينه في قائمة الحزم المتاحة ، أو بالأحرى ، لم يطور [TBD]؟ ربما من المفترض أنه لا ينبغي لأحد أن يجمع ويدير جميع أنواع الوحدات النمطية للنواة غير MCST. هناك بالفعل مشكلة هنا - نظرًا لوجود رؤوس لينكس. وهذا هو ، يمكن تجميع الوحدة النمطية ، إذا رغبت في ذلك ، وتشغيلها عند بدء تشغيل الجهاز ببرنامج نصي. أعتقد أنك يجب ألا تنتظر التحديثات المتكررة من ICST [TBD].

"حسناً ، استيقظت الوحدة - أصعب شيء هو تأخرنا" ، فكرت ... حزمة veeam لمستودع deb تخص النظام الأساسي amd64 ، ونظام التشغيل Elbrus لديه نظام x86_64 [TBD]. الاختلاف ، بالطبع ، هو فقط في الاسم ، ولكن هذا الاختلاف يجعل جميع الحزم تقريبًا من مستودعات Deb التابعة لجهة خارجية غير متوافقة مع نظام التشغيل Elbrus. يتم التخلص من سوء الفهم المزعج هذا بطريقة أولية: يكفي تحليل الحزمة وتصحيح المعلومات المتعلقة بالهندسة وجمعها. كيف نفعل ذلك غوغليد على الفور.
 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 ، وجدت الدالة log_success_msg - ستعمل من أجلنا لإجراء التجارب. بالمناسبة ، في الملف / lib / lsb / init- يعمل السطر "# Source SuSE`s rc function" في بداية الملف [TBD].

بعد هذه المعالجة التقريبية للحزمة مع ملف ، بدأ بنجاح النسخ الاحتياطي للجهاز بأكمله على كرة NFS. كان النسخ الاحتياطي جبل ناجحة أيضا. لذلك ، أعتقد أنه لنسخ نسخة احتياطية لجهاز مع Elbrus PDK ، تم تنزيله من أجل "تمامًا مثل ذلك" دون أي التزام ، فإن Veeam Agent for Linux مناسب بالتأكيد. حتى بعد كل التعديلات مع ملف.

بطبيعة الحال ، فإن مجموعة التوزيع لنظام التشغيل Elbrus غير مدعومة رسميًا ، حيث إنها غير مدرجة في قائمة الأجهزة المدعومة. بالإضافة إلى ذلك ، لم يتم اختبار Veeam Agent for Linux عليه من قبل قسم ضمان الجودة ، لذلك. لا يوجد دعم (على الأقل في وقت نشر المقال).

آمل أن تكون هذه المقالة مفيدة لأولئك الذين يحاولون تنفيذ الأمر رقم 334 المؤرخ 29 يونيو 2017. لي لك ... [TBD].

Source: https://habr.com/ru/post/ar447960/


All Articles