Mục lục:

OrangeBOX: Thiết bị lưu trữ sao lưu an toàn dựa trên OrangePI: 5 bước
OrangeBOX: Thiết bị lưu trữ sao lưu an toàn dựa trên OrangePI: 5 bước

Video: OrangeBOX: Thiết bị lưu trữ sao lưu an toàn dựa trên OrangePI: 5 bước

Video: OrangeBOX: Thiết bị lưu trữ sao lưu an toàn dựa trên OrangePI: 5 bước
Video: Half-Life Universe | Giải Mã G-Man 2024, Tháng bảy
Anonim
OrangeBOX: Thiết bị lưu trữ sao lưu an toàn dựa trên OrangePI
OrangeBOX: Thiết bị lưu trữ sao lưu an toàn dựa trên OrangePI
OrangeBOX: Thiết bị lưu trữ sao lưu an toàn dựa trên OrangePI
OrangeBOX: Thiết bị lưu trữ sao lưu an toàn dựa trên OrangePI

OrangeBOX là một hộp sao lưu lưu trữ từ xa tất cả trong một cho bất kỳ máy chủ nào.

Máy chủ của bạn có thể bị nhiễm, bị hỏng, bị xóa và tất cả dữ liệu của bạn vẫn được bảo mật trên OrangeBOX và ai sẽ không thích một nhiệm vụ bất khả thi như thiết bị sao lưu mà bạn chỉ cần cắm vào và xem chỉ báo tiến trình mà không cần làm gì thêm (chỉ hy vọng điều kỳ diệu cuối cùng sẽ không thoát ra khói:)).

OrangeBOX là dự án đầu tiên của tôi, chủ yếu là một phần mềm, không phải là một bản hack phần cứng. Về cơ bản nó là một NAS được xây dựng tùy chỉnh có gắn màn hình LCD.

Bước 1: Bộ phận phần cứng

Bộ phận phần cứng
Bộ phận phần cứng
Bộ phận phần cứng
Bộ phận phần cứng
Bộ phận phần cứng
Bộ phận phần cứng

Orange PI zero là một máy tính bảng đơn mã nguồn mở. Nó có thể chạy Android 4.4, Ubuntu, Debian. Nó sử dụng AllWinner H2 SoC và có 256MB / 512MB DDR3 SDRAM (Phiên bản 256MB là phiên bản Tiêu chuẩn. Orange Pi Zero dành cho bất kỳ ai muốn bắt đầu sáng tạo với công nghệ - không chỉ sử dụng nó. Đây là một công cụ đơn giản, thú vị, hữu ích mà bạn có thể sử dụng để bắt đầu kiểm soát thế giới xung quanh bạn (https://www.orangepi.org/orangepizero/). Vì vậy, chính xác là chúng ta hãy tiếp tục với nó:)

  • Hộp kim loại / nhựa / gỗ (Tôi đã sử dụng hộp cd-rw bên ngoài cũ của Yamaha)
  • Orange PI Zero trở lên (sơ đồ chân GPIO có thể thay đổi nếu bạn sử dụng kiểu máy khác)
  • Màn hình LCD 2x20 RGB
  • Bất kỳ ổ USB SFF 3.5 / LFF 2.55 nào
  • Sata -> bộ chuyển đổi usb. Hãy nhớ rằng mặc dù OrangePI không áp đặt giới hạn trên về dung lượng ổ đĩa tối đa nhưng rất nhiều cầu nối USB-to-SATA làm được (tối đa 2TB). PI Zero màu cam mà tôi sử dụng chỉ có một cổng USB 2.0 duy nhất với tốc độ truyền tải hiệu quả tối đa là 28 MB / s. Tôi đã chọn USB3.0 (chuẩn bị cho các bản nâng cấp trong tương lai) -> Cầu SATA (thương hiệu sẽ không được đề cập) và nó giới hạn giới hạn, vì vậy tốt hơn nên chọn một cầu được chứng minh là hỗ trợ các ổ đĩa lớn hơn như cầu dựa trên chip JMicron JMS567. Thực hiện nghiên cứu của riêng bạn trước khi mua một cái. Tôi có thể sống với tốc độ và giới hạn ổ cứng bằng cách sử dụng ổ sata 2TB trong dự án này (nếu bạn đặt ổ đĩa lớn hơn, nó sẽ được nhận dạng nhưng hệ điều hành sẽ chỉ nhìn thấy 2TB đầu tiên của nó nên phần dung lượng còn lại sẽ mất).
  • Bộ chuyển đổi amp 12V 2.5 A hoặc cao hơn. Tính toán mức sử dụng bình thường khoảng 500mA cho OPI Zero và 1,5A cho một ổ LFF SATA tiêu chuẩn. Quá khổ không bao giờ gây hại. Trong thiết lập của tôi, psu Yamaha (thứ có thể cung cấp đủ dòng điện trên cả hai thanh ray 12 + 5V) không may bị nổ: (do sắp xếp công tắc chính thành GND trong một giây nên tôi phải dán vào một bộ chuyển đổi thông thường, tại ít nhất nó đã làm cho chiếc hộp nhẹ hơn vài gam.
  • Bộ chuyển đổi Buck DC-DC 12V-> 5V. Tôi đã sử dụng cùng một khóa nhỏ có thể điều chỉnh như với IronForge, hoạt động hoàn hảo.

Không bắt buộc

Nếu bạn sẵn sàng chi + 10 đô la thì bạn có thể nhận được Orange Pi Plus (https://www.armbian.com/orange-pi-one-plus/), có dạng tương tự và nhận được Gbe và SATA3. Đối với điều này, thư viện dây Libra PI có thể được sử dụng: https://github.com/OrangePiLibra/WiringPi nhưng vì sơ đồ chân GPIO khác nên nó nằm ngoài phạm vi của bài viết này.

Bạn cũng có thể thực hiện việc xây dựng này với Orange PI Plus2 mới có đầu nối SATA và bạn có thể bỏ qua việc sử dụng bộ chuyển đổi sata-> usb cùng với những hạn chế của chúng. Nếu bạn định sử dụng FreeBSD hoặc các BSD khác, dòng Orange PI có thể không phải là lựa chọn tốt nhất vì hỗ trợ phần cứng của chúng bị hạn chế (ví dụ: bạn cần sử dụng thanh USB để khởi động). Đối với BSD, lời khuyên tốt nhất là sử dụng Raspberry PI. Cả mã C cho màn hình LCD và tất cả các tập lệnh shell đều có thể di động sang bất kỳ hệ thống UNIX nào khác.

Bước 2: Thiết kế phần cứng

Thiết kế phần cứng
Thiết kế phần cứng
Thiết kế phần cứng
Thiết kế phần cứng
Thiết kế phần cứng
Thiết kế phần cứng

Hộp của Yamaha chỉ đủ để chứa tất cả những thứ này, nó sẽ không có đủ không gian cho PC Orange PI hoặc bảng hệ số dạng Raspi thông thường.

Ethernet được đưa ra với một bộ mở rộng ở mặt sau của hộp. Hãy nhớ rằng Orange PI zero chỉ có giao diện Ethernet 100mbit / s nếu bạn muốn nhanh hơn, bạn sẽ cần sử dụng một bo mạch khác như Asus Tinkerboard / RPI3B + / Các mẫu Orange PI khác.

Sai PIN Out là sai lầm duy nhất mà bạn có thể mắc phải trong dự án này, do đó, bạn nên áp dụng một số quy tắc của các nguyên tắc ngón tay cái:

1, Luôn cố gắng sử dụng cáp cùng màu từ END đến END. Bản thân tôi cũng phạm phải "sai lầm" tương tự trong một số dự án mà tôi không làm, đơn giản vì tôi không có đủ dài dây cáp nam-nam / nam-nữ / nữ-nữ trong tay và tôi vá cả 2 lại với nhau chỉ để tiếp tục. mạch. Nếu bạn không ghi lại công việc của mình một cách hợp lý, điều này có thể dẫn đến việc đau đầu trong nhiều năm sau đó khi bạn phải sửa chữa, nâng cấp.

2, Áp dụng một số hotglue vào các đầu nối. Trong trường hợp sử dụng các loại cáp mm / mf / ff kiểu bộ khởi động arduino này không đảm bảo chất lượng đường truyền, khá phổ biến (đặc biệt nếu bạn di chuyển / vận chuyển thiết bị) mà các đầu nối bị tuột ra. Nếu bạn biết nó sẽ là một thiết bị sử dụng lâu dài (có thể sử dụng cho đến khi nó bị hỏng?!) Thì tốt hơn là nên phủ một chút keo nóng lên cả mặt OrangePI và LCD của các đầu nối để giữ chúng lại với nhau. Điều này có thể dễ dàng bị nung chảy / trầy xước sau này nếu cần.

3, Hệ thống dây không của OrangePI Tin xấu là sơ đồ chân của Orange PI KHÔNG giống với Raspberry PI 0/1/2/3 và thậm chí còn có sự khác biệt giữa các mẫu Orange PI khác. Cách tốt nhất là lấy thư viện dây (phiên bản Orange PI Zero). Hình ảnh có thể hơi khó hiểu nhưng đây là những thứ tốt nhất tôi có thể tìm thấy. Một cái là gương 180 độ của cái kia. Mặc dù hình ảnh không phải đồ họa CLI có thể khó hiểu hơn nhưng nó là hình ảnh dễ hiểu nhất.

Bạn luôn có thể phân biệt 2 đầu của ổ cắm bằng cách coi một đầu là đầu TÍCH CỰC với (+ 3,3 / + 5V) và đầu kia là đầu TIÊU CỰC (một GND) -> đây là đầu của đầu nối đối diện với cổng ETHERNET.

Từ bảng Wiring PI Zero, bạn sẽ chỉ cần một cột mà wPI quên đi những cột khác như thể chúng không có ở đó.

Vì vậy, ví dụ để kết nối LCD_E 15 (đó là wPI 15!) Và LCD_RS 16 (đó là wPI 16!), Hãy đếm các chân từ đầu TÍCH CỰC của đầu nối (dễ thực hiện với bút hoặc tuốc nơ vít nhỏ). Đó sẽ là vật lý đi xuống 4 chân và 5 chân.

4, Lập nhóm. Nếu có khả năng đặt các chân đã sử dụng cạnh nhau (nhóm chúng lại) luôn chọn điều đó, điều đó làm cho chúng có thể giữ được nhau ngay cả khi không có hotglue và cũng trong các dự án khác khi bạn có đầu nối molex 2x 4x 6x, bạn có thể chỉ cần tận dụng các ghim ở cạnh nhau. Ở đây, tốt nhất bạn có thể làm là nhóm 2-3 giây (lý tưởng khi sử dụng cáp jumper tận dụng từ PC cũ).

Các chân được sử dụng cho kết nối Màn hình LCD OrangePI:

// SỬ DỤNG SỐ PIN WIRINGPI

#define LCD_E 15 // Bật Pin #define LCD_RS 16 // Đăng ký chọn chân #define LCD_D4 5 // Chân dữ liệu 4 #define LCD_D5 6 // Chân dữ liệu 5 #define LCD_D6 10 // Chân dữ liệu 6 #define LCD_D7 11 // Pin dữ liệu 7

Các chân dùng để điều khiển đèn nền RGB

$ G viết 1 0

$ G viết 4 1 $ G viết 7 1

Các chân wPI không có PI màu cam 1, 4, 7. Điều kỳ diệu duy nhất mà màn hình LCD này có thể làm được so với màn hình LCD đèn nền màu xanh hoặc sửa chữa màu xanh lá cây tiêu chuẩn, nơi bạn có một cathode duy nhất cần được kéo xuống GND mà nó có 3 cho 3 màu sắc. Đỏ, xanh lá cây và xanh dương. Bằng cách thay đổi sự kết hợp giữa màu được BẬT, bạn có thể trộn các màu khác nhau từ các màu cơ bản này nhưng chỉ những màu cao nhất không có sắc thái vì bạn không thể kiểm soát độ sáng của màu (bật hoặc tắt).

Trộn màu phụ gia: thêm màu đỏ vào màu xanh lá cây tạo ra màu vàng; thêm màu đỏ vào màu xanh lam sẽ tạo ra màu đỏ tươi; thêm màu xanh lá cây vào màu xanh lam tạo ra màu lục lam; thêm tất cả ba màu cơ bản với nhau tạo ra màu trắng.

Bước 3: Hệ điều hành

Hệ điều hành
Hệ điều hành

OrangeBOX khởi động và nhân Armbian linux (dựa trên Debian Stretch) 4.14.18-sunxi với môi trường có tường lửa an toàn, kết nối với VPN và đợi lệnh sao lưu từ xa từ máy chủ.

Nguyên tắc thiết kế:

-Mã hóa ổ đĩa dựa trên luks đầy đủ (bản thân thiết bị không chứa khóa để mở ổ đĩa sao lưu. Nó sẽ được sao chép tạm thời từ máy chủ từ xa sang ram / dev / shm, ổ đĩa được mở và khóa sẽ bị xóa. Sau khi sao lưu xong ổ đĩa đã đóng và OrangeBox sẽ tự động tắt sau 1 phút.)

-Tất cả các lệnh và khóa được gửi từ máy chủ từ xa (bản thân thiết bị chỉ chứa một chứng chỉ vpn) nó không có BẤT CỨ quyền truy cập nào vào máy chủ từ xa ngay cả khi ssh từ thiết bị này bị tường lửa

-Các hệ thống tệp cục bộ không được mã hóa để có thể khởi động nhưng không chứa bất kỳ thứ gì hữu ích và vì đường lên VPN bị hạn chế rất nhiều ở đầu bên kia, ngay cả khi mất hoàn toàn thiết bị, kẻ tấn công không thể làm gì

Tải xuống Armbian Stretch từ

Thiết lập và chạy hệ thống:

apt-get cập nhật && apt-get nâng cấp

apt-get install sysvinit-core sysvinit-utils

Chỉnh sửa / etc / inittab, tất cả bảng điều khiển có thể bị vô hiệu hóa vì hộp sẽ được sử dụng như không có đầu. Bình luận phần sau:

# 1: 2345: hồi sinh: / sbin / getty 38400 tty1

# 2: 23: hồi sinh: / sbin / getty 38400 tty2 # 3: 23: hồi sinh: / sbin / getty 38400 tty3 # 4: 23: hồi sinh: / sbin / getty 38400 tty4 # 5: 23: hồi sinh: / sbin / getty 38400 tty5 # 6: 23: hồi sinh: / sbin / getty 38400 tty6

Khởi động lại hộp của bạn và xóa systemd để có một hệ thống miễn phí bloatware nguồn mở thực sự.

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

Cài đặt một số gói

apt-get install cryptsetup vim htop rsync screen gcc make git

Cài đặt thư viện wiringpi

cd / usr / src

git clone https://github.com/xpertsavenue/WiringOP-Zero.git cd WiringOP-Zero chmod + x./build./build

Tạo người dùng màu cam cho màn hình LCD

groupadd -g 1000 màu da cam

useradd -m -d / home / orange -s / bin / bash -u 1000 -g cam cam

Cơ quan giám sát không giám sát bạn

cơ quan giám sát apt-get install

Nhìn vào / etc / default / watchdog # Start watchdog lúc khởi động? 0 hoặc 1 run_watchdog = 1 # Bắt đầu wd_keepalive sau khi dừng cơ quan giám sát? 0 hoặc 1 run_wd_keepalive = 1 # Tải mô-đun trước khi khởi động cơ quan giám sát watchdog_module = "none" # Chỉ định các tùy chọn cơ quan giám sát bổ sung tại đây (xem manpage).

Nhìn vào /etc/watchdog.conf

# Ít nhất hãy bật những điều này

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

/etc/init.d/watchdog start

Cần có ít nhất 1 luồng nhân và 1 quy trình:

gốc 42 0,0 0,0 0 0? Tôi <10:50 0:00 [watchdogd] root 14613 0.0 0.2 1432 1080? SLs 13:31 0:00 / usr / sbin / watchdog

Thử nghiệm:

Đảm bảo bạn dừng mọi thứ và thực hiện đồng bộ hóa && đồng bộ hóa && đồng bộ hóa để ghi phần còn lại của dữ liệu vào đĩa. Sau đó là vấn đề gốc:

echo 1> / dev / watchdog

Sau vài giây, máy sẽ khởi động lại.

Như hướng dẫn sử dụng đã nêu:

o Bảng quy trình có đầy đủ không?

o Có đủ bộ nhớ trống không? o Có đủ bộ nhớ cấp phát không? o Một số tệp có thể truy cập được không? o Có một số tệp bị thay đổi trong một khoảng thời gian nhất định không? o Khối lượng công việc trung bình có quá cao không? o Có xảy ra tràn bảng tệp không? o Một tiến trình vẫn đang chạy chứ? Quá trình được chỉ định bởi một tệp pid. o Một số địa chỉ IP có trả lời cho ping không? o Các giao diện mạng có nhận được lưu lượng truy cập không? o Nhiệt độ có quá cao không? (Dữ liệu nhiệt độ không phải lúc nào cũng có sẵn.) O Thực hiện lệnh do người dùng xác định để thực hiện các thử nghiệm tùy ý. o Thực hiện một hoặc nhiều lệnh kiểm tra / sửa chữa được tìm thấy trong /etc/watchdog.d. Các lệnh này được gọi cùng với kiểm tra hoặc sửa chữa đối số. Nếu bất kỳ kiểm tra nào không thành công, cơ quan giám sát sẽ gây ra tắt máy. Nếu bất kỳ thử nghiệm nào trong số này ngoại trừ tệp nhị phân do người dùng xác định kéo dài hơn một phút, máy cũng sẽ được khởi động lại.

Cơ quan giám sát này có thể hoạt động tốt trên các kiến trúc x86 thông thường nhưng trên các bảng dựa trên ARM như Raspberry PI, Orange PI, nó đã khiến tôi thất bại vô số lần. Hệ thống có thể chuyển sang trạng thái treo mà ngay cả cơ quan giám sát cũng bị treo. Dù sao thì hãy cứ định cấu hình nó có thể nó sẽ được cải thiện với bản nâng cấp apt-get trong những năm qua:(

Bước 4: Thiết kế phần mềm

Thiết kế phần mềm
Thiết kế phần mềm

Bản thân quá trình sao lưu dựa trên rsync (công cụ sao lưu tốt nhất từng được phát minh) dữ liệu được đẩy từ SERVER-> OrangeBOX.

Trích xuất dữ liệu từ rsync là phần thử thách duy nhất của dự án để có một thanh tiến trình về bản sao lưu được in ra trên màn hình LCD.

Có 3 cách khả thi để tính toán tiến trình sao lưu:

1, Sử dụng các công thức như https://wintelguy.com/transfertimecalc.pl để xác định khoảng thời gian chuyển có thể mất

Thời gian chuyển (d: h: m: s): 0: 02: 44: 00

Để so sánh: Thời gian ước tính để truyền tệp 123 GB qua các liên kết mạng khác nhau (d: h: m: s): Đường T1 / DS1 (1.544 Mbps) - 7: 09: 01: 46 Ethernet (10 Mbps) - 1:03: 20:00 Fast Ethernet (100 Mbps) - 0: 02: 44: 00 Gigabit Ethernet (1000 Mbps) - 0: 00: 16: 24 10 Gigabit Ethernet (10 Gbps) - 0: 00: 01: 38

Nếu rsync kết thúc, nó báo hiệu tập lệnh dừng tính toán. Phương pháp này chỉ là gần đúng và không đáng tin cậy, tốc độ liên kết cũng không được khắc phục, nó có thể chậm lại, tăng tốc trở lại. Đây chỉ là một tính toán lý thuyết.

2, Thực hiện kiểm tra kích thước trên thư mục để xác định xem chúng tôi đã đồng bộ hóa bao nhiêu dữ liệu. Có thể rất chậm với các tệp nhỏ hàng trăm GB (mặc dù du -s trong Linux thực hiện một số bộ nhớ đệm nếu bạn chạy lại nó)

Máy chủ A -> Dữ liệu máy chủ cần được sao lưu Dir dữ liệu: 235GB

Máy chủ B -> Dữ liệu máy khách hộp màu cam mà chúng tôi có ngay bây giờ Dữ liệu dir: 112GB

Vùng đồng bằng là 123 GB.

3, Nếu hệ thống tệp được dành riêng như trong trường hợp / dev / mapper / backup của chúng tôi, chúng tôi có thể tận dụng chỉ số sử dụng hệ thống tệp tổng thể để xác định tiến trình sao lưu của chúng tôi như thế nào và điều này thực sự rất nhanh. Trong trường hợp này, chúng tôi thậm chí không cần phải đặt stdout rsync ở bất cứ đâu, chỉ cần chạy một rsync khô, đợi cho đến khi nó hoàn thành, tính toán delta theo byte và kiểm tra chéo điều này với dung lượng trống mà chúng tôi có trên ổ đĩa sao lưu và thì chúng tôi có thể bây giờ hãy tạo một biểu đồ thanh đẹp. Đây là phương pháp tôi đã chọn và đây là kịch bản của tôi cho nó:

#! / bin / bash

# Máy tính tiến độ sao lưu cho OrangeBOX bằng NLD # Phiên bản: 0.2 (2018/03/05) # # Chạy nó với tư cách người dùng không có đặc quyền từ cron # * * * * * * /home/orange/backup_progress.sh &> / dev / null # # Tập lệnh này chỉ có nhiệm vụ hiển thị dữ liệu trên màn hình LCD, nó giao tiếp # với chương trình chính một cách gián tiếp thông qua các tệp vị trí và khóa. BACKUP_DRIVE = "/ dev / mapper / backup" VFILE = "$ HOME / start.pos" # mức sử dụng đĩa khi bắt đầu sao lưu TFILE = "$ HOME / trans.size" # tổng kích thước truyền được tính toán trước BFILE = "$ HOME / backup.lck "# xác định trạng thái bắt đầu FFILE =" $ HOME / backup.fin "# xác định trạng thái đã hoàn thành LFILE1 =" $ HOME / lcd1.bar "# Dữ liệu chỉ báo tiến trình LCD LFILE2 =" $ HOME / lcd2.bar "# tiến trình LCD dữ liệu chỉ báo SHUTDOWN = "1" # Nếu 1, nó sẽ khởi tạo một tập lệnh khác làm tắt hộp ở cuối bản sao lưu BACKUP_CURRENT = "0" # Phải được khởi tạo nhưng sẽ được tính DRIVE_SIZE = "" # Kích thước ổ đĩa tính bằng byte (phụ kiểm tra) LCD = "sudo / bin / lcd" function 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} # Clear state (được thiết lập khi khởi động bằng bootup_display.sh). Không có bản sao lưu nào đang diễn ra, KHÔNG làm rối # trạng thái LCD. Chỉ hiển thị tiến trình trong trường hợp có một bản sao lưu đang diễn ra => Không có tệp bắt đầu VÀ Không có tệp vây = bỏ nếu [! -f $ BFILE] && [! -f $ FFILE]; sau đó thoát ra 1 fi # Nếu sao lưu xong script này sẽ hiển thị điều đó và loại bỏ các ổ khóa # để không thể chạy lại cho đến lần khởi tạo tiếp theo. nếu [-f $ FFILE]; sau đó màu xanh lá cây $ LCD "Sao lưu" "** Đã hoàn thành **" echo "Đã hoàn thành sao lưu" rm -rf $ BFILE $ TFILE $ FFILE $ LFILE1 $ LFILE2 $ VFILE # Đã hoàn tất sao lưu nếu [$ SHUTDOWN == "1"]; sau đó echo "Đang thực thi tập lệnh tắt máy…" /home/orange/shutdown.sh & fi thoát 0 fi # Từ thời điểm này, tập lệnh CHỈ thực thi nếu có bản sao lưu ONGOING # do đó tất cả các lỗi sẽ được in ra màn hình LCD và gây ra tập lệnh # để hủy bỏ tuy nhiên nó sẽ không xóa tệp backup.lck, vì vậy sẽ đi vào đây # lặp đi lặp lại và loại bỏ các điều kiện. is_mount $ BACKUP_DRIVE if [$ status -ne 0]; sau đó $ LCD màu đỏ "ERR: Ổ đĩa sao lưu" "không được gắn kết!" echo "Ổ đĩa sao lưu không được gắn kết" thoát ra 1 fi nếu [! -s $ TFILE]; sau đó $ LCD màu đỏ "ERR: transfile" "trống" echo "Tệp tính toán kích thước truyền tải trống." thoát 1 fi BACKUP_OVERALL = $ (head -1 $ TFILE | tr -d '\ n') if [-z $ BACKUP_OVERALL]; sau đó $ LCD màu đỏ "ERR: Kích thước đọc lại" "từ máy chủ không hợp lệ" echo "Bản sao lưu kích thước tổng thể đọc lại không hợp lệ 1" thoát 1 fi nếu!

Mặc dù mã rất đơn giản nhưng đây là một số mô tả về chức năng của nó:

1, Nếu BFILE hoặc FFILE không tồn tại (là trạng thái sau khi khởi động rõ ràng) cho biết không có quá trình sao lưu, vì vậy KHÔNG làm bất cứ điều gì chỉ cần thoát. Bằng cách này, bạn có thể vẽ biểu đồ bất kỳ thông tin tốt đẹp nào bạn muốn liên quan đến khởi động như tên máy chủ, ip, thời gian hoạt động, v.v. và nó sẽ không bị lộn xộn.

2, Hãy chuyển đến phần is_mount $ BACKUP_DRIVE. Chỉ xin nhắc lại cách duy nhất chúng tôi có ở đây là một bản sao lưu đã được bắt đầu để BFILE tồn tại. Bây giờ mã chỉ thực hiện các kiểm tra lỗi khác nhau như ổ đĩa sao lưu đã được gắn kết chưa ?, kích thước tổng thể của những gì chúng ta sắp sao lưu có vượt quá ổ đĩa không? hoặc các lỗi khác. Hãy nhớ rằng đây là một chương trình chỉ HIỂN THỊ ngay cả khi kích thước vượt quá các bản sao lưu, nó sẽ không hủy bỏ bất cứ điều gì.

3, OK tất cả các lần kiểm tra lỗi đã xóa thời gian để tính toán biểu đồ phần trăm. Đầu tiên, tập lệnh chụp "ảnh chụp nhanh" của không gian được sử dụng theo byte trên hệ thống tệp sao lưu ngay bây giờ và lưu trữ nó trong VFILE. Mục đích của việc này là gì: một tập lệnh bash là không trạng thái, nó sẽ mất dữ liệu giữa các lần thực thi, vì vậy nếu bạn muốn "ghi nhớ" một số dữ liệu từ lần thực thi trước đó, bạn cần phải lưu trữ nó ở đâu đó. Trong trường hợp của chúng tôi, đây chỉ là một tệp văn bản đơn giản. Để dễ hiểu, giả sử START_POS của chúng tôi là 1GB (dữ liệu chúng tôi có), những gì chúng tôi muốn sao lưu là + 2GB và dung lượng ổ đĩa tổng thể là 10GB.

4, Lần tới khi tập lệnh chạy VFILE tồn tại và điều này sẽ được đọc lại (vì vậy chúng tôi biết vị trí bắt đầu là gì trong trường hợp ổ đĩa không trống) để tính toán BACKUP_CURRENT về cơ bản là một phần bằng của không gian được sử dụng ngay bây giờ trên ổ đĩa sao lưu trừ đi vị trí bắt đầu mà chúng ta đã lưu trong VFILE ở vòng trước (một lần nữa đây là dữ liệu chúng ta có trên ổ đĩa khi bắt đầu sao lưu). Tập lệnh hoạt động nội bộ với byte nhưng để làm cho nó đơn giản sau nửa giờ, chúng tôi đã sao lưu dữ liệu 500MB thì công thức sẽ là BACKUP_CURRENT = 1,5GB - 1GB (trạng thái ban đầu) => trả lại cho chúng tôi chính xác dữ liệu thực 500 MB, nghĩa là những gì chúng tôi đã sao lưu cho đến nay. Bạn có thể thấy rằng nếu không theo dõi dữ liệu gốc ở thời điểm bắt đầu sao lưu, phép tính kích thước này sẽ không thành công vì nó sẽ thấy rằng dung lượng được sử dụng ngay bây giờ là 1,5GB mà không biết rằng 1 gig dữ liệu đã có trên đĩa. đến từ một bản sao lưu trước đó, vì vậy nó sẽ giả định rằng máy chủ đã gửi cho chúng tôi 1,5GB dữ liệu thay vì 500MB.

5, BACKUP_OVERALL sẽ được đọc vào, dữ liệu này được máy chủ tính toán khi nó thực hiện quá trình rsync khô ban đầu (vì vậy đây là nguồn dữ liệu bên ngoài chứa số lượng byte sẽ được sao lưu từ Máy chủ-> OrangeBOX). Giá trị này sẽ được kiểm tra dựa trên dung lượng MIỄN PHÍ tổng thể trên đĩa tại thời điểm hiện tại và nếu nó vượt quá nó thì thông báo lỗi sẽ được hiển thị trên màn hình LCD và tập lệnh ngừng thực thi. Hãy nhớ lại rằng tất cả những gì tập lệnh này làm là CHỈ hiển thị, nó không can thiệp vào quá trình sao lưu. Nếu bạn dọn dẹp các tệp trên đĩa hoặc số lượng tệp thay đổi từ xa và do đó BACKUP_OVERALL thay đổi tại một thời điểm, nó sẽ tiếp tục.

6, Cuối cùng, chúng ta đã hoàn thành việc kiểm tra cấp độ thứ hai, đã đến lúc hiển thị thứ gì đó. Tập lệnh hiển thị cả dữ liệu trên bảng điều khiển và trên màn hình LCD bằng ứng dụng C đơn giản. Nền được chuyển sang MÀU XANH cho biết rằng quá trình sao lưu cuối cùng đã bắt đầu và tiến trình được tính theo công thức sau đây PROGRESS = $ ((($ BACKUP_CURRENT * 100) / $ BACKUP_OVERALL)). Đây là phép tính phần trăm cơ bản, chúng tôi lấy số tiền hiện tại, trong ví dụ của chúng tôi là 0,5GB * 100 / 2GB = 25%.

7, Các con số cũng được chuyển đổi từ byte sang Mega / Giga byte và màn hình tự động hiển thị bằng MB nếu nó thấp hơn 1GB.

8, Một điều còn lại để lập bản đồ này trong trường hợp của chúng tôi là 25% trên màn hình LCD 20 cột. Đó sẽ là 25 * 20/100 = 5 trong ví dụ của chúng tôi. Hiện tại chương trình làm mới bằng màn hình LCD được thực hiện mà mỗi khi bạn gọi chương trình sẽ vẽ lại toàn bộ màn hình. Vì vậy, trong trường hợp này, nó sẽ chạy vòng lặp for 5 lần để vẽ 5 dấu thăng # trên màn hình, điều này sẽ hiển thị dưới dạng nhấp nháy xấu xí trong mỗi vòng, vì vậy thay vào đó tôi ghi dữ liệu thanh tiến trình được tính toán vào LFILE1 và 2, trong trường hợp này sau 5 vòng sẽ chứa ##### và điều này được đọc lại và hiển thị trên màn hình LCD. Bạn cũng có thể đặt LFILE1 và 2 trên đĩa ram để lưu sdcard khỏi các thao tác ghi bổ sung, nó không gây ra bất kỳ vấn đề nào đối với tôi, tập lệnh chạy một lần trong mỗi phút từ cron.

9, Khi quá trình sao lưu hoàn tất, tập lệnh khác từ máy chủ chạy rsync sẽ chạm vào FFILE (Tệp Kết thúc). Tại vòng lặp tiếp theo backup_progress.sh sẽ hiển thị rằng quá trình sao lưu đã hoàn tất và tùy chọn gọi một tập lệnh khác để tắt OrangeBOX. Nó xóa các tệp khóa của nó tại thời điểm này khiến cho việc thực thi thêm không thể thực hiện được, vì vậy ngay cả khi bạn không bật tắt vào phút tiếp theo khi tập lệnh này chạy, nó sẽ thoát ngay lập tức vì BFILE không ở đó và FFILE không có ở đó. Do đó, nó sẽ hiển thị thông báo đã hoàn thành sao lưu vô thời hạn trừ khi sao lưu được khởi động lại lần nữa.

Tập lệnh sao lưu từ xa (orange-remote.sh):

Bạn sẽ cần tạo một khóa ssh để sao lưu và một khóa để mã hóa luks cho ổ đĩa. Khi bạn chạy sao lưu từ xa theo cách thủ công lần đầu tiên, nó sẽ lưu dấu vân tay máy chủ hộp màu cam vào tệp máy chủ (từ thời điểm này, nó có thể chạy tự động bằng cron).

DISK = "/ dev / disk / by-id /…"

Để tìm ra mã định danh đĩa cứng của bạn, hãy chạy uuid, blkid hoặc chỉ cần tra cứu các thư mục / dev / disk / tương ứng.

Một thư mục bao gồm loại trừ có thể được thiết lập nếu bạn không muốn sao lưu mọi thứ. Đây là quá trình khá khó chịu vì đối với rsync, nếu bạn muốn loại trừ một thư mục con nằm sâu trong cấu trúc, bạn phải thực hiện:

+ / a

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

Vì tập lệnh này đang thực thi các lệnh trên OrangeBOX từ xa nên nó không giám sát các biến trả về từ phía đó, do đó tôi sử dụng một số thủ thuật thông minh chẳng hạn như nó sẽ xuất thông báo mở ổ đĩa từ xa tới /tmp/contmsg.txt, sau đó phân tích cú pháp nó để xem nó có thành công hay không, nếu không thì nó sẽ thay đổi nhị phân rsync thành không thực thi để rsync sẽ không cố tải dữ liệu lên rootfs OrangePIs lấp đầy SDcard. Ngoài ra, bạn cũng nên đặt bit không thay đổi trên chattr + i / mnt / backup để biến điều này thành không thể.

Việc tính toán trước kích thước diễn ra cục bộ trên Máy chủ do đó tệp này phải được gửi đến OrangeBOX trong bước tiếp theo.

Bản sao lưu chính được bắt đầu như một vòng lặp for ((i = 0; i <100; i ++)); vì trong trường hợp kết nối Internet DSL / Cáp chất lượng thấp, rsync thường có thể bị đứt, hết thời gian chờ. Nếu nó hoàn thành thành công thì vòng lặp sẽ bị phá vỡ mà không cần thử lặp lại nhiều lần. Điều này hoạt động hoàn hảo với các hệ điều hành tốt, tuy nhiên nếu vì lý do nào đó mà hộp điều khiển từ xa sẽ là cửa sổ và có quyền truy cập bị từ chối như thường xuyên trên NTUSER. DAT thì rsync sẽ trả về mã lỗi và vòng lặp này sẽ thực thi 100 lần và sau đó vẫn không thành công.

Bước 5: Đóng cửa & Danh sách việc cần làm

Danh sách đóng cửa & việc cần làm
Danh sách đóng cửa & việc cần làm
Danh sách đóng cửa & việc cần làm
Danh sách đóng cửa & việc cần làm

Tài liệu hướng dẫn của tôi một lần nữa chứng minh cách bạn có thể tạo ra thứ gì đó tốt hơn, thiết bị tùy biến hơn từ một chiếc máy tính 10 đô la của riêng bạn, điều này đánh bại Buffalo với các thiết bị NAS bị khóa độc quyền, phân vùng nội bộ kỳ lạ, linux bị tê liệt với các công cụ mặc định, được quản lý bởi phần mềm windows của họ, chương trình cơ sở bị đóng, tài liệu và hỗ trợ kém và cho dù bạn sẽ chi bao nhiêu tiền, bạn sẽ không bao giờ nhận được chỉ báo tiến độ hiển thị bản sao lưu của bạn, chưa kể đến việc OrangeBox trông tuyệt như thế nào (tôi thậm chí còn sử dụng cáp CAT5 màu cam với nó: D).

Với việc máy tính mini ngày càng trở nên mạnh mẽ hơn trong khi vẫn giữ nguyên mức giá <100 $, chúng ta có thể sử dụng chúng cho ngày càng nhiều tác vụ. Vì các cổng Gbe Ethernet ngày nay khá phổ biến trong 1-2 năm tới, bộ nhớ trên các bo mạch này sẽ tăng lên đáng kể và chúng cũng có thể được sử dụng cho các hệ thống sao lưu dựa trên ZFS.

-Chỉ báo tiến độ hạt mịn bằng chương trình C (xem WasserStation một trong những dự án khác của tôi). Hiện tại, chỉ # ký tự dấu thăng # được sử dụng trong chế độ ký tự với lcdPuts (lcd, line1), điều này có thể được cải thiện ngay cả khi sử dụng LCD ký tự để chia 1 cột thành 5 phần và chương trình C chính có thể chỉ lấy một số nguyên như 25 và vẽ ra thanh tiến trình đúng cách hoặc được cải thiện hơn nữa bằng cách sử dụng màn hình LCD đồ họa

-Có khả năng có một hdd có thể tháo rời để tạo các bản sao lưu mới và mới và di chuyển chúng đến các vị trí khác nhau (nếu hộp phát hiện một ổ trống thì nó sẽ tự động định dạng nó bằng khóa mã hóa khi nó đã được nhận).

-Nếu bạn muốn in hộp đựng của riêng mình bằng makerbot, OrangeNAS có thể thú vị với bạn:

Đề xuất: