سڀني کي سلام.
Habré تي تازو مضمون
سڀ کان پهريان، مون ايلبرس او ايس کي ڊائون لوڊ ڪرڻ جو فيصلو ڪيو، يا بلڪه، صرف x86_64 فن تعمير لاء دستياب تقسيم، ڏسو ته اهو ڪيئن ڪم ڪري ٿو، ۽ ان تي لينڪس لاء Veeam ايجنٽ انسٽال ڪرڻ جي ڪوشش ڪريو. جيڪڏھن توھان ڄاڻڻ چاھيو ٿا ته ھن مان ڇا نڪتو، مھرباني ڪري ٻلي کي ڏسو.
تنهن ڪري، هڪ ننڍڙو تڪرار، صورت ۾ ڪنهن کي خبر ناهي. ”ايلبرس“ ائين ئي آهي
ٻيو ننڍڙو زبردستي واپسي. حقيقت اها آهي ته مون هڪ ڀيرو گهريلو سافٽ ويئر سان معاملو ڪيو، جهڙوڪ MSVS ۽ Baguette RTOS. مون کي گهريلو اجزاء سان ڪم ڪرڻ جو تجربو هو، بشمول MCST کان هڪ پروسيسر. تنهن ڪري، مان پوري ذميواري سان چئي سگهان ٿو ته هن علائقي ۾ هڪ خاص خصوصيت آهي ۽ اهو ئي آهي ته آئون مضمون ۾ نه ڇڪڻ جي ڪوشش ڪندس. جڏهن مان واقعي چاهيان ٿو، ته آئون ٽيگ [TBD] وجهي ڇڏيندس. تنهن ڪري اسان ڪوشش ڪنداسين ته بغير ڪنهن سڌريل ٽرولنگ ۽ بينل ميننگ کان سواءِ. آخر ۾، روسي دفاعي صنعت ۽ سرڪاري ادارن کي سمجهڻ جي ضرورت آهي. وڏو ملڪ - ننڍي بجيٽ.. [TBD].
صفر اسٽيج - ڊائون لوڊ. اهو قابل ذڪر آهي ته اها خبر آهي ته ايلبرس او ايس دستياب ٿي چڪي آهي هڪ گونج جو سبب بڻيو، ايتري قدر جو تقسيم سرور هيٺ ٿي ويو. [TBD] مهرباني Yandex ۽ انجنيئر جي جنهن ان کي اتي منتقل ڪرڻ جو سوچيو. تنهنڪري ڊائون لوڊ جي رفتار سٺي آهي.
پهريون اسٽيج - تنصيب. مون ان کي نصب ڪيو پهرين هائپر ويزر تي جيڪو مفت استعمال لاءِ دستياب هو. مون ٻه ڪور مختص ڪيا، رام جا ٻه گيگ، وڊيو لاءِ 32 MB (اتي هڪ گرافڪ انٽرفيس هوندو، مون سوچيو). ڊسڪ عام طور تي آهي - 32 GB.
مون انسٽاليشن شروع ڪئي. مون انسٽاليشن جون هدايتون استعمال نه ڪيون، تنهنڪري مان ان تي تبصرو نٿو ڪري سگهان. TUI تنصيب انٽرفيس سختي سان minimalistic آهي.
چڱو، عظيم، اسان مائوس کان سواء ڪري سگهون ٿا.
مون ٻئي ڪوشش تي ايندڙ ونڊو کي منظم ڪيو. ڊسڪ مان انسٽال ڪرڻ وقت ڊفالٽ ڊيوائس sr0 [TBD] ڇو نه چونڊيو؟
CD-ROM جو ذريعو چونڊيو ۽ اڳتي وڌو.
ٽائيم زون چونڊڻ دوران، مون اوچتو محسوس ڪيو ته سسٽم init بوٽ پروسيس استعمال ڪري ٿو، ۽ مان TTY0 کان ڪم ڪري رهيو آهيان.
ٺيڪ آهي، پوءِ اچو ته ”ايلبرس“ کي ڪميونٽي طور درجه بندي ڪريون
باقي تقريبا غير ضروري آهي: اسان سڀ ڪجهه رکون ٿا ۽ متفق آهيون. رستي ۾، اسان کي معلوم ٿئي ٿو ته ڪنيل استعمال ڪيو ويو آهي 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. اھو آھي، ھڪڙو بيڪ اپ اوزار آھي، ۽ اھو سسٽم ۾ ٺاھيو ويو آھي! ”زبردست،“ مون سوچيو، ”اچو ته ڏسون اهو ڪيئن ڪم ڪري ٿو!
اهو ظاهر ٿيو ته اتي هڪ 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 پاران تصديق ٿيل آهي، جنهن جو مطلب آهي ته متبادل جي غير موجودگي ۾ اهو استعمال ڪري سگهجي ٿو. کان متبادل تي پندرهن منٽ خرچ
اسٽيج ٽي - لينڪس لاءِ ويم ايجنٽ جي تنصيب.
تنهن ڪري، لينڪس لاء Veeam ايجنٽ ٻن پيڪيجز تي مشتمل آهي: veeamsnap ڪنييل ماڊل (رستي ذريعي،
kernel module انسٽال ڪرڻ ۾ ھڪڙو ننڍڙو مسئلو ھو - غائب dkms پيڪيج. هي هڪ خدمت آهي جيڪا توهان کي اجازت ڏئي ٿي ته ڪنيل ماڊلز کي ماخذ کان ٺاهي. ضابطي جي طور تي، اهو موجود آهي سڀني ڊيب تقسيم تي. مون کي ان کي ڊائون لوڊ ڪرڻو پيو ٽئين پارٽي ڊيب مخزن مان. ھڪڙي شيء جيڪا مون کي خوش ڪيو آھي اھو اھو آھي ته پيڪيج فن تعمير تي منحصر نه آھي، تنھنڪري اھو ھڪڙي اصلي وانگر آھي. ان کي دستياب پيڪيجز جي لسٽ ۾ ڇو شامل نه ڪيو ويو، يا بلڪه، ترقي يافته نه ڪيو ويو [TBD]؟ شايد اهو فرض ڪيو ويو آهي ته ڪو به غير MCST ڪنييل ماڊل ٺاهي ۽ هلائڻ نه گهرجي. هتي واقعي هڪ تفاوت آهي - ڇاڪاڻ ته هتي لينڪس-هيڊر آهن. اھو آھي، ماڊل، جيڪڏھن گھربل آھي، ھٿ سان گڏ ڪري سگھجي ٿو ۽ ھڪڙي رسم الخط ذريعي شروع ڪيو وڃي جڏھن مشين شروع ٿئي. منهنجو خيال آهي ته توهان کي MCST [TBD] کان بار بار اپڊيٽ جي توقع نه رکڻ گهرجي.
”ٺيڪ آهي، ماڊل انسٽال ٿيل آهي - تمام ڏکيو حصو ختم ٿي ويو آهي،“ مون سوچيو... ڊيب مخزن لاءِ ويم پيڪيج amd64 پليٽ فارم لاءِ آهي، ۽ ايلبرس او ايس وٽ هڪ x86_64 [TBD] پليٽ فارم آهي. فرق، يقينا، صرف نالي ۾ آهي، پر اهو فرق تقريبا سڀني پيڪيجز کي ٽئين پارٽي جي ڊيب مخزن جي ايلبرس 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] فائل جي شروعات ۾ آهي.
فائل سان گڏ پيڪيج جي اهڙي خراب پروسيسنگ کان پوء، اين ايف ايس شيئر تي پوري مشين بيڪ اپ ڪاميابي سان شروع ڪئي وئي. بيڪ اپ مائونٽ پڻ ڪامياب ٿي ويو. تنهن ڪري، مان سمجهان ٿو، ايلبرس PDK سان هڪ مشين کي بيڪ اپ ڪرڻ لاء، ڊائون لوڊ "بس انهي وانگر" بغير ڪنهن به ذميواري، لينڪس لاء ويم ايجنٽ ضرور مناسب آهي. جيتوڻيڪ هڪ فائل سان سڀني تبديلين کان پوء.
يقينن، ايلبرس او ايس ورهائڻ واري کٽ رسمي طور تي سپورٽ نه ڪئي وئي آهي، ڇاڪاڻ ته اهو سپورٽ وارن جي فهرست ۾ شامل نه آهي. ان کان سواء، لينڪس لاء ويم ايجنٽ ان تي آزمائشي نه ڪيو ويو QA ڊپارٽمينٽ، تنهن ڪري اهي. ڪابه مدد نه آهي (گهٽ ۾ گهٽ مضمون جي اشاعت جي وقت تي).
مون کي اميد آهي ته مضمون انهن لاء مفيد ثابت ٿيندو جيڪي 334 جون 29.06.2017 جي آرڊر نمبر XNUMX تي عمل ڪرڻ جي ڪوشش ڪري رهيا آهن. منهنجي تو لاءِ... [TBD].
جو ذريعو: www.habr.com