Elbrus OS上のVeeam Linuxバックアップ。 インポート置換['?' | 「。」 | '!']

みなさんこんにちは。



実際の Habr Import置換に関する最近の記事 パート1。オプションあり、長い間音楽が再生されなかった...またはOS Elbrusが決して自由にならない方法は、私を無関心のままにしませんでした。 バックアップタスクのキーでこの問題を調査することにしました。 さらに、 この記事では、 Veeam Software製品について言及しています。つまり、この問題は輸入代替のコンテキストに関連している可能性があります。



画像

ソース画像



まず、Elbrus OSをダウンロードするか、x86_64アーキテクチャ用の利用可能な配布キットのみをダウンロードし、動作を確認して、Veeam Agent for Linuxをインストールしてみました。 猫の下で、それが何から来たのかを知りたい人はどうぞ。



そう、小さな余談、さもなければ突然誰かが知らない。 Elbrusは、かなり具体的な命令システムを備えたプロセッサーです。 それに加えて、Elbrus OSソフトウェアがあります。 そして-よくある誤解とは反対に-Elbrus OSの操作では、Elbrusプロセッサに基づいたハードウェアコンプレックスを持つ必要はありません。 「x86用Elbrus PDK」があります。実際、パブリックドメインにはインストールディスクとして表示されています。 ところで、脚注「PDK-プラットフォーム開発キット、開発キット」があります-優れています。つまり、少なくともコンパイラーがあります。



別の小さな強制退却。 実際、私はかつてMSVSやRTO Bagetなどの国内のソフトウェアを扱っていました。 MCSTのプロセッサを含む、国内の要素ベースで作業した経験がありました。 したがって、この分野には特定の特異性があると私はすべての責任をもって言うことができ、この記事ではそれに触れないようにします。 本当にしたいときは、[TBD]タグを付けます。 だから私たちは率直なトローリングと平凡なうめき声なしでやろうとします。 最後に、ロシアの防衛産業と政府機関を理解する必要があります。 国は大きい-予算は小さい.. [TBD]。



ゼロステージ -ダウンロード。 Elbrus OSが利用可能になったというニュースが共鳴を引き起こし、配信サーバーがダウンしたことは注目に値します。 [未定] Yandexと、そこに移動することを考えたエンジニアに感謝します。 したがって、ダウンロード速度は良好です。



最初のステップはインストールです。 最初に利用可能な無料のハイパーバイザーを使用しました。 2つのコア、RAMの2つのギグ、ビデオごとに32 MBを割り当てました(そこにグラフィカルインターフェイスがあると思います)。 通常のディスク-32 GB。

インストールを開始しました。 インストール手順を使用しなかったため、コメントできません。 TUIインストールインターフェイスは非常にシンプルです。





まあ、優れた、マウスなしで、それから私たちはうまくいきます。



次のウィンドウで、2回目の試行に対処しました。 ディスクからインストールするときにデフォルトでsr0 [TBD]をインストールしないのはなぜですか?

CD-ROMのソースを選択して、さらに進んでください。







タイムゾーンを選択すると、システムがinitブートプロセスを使用していることに突然気付き、TTY0で作業しています。







さて、エルブラスをオールドビリーバーコミュニティ[TBD]に連れて行きましょう。 原則として、これは良いことです。すべてがスクリプト内にあるため、ブートプロセスの動作を確認するためにソースを要求する必要はありません。



残りはほとんど重要ではありません。すべてを入れて同意します。 途中で、カーネルが3.14.79-13.84で使用されていることがわかります。 うーん、Debian 7には3.2 [TBD]がありました。



次に、デフォルトでディスクのパーティションを選択し、...警告が表示されます。







うーん、どういうわけか自動マークアップは32ギグのディスクでは悪かった。 私はディスクを変更しませんでした。「オールインワン」スタイルの手動ディスクレイアウトを使用したクエストを行いました。 / bootがext4にないため、ext3をインストールする必要がありました。

システムは問題なく起動しました。



2番目の段階は、代替案の検索です。

2番目のディスクの内容を調べたところ、追加のリポジトリであることがわかりました。 パッケージ。 /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
      
      







でも、何が分からなかったのでしょうか? おそらくコメントの誰かが説明できます:このスクリプトはどのように安全で信頼できるデータバックアップを提供しますか? [未定]



ところで、rsyncが追加されました。 リポジトリ。 バージョン3.1.3。 rmcを使用することは、/ mcst / bin / backupの最良の代替手段であると思います。



次に、新しいVeeam Agent for Linuxを配置することにしました。 「Veeamはインポート置換と何の関係がありますか?」という質問があります。はい、レジストリにはありませんが、FSTECによって認証されています。つまり、代替手段がない場合でも使用できます。 レジストリの代替案に約15分を費やして、「バックアップ」という言葉の3つのリンクを見つけました(「予約」という言葉に対する私の質問に関連するものではありません)。 これらのプログラムの詳細な分析は行いませんでした。したがって、Linuxでマシンをバックアップするのにどれほど適しているかを判断しようとはしません。 誰がそれを必要とする-彼は結論を引き出し、コメントでそれを共有します。



ステージ3 -Veeam Agent for Linuxをインストールします。

そのため、Veeam Agent for Linuxは2つのパッケージで構成されています:veeamsnapカーネルモジュール(ちなみに、 ソースはこちらです )とveeamパッケージの形式の独自のユーザースペースコードです。



カーネルモジュールのインストールには、dkmsパッケージがないという小さな問題が1つありました。 これは、ソースからカーネルモジュールを構築できるサービスです。 原則として、すべてのdebディストリビューションにあります。 サードパーティのdebリポジトリからダウンロードする必要がありました。 嬉しいことに、パッケージはアーキテクチャに依存しないため、ネイティブとして立ち上がった。 使用可能なパッケージのリストに含まれていないのはなぜですか?それとも、開発されなかったのですか?[TBD] おそらく、誰もがあらゆる種類の非MCSTカーネルモジュールを収集して実行することは想定されていません。 ここには本当に問題があります-linux-headersがあるからです。 つまり、必要に応じて、モジュールを手動でアセンブルし、起動時にスクリプトを実行できます。 ICST [TBD]からの頻繁な更新を待つべきではないと思います。



「わかりました、モジュールが起動しました-最も難しい部分が背後にあります」と思いました... debリポジトリのveeamパッケージはamd64プラットフォーム用であり、Elbrus OSにはx86_64プラットフォーム[TBD]があります。 もちろん、違いは名前だけですが、この違いにより、サードパーティのdebリポジトリのほとんどすべてのパッケージがElbrus OSと互換性がなくなります。 この厄介な誤解は基本的な方法で排除されます。パッケージを解析し、アーキテクチャに関する情報を修正し、それを収集するだけで十分です。 すぐにグーグル検索する方法。

 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のファイルの先頭にある「#Source SuSE`s rc functions」という行[TBD]。



ファイルを使用したパッケージのこのような大まかな処理の後、NFSボールのマシン全体のバックアップが正常に開始されました。 バックアップマウントも成功しました。 そのため、「そのような」目的でダウンロードされたElbrus PDKを使用してマシンをバックアップするために、Veeam Agent for Linuxが間違いなく適していると思います。 ファイルによるすべての変更の後でも。



もちろん、正式にはElbrus OSディストリビューションはサポートされていません。サポートされているディストリビューションのリストに含まれていないためです。 さらに、その上のVeeam Agent for LinuxはQA部門でテストされていません。 サポートなし(少なくとも記事の公開時)。



この記事が、2017年6月29日の注文番号334を実装しようとしている人々に役立つことを願っています。 あなたに... [TBD]。



All Articles