สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
OrangeBOX เป็นกล่องสำรองข้อมูลระยะไกลแบบ all-in-one สำหรับเซิร์ฟเวอร์ใดๆ
เซิร์ฟเวอร์ของคุณสามารถติดไวรัส เสียหาย ล้างข้อมูล และข้อมูลทั้งหมดของคุณยังคงปลอดภัยบน OrangeBOX และใครที่ไม่ชอบภารกิจที่เป็นไปไม่ได้ เช่น อุปกรณ์สำรอง สิ่งที่คุณเพียงแค่เสียบปลั๊กและดูตัวบ่งชี้ความคืบหน้าโดยไม่ต้องทำอะไรเพิ่มเติม ควันจะไม่ออกมาในตอนท้าย:))
OrangeBOX เป็นโครงการแรกของฉันซึ่งส่วนใหญ่เป็นซอฟต์แวร์ ไม่ใช่แฮ็คฮาร์ดแวร์ โดยพื้นฐานแล้วมันเป็น NAS ที่สร้างขึ้นเองพร้อมติดตั้ง LCD
ขั้นตอนที่ 1: ชิ้นส่วนฮาร์ดแวร์
Orange PI zero เป็นคอมพิวเตอร์บอร์ดเดี่ยวแบบโอเพนซอร์ส สามารถรัน Android 4.4, Ubuntu, Debian มันใช้ AllWinner H2 SoC และมี 256MB/512MB DDR3 SDRAM (รุ่น 256MB เป็นรุ่นมาตรฐาน Orange Pi Zero เหมาะสำหรับใครก็ตามที่ต้องการเริ่มสร้างสรรค์ด้วยเทคโนโลยี – ไม่ใช่แค่การบริโภคเท่านั้น เป็นเครื่องมือที่เรียบง่าย สนุก และมีประโยชน์ที่คุณ สามารถใช้เพื่อเริ่มควบคุมโลกรอบตัวคุณได้ (https://www.orangepi.org/orangepizero/) ดังนั้นมันจึงเป็นของเราอย่างแน่นอน มาเริ่มกันเลย:)
- กล่องโลหะ/พลาสติก/ไม้ (ฉันใช้กล่อง cd-rw ภายนอกของ Yamaha รุ่นเก่า)
- Orange PI Zero หรือดีกว่า (พิน GPIO อาจเปลี่ยนแปลงได้หากคุณใช้รุ่นอื่น)
- หน้าจอ LCD RGB 2x20
- ไดรฟ์ USB SFF 3.5/ LFF 2.55 ใดๆ
- Sata -> อะแดปเตอร์ usb โปรดทราบว่าในขณะที่ OrangePI ไม่ได้กำหนดขีดจำกัดสูงสุดของความจุไดรฟ์สูงสุด แต่บริดจ์ USB-to-SATA จำนวนมากทำ (สูงสุด 2TB) PI Zero สีส้มที่ฉันใช้มีพอร์ต USB 2.0 เพียงพอร์ตเดียวที่มีอัตราการถ่ายโอนที่มีประสิทธิภาพสูงสุด 28 MB/s ฉันได้เลือก USB3.0 (เตรียมไว้สำหรับการอัพเกรดในอนาคต) -> บริดจ์ SATA (จะไม่กล่าวถึงแบรนด์) และจำกัดไว้ ดังนั้นจึงเป็นการดีกว่าที่จะเลือกบริดจ์ที่พิสูจน์แล้วว่ารองรับไดรฟ์ขนาดใหญ่ เช่น บริดจ์ที่ใช้ชิป JMicron JMS567. ทำวิจัยของคุณเองก่อนที่จะซื้อ ฉันสามารถอยู่กับความเร็วและขีด จำกัด ของฮาร์ดไดรฟ์โดยใช้ไดรฟ์ sata 2TB ในโปรเจ็กต์นี้ (ถ้าคุณใส่ไดรฟ์ที่ใหญ่กว่ามันจะรับรู้ แต่ OS จะเห็นเพียง 2TB แรกของมันดังนั้นความจุที่เหลือจะเป็น สูญหาย).
- อะแดปเตอร์แอมป์ 12V 2.5 A หรือสูงกว่า คำนวณการใช้งานปกติประมาณ 500mA สำหรับ 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 สำหรับสิ่งนี้ ไลบรารีการเดินสาย Libra PI สามารถใช้ได้: https://github.com/OrangePiLibra/WiringPi แต่เนื่องจาก GPIO pinout นั้นแตกต่างกัน มันจึงอยู่นอกขอบเขตของการเขียนนี้
คุณยังสามารถสร้างสิ่งนี้ด้วย Orange PI Plus2 ใหม่ที่มีตัวเชื่อมต่อ SATA และคุณสามารถข้ามการใช้ตัวแปลง sata->usb ทั้งหมดพร้อมกับข้อจำกัดของมันได้ หากคุณวางแผนที่จะใช้ FreeBSD หรือ BSD อื่นๆ ชุด Orange PI อาจไม่ใช่ตัวเลือกที่ดีที่สุด เนื่องจากการสนับสนุนฮาร์ดแวร์มีจำกัด (เช่น คุณต้องใช้ USB stick เพื่อบูต) สำหรับ BSD ขอแนะนำให้ใช้ Raspberry PI ทั้งรหัส C สำหรับ LCD และเชลล์สคริปต์ทั้งหมดสามารถเคลื่อนย้ายไปยังระบบ UNIX อื่นๆ ได้
ขั้นตอนที่ 2: การออกแบบฮาร์ดแวร์
กล่องยามาฮ่าก็เพียงพอที่จะเก็บทั้งหมดนี้ มันจะไม่มีพื้นที่เพียงพอสำหรับ Orange PI PC หรือบอร์ด Raspi form-factor ปกติ
อีเธอร์เน็ตถูกนำออกมาพร้อมกับส่วนต่อขยายที่ด้านหลังของกล่อง โปรดจำไว้ว่า Orange PI zero มีอินเทอร์เฟซอีเทอร์เน็ต 100mbit/s เท่านั้น หากคุณต้องการให้เร็วขึ้น คุณจะต้องใช้บอร์ดอื่น เช่น Asus Tinkerboard/RPI3B+/ Orange PI รุ่นอื่นๆ
PIN Out ผิดเป็นข้อผิดพลาดเพียงอย่างเดียวที่คุณสามารถทำได้ในโครงการนี้ ดังนั้นจึงคุ้มค่าที่จะใช้กฎของหลักการง่ายๆ:
1 พยายามใช้สายสีเดียวกันตั้งแต่ END ถึง END เสมอ ตัวฉันเองทำ "ผิดพลาด" แบบเดียวกันในบางโครงการที่ฉันทำไม่ได้ เพียงเพราะฉันไม่มีสายเคเบิลชาย-ชาย/ชาย-หญิง/หญิง-หญิงในมือนานเพียงพอ และฉันต่อ 2 เข้าด้วยกันเพื่อดำเนินการต่อ วงจร หากคุณไม่ได้จัดทำเอกสารงานของคุณอย่างถูกต้อง อาจทำให้เกิดอาการปวดหัวในอีกหลายปีต่อมา ซึ่งคุณต้องซ่อมแซม อัปเกรด
2 ใช้ hotglue กับตัวเชื่อมต่อ ในกรณีที่ใช้สายเคเบิล mm/mf/ff แบบชุดสตาร์ทของ Arduino ซึ่งไม่ได้คุณภาพสูงสุด เป็นเรื่องปกติ (โดยเฉพาะหากคุณเคลื่อนที่ไปรอบๆ/ขนย้ายอุปกรณ์) ขั้วต่อจะหลุดออกมา ถ้าคุณรู้ว่ามันจะเป็นอุปกรณ์ที่ใช้งานในระยะยาว (อาจใช้จนพัง?!) ควรใช้กาวร้อนเล็กน้อยทั้งที่ด้าน OrangePI และ LCD ของตัวเชื่อมต่อเพื่อรวมเข้าด้วยกัน สามารถละลาย/ขูดออกได้ง่ายในภายหลังหากจำเป็น
3, การเดินสายศูนย์ OrangePI ข่าวร้ายคือ pinout Orange PI ไม่เหมือนกับ Raspberry PI 0/1/2/3 และมีความแตกต่างระหว่าง Orange PI รุ่นอื่นๆ วิธีที่ดีที่สุดคือรับไลบรารีการเดินสาย (เวอร์ชัน Orange PI Zero) ภาพอาจดูสับสนเล็กน้อย แต่นี่เป็นภาพที่ดีที่สุดที่ฉันสามารถหาได้ อันหนึ่งเป็นกระจก 180 องศาของอีกอันหนึ่ง แม้ว่าภาพที่ไม่ใช่ภาพกราฟิกของ CLI อาจเข้าใจยากกว่า แต่ก็เป็นภาพที่ตรงไปตรงมาที่สุด
คุณสามารถแยก 2 ปลายของซ็อกเก็ตได้เสมอโดยพิจารณาปลายด้านหนึ่งเป็นปลายที่เป็นบวกด้วย (+3.3/+5V) และปลายอีกด้านหนึ่งเป็นขั้วลบ (GND หนึ่งอัน) -> นี่คือจุดสิ้นสุดของตัวเชื่อมต่อที่หันไปทางพอร์ต ETHERNET.
จากตาราง Wiring PI Zero คุณจะต้องมีเพียงคอลัมน์เดียวที่ wPI ลืมไปว่าคอลัมน์อื่นๆ จะไม่มีอยู่จริง
ตัวอย่างเช่น การเชื่อมต่อ LCD_E 15 (นั่นคือ wPI 15!) และ LCD_RS 16 (นั่นคือ wPI 16!) ให้นับพินจากปลายขั้วบวกของขั้วต่อ (ใช้ปากกาหรือไขควงขนาดเล็กได้ง่าย) นั่นจะเป็นการลดลง 4 พินและ 5 พิน
4, จัดกลุ่ม. หากมีความเป็นไปได้ที่จะวางหมุดที่ใช้แล้วไว้ติดกัน (จัดกลุ่มไว้) มักจะเลือกว่าจะทำให้ยึดกันได้แม้ไม่มีกาวร้อนและในโครงการอื่น ๆ เมื่อคุณมีตัวเชื่อมต่อ 2x 4x 6x molex ที่คุณทำได้ เพียงแค่ใช้ประโยชน์จากหมุดที่อยู่ติดกัน สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือกลุ่ม 2-3 วินาที (เหมาะอย่างยิ่งเมื่อใช้สายจัมเปอร์ที่กู้คืนจากพีซีเครื่องเก่า)
พินที่ใช้สำหรับการเชื่อมต่อหน้าจอ LCD OrangePI:
//ใช้ WIRINGPI PIN NUMBERS
#define LCD_E 15 // เปิดใช้งาน Pin #define LCD_RS 16 // ลงทะเบียนพินที่เลือก #define LCD_D4 5 // พินข้อมูล 4 #define LCD_D5 6 // พินข้อมูล 5 #define LCD_D6 10 // พินข้อมูล 6 #define LCD_D7 11 // ดาต้าพิน7
พินที่ใช้สำหรับควบคุมไฟแบ็คไลท์ RGB
$G เขียน 1 0
$G เขียน 4 1 $G เขียน 7 1
PI zero wPI สีส้ม พิน 1, 4, 7 ความมหัศจรรย์เดียวที่ LCD นี้สามารถทำได้เมื่อเทียบกับการแก้ไขมาตรฐานสีน้ำเงินหรือแก้ไข LCD ไฟแบ็คไลท์สีเขียวที่คุณมีแคโทดเดียวซึ่งต้องดึงลงมาที่ GND ซึ่งมี 3 สำหรับ 3 สี แดง เขียว และน้ำเงิน คุณสามารถผสมสีที่ต่างกันจากสีพื้นฐานเหล่านี้ได้โดยการเปลี่ยนชุดค่าผสมของสีที่เปิดใช้งานอยู่ แต่เฉพาะสีไฮเอนด์เท่านั้นที่ไม่มีเฉดสี เนื่องจากคุณไม่สามารถควบคุมความสว่างของสีได้ (เปิดหรือปิด)
การผสมสีเสริม: การเพิ่มสีแดงเป็นสีเขียวทำให้ได้สีเหลือง การเพิ่มสีแดงเป็นสีน้ำเงินทำให้ได้สีม่วงแดง เพิ่มสีเขียวเป็นสีน้ำเงินให้ผลผลิตสีฟ้า; การเพิ่มสีหลักทั้งสามเข้าด้วยกันจะได้สีขาว
ขั้นตอนที่ 3: ระบบปฏิบัติการ
OrangeBOX บูทและ Armbian linux (ตาม Debian Stretch) เคอร์เนล 4.14.18-sunxi พร้อมสภาพแวดล้อมไฟร์วอลล์ที่ปลอดภัย เชื่อมต่อกับ VPN และรอคำสั่งสำรองข้อมูลระยะไกลจากเซิร์ฟเวอร์
หลักการออกแบบ:
-การเข้ารหัสดิสก์แบบเต็ม luks (ตัวอุปกรณ์เองไม่มีคีย์สำหรับเปิดไดรฟ์สำรอง มันจะถูกคัดลอกชั่วคราวจากเซิร์ฟเวอร์ระยะไกลไปยัง ram /dev/shm ไดรฟ์เปิดและคีย์ถูกลบ หลังจากการสำรองข้อมูลเสร็จสิ้น ไดรฟ์ปิดและ OrangeBox จะปิดโดยอัตโนมัติใน 1 นาที)
- คำสั่งและคีย์ทั้งหมดถูกส่งจากเซิร์ฟเวอร์ระยะไกล (ตัวอุปกรณ์เองมีใบรับรอง VPN เท่านั้น) ไม่มีการเข้าถึงเซิร์ฟเวอร์ระยะไกลใด ๆ แม้แต่ ssh จากอุปกรณ์นี้ถูกไฟร์วอลล์ออก
- ระบบไฟล์ในเครื่องไม่ได้เข้ารหัสเพื่อให้สามารถบู๊ตได้ แต่ไม่มีสิ่งใดที่เป็นประโยชน์และเนื่องจากอัปลิงค์ VPN ถูกจำกัดอย่างสูงในอีกด้านหนึ่ง แม้จะสูญเสียอุปกรณ์โดยสิ้นเชิง ผู้โจมตีก็ไม่สามารถทำอะไรได้
ดาวน์โหลด Armbian Stretch จาก
เริ่มระบบและทำงาน:
apt-get update && apt-get upgrade
apt-get ติดตั้ง sysvinit-core sysvinit-utils
แก้ไข /etc/inittab คอนโซลทั้งหมดสามารถปิดใช้งานได้เนื่องจากกล่องจะถูกใช้เป็นหัวขาด แสดงความคิดเห็นในส่วนต่อไปนี้:
#1:2345:respawn:/sbin/getty 38400 tty1
#2:23:respawn:/sbin/getty 38400 tty2 #3:23:respawn:/sbin/getty 38400 tty3 #4:23:respawn:/sbin/getty 38400 tty4 #5:23:respawn:/sbin/getty 38400 tty5 #6:23:respawn:/sbin/getty 38400 tty6
รีบูตกล่องของคุณและลบ systemd เพื่อให้เป็นระบบโอเพ่นซอร์สฟรี bloatware
apt-get remove --purge --auto-remove systemd
ติดตั้งแพ็คเกจบางส่วน
apt-get ติดตั้ง cryptsetup vim htop rsync หน้าจอ gcc สร้าง git
ติดตั้งไลบรารี Wiringpi
cd /usr/src
โคลน git https://github.com/xpertsavenue/WiringOP-Zero.git cd WiringOP-Zero chmod +x./build./build
สร้างผู้ใช้สีส้มสำหรับจอแสดงผล LCD
groupadd -g 1000 ส้ม
useradd -m -d /home/orange -s /bin/bash -u 1000 -g ส้มส้ม
สุนัขเฝ้าบ้านที่ไม่เฝ้ามองคุณ
apt-get ติดตั้ง watchdog
กำลังดู /etc/default/watchdog # เริ่ม watchdog ตอนบูต? 0 หรือ 1 run_watchdog=1 # เริ่ม wd_keepalive หลังจากหยุดสุนัขเฝ้าบ้าน? 0 หรือ 1 run_wd_keepalive=1 # โหลดโมดูลก่อนเริ่ม watchdog watchdog_module="none" # ระบุตัวเลือก watchdog เพิ่มเติมที่นี่ (ดู manpage)
กำลังดู /etc/watchdog.conf
# อย่างน้อยเปิดใช้งานเหล่านี้
โหลดสูงสุด-1 = 24 โหลดสูงสุด-5 = 18 โหลดสูงสุด-15 = 12
/etc/init.d/watchdog start
ควรมีอย่างน้อย 1 เคอร์เนลเธรดและ 1 กระบวนการ:
รูท 42 0.0 0.0 0 0 ? ฉัน< 10:50 0:00 [watchdogd] รูท 14613 0.0 0.2 1432 1080 ? SLs 13:31 0:00 /usr/sbin/watchdog
การทดสอบ:
ตรวจสอบให้แน่ใจว่าคุณหยุดทุกอย่างแล้วทำการซิงค์ && ซิงค์ && ซิงค์เพื่อเขียนข้อมูลที่เหลือลงในดิสก์ จากนั้นเป็นปัญหารูท:
echo 1 > /dev/watchdog
หลังจากนั้นไม่กี่วินาที เครื่องควรรีบูต
ตามที่คู่มือระบุ:
o ตารางกระบวนการเต็มหรือไม่?
o หน่วยความจำว่างเพียงพอหรือไม่ o มีหน่วยความจำที่จัดสรรเพียงพอหรือไม่ o ไฟล์บางไฟล์สามารถเข้าถึงได้หรือไม่? o มีการเปลี่ยนแปลงไฟล์บางไฟล์ในช่วงเวลาที่กำหนดหรือไม่? o ภาระงานเฉลี่ยสูงเกินไปหรือไม่? o มีตารางไฟล์ล้นเกิดขึ้นหรือไม่? o กระบวนการยังคงทำงานอยู่หรือไม่? กระบวนการถูกระบุโดยไฟล์ pid o ที่อยู่ IP บางตัวตอบสนองต่อ ping หรือไม่ o อินเทอร์เฟซเครือข่ายรับทราฟฟิกหรือไม่ o อุณหภูมิสูงเกินไปหรือไม่? (ข้อมูลอุณหภูมิไม่พร้อมใช้งานเสมอ) o ดำเนินการคำสั่งที่ผู้ใช้กำหนดเพื่อทำการทดสอบตามอำเภอใจ o ดำเนินการทดสอบ/ซ่อมแซมคำสั่งที่พบใน /etc/watchdog.d. คำสั่งเหล่านี้ถูกเรียกด้วยการทดสอบอาร์กิวเมนต์หรือการซ่อมแซม หากการตรวจสอบใด ๆ เหล่านี้ล้มเหลว watchdog จะทำให้การปิดตัวลง หากการทดสอบใด ๆ เหล่านี้ยกเว้นที่ผู้ใช้กำหนดไบนารีใช้เวลานานกว่าหนึ่งนาที เครื่องจะถูกรีบูตด้วย
สุนัขเฝ้าบ้านนี้อาจทำงานได้ดีบนสถาปัตยกรรม x86 ปกติ แต่บนบอร์ดที่ใช้ ARM เช่น Raspberry PI, Orange PIs ทำให้ฉันล้มเหลวนับครั้งไม่ถ้วน ระบบสามารถเข้าสู่สถานะแฮงค์ที่แม้แต่สุนัขเฝ้าบ้านก็ยังแขวนอยู่ มากำหนดค่ากันดีกว่าบางทีมันอาจจะได้รับการปรับปรุงด้วยการอัปเกรด apt-get ในช่วงหลายปีที่ผ่านมา:(
ขั้นตอนที่ 4: การออกแบบซอฟต์แวร์
กระบวนการสำรองข้อมูลนั้นใช้ rsync (เครื่องมือสำรองข้อมูลที่ดีที่สุดเท่าที่เคยมีมา) ข้อมูลจะถูกผลักจาก SERVER->OrangeBOX
การดึงข้อมูลจาก rsync เป็นเพียงส่วนเดียวที่ท้าทายของโปรเจ็กต์ที่จะมีแถบความคืบหน้าเกี่ยวกับการสำรองข้อมูลที่พิมพ์ออกมาบน LCD
มี 3 วิธีที่เป็นไปได้ในการคำนวณความคืบหน้าของการสำรองข้อมูล:
1, ใช้สูตรเช่น https://wintelguy.com/transfertimecalc.pl เพื่อกำหนดเวลาโดยประมาณในการโอน
เวลาโอน (d:h:m:s): 0:02:44:00
สำหรับการเปรียบเทียบ: เวลาโดยประมาณในการถ่ายโอนไฟล์ 123 GB ผ่านลิงก์เครือข่ายต่างๆ (d:h:m:s): สาย T1/DS1 (1.544 Mbps) - 7:09:01:46 อีเธอร์เน็ต (10 Mbps) - 1:03: 20:00 Fast Ethernet (100 Mbps) - 0:02:44:00 กิกะบิตอีเทอร์เน็ต (1000 Mbps) - 0:00:16:24 10 กิกะบิตอีเทอร์เน็ต (10 Gbps) - 0:00:01:38 น.
หาก rsync เสร็จสิ้น มันจะส่งสัญญาณให้สคริปต์หยุดการคำนวณ วิธีนี้เป็นเพียงการประมาณและไม่น่าเชื่อถือ อีกทั้งความเร็วของลิงก์ไม่คงที่ สามารถชะลอความเร็วได้อีกครั้ง นี่เป็นเพียงการคำนวณเชิงทฤษฎี
2, การตรวจสอบขนาดบนไดเร็กทอรีเพื่อกำหนดว่าเราซิงค์ข้อมูลไปแล้วจำนวนเท่าใด อาจทำงานช้ามากด้วยไฟล์ขนาดเล็กหลายร้อย GB (แม้ว่า du -s ใน Linux จะทำการแคชหากคุณเรียกใช้ซ้ำ)
โฮสต์ A -> ข้อมูลเซิร์ฟเวอร์ที่จะสำรอง Data dir: 235GB
โฮสต์ B -> ข้อมูลไคลเอนต์กล่องสีส้มที่เรามีตอนนี้ Data dir: 112GB
เดลต้าคือ 123 GB
3, หากระบบไฟล์ได้รับการทุ่มเทเช่นในกรณีของเรา /dev/mapper/backup เราสามารถใช้ประโยชน์จากตัวบ่งชี้การใช้งานระบบไฟล์โดยรวมเพื่อพิจารณาว่าการสำรองข้อมูลของเราดำเนินไปอย่างไรและนี่เป็นสิ่งที่เร็วมาก ในกรณีนี้ เราไม่จำเป็นต้องไพพ์ rsync stdout ด้วยซ้ำ แค่เรียกใช้ rsync แบบแห้ง รอจนกว่าจะเสร็จสิ้น คำนวณเดลต้าเป็นไบต์ และตรวจสอบกับพื้นที่ว่างที่เรามีอยู่บนไดรฟ์สำรองและ voila ที่เราทำได้ ตอนนี้สร้างกราฟแท่งที่ดี นี่คือวิธีที่ฉันเลือกและนี่คือสคริปต์ของฉัน:
#!/bin/bash
# Backup Progress Calculator สำหรับ 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" # ต้องเริ่มต้น แต่จะคำนวณ # ขนาดไดรฟ์เป็นไบต์ (สำรอง ตรวจสอบ) LCD="sudo /bin/lcd" ฟังก์ชั่น is_mount () { grep -q "$1" /proc/mounts status=$? } function red () { sudo /bin/lcdcolor red } function green () { sudo /bin/lcdcolor green } function blue () { sudo /bin/lcdcolor blue } # ล้างสถานะ (ตั้งค่าในการบู๊ตโดย bootup_display.sh) ไม่ได้อยู่ระหว่างการสำรองข้อมูล อย่าทำให้ LCD สถานะ # เสียหาย แสดงความคืบหน้าเฉพาะในกรณีที่มีการสำรองข้อมูลต่อเนื่อง => ไม่มีไฟล์เริ่มต้นและไม่มีไฟล์ fin = ออกหาก [! -f $BFILE] && [! -f $FFILE]; จากนั้นให้ออก 1 fi # หากการสำรองข้อมูลเสร็จสิ้น สคริปต์นี้จะแสดงข้อมูลนั้นและลบการล็อก # เพื่อไม่ให้เรียกใช้ได้อีกจนกว่าจะมีการเริ่มต้นครั้งถัดไป ถ้า [-f $FFILE]; จากนั้น $LCD สีเขียว " Backup " "** Completed **" echo "Backup Completed" rm -rf $BFILE $TFILE $FFILE $LFILE1 $LFILE2 $VFILE # Backup finished clean up if [$SHUTDOWN == "1"]; จากนั้น echo "กำลังดำเนินการปิดสคริปต์…" /home/orange/shutdown.sh & fi exit 0 fi # จากจุดนี้สคริปต์จะทำงานเฉพาะเมื่อมีการสำรองข้อมูลต่อเนื่อง # ดังนั้นข้อผิดพลาดทั้งหมดจะถูกพิมพ์ไปยัง LCD และทำให้สคริปต์ # เพื่อยกเลิก แต่จะไม่ลบไฟล์ backup.lck ดังนั้นจะเข้าไปที่นี่ # ซ้ำแล้วซ้ำอีกและประเมินเงื่อนไข is_mount $BACKUP_DRIVE ถ้า [$status -ne 0]; จากนั้น $LCD สีแดง "ข้อผิดพลาด: ไดรฟ์สำรอง" "ไม่ได้ติดตั้ง!" echo "ไม่ได้ติดตั้งไดรฟ์สำรอง" ให้ออกจาก 1 fi ถ้า [! -s $TFILE]; จากนั้น $LCD สีแดง "ERR: transfile" "ว่างเปล่า" echo "ไฟล์การคำนวณขนาดการขนส่งว่างเปล่า" exit 1 fi BACKUP_OVERALL=$(head -1 $TFILE |tr -d '\n') if [-z $BACKUP_OVERALL]; จากนั้น $LCD สีแดง "ข้อผิดพลาด: การอ่านข้อมูลขนาด" "จากเซิร์ฟเวอร์ไม่ถูกต้อง" echo "การสำรองข้อมูลขนาดโดยรวมที่อ่านกลับไม่ถูกต้อง 1" ให้ออกจาก 1 fi if !
แม้ว่าโค้ดจะง่าย แต่นี่คือคำอธิบายบางส่วนว่าโค้ดนี้ใช้ทำอะไร:
1, หากไม่มี BFILE หรือ FFILE (ซึ่งเป็นสถานะหลังจากการเริ่มทำงานที่ชัดเจน) ที่ระบุว่าไม่มีกระบวนการสำรองข้อมูล ดังนั้นอย่าทำอะไรเลยเพียงแค่ออก วิธีนี้จะทำให้คุณสามารถสร้างกราฟข้อมูลดีๆ ที่คุณต้องการเกี่ยวกับการบูทเครื่อง เช่น ชื่อโฮสต์, ip, เวลาทำงาน ฯลฯ และจะไม่เกิดความสับสน
2 ข้ามไปที่ส่วน is_mount $BACKUP_DRIVE วิธีเดียวที่เราได้มาคือการสำรองข้อมูลเริ่มต้นขึ้นเพื่อให้มี BFILE อยู่ ตอนนี้โค้ดเพิ่งตรวจสอบข้อผิดพลาดต่างๆ เช่น ไดรฟ์สำรองติดตั้งอยู่หรือไม่ ขนาดโดยรวมของสิ่งที่เรากำลังจะสำรองข้อมูลนั้นเกินไดรฟ์หรือไม่ หรือข้อผิดพลาดอื่นๆ โปรดจำไว้ว่านี่เป็นโปรแกรม DISPLAY เท่านั้นแม้ว่าขนาดจะเกินข้อมูลสำรอง แต่ก็จะไม่ยกเลิกสิ่งใด
3 ตกลงตรวจสอบข้อผิดพลาดทั้งหมดล้างเวลาในการคำนวณกราฟเปอร์เซ็นต์ ขั้นแรก สคริปต์จะใช้ "สแนปชอต" ของพื้นที่ที่ใช้เป็นไบต์ในระบบไฟล์สำรองในขณะนี้ และเก็บไว้ใน VFILE จุดประสงค์ของสิ่งนี้คืออะไร: สคริปต์ทุบตีไม่มีสถานะ ทำให้ข้อมูลระหว่างการดำเนินการหายไป ดังนั้นหากคุณต้องการ "จำ" ข้อมูลบางส่วนจากการดำเนินการครั้งก่อน คุณต้องเก็บไว้ที่ไหนสักแห่ง ในกรณีของเรา นี่เป็นเพียงไฟล์ข้อความธรรมดา เพื่อให้ง่าย สมมติว่า START_POS ของเราคือ 1GB (ข้อมูลที่เรามี) สิ่งที่เราต้องการสำรองข้อมูลคือ +2GB และความจุของไดรฟ์โดยรวมคือ 10GB
4, ครั้งต่อไปที่สคริปต์เรียกใช้ VFILE และสิ่งนี้จะถูกอ่านกลับ (เพื่อให้เรารู้ว่าตำแหน่งเริ่มต้นคืออะไรในกรณีที่ไดรฟ์ไม่ว่างเปล่า) ในการคำนวณ BACKUP_CURRENT ซึ่งโดยพื้นฐานแล้วเป็นเดลต้าของพื้นที่ที่ใช้ในขณะนี้ บนไดรฟ์สำรองลบตำแหน่งเริ่มต้นที่เราบันทึกไว้ใน VFILE ในรอบที่แล้ว (นี่คือข้อมูลที่เรามีบนไดรฟ์อีกครั้งเมื่อเริ่มการสำรองข้อมูล) สคริปต์ใช้งานได้ภายในกับไบต์ แต่เพื่อให้ง่ายหลังจากครึ่งชั่วโมงเราสำรองข้อมูล 500MB จากนั้นสูตรจะเป็น BACKUP_CURRENT=1.5GB - 1GB (สถานะเริ่มต้น) => ซึ่งให้ข้อมูลจริงกลับมา 500 MB นั่นคือ สิ่งที่เราสำรองข้อมูลไว้ จะเห็นได้ว่าหากไม่ได้ติดตามว่าข้อมูลเดิมคืออะไรในช่วงเริ่มต้นของการสำรองข้อมูล การคำนวณขนาดนี้จะล้มเหลวเพราะจะเห็นว่าพื้นที่ที่ใช้ตอนนี้คือ 1.5GB โดยที่ไม่รู้ว่าข้อมูล 1 กิ๊กอยู่บนดิสก์ตลอดมา มาจากการสำรองข้อมูลก่อนหน้านี้ ดังนั้นจึงถือว่าเซิร์ฟเวอร์ส่งข้อมูล 1.5GB มาให้เราแทนที่จะเป็น 500MB
5, BACKUP_OVERALL จะถูกอ่าน ข้อมูลนี้ถูกคำนวณโดยเซิร์ฟเวอร์เมื่อทำการแห้ง rsync เริ่มต้น (ดังนั้นนี่คือแหล่งข้อมูลภายนอกที่มีจำนวนไบต์ที่จะสำรองข้อมูลจาก Server->OrangeBOX) ค่านี้จะถูกตรวจสอบเทียบกับเนื้อที่ว่างทั้งหมดบนดิสก์ในขณะนี้ และหากเกินนั้น ข้อความแสดงข้อผิดพลาดจะปรากฏขึ้นบนจอ LCD และสคริปต์จะหยุดการทำงาน จำไว้อีกครั้งว่าสคริปต์ทั้งหมดนี้แสดงเท่านั้น ไม่รบกวนกระบวนการสำรองข้อมูล หากคุณล้างไฟล์บนดิสก์หรือจำนวนไฟล์ที่เปลี่ยนแปลงจากระยะไกล ดังนั้น BACKUP_OVERALL จะเปลี่ยนแปลง ณ จุดหนึ่ง การดำเนินการนั้นจะดำเนินการ
6 ในที่สุดเราก็เสร็จสิ้นการตรวจสอบระดับที่สองถึงเวลาที่จะแสดงบางอย่าง สคริปต์จะแสดงข้อมูลบนคอนโซลและบนหน้าจอ LCD โดยใช้แอป C แบบง่าย พื้นหลังเปลี่ยนเป็นสีน้ำเงินแสดงว่าการสำรองข้อมูลเริ่มต้นขึ้นในที่สุดและความคืบหน้าคำนวณโดยสูตรต่อไปนี้ PROGRESS=$((($BACKUP_CURRENT * 100) / $BACKUP_OVERALL)) นี่คือการคำนวณเปอร์เซ็นต์พื้นฐานที่เราใช้จำนวนเงินปัจจุบัน ในตัวอย่างของเรา 0.5GB*100/2GB = 25%
7 ตัวเลขจะถูกแปลงจากไบต์เป็นเมกะ/กิกะไบต์และหน้าจอจะแสดงเป็น MB โดยอัตโนมัติหากต่ำกว่า 1GB
8 สิ่งหนึ่งที่เหลือในการทำแผนที่นี้ในกรณีของเราคือ 25% บน LCD 20 คอลัมน์ นั่นคือ 25 * 20 / 100 = 5 ในตัวอย่างของเรา ขณะนี้มีการรีเฟรชด้วยโปรแกรม LCD ซึ่งทุกครั้งที่คุณเรียกใช้โปรแกรม โปรแกรมจะวาดใหม่ทั้งหน้าจอ ดังนั้นในกรณีนี้ มันจะเรียกใช้ for วนซ้ำ 5 ครั้งเพื่อวาด 5 hashmarks # บนหน้าจอ ซึ่งจะแสดงเป็นกะพริบน่าเกลียดในแต่ละรอบ ดังนั้นฉันจึงเขียนข้อมูลแถบความคืบหน้าที่คำนวณได้ไปยัง LFILE1 และ 2 ซึ่งในกรณีนี้หลังจาก 5 รอบจะมี ##### และนี่คือการอ่านและแสดงบน LCD คุณอาจใส่ LFILE1 และ 2 บน ramdisk เช่นกันเพื่อบันทึก sdcard จากการดำเนินการเขียนพิเศษ มันไม่ได้ทำให้เกิดปัญหาใด ๆ กับฉัน สคริปต์ทำงานหนึ่งครั้งในทุก ๆ นาทีจาก cron
9 เมื่อการสำรองข้อมูลเสร็จสิ้น สคริปต์อื่นจากเซิร์ฟเวอร์ที่รัน rsync จะแตะ FFILE (ไฟล์เสร็จสิ้น) ที่ลูปถัดไป backup_progress.sh จะแสดงว่าการสำรองข้อมูลเสร็จสมบูรณ์และเลือกที่จะเรียกสคริปต์อื่นเพื่อปิด OrangeBOX มันจะลบไฟล์ล็อคของมัน ณ จุดนี้ทำให้ไม่สามารถดำเนินการต่อไปได้ ดังนั้นแม้ว่าคุณจะไม่เปิดใช้งานการปิดระบบในนาทีถัดไปเมื่อสคริปต์นี้รัน สคริปต์นี้จะปิดทันทีเนื่องจากไม่มี BFILE และไม่มี FFILE ดังนั้นมันจะแสดงข้อความการสำรองข้อมูลที่เสร็จสมบูรณ์อย่างไม่มีกำหนด เว้นแต่ว่าการสำรองข้อมูลจะเริ่มต้นใหม่อีกครั้ง
สคริปต์สำรองข้อมูลระยะไกล (orange-remote.sh):
คุณจะต้องสร้างคีย์ ssh สำหรับการสำรองข้อมูลและคีย์สำหรับการเข้ารหัส luks สำหรับไดรฟ์ เมื่อคุณเรียกใช้การสำรองข้อมูลระยะไกลด้วยตนเองเป็นครั้งแรก ระบบจะบันทึกลายนิ้วมือโฮสต์กล่องสีส้มไปยังไฟล์โฮสต์ (จากจุดนี้ จะสามารถเรียกใช้โดยอัตโนมัติโดย cron)
DISK="/dev/disk/by-id/…"
หากต้องการค้นหาตัวระบุฮาร์ดดิสก์ของคุณให้เรียกใช้ uuid, blkid หรือเพียงแค่ค้นหาไดเร็กทอรี /dev/disk/ ที่เกี่ยวข้อง
คุณสามารถตั้งค่าไดเร็กทอรีที่รวมการยกเว้นได้หากคุณไม่ต้องการสำรองข้อมูลทุกอย่าง นี่เป็นกระบวนการที่น่ารำคาญมากเพราะสำหรับ rsync หากคุณต้องการแยกไดเร็กทอรีย่อยเดียวในโครงสร้างที่คุณต้องทำ:
+ /a
+ /a/b + /a/b/c + /a/b/c/d - /a/b/c/d/e + /dir2
เนื่องจากสคริปต์นี้รันคำสั่งบน OrangeBOX จากระยะไกล จึงไม่มีการกำกับดูแลตัวแปรส่งคืนจากด้านนั้น ดังนั้นฉันจึงใช้กลอุบายที่ชาญฉลาดบางอย่าง เช่น มันจะส่งข้อความของการเปิดไดรฟ์ระยะไกลไปที่ /tmp/contmsg.txt แล้วแยกวิเคราะห์ เพื่อดูว่าสำเร็จหรือไม่ ถ้าไม่เช่นนั้น มันจะเปลี่ยนไบนารี rsync เป็นไฟล์ปฏิบัติการไม่ได้ ดังนั้น rsync จะไม่พยายามอัปโหลดข้อมูลไปยังรูท OrangePIs ที่เติม SDcard ขึ้น แนวทางปฏิบัติที่ดีในการตั้งค่าบิตที่ไม่เปลี่ยนรูปใน chattr +i /mnt/backup เพื่อทำให้สิ่งนี้เป็นไปไม่ได้
การคำนวณขนาดล่วงหน้าจะเกิดขึ้นภายในเซิร์ฟเวอร์ ดังนั้นไฟล์นี้จะต้องถูกส่งไปยัง OrangeBOX ในขั้นตอนต่อไป
การสำรองข้อมูลหลักเริ่มต้นเป็นลูปสำหรับ ((i=0;i<100;i++)); ทำเพราะในกรณีที่การเชื่อมต่ออินเทอร์เน็ต DSL/เคเบิลคุณภาพต่ำ rsync มักจะพัง, หมดเวลา หากทำสำเร็จ ลูปจะแตกโดยไม่ต้องพยายามวนซ้ำอีก การทำงานนี้ไม่มีที่ติกับระบบปฏิบัติการที่ดี แต่ถ้าด้วยเหตุผลบางอย่างกล่องระยะไกลจะเป็น windows และจะมีการปฏิเสธการเข้าถึงเหมือนปกติใน NTUSER. DAT จากนั้น rsync จะส่งคืนรหัสข้อผิดพลาดและลูปนี้จะดำเนินการ 100 ครั้งและยังคงล้มเหลว
ขั้นตอนที่ 5: ปิด & รายการสิ่งที่ต้องทำ
คำแนะนำของฉันแสดงให้เห็นอีกครั้งว่าคุณจะสร้างสิ่งที่ดีกว่าและปรับแต่งได้มากขึ้นได้อย่างไรจากคอมพิวเตอร์ 10 $ ด้วยตัวคุณเองซึ่งเอาชนะบัฟฟาโลด้วยการล็อคอุปกรณ์ NAS ที่เป็นกรรมสิทธิ์ การแบ่งพาร์ติชันภายในที่แปลกประหลาด ลินุกซ์ที่ยุ่งวุ่นวายพร้อมเครื่องมือ segfaulting จัดการ โดยซอฟต์แวร์ windows, เฟิร์มแวร์ปิด, เอกสารและการสนับสนุนที่ไม่ดี และไม่ว่าคุณจะใช้เงินไปเท่าไหร่ คุณจะไม่มีวันได้รับตัวบ่งชี้ความคืบหน้าที่แสดงข้อมูลสำรองของคุณ ไม่ต้องพูดถึงว่า OrangeBox ดูเท่แค่ไหน (ฉันยังใช้สาย CAT5 สีส้มด้วย:D).
ด้วยคอมพิวเตอร์ขนาดเล็กที่มีประสิทธิภาพมากขึ้นเรื่อย ๆ ในขณะที่ยังคงราคา < 100$ เท่าเดิม เราจึงสามารถใช้งานได้มากขึ้นเรื่อยๆ เนื่องจากพอร์ต Gbe Ethernet เป็นเรื่องปกติในช่วง 1-2 ปีที่ผ่านมาหน่วยความจำบนบอร์ดเหล่านี้จึงเพิ่มขึ้นอย่างมากและสามารถใช้สำหรับระบบสำรองข้อมูลที่ใช้ ZFS ได้เช่นกัน
- ตัวบ่งชี้ความคืบหน้าของเกรนละเอียดโดยโปรแกรม C (ดู WasserStation หนึ่งในโครงการอื่นของฉัน) ตอนนี้มีเพียง # hashmark # อักขระที่ใช้ในโหมดอักขระด้วย lcdPuts (lcd, line1) ซึ่งสามารถปรับปรุงได้แม้เมื่อใช้ LCD อักขระเพื่อแบ่ง 1 คอลัมน์เป็น 5 ส่วนและโปรแกรม C หลักสามารถใส่จำนวนเต็มเช่น 25 แล้วดึงออกมา แถบความคืบหน้าอย่างถูกต้องหรือปรับปรุงเพิ่มเติมโดยใช้ LCD แบบกราฟิก
- ความเป็นไปได้ที่จะมี hdd แบบถอดได้สำหรับสร้างข้อมูลสำรองใหม่และย้ายข้อมูลสำรองไปยังตำแหน่งอื่น (หากกล่องตรวจพบไดรฟ์ว่าง ก็ควรจัดรูปแบบอัตโนมัติด้วยคีย์เข้ารหัสเมื่อได้รับแล้ว)
- หากคุณต้องการพิมพ์เคสของคุณเองด้วย Makerbot OrangeNAS อาจน่าสนใจสำหรับคุณ: