OrangeBOX: OrangePI დაფუძნებული უსაფრთხო სარეზერვო შენახვის მოწყობილობა: 5 ნაბიჯი
OrangeBOX: OrangePI დაფუძნებული უსაფრთხო სარეზერვო შენახვის მოწყობილობა: 5 ნაბიჯი
Anonim
OrangeBOX: OrangePI დაფუძნებული უსაფრთხო სარეზერვო შენახვის მოწყობილობა
OrangeBOX: OrangePI დაფუძნებული უსაფრთხო სარეზერვო შენახვის მოწყობილობა
OrangeBOX: OrangePI დაფუძნებული უსაფრთხო სარეზერვო შენახვის მოწყობილობა
OrangeBOX: OrangePI დაფუძნებული უსაფრთხო სარეზერვო შენახვის მოწყობილობა

OrangeBOX არის ყველა ერთში დისტანციური შენახვის სარეზერვო ყუთი ნებისმიერი სერვერისთვის.

თქვენი სერვერი შეიძლება იყოს ინფიცირებული, კორუმპირებული, წაშლილი და თქვენი ყველა მონაცემი კვლავ დაცულია OrangeBOX– ზე და ვის არ მოეწონება მისია, როგორც შეუძლებელი, როგორც სარეზერვო მოწყობილობა, რასაც თქვენ უბრალოდ აერთებთ და ნახავთ პროგრესის მაჩვენებელს მეტის გაკეთების გარეშე (მხოლოდ იმედი მაქვს კვამლი არ გამოვა ბოლოს:)).

OrangeBOX არის ჩემი პირველი პროექტი, რომელიც ძირითადად პროგრამული უზრუნველყოფაა და არა აპარატურის გატეხვა. ეს არის ძირითადად საბაჟო აგებული NAS ერთად LCD თან ერთვის.

ნაბიჯი 1: აპარატურის ნაწილები

აპარატურის ნაწილები
აპარატურის ნაწილები
აპარატურის ნაწილები
აპარატურის ნაწილები
აპარატურის ნაწილები
აპარატურის ნაწილები

ნარინჯისფერი PI ნულოვანი არის ღია კოდის ერთჯერადი კომპიუტერი. მას შეუძლია გაუშვას Android 4.4, Ubuntu, Debian. იგი იყენებს AllWinner H2 SoC- ს და აქვს 256MB/512MB DDR3 SDRAM (256MB ვერსია სტანდარტული ვერსიაა. Orange Pi Zero არის მათთვის, ვისაც სურს შექმნას ტექნოლოგია - არა მხოლოდ მისი მოხმარება. ეს არის მარტივი, სახალისო, სასარგებლო ინსტრუმენტი შეგიძლიათ გამოიყენოთ თქვენს გარშემო არსებული სამყაროს კონტროლის დასაწყებად (https://www.orangepi.org/orangepizero/). ასე რომ, ზუსტად ჩვენთვის, მოდით გავაგრძელოთ იგი:)

  • ლითონის/პლასტმასის/ხის ყუთი (მე გამოვიყენე ძველი Yamaha გარე cd-rw ყუთი)
  • ნარინჯისფერი PI Zero ან უკეთესი (GPIO pinout შეიძლება შეიცვალოს თუ სხვა მოდელს იყენებთ)
  • 2x20 RGB LCD ეკრანი
  • ნებისმიერი SFF 3.5/ LFF 2.55 USB დისკი
  • Sata -> USB ადაპტერი. გაითვალისწინეთ, რომ მიუხედავად იმისა, რომ OrangePI არ აწესებს ზედა ზღვარს დისკის მაქსიმალურ ტევადობაზე, ამას აკეთებს ბევრი USB-to-SATA ხიდი (მაქსიმუმ 2 ტბაიტი). ნარინჯისფერ PI Zero- ს, რომელსაც მე ვიყენებ, აქვს მხოლოდ ერთი USB 2.0 პორტი, ეფექტური გადაცემის სიჩქარით მაქსიმუმ 28 მბ/წმ. მე ავირჩიე USB3.0 (მომზადებულია მომავალი განახლებებისთვის) -> SATA ხიდი (ბრენდი არ იქნება ნახსენები) და ის ზღუდავს ზღვარს, ამიტომ უმჯობესია ავირჩიოთ ხიდი, რომელიც დამტკიცებულია, რომ მხარს უჭერს უფრო დიდ დისკებს, როგორიცაა JMicron JMS567 ჩიპიანი ხიდები რა სანამ ყიდულობთ, გააკეთეთ საკუთარი კვლევა. მე შემიძლია ვიცხოვრო სიჩქარისა და მყარი დისკის ლიმიტით 2TB sata დისკის გამოყენებით ამ პროექტში (თუ თქვენ დააყენებთ უფრო დიდ დისკებს, ის აღიარებული იქნება, მაგრამ ოპერაციული სისტემა დაინახავს მხოლოდ მის პირველ 2 ტბ -ს, ასე რომ დანარჩენი მოცულობა იქნება დაკარგული).
  • 12V 2.5 A ან უფრო მაღალი გამაძლიერებელი ადაპტერი. გამოთვალეთ დაახლოებით 500 mA ნორმალური გამოყენება OPI Zero– სთვის და 1.5A პიკი სტანდარტული LFF SATA დისკისთვის. გადაჭარბება არასოდეს მტკივა. ჩემს კონფიგურაციაში Yamaha psu (რისი მომარაგება შეეძლო საკმარისზე მეტ დენს ორივე 12+5V რელსებზე) სამწუხაროდ ააფეთქეს: (წამში GND- ზე ძირითადი გადართვის დახარისხების გამო, მე მომიწია წებოვანა ჩვეულებრივ ადაპტერში, სულ მცირე, მან ყუთი რამდენიმე გრამი მსუბუქია.
  • მამალი კონვერტორი DC-DC 12V-> 5V. მე ვიყენებდი იგივე რეგულირებად მინი მამალს, როგორც IronForge– სთან, მუშაობს იდეალურად.

სურვილისამებრ

თუ თქვენ მზად ხართ დახარჯოთ + 10 $, მაშინ შეგიძლიათ მიიღოთ Orange Pi Plus (https://www.armbian.com/orange-pi-one-plus/), რომელიც მსგავსი ფორმულაა და იღებს თქვენ Gbe და SATA3. ამისათვის სასწორი PI გაყვანილობის ბიბლიოთეკა შეიძლება გამოყენებულ იქნას: https://github.com/OrangePiLibra/WiringPi, მაგრამ ვინაიდან GPIO pinout განსხვავებულია, ეს არ არის ამ წერის სფეროდან.

თქვენ ასევე შეგიძლიათ ამის გაკეთება ახალი Orange PI Plus2– ით, რომელსაც აქვს SATA კონექტორი და შეგიძლიათ გამოტოვოთ sata-> USB კონვერტორების გამოყენება ყველა მათ შეზღუდვასთან ერთად. თუ თქვენ აპირებთ FreeBSD– ის ან სხვა BSD– ების გამოყენებას, Orange PI სერია შეიძლება არ იყოს საუკეთესო არჩევანი, რადგან მათი ტექნიკური მხარდაჭერა შეზღუდულია (მაგალითად, ჩატვირთვისას უნდა გამოიყენოთ USB ჯოხი). BSD– ებისთვის ეს საუკეთესო რჩევაა ჟოლოს PI გამოყენებისათვის. LCD– ის C კოდი და ყველა სკრიპტი არის პორტატული ნებისმიერი სხვა UNIX სისტემისთვის.

ნაბიჯი 2: აპარატურის დიზაინი

აპარატურის დიზაინი
აპარატურის დიზაინი
აპარატურის დიზაინი
აპარატურის დიზაინი
აპარატურის დიზაინი
აპარატურის დიზაინი

იამაჰას ყუთი საკმარისი იყო ამ ყველაფრის შესანახად, მას არ ექნებოდა საკმარისი ადგილი ნარინჯისფერი PI კომპიუტერისთვის ან ჩვეულებრივი Raspi ფორმა-ფაქტორული დაფისთვის.

Ethernet გამოიყვანეს გაფართოებით ყუთის უკანა მხარეს. გახსოვდეთ, რომ Orange PI ნულს აქვს მხოლოდ 100mbit/s Ethernet ინტერფეისი, თუ უფრო სწრაფად გსურთ დაგჭირდებათ სხვა დაფის გამოყენება, როგორიცაა Asus Tinkerboard/RPI3B+/Orange PI სხვა მოდელები.

არასწორი PIN Out არის ერთადერთი და ერთადერთი შეცდომა, რომელიც შეგიძლიათ დაუშვათ ამ პროექტში, ამიტომ ღირს გამოიყენოთ პრინციპის გარკვეული წესი:

1, ყოველთვის ეცადეთ გამოიყენოთ იგივე ფერის კაბელი ბოლოდან ბოლომდე. მე თვითონ ვაკეთებ იგივე "შეცდომას" ზოგიერთ პროექტში, სადაც მე არ ვაკეთებ, უბრალოდ იმიტომ, რომ მე არ მაქვს საკმარისად გრძელი მამაკაცი-მამაკაცი/კაცი-ქალი/ქალი-ქალი კაბელები და მე ვასწორებ 2-ს ერთად მხოლოდ გასაგრძელებლად წრე თუ თქვენ სათანადოდ არ აფიქსირებთ თქვენს მუშაობას, ამან შეიძლება გამოიწვიოს თავის ტკივილი წლების შემდეგ, სადაც უნდა გააკეთოთ რემონტი, განახლება.

2, წაისვით ცხელი წებო კონექტორებზე. ამ arduino-starter ნაკრების სტილის mm/mf/ff კაბელების გამოყენებისას, რომლებიც არ არის ხარისხის ზემოთ, საკმაოდ ხშირია (განსაკუთრებით თუ თქვენ გადაადგილდებით/ატარებთ მოწყობილობას) კონექტორები ამოვარდება. თუ იცით, რომ ეს იქნება გრძელვადიანი გამოყენების მოწყობილობა (შესაძლოა გამოიყენოთ მანამ, სანამ არ გატყდება ?!), მაშინ უმჯობესია გამოიყენოთ ცოტაოდენი ცხელი წებო როგორც OrangePI- ის, ასევე LCD კონექტორების შესანახად. საჭიროების შემთხვევაში, ეს ადვილად იშლება/იჭრება მოგვიანებით.

3, OrangePI ნულოვანი გაყვანილობა ცუდი ამბავი ის არის, რომ Orange PI pinout არ არის იგივე ჟოლოს PI 0/1/2/3 და სხვაობაა Orange PI სხვა მოდელებსაც შორის. საუკეთესო გზაა გაყვანილობის ბიბლიოთეკის მიღება (Orange PI Zero ვერსია). სურათი შეიძლება დამაბნეველი იყოს, მაგრამ ეს იყო საუკეთესო, რაც მე ვიპოვე. ერთი მეორის 180 გრადუსიანი სარკეა. მიუხედავად იმისა, რომ CLI არა გრაფიკული სურათი შეიძლება იყოს უფრო რთული აღსაქმელი, ის ყველაზე სწორია.

თქვენ ყოველთვის შეგიძლიათ განასხვავოთ სოკეტების 2 ბოლო, ერთი ბოლო განიხილოს როგორც პოზიტიური დასასრული (+3.3/+5V) და მეორე როგორც უარყოფითი ბოლო (ერთი GND) -> ეს არის კონექტორი ბოლომდე ETHERNET პორტისკენ რა

გაყვანილობის PI ნულოვანი ცხრილიდან დაგჭირდებათ მხოლოდ ერთი სვეტი, რომ wPI დაივიწყოს სხვები ისე, როგორც ისინი იქ არ იქნებოდნენ.

მაგალითად, LCD_E 15 (ეს არის wPI 15!) და LCD_RS 16 (ეს არის wPI 16!) დასაკავშირებლად, დაითვალეთ ქინძისთავები კონექტორის პოზიტიური ბოლოდან (ადვილია კალმით ან პატარა ხრახნით). ეს ფიზიკურად დაიკლებს 4 ქინძისთავსა და 5 პინს.

4, დაჯგუფება. თუ არსებობს შესაძლებლობა, რომ მეორადი ქინძისთავები ერთმანეთის გვერდით დააყენოთ (მათი დაჯგუფება) ყოველთვის ირჩევს ამას, რაც მათ აიძულებს ერთმანეთზე დაიჭირონ ცხელი წებოს გარეშეც და ასევე სხვა პროექტებში, როდესაც თქვენ გაქვთ 2x 4x 6x molex კონექტორები, შეგიძლიათ უბრალოდ ისარგებლეთ ერთმანეთის გვერდით მყოფი ქინძისთავებით. აქ საუკეთესო, რაც შეგიძლიათ გააკეთოთ, არის 2-3 კაციანი ჯგუფი (იდეალურია ძველი კომპიუტერებიდან გადარჩენილი ჯუმბერის კაბელების გამოყენებისას).

OrangePI LCD ეკრანის კავშირისთვის გამოყენებული ქინძისთავები:

// გამოიყენეთ WIRINGPI PIN რიცხვები

#განსაზღვრეთ LCD_E 15 // ჩართეთ პინი #განსაზღვრეთ LCD_RS 16 // რეგისტრაცია აირჩიეთ პინი #განსაზღვრეთ LCD_D4 5 // მონაცემთა პინი 4 #განსაზღვრეთ LCD_D5 6 // მონაცემთა პინი 5 #განსაზღვრეთ LCD_D6 10 // მონაცემთა პინი 6 #განსაზღვრეთ LCD_D7 11 // მონაცემთა პინ 7

ქინძისთავები გამოიყენება RGB განათების კონტროლისთვის

$ G დაწერეთ 10

$ G ჩაწერეთ 4 1 $ G დაწერეთ 7 1

ნარინჯისფერი PI ნულოვანი wPI ქინძისთავები 1, 4, 7. ერთადერთი ჯადოსნური ამ LCD– ს შეუძლია შეაფასოს სტანდარტული ფიქსირებული ლურჯი ან დაფიქსირდეს მწვანე შუქნიშანი LCD– ში, სადაც თქვენ გაქვთ ერთი კათოდი, რომელიც უნდა დაიწიოს GND– მდე, რომელსაც აქვს 3 3 – ისთვის ფერები. წითელი, მწვანე და ლურჯი. თუ რომელი კომბინაცია ჩართულია, შეგიძლიათ შეურიოთ სხვადასხვა ფერები ამ ძირითად ფერს, მაგრამ მხოლოდ მაღალ ბოლოებს არ აქვთ ჩრდილები, რადგან თქვენ ვერ აკონტროლებთ ფერის სიკაშკაშეს (ის ჩართულია ან გამორთულია).

დამატებითი ფერის შერევა: წითელ მწვანეზე დამატება იძლევა ყვითელს; წითელი ფერის დამატება ლურჯს იძლევა მაგენტა; მწვანე ფერის დამატება ლურჯს იძლევა ციანი; სამივე ძირითადი ფერის ერთად დამატება იძლევა თეთრს.

ნაბიჯი 3: ოპერაციული სისტემა

Ოპერაციული სისტემა
Ოპერაციული სისტემა

OrangeBOX ჩატვირთვისას და Armbian linux (დაფუძნებულია Debian Stretch) 4.14.18-sunxi ბირთვზე უსაფრთხო ცეცხლოვანი გარემოთი, უკავშირდება VPN- ს და ელოდება სერვერის დისტანციური სარეზერვო ბრძანებებს.

დიზაინის პრინციპები:

დისკის სრული დაშიფვრა (მოწყობილობა არ შეიცავს გასაღებს სარეზერვო დისკის გასახსნელად. ის დროებით იქნება გადაწერილი დისტანციური სერვერიდან ram /dev /shm, დისკი გაიხსნება და გასაღები წაიშლება. სარეზერვო ასლის დასრულების შემდეგ) დისკი დაიხურა და OrangeBox ავტომატურად ითიშება 1 წუთში.)

-ყველა ბრძანება და გასაღები იგზავნება დისტანციური სერვერიდან (თავად მოწყობილობა შეიცავს მხოლოდ vpn სერტიფიკატს) მას არ აქვს წვდომა დისტანციურ სერვერზე, თუნდაც ამ მოწყობილობიდან ssh გათიშული იყოს

-ადგილობრივი ფაილური სისტემა დაშიფრულია, რომ შესაძლებელი იყოს ჩატვირთვა, მაგრამ არ შეიცავს რაიმე სასარგებლოსა და ვინაიდან VPN კავშირი ძალიან შეზღუდულია მეორე ბოლოში, თუნდაც მოწყობილობის სრული დაკარგვით, თავდამსხმელს არაფრის გაკეთება არ შეუძლია

ჩამოტვირთეთ Armbian Stretch

გაუშვით სისტემა:

apt-get განახლება && apt-get განახლება

apt-get დააინსტალირეთ sysvinit-core sysvinit-utils

შეცვალეთ /etc /inittab, ყველა კონსოლი შეიძლება გამორთული იყოს, რადგან ყუთი გამოყენებული იქნება როგორც უთავო. დაწერეთ კომენტარი შემდეგ განყოფილებაში:

#1: 2345: respawn:/sbin/გეტი 38400 tty1

#2: 23: respawn:/sbin/getty 38400 tty2 #3: 23: respawn:/sbin/getty 38400 tty3 #4: 23: respawn:/sbin/გეტი 38400 tty4 #5: 23: respawn:/sbin/გეტი 38400 tty5 #6: 23: respawn:/sbin/გეტი 38400 tty6

გადატვირთეთ თქვენი ყუთი და ამოიღეთ systemd, რომ გქონდეთ ნამდვილი ღია წყარო bloatware უფასო სისტემა.

apt-get remove --purge-auto-remove systemd

დააინსტალირეთ რამდენიმე პაკეტი

apt-get დააინსტალირეთ cryptsetup vim htop rsync ეკრანი gcc make git

დააინსტალირეთ wiringpi ბიბლიოთეკა

cd /usr /src

git კლონი https://github.com/xpertsavenue/WiringOP-Zero.git cd Wiring OP-Zero chmod +x./build./build

შექმენით ნარინჯისფერი მომხმარებელი LCD ეკრანისთვის

groupadd -g 1000 ფორთოხალი

useradd -m -d /home /orange -s /bin /bash -u 1000 -გ ფორთოხლის ფორთოხალი

დარაჯი, რომელიც არ ზრუნავს თქვენზე

apt-get დააინსტალირეთ გუშაგი

ეძებთ/etc/default/watchdog # დაიწყეთ watchdog ჩატვირთვის დროს? 0 ან 1 run_watchdog = 1 # დაიწყება wd_keepalive გუშაგის შეწყვეტის შემდეგ? 0 ან 1 run_wd_keepalive = 1 # ჩატვირთეთ მოდული watchdog watchdog_module- ის დაწყებამდე = "არცერთი" # მიუთითეთ მეთვალყურეობის დამატებითი პარამეტრები აქ (იხ. მენეჯერი).

ვუყურებ /etc/watchdog.conf

# მაინც ჩართეთ ეს

max-load-1 = 24 max-load-5 = 18 max-load-15 = 12

/და ა.შ/init.d/watchdog დაწყება

უნდა იყოს მინიმუმ 1 ბირთვის ძაფი და 1 პროცესი:

ფესვი 42 0.0 0.0 0 0? მე <10:50 0:00 [watchdogd] root 14613 0.0 0.2 1432 1080? SLs 13:31 0:00/usr/sbin/watchdog

ტესტირება:

დარწმუნდით, რომ შეწყვეტთ ყველაფერს და აკეთებთ სინქრონიზაციას და დანარჩენ მონაცემებს დისკზე დასაწერად. შემდეგ, როგორც ძირეული საკითხი:

ექო 1> /dev /watchdog

რამდენიმე წამის შემდეგ მანქანა უნდა გადატვირთოთ.

როგორც სახელმძღვანელოში წერია:

o სავსეა პროცესის ცხრილი?

o არის საკმარისი თავისუფალი მეხსიერება? o არის საკმარისი გამოყოფილი მეხსიერება? o არის თუ არა ზოგიერთი ფაილი ხელმისაწვდომი? o შეიცვალა ზოგიერთი ფაილი მოცემულ ინტერვალში? o საშუალო სამუშაო დატვირთვა ძალიან მაღალია? o მოხდა ფაილის ცხრილის გადავსება? o პროცესი ჯერ კიდევ მიმდინარეობს? პროცესი მითითებულია pid ფაილით. o ზოგიერთი IP მისამართი პასუხობს პინგს? o იღებენ თუ არა ტრაფიკი ქსელის ინტერფეისებს? o ტემპერატურა ძალიან მაღალია? (ტემპერატურის მონაცემები ყოველთვის არ არის ხელმისაწვდომი.) O შეასრულეთ მომხმარებლის მიერ განსაზღვრული ბრძანება თვითნებური ტესტების ჩასატარებლად. o შეასრულეთ ერთი ან მეტი ტესტი/შეკეთების ბრძანება, რომელიც ნაპოვნია /etc/watchdog.d. ამ ბრძანებებს ეწოდება არგუმენტის ტესტი ან რემონტი. თუ რომელიმე ჩამოთვლილი ჩეკი წარუმატებელია გუშაგი გამოიწვევს დახურვას. თუ რომელიმე ამ ტესტის გარდა მომხმარებლის განსაზღვრული ორობითი ერთ წუთზე მეტხანს გაგრძელდება, მანქანა ასევე გადატვირთულია.

ამ მეთვალყურემ შეიძლება კარგად იმუშაოს ჩვეულებრივ x86 არქიტექტურაზე, მაგრამ ARM დაფაზე, როგორიცაა ჟოლოს PI და ნარინჯისფერი PI, ბევრჯერ დამარცხდა. სისტემა შეიძლება გადავიდეს დაკიდებულ მდგომარეობაში, სადაც კი ყარაულია ჩამოკიდებული. მოდით, ის მაინც დავაკონფიგურიროთ, იქნებ წლების განმავლობაში გაუმჯობესდეს apt-get განახლებით:(

ნაბიჯი 4: პროგრამული უზრუნველყოფის დიზაინი

პროგრამული უზრუნველყოფის დიზაინი
პროგრამული უზრუნველყოფის დიზაინი

სარეზერვო პროცესი თავისთავად ემყარება rsync (საუკეთესო სარეზერვო ინსტრუმენტი, რაც კი ოდესმე გამოიგონეს) მონაცემებს იღებს სერვერი-> OrangeBOX.

Rsync– ის მონაცემების ამოღება იყო პროექტის ერთადერთი რთული ნაწილი, რომ ჰქონოდა პროგრესის ზოლი სარეზერვო ასლის შესახებ, რომელიც დაბეჭდილია LCD– ზე.

სარეზერვო პროგრესის გამოთვლის 3 შესაძლო გზა იყო:

1, ფორმულების გამოყენება, როგორიცაა https://wintelguy.com/transfertimecalc.pl, რათა დადგინდეს გადაცემის დრო

გადაცემის დრო (დ: სთ: მ: წ): 0: 02: 44: 00

შედარებისთვის: 123 GB ფაილის გადაცემის სავარაუდო დრო სხვადასხვა ქსელის ბმულზე (d: h: m: s): T1/DS1 ხაზი (1.544 Mbps) - 7: 09: 01: 46 Ethernet (10 Mbps) - 1:03: 20:00 სწრაფი Ethernet (100 Mbps) - 0: 02: 44: 00 Gigabit Ethernet (1000 Mbps) - 0: 00: 16: 24 10 Gigabit Ethernet (10 Gbps) - 0: 00: 01: 38

თუ rsync დაასრულებს ის სიგნალს აძლევს სკრიპტს, რომ შეწყვიტოს გამოთვლა. ეს მეთოდი არის მხოლოდ სავარაუდო და არასაიმედო, ასევე ბმულის სიჩქარე არ არის დაფიქსირებული, მას შეუძლია შეანელოს, კვლავ დააჩქაროს. ეს მხოლოდ თეორიული გაანგარიშებაა.

2, ჩვენ ვატარებთ ზომის შემოწმებას დირექტორიაში, რათა დავადგინოთ რამდენი მონაცემი გვაქვს უკვე სინქრონიზებული. შეიძლება ძალიან ნელი იყოს ასობით გბ პატარა ფაილებით (თუმცა Linux– ში du -s აკეთებს გარკვეულ ქეშირებას, თუ ხელახლა გაუშვებ მას)

მასპინძელი A -> სერვერის მონაცემების სარეზერვო ასლი მონაცემთა რეჟიმი: 235 GB

მასპინძელი B -> ნარინჯისფერი ყუთის კლიენტის მონაცემები ჩვენ გვაქვს ამჟამად მონაცემთა რეჟიმი: 112 GB

დელტა არის 123 GB.

3, თუ ფაილური სისტემა ეძღვნება ჩვენს შემთხვევაში/dev/mapper/backup, ჩვენ შეგვიძლია ვისარგებლოთ ფაილური სისტემის გამოყენების საერთო მაჩვენებლით, რათა დადგინდეს როგორ ვითარდება ჩვენი სარეზერვო ასლი და ეს მართლაც ძალიან სწრაფად ხდება. ამ შემთხვევაში ჩვენ არც კი გვჭირდება rsync stdout– ის მილსადენი სადმე, უბრალოდ გავუშვათ მშრალი rsync, დაველოდოთ მის დასრულებამდე, გამოვთვალოთ დელტა ბაიტებში და შევამოწმოთ ეს თავისუფალი სივრცით რაც გვაქვს სარეზერვო დისკზე და voila ჩვენ შეგვიძლია ახლა გააკეთე ლამაზი ბარი გრაფიკი. ეს იყო მეთოდი, რომელიც მე ავირჩიე და აქ არის ჩემი სკრიპტი:

#!/bin/bash

# სარეზერვო პროგრესის გამომთვლელი OrangeBOX– ის მიერ NLD # ვერსია: 0.2 (2018/03/05) # # გაუშვით როგორც არაპრივილეგირებული მომხმარებელი cron # * * * * * /home/orange/backup_progress.sh &>/dev/null # # ეს სკრიპტი პასუხისმგებელია მხოლოდ LCD ეკრანზე მონაცემების ჩვენებაზე, ის # ძირითად პროგრამასთან არაპირდაპირ ურთიერთობს პოზიციისა და ფაილების ჩაკეტვის საშუალებით. BACKUP_DRIVE = "/dev/mapper/backup" VFILE = "$ HOME/start.pos" # დისკის გამოყენება სარეზერვო ასლის დასაწყისში TFILE = "$ HOME/trans.size" # მთლიანი წინასწარ გამოთვლილი გადაცემის ზომა BFILE = "$ HOME/ backup.lck " # განსაზღვრავს დაწყებულ მდგომარეობას FFILE =" $ HOME/backup.fin " # განსაზღვრავს დასრულებულ მდგომარეობას LFILE1 =" $ HOME/lcd1.bar " # LCD პროგრესის ინდიკატორის მონაცემები LFILE2 =" $ HOME/lcd2.bar " # LCD პროგრესი ინდიკატორის მონაცემები SHUTDOWN = "1" # თუ 1 ის იწყებს სხვა სკრიპტს, რომელიც გამორთავს ველს სარეზერვო ასლის ბოლოს BACKUP_CURRENT = "0" # ინიციალიზებული უნდა იყოს, მაგრამ გამოითვლება DRIVE_SIZE = "" # დისკის ზომა ბაიტებში (მეორადი შეამოწმეთ) LCD = "sudo /bin /lcd" function is_mount () {grep -q "$ 1" /proc /mounts status = $? } ფუნქცია წითელი () {sudo /bin /lcdcolor red} ფუნქცია მწვანე () {sudo /bin /lcdcolor მწვანე} ფუნქცია ლურჯი () {sudo /bin /lcdcolor blue} # წმინდა მდგომარეობა (ჩატვირთვისას დაყენებულია bootup_display.sh). სარეზერვო ასლი არ მიმდინარეობს, არ გააფუჭოთ # სტატუსის LCD. პროგრესის ჩვენება მხოლოდ იმ შემთხვევაში, თუ არსებობს სარეზერვო ასლი => დაწყებული ფაილი და არა ფინიანი ფაილი = დატოვეთ თუ [! -f $ BFILE] && [! -f $ FFILE]; შემდეგ გამოდით 1 fi # თუ სარეზერვო ასლი დასრულდა, ეს სკრიპტი გამოჩნდება და ამოიღეთ საკეტები # რომ არ შეეძლოთ ხელახლა გაშვება მომდევნო ინიციატივამდე. თუ [-f $ FFILE]; შემდეგ მწვანე $ LCD "სარეზერვო" "** დასრულებულია **" ექო "სარეზერვო ასლი დასრულებულია" rm -rf $ BFILE $ TFILE $ FFILE $ LFILE1 $ LFILE2 $ VFILE # სარეზერვო ასლი დასრულდება თუ [$ SHUTDOWN == "1"]; შემდეგ ექო "გათიშვის სკრიპტის შესრულება …"/home/orange/shutdown.sh & fi გასვლა 0 fi # ამ მომენტიდან სკრიპტი მუშაობს მხოლოდ იმ შემთხვევაში, თუ არსებობს სარეზერვო ასლი #, ამიტომ ყველა შეცდომა დაიბეჭდება LCD- ზე და იწვევს სკრიპტს # შეწყვეტის მიზნით, ის არ ამოიღებს backup.lck ფაილს, ასე რომ შევა აქ # ისევ და ისევ და გააუმჯობესებს პირობებს. is_mount $ BACKUP_DRIVE თუ [$ status -ne 0]; შემდეგ წითელი $ LCD "ERR: სარეზერვო დისკი" "არ არის დამონტაჟებული!" ექო "სარეზერვო დისკი არ არის დამონტაჟებული" გასვლა 1 fi თუ [! -s $ TFILE]; შემდეგ წითელი $ LCD LCD "ERR: transfile" "ცარიელია" echo "ტრანსპორტის ზომის გამოთვლის ფაილი ცარიელია." გასვლა 1 fi BACKUP_OVERALL = $ (თავი -1 $ TFILE | tr -d '\ n') თუ [-z $ BACKUP_OVERALL]; შემდეგ წითელი $ LCD "ERR: ზომის წაკითხვა" "სერვერისგან არასწორია" ექო "სარეზერვო მთლიანი ზომის წაკითხვა არასწორია 1" გასვლა 1 fi თუ!

მიუხედავად იმისა, რომ კოდი მარტივია, აქ არის გარკვეული აღწერა რას აკეთებს:

1, თუ BFILE ან FFILE არ არსებობს (რაც არის მდგომარეობა მკაფიო გაშვების შემდეგ), რაც მიუთითებს, რომ არ არსებობს სარეზერვო პროცესი, ასე რომ არ გააკეთოთ არაფერი უბრალოდ დატოვეთ. ამ გზით თქვენ შეგიძლიათ გრაფიკულად გაამდიდროთ თქვენთვის სასურველი ინფორმაცია ჩატვირთვის შესახებ, როგორიცაა მასპინძლის სახელი, IP, დრო და ა. შ.

2, მოდით გადავიდეთ is_mount $ BACKUP_DRIVE განყოფილებაზე. შეგახსენებთ, რომ ერთადერთი გზა აქ არის ის, რომ შეიქმნა სარეზერვო ასლი BFILE– ს არსებობისთვის. ახლა კოდი მხოლოდ შეცდომების სხვადასხვა შემოწმებას ახდენს, როგორიც არის სარეზერვო დრაივი დამონტაჟებული? ან სხვა შეცდომები. გახსოვდეთ, რომ ეს არის მხოლოდ DISPLAY პროგრამა, მაშინაც კი, თუ ზომა აღემატება სარეზერვო ასლებს, ის არაფერს შეწყვეტს.

3, OK ყველა შეცდომის შემოწმება გასუფთავებულია დრო პროცენტული გრაფიკის გამოსათვლელად. ჯერ სკრიპტი იღებს "სივრცის" სურათს იმ სივრცისგან, რომელიც გამოიყენება ბაიტებში სარეზერვო ფაილურ სისტემაში და ინახავს მას VFILE- ში. რა არის ამის მიზანი: bash სკრიპტი არის მოქალაქეობის არმქონე, ის კარგავს მონაცემებს შესრულებებს შორის, ასე რომ, თუ გსურთ „დაიმახსოვროთ“წინა შესრულების ზოგიერთი მონაცემი, თქვენ უნდა შეინახოთ იგი სადმე. ჩვენს შემთხვევაში, ეს არის მარტივი ტექსტური ფაილი. მარტივად რომ ვთქვათ, ვთქვათ, ჩვენი START_POS არის 1 GB (მონაცემები გვაქვს), რისი სარეზერვო ასლიც გვინდა არის +2 GB და დისკის საერთო მოცულობა 10 GB.

4, შემდეგ ჯერზე, როდესაც სკრიპტი გაუშვებს VFILE- ს და ის წაიკითხება უკან (ასე რომ, ჩვენ ვიცით, რა იყო საწყისი პოზიცია, თუ დისკი არ იყო ცარიელი) BACKUP_CURRENT- ის გამოსათვლელად, რომელიც არსებითად არის გამოყენებული სივრცის დელტა სარეზერვო დისკზე გამოკლებული საწყისი პოზიცია, რაც ჩვენ შევინახეთ VFILE– ში ბოლო ტურში (ისევ ეს არის მონაცემები, რაც ჩვენ გვქონდა დისკზე სარეზერვო ასლის დაწყებისას). სკრიპტი შინაგანად მუშაობს ბაიტებთან, მაგრამ ნახევარი საათის შემდეგ რომ გავამარტივოთ, ჩვენ დავამყარეთ 500 მბ მონაცემის მაშინ ფორმულა იქნება BACKUP_CURRENT = 1.5 გბ - 1 გბ (საწყისი მდგომარეობა) => რაც გვაძლევს ზუსტად რეალურ მონაცემებს 500 მბ, ანუ რასაც ჩვენ მხარს ვუჭერდით აქამდე. თქვენ ხედავთ, რომ სარეზერვო ასლის დასაწყისში არსებული მონაცემების თვალყურის დევნების შემთხვევაში, ამ ზომის გაანგარიშება ვერ მოხერხდება, რადგან ნახავთ, რომ ახლა გამოყენებული სივრცე არის 1.5 გბ, იმის ცოდნის გარეშე, რომ 1 გიგაბაიტიანი მონაცემი იყო დისკზე მთელი დროის განმავლობაში მოდის წინა სარეზერვოდან, ასე რომ ვივარაუდოთ, რომ სერვერმა გამოგვიგზავნა 1.5 გბ მონაცემები 500 მბ -ის ნაცვლად.

5, BACKUP_OVERALL იკითხება, ეს მონაცემები გამოითვლება სერვერის მიერ, როდესაც მან გააკეთა პირველადი მშრალი rsync (ასე რომ, ეს არის გარე მონაცემების წყარო, რომელიც შეიცავს ბაიტების რაოდენობას, რომლის სარეზერვო ასლი შეიქმნება სერვერიდან-> OrangeBOX). ეს მნიშვნელობა გადამოწმდება იმ მომენტისთვის დისკზე საერთო თავისუფალი სივრცის წინააღმდეგ და თუ იგი აღემატება მას მაშინ შეცდომის შეტყობინება გამოჩნდება lcd– ზე და სკრიპტი შეწყვეტს შესრულებას. კიდევ ერთხელ გახსოვდეთ, რომ ეს სკრიპტი აკეთებს მხოლოდ ჩვენებას, ის არ ერევა სარეზერვო პროცესში. თუ თქვენ ასუფთავებთ ფაილებს დისკზე ან ფაილების რაოდენობა იცვლება დისტანციურად და შესაბამისად BACKUP_OVERALL იცვლება ერთ მომენტში ის გაგრძელდება.

6, საბოლოოდ ჩვენ დავასრულეთ მეორე დონის შემოწმება დროა რაღაცის ჩვენება. სკრიპტი აჩვენებს მონაცემებს კონსოლზე და LCD– ზე მარტივი C პროგრამის გამოყენებით. ფონი გადადის ცისფერზე, რაც მიუთითებს, რომ სარეზერვო ასლი საბოლოოდ დაიწყო და პროგრესი გამოითვლება შემდეგი ფორმულით PROGRESS = $ ((($ BACKUP_CURRENT * 100) / $ BACKUP_OVERALL)). ეს არის ძირითადი პროცენტული გაანგარიშება, ვიღებთ მიმდინარე თანხას, ჩვენს მაგალითში 0.5 GB*100/2 GB = 25%.

7, რიცხვები ასევე გარდაიქმნება ბაიტიდან მეგა/გიგა ბაიტად და ეკრანი ავტომატურად გამოჩნდება MB– ში, თუ ის 1 GB– ზე დაბალია.

8, ერთი რამ, რისი გამოსახვაც დარჩა ჩვენს შემთხვევაში, არის 25% 20 სვეტიანი LCD. ეს იქნება 25 * 20 /100 = 5 ჩვენს მაგალითში. ამჟამად განახლებულია LCD პროგრამით, რომ ყოველ ჯერზე პროგრამის დარეკვისას ის გადაფარავს მთელ ეკრანს. ამ შემთხვევაში, ის 5 -ჯერ გაუშვებს მარყუჟს ეკრანზე 5 ჰეშმარკის # დახატვის მიზნით, ეს გამოჩნდება, როგორც მახინჯი მოციმციმე ყოველ რაუნდში, სამაგიეროდ მე ვწერ გამოთვლილ პროგრესის ბარის მონაცემებს LFILE1 და 2 -ზე, რაც ამ შემთხვევაში შემდეგ 5 რაუნდი შეიცავს ##### და ეს წაიკითხება და ნაჩვენებია LCD- ზე. თქვენ შეიძლება LFILE1 და 2 ჩაწეროთ ramdisk– ზე, რათა sdcard შეინახოთ ზედმეტი ჩაწერის ოპერაციებისაგან, მას ჩემთვის არანაირი პრობლემა არ შეუქმნია, სკრიპტი გადის cron– დან ყოველ წუთში ერთხელ.

9, როდესაც სარეზერვო ასლი დაასრულებს სერვერის სხვა სკრიპტს, რომელიც მუშაობს rsync, შეეხება FFILE- ს (ფაილის დასრულება). შემდეგ მარყუჟში backup_progress.sh გამოჩნდება, რომ სარეზერვო ასლი დასრულებულია და სურვილისამებრ მოუწოდებს სხვა სკრიპტს OrangeBOX– ის გამორთვისთვის. ის წაშლის დაბლოკვის ფაილებს ამ მომენტში შეუძლებელს ხდის შემდგომ შესრულებებს, მაშინაც კი, თუ თქვენ არ ჩართავთ გამორთვას მომდევნო წუთში, როდესაც ეს სკრიპტი მუშაობს, ის მაშინვე გათიშავს, რადგან BFILE არ არის და FFILE იქ არ არის. ამიტომ ის აჩვენებს სარეზერვო დასრულებულ შეტყობინებას განუსაზღვრელი ვადით, თუ სარეზერვო ასლი არ განახლდება ისევ.

დისტანციური სარეზერვო სკრიპტი (orange-remote.sh):

თქვენ უნდა შექმნათ ssh გასაღები სარეზერვო ასლისთვის და გასაღები luks დაშიფვრისათვის დისკზე. როდესაც დისტანციურ სარეზერვო ასლს ხელით გაუშვებთ, ის შეინახავს ნარინჯისფერი ყუთების მასპინძლის თითის ანაბეჭდს მასპინძელთა ფაილში (ამ მომენტიდან ის ავტომატურად გაშვებული იქნება cron– ის მიერ).

დისკი = "/dev/disk/by-id/…"

თქვენი მყარი დისკის იდენტიფიკატორის გასარკვევად გაუშვით uuid, blkid ან უბრალოდ მოძებნეთ შესაბამისი/dev/disk/დირექტორიები.

დირექტორია, რომელიც შეიცავს გამონაკლისს, შეიძლება შეიქმნას, თუ არ გსურთ ყველაფრის სარეზერვო ასლის შექმნა. ეს საკმაოდ შემაშფოთებელი პროცესია, რადგან rsync– ისთვის, თუ გსურთ გამორიცხოთ ერთი ქვე კატალოგი სტრუქტურაში, თქვენ უნდა გააკეთოთ:

+ /ა

+/a/b +/a/b/c +/a/b/c/d -/a/b/c/d/e +/dir2

ვინაიდან ეს სკრიპტი ასრულებს ბრძანებებს OrangeBOX– ზე დისტანციურად, მას არ გააჩნია ზედამხედველობის ცვლადი იმ მხრიდან, ამიტომ ვიყენებ რამდენიმე ჭკვიანურ ხრიკს, როგორიცაა დისტანციური დისკის გახსნის შეტყობინება /tmp/contmsg.txt, შემდეგ parse ეს რომ დაინახოს იყო თუ არა წარმატებული, თუ არა მაშინ ის ცვლის rsync ბინარულს არასამთავრობო შესრულებად, ასე რომ rsync არ შეეცდება მონაცემების ატვირთვას OrangePIs rootfs შევსების SDcard up. ასევე კარგი პრაქტიკაა chattr +i /mnt /სარეზერვო ასლის შესაცვლელად, რომ ეს შეუძლებელი გახდეს.

ზომის წინასწარი გამოთვლა ხდება ადგილობრივად სერვერზე, ამიტომ ეს ფაილი უნდა გაიგზავნოს OrangeBOX– ში მომდევნო ეტაპზე.

ძირითადი სარეზერვო ასლი ინიცირებულია მარყუჟისთვის ((i = 0; i <100; i ++)); გააკეთეთ იმიტომ, რომ დაბალი ხარისხის DSL/საკაბელო ინტერნეტ კავშირების შემთხვევაში rsync ხშირად შეიძლება დაირღვეს, დროის გასვლა. თუ ის წარმატებით დასრულდება, მაშინ მარყუჟი იშლება მეტი გამეორების მცდელობის გარეშე. ეს მუშაობს უპრობლემოდ კარგ ოპერაციულ სისტემებთან, თუმცა თუ რაიმე მიზეზით დისტანციური ყუთი იქნება ფანჯრები და იქნება წვდომა აკრძალული როგორც რეგულარულად NTUSER. DAT მაშინ rsync დააბრუნებს შეცდომის კოდს და ეს მარყუჟი 100 -ჯერ შესრულდება და შემდეგ მაინც ვერ მოხერხდება.

ნაბიჯი 5: დახურვა და შესასრულებელი სია

დახურვა და შესასრულებელი სია
დახურვა და შესასრულებელი სია
დახურვა და შესასრულებელი სია
დახურვა და შესასრულებელი სია

ჩემი გაკვეთილი კიდევ ერთხელ აჩვენებს, თუ როგორ შეგიძლიათ შექმნათ რაღაც უკეთესი, უფრო კონფიგურირებადი მოწყობილობა 10 $ კომპიუტერიდან, რომელიც ბუფალოს ჯოჯოხეთს სცემს, მას აქვს NAS მოწყობილობების ჩაკეტვა, უცნაური შიდა დანაწევრება, დაკავებული ყუთი დაჩაგრული linux segfaulting ინსტრუმენტებით, მართული მათი ფანჯრების პროგრამული უზრუნველყოფით, დახურული პროგრამული უზრუნველყოფით, ცუდი დოკუმენტაციით და მხარდაჭერით და რაც არ უნდა ბევრი ფული დახარჯოთ თქვენ ვერასოდეს მიიღებთ პროგრესის მაჩვენებელს, რომელიც აჩვენებს თქვენს სარეზერვო ასლს, რომ აღარაფერი ვთქვათ რამდენად მაგარია OrangeBox (მე მას ნარინჯისფერი CAT5 კაბელითაც კი ვიყენებ: D).

მინი კომპიუტერები სულ უფრო და უფრო მძლავრი ხდება იმავე <100 $ ფასის ხაზის შენარჩუნებით, ჩვენ შეგვიძლია გამოვიყენოთ ისინი უფრო და უფრო მეტი ამოცანისთვის. რადგან Gbe Ethernet პორტები საკმაოდ გავრცელებულია ამ დღეებში 1-2 წელიწადში მეხსიერება ამ დაფებზე მკვეთრად გაიზრდება და მათი გამოყენება შესაძლებელია ZFS დაფუძნებული სარეზერვო სისტემებისთვისაც.

-მარცვლეულის პროგრესირების მაჩვენებელი C პროგრამით (იხ. WasserStation ჩემი სხვა პროექტი). ახლახან მხოლოდ # hashmark # სიმბოლო გამოიყენება პერსონაჟის რეჟიმში lcdPuts (lcd, line1), ეს შეიძლება გაუმჯობესდეს მაშინაც კი, როდესაც სიმბოლო LCD– ები იყენებენ 1 სვეტის 5 ნაწილად გაყოფას და მთავარ C პროგრამას შეუძლია მიიღოს მთელი რიცხვი 25 -ის მსგავსად და ამოიღოს პროგრესის ბარი სწორად ან შემდგომ გაუმჯობესდა გრაფიკული LCD– ის გამოყენებით

-შესაძლებელია გქონდეთ მოსახსნელი HDD ახალი და ახალი სარეზერვო ასლების შესაქმნელად და მათი გადაადგილებისთვის სხვადასხვა ადგილას (თუ ყუთი ამოიცნობს ცარიელ დრაივს, მაშინ მას ავტომატურად უნდა გაფორმდეს დაშიფვრის გასაღებით მისი მიღების შემდეგ).

-თუ გსურთ დაბეჭდოთ თქვენი საკუთარი საქმე makerbot– ით, OrangeNAS შეიძლება თქვენთვის საინტერესო იყოს:

გირჩევთ: