İçindekiler:

OrangeBOX: OrangePI Tabanlı Güvenli Yedekleme Depolama Aygıtı: 5 Adım
OrangeBOX: OrangePI Tabanlı Güvenli Yedekleme Depolama Aygıtı: 5 Adım

Video: OrangeBOX: OrangePI Tabanlı Güvenli Yedekleme Depolama Aygıtı: 5 Adım

Video: OrangeBOX: OrangePI Tabanlı Güvenli Yedekleme Depolama Aygıtı: 5 Adım
Video: Raspberry Pi 5 Geliyor Mu? İşte Tahminlerim... 2024, Kasım
Anonim
OrangeBOX: OrangePI Tabanlı Güvenli Yedekleme Depolama Cihazı
OrangeBOX: OrangePI Tabanlı Güvenli Yedekleme Depolama Cihazı
OrangeBOX: OrangePI Tabanlı Güvenli Yedekleme Depolama Cihazı
OrangeBOX: OrangePI Tabanlı Güvenli Yedekleme Depolama Cihazı

OrangeBOX, herhangi bir sunucu için hepsi bir arada bir uzak depolama yedekleme kutusudur.

Sunucunuza virüs bulaşabilir, bozulabilir, silinebilir ve tüm verileriniz OrangeBOX'ta hala güvende ve kim yedekleme aygıtı gibi imkansız bir görevi istemez ki, sadece taktığınız şeyi ve daha fazla bir şey yapmadan bir ilerleme göstergesi görür (sadece sihri umarız) sonunda duman çıkmayacak:)).

OrangeBOX, bir donanım hack değil, çoğunlukla bir yazılım olan ilk projem. Temelde, LCD takılı özel olarak oluşturulmuş bir NAS'tır.

Adım 1: Donanım Parçaları

Donanım Parçaları
Donanım Parçaları
Donanım Parçaları
Donanım Parçaları
Donanım Parçaları
Donanım Parçaları

Orange PI zero, açık kaynaklı tek kartlı bir bilgisayardır. Android 4.4, Ubuntu, Debian çalıştırabilir. AllWinner H2 SoC kullanır ve 256MB/512MB DDR3 SDRAM'e sahiptir(256MB versiyonu Standart versiyondur. Orange Pi Zero, teknolojiyi kullanmaya başlamak isteyen herkes içindir – sadece onu tüketmekle kalmaz. Bu basit, eğlenceli ve kullanışlı bir araçtır. etrafınızdaki dünyanın kontrolünü ele geçirmeye başlamak için kullanabilirsiniz (https://www.orangepi.org/orangepizero/). Yani bu tam olarak bizim için, hadi başlayalım:)

  • Metal/plastik/ahşap kutu (Eski bir Yamaha harici cd-rw kutusu kullandım)
  • Turuncu PI Sıfır veya daha iyisi (başka bir model kullanırsanız GPIO pin çıkışı değişebilir)
  • 2x20 RGB LCD ekranlar
  • Herhangi bir SFF 3.5/ LFF 2.55 usb sürücüsü
  • Sata -> usb adaptörü. OrangePI'nin maksimum sürücü kapasitesi için bir üst sınır getirmediğini, ancak birçok USB-SATA köprüsünün (2TB maks.) uyguladığını unutmayın. Kullandığım turuncu PI Zero, maksimum 28 MB/sn etkin aktarım hızına sahip tek bir USB 2.0 bağlantı noktasına sahiptir. Bir USB3.0 seçtim (gelecekteki yükseltmeler için hazırlandı) -> SATA köprüsü (markadan bahsedilmeyecek) ve sınırı aşıyor, bu nedenle JMicron JMS567 yonga tabanlı köprüler gibi daha büyük sürücüleri desteklediği kanıtlanmış bir köprü seçmek daha iyi. Bir tane satın almadan önce kendi araştırmanızı yapın. Bu projede 2 TB sata sürücü kullanarak hız ve sabit sürücü limiti ile yaşayabilirim (daha büyük sürücüler takarsanız tanınacaktır ancak işletim sistemi yalnızca ilk 2 TB'ını görecek, böylece kapasitenin geri kalanı olacaktır. kayıp).
  • 12V 2,5 A veya daha yüksek amfi adaptörü. OPI Zero için yaklaşık 500mA normal kullanımı ve standart bir LFF SATA sürücüsü için 1,5A tepe noktası hesaplayın. Büyük boy asla acıtmaz. Kurulumumda Yamaha psu (her iki 12 + 5V rayda da yeterince akım sağlayabilirdi) ne yazık ki patladı:(en azından kutuyu birkaç gram daha hafif yaptı.
  • Buck dönüştürücü DC-DC 12V->5V. IronForge ile aynı ayarlanabilir mini parayı kullandım, mükemmel çalışıyor.

İsteğe bağlı

+ 10$ harcamaya hazırsanız, benzer form faktörü olan ve size Gbe ve SATA3 sağlayan Orange Pi Plus'ı (https://www.armbian.com/orange-pi-one-plus/) alabilirsiniz. Bunun için Libra PI kablolama kitaplığı kullanılabilir: https://github.com/OrangePiLibra/WiringPi ancak GPIO pin çıkışı farklı olduğu için bu yazının kapsamı dışındadır.

Bu yapıyı SATA konektörlü yeni Orange PI Plus2 ile de yapabilir ve sata->usb dönüştürücülerin kullanımını sınırlamaları ile birlikte atlayabilirsiniz. FreeBSD veya diğer BSD'leri kullanmayı planlıyorsanız, donanım desteği sınırlı olduğundan Orange PI serisi en iyi seçim olmayabilir (örneğin, önyükleme için USB çubuğu kullanmanız gerekir). BSD'ler için Raspberry PI kullanmak en iyi tavsiyedir. Hem LCD için C kodu hem de tüm kabuk komut dosyaları, diğer UNIX sistemlerine taşınabilir.

Adım 2: Donanım Tasarımı

Donanım Tasarımı
Donanım Tasarımı
Donanım Tasarımı
Donanım Tasarımı
Donanım Tasarımı
Donanım Tasarımı

Yamaha kutusu tüm bunları depolamak için yeterliydi, Orange PI PC veya normal Raspi form faktör kartı için yeterli alana sahip değildi.

Ethernet, kutunun arkasına bir genişletici ile çıkarıldı. Orange PI sıfırın sadece 100mbit/s Ethernet arayüzüne sahip olduğunu unutmayın, eğer daha hızlı istiyorsanız Asus Tinkerboard/RPI3B+/Diğer Orange PI modelleri gibi başka bir kart kullanmanız gerekecek.

Yanlış PIN Çıkışı, bu projede yapabileceğiniz tek hatadır, bu nedenle bazı temel ilkeleri uygulamaya değer:

1, END'den END'e her zaman aynı renkli kabloyu kullanmaya çalışın. Ben de aynı "hatayı" yapmadığım bazı projelerde yapıyorum, çünkü elimde yeterince uzun erkek-erkek/erkek-dişi/dişi-dişi kablo yok ve sadece devam etmek için 2'yi birleştiriyorum devre. Çalışmanızı düzgün bir şekilde belgelemezseniz, bu, yıllar sonra bir onarım, yükseltme yapmanız gereken baş ağrılarına neden olabilir.

2, Konektörlere biraz sıcak tutkal uygulayın. Bu arduino-başlangıç kiti tarzı mm/mf/ff kablolarının birinci sınıf kalitede olmaması durumunda, konektörlerin kayması oldukça yaygındır (özellikle cihazı hareket ettirirseniz/taşırsanız). Uzun süreli kullanım cihazı olacağını biliyorsanız (muhtemelen kırılana kadar kullanın?!), o zaman konektörlerin hem OrangePI hem de LCD tarafına bir arada tutmak için bir miktar hotglue uygulamak daha iyidir. Bu, gerekirse daha sonra kolayca eritilebilir/çizilebilir.

3, OrangePI sıfır kablolama Kötü haber şu ki Orange PI pin çıkışı Raspberry PI 0/1/2/3 ile aynı DEĞİLDİR ve diğer Orange PI modelleri arasında bile fark vardır. Gitmenin en iyi yolu kablolama kitaplığını edinmektir (Orange PI Zero versiyonu). Resim biraz kafa karıştırıcı olabilir ama bulabildiğim en iyiler bunlardı. Biri diğerinin 180 derecelik aynasıdır. CLI grafik olmayan görüntünün anlaşılması daha zor olsa da, en basit olanıdır.

Bir ucunu (+3.3/+5V) POZİTİF ucu ve diğer ucunu NEGATİF ucu (bir GND) olarak kabul ederek soketlerin 2 ucunu her zaman farklılaştırabilirsiniz -> bu konektörün ETHERNET portuna bakan ucudur.

Wiring PI Zero tablosundan sadece bir sütuna ihtiyacınız olacak, wPI orada olmayacakmış gibi diğerlerini unutacaktır.

Örneğin LCD_E 15'i (yani wPI 15!) ve LCD_RS 16'yı (yani wPI 16!) bağlamak için konektörün POZİTİF ucundan pinleri sayın (bir kalem veya küçük tornavida ile yapmak kolaydır). Bu fiziksel olarak 4 pin ve 5 pin aşağı inecek.

4, Gruplandırın. Kullanılmış pinleri yan yana koyma imkanı varsa (gruplandırarak) her zaman bunu tercih edin, hotglue olmadan da birbirlerini tutmalarını sağlar ve ayrıca 2x 4x 6x molex bağlantılarınız olduğunda diğer projelerde de yapabilirsiniz. sadece pinlerin yan yana olmasından yararlanın. Burada yapabileceğiniz en iyi şey 2-3 kişilik bir gruptur (eski bilgisayarlardan kurtarılmış atlama kabloları kullanırken idealdir).

OrangePI LCD Ekran bağlantısı için kullanılan pinler:

//WIRINGPI PIN NUMARALARINI KULLANIN

#define LCD_E 15 //Pini Etkinleştir #define LCD_RS 16 //Seç pinini kaydet #define LCD_D4 5 //Veri pini 4 #define LCD_D5 6 //Veri pini 5 #define LCD_D6 10 //Veri pini 6 #LCD_D7 11 tanımla // Veri pimi 7

RGB arka ışık kontrolü için kullanılan pinler

$G 1 0 yaz

$G yaz 4 1 $G yaz 7 1

Turuncu PI sıfır wPI pinleri 1, 4, 7. Bu LCD'nin yapabileceği tek sihir, standart sabit mavi veya sabit yeşil arkadan aydınlatmalı LCD'ye kıyasla, GND'ye çekilmesi gereken tek bir katodun olduğu ve 3 için 3'e sahip olduğu. renkler. Kırmızı, yeşil ve mavi. Hangisinin AÇIK olduğunu değiştirerek, bu temel renklerden farklı renkleri karıştırabilirsiniz, ancak yalnızca üst uçlarda gölge olmaz çünkü bir rengin parlaklığını kontrol edemezsiniz (açık veya kapalıdır).

Eklemeli renk karıştırma: yeşile kırmızının eklenmesi sarıyı verir; maviye kırmızı eklemek macenta verir; yeşilin maviye eklenmesi camgöbeği verir; üç ana rengin hepsini bir araya getirerek beyaz elde edilir.

Adım 3: İşletim Sistemi

İşletim sistemi
İşletim sistemi

OrangeBOX açılır ve Armbian linux (Debian Stretch tabanlı) 4.14.18-sunxi çekirdeği, güvenli bir güvenlik duvarı ortamına sahiptir, bir VPN'ye bağlanır ve sunucudan uzaktan yedekleme komutları bekler.

Tasarım ilkeleri:

-Tam luks tabanlı disk şifreleme (cihazın kendisinde yedekleme sürücüsünü açma anahtarı yoktur. Uzak sunucudan geçici olarak ram /dev/shm'ye kopyalanır, sürücü açılır ve anahtar silinir. Yedekleme tamamlandıktan sonra sürücü kapanır ve OrangeBox 1 dakika içinde otomatik olarak kapanır.)

-Tüm komutlar ve anahtarlar uzak sunucudan gönderilir (cihazın kendisi sadece bir vpn sertifikası içerir) uzak sunucuya HİÇBİR erişimi yoktur, hatta bu cihazdan ssh güvenlik duvarı ile kapatılmıştır.

-Yerel dosya sistemleri, önyükleme yapabilmek için şifrelenmemiş ancak yararlı bir şey içermiyor ve diğer uçta VPN yukarı bağlantısı son derece kısıtlı olduğundan, cihazın tamamen kaybedilmesi durumunda bile bir saldırgan hiçbir şey yapamaz.

Armbian Stretch'i https://www.armbian.com/orange-pi-zero/ adresinden indirin.

Sistemi kurun ve çalıştırın:

apt-get güncelleme && apt-get upgrade

apt-get install sysvinit-core sysvinit-utils

/etc/inittab'ı düzenleyin, kutu başsız olarak kullanılacağından tüm konsol devre dışı bırakılabilir. Aşağıdaki bölümü yorumlayın:

#1:2345:yeniden doğma:/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

Gerçek bir açık kaynak kodlu yazılım içermeyen sisteme sahip olmak için kutunuzu yeniden başlatın ve systemd'yi kaldırın.

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

Bazı paketleri kurun

apt-get install cryptsetup vim htop rsync ekranı gcc git git

Kablolama kütüphanesini kurun

cd /usr/src

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

LCD ekran için turuncu kullanıcı oluştur

groupadd -g 1000 portakal

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

Seni gözetmeyen bekçi köpeği

apt-get kurulum bekçi köpeği

/etc/default/watchdog dosyasına bakmak # Watchdog açılışta başlatılsın mı? 0 veya 1 run_watchdog=1 # Watchdog'u durdurduktan sonra wd_keepalive başlatılsın mı? 0 veya 1 run_wd_keepalive=1 # Watchdog'u başlatmadan önce modülü yükleyin watchdog_module="none" # Burada ek watchdog seçeneklerini belirtin (kılavuz sayfasına bakın).

/etc/watchdog.conf dosyasına bakmak

# En azından bunları etkinleştirin

maksimum yük-1 = 24 maksimum yük-5 = 18 maksimum yük-15 = 12

/etc/init.d/watchdog başlangıç

En az 1 çekirdek iş parçacığı ve 1 işlem olmalıdır:

kök 42 0.0 0.0 0 0 ? I< 10:50 0:00 [bekçi köpeği] kök 14613 0.0 0.2 1432 1080 ? SLs 13:31 0:00 /usr/sbin/watchdog

Test yapmak:

Geri kalan verileri diske yazmak için her şeyi durdurduğunuzdan ve bir eşitleme && eşitleme && eşitleme yaptığınızdan emin olun. Sonra kök sorunu olarak:

yankı 1 > /dev/watchdog

Birkaç saniye sonra makine yeniden başlatılmalıdır.

Kılavuzun belirttiği gibi:

o İşlem tablosu dolu mu?

o Yeterli boş hafıza var mı? o Ayrılabilir yeterli bellek var mı? o Bazı dosyalara erişilebilir mi? o Belirli bir aralıkta bazı dosyalar değişti mi? o Ortalama iş yükü çok mu yüksek? o Bir dosya tablosu taşması meydana geldi mi? o Bir süreç devam ediyor mu? İşlem bir pid dosyası tarafından belirtilir. o Bazı IP adresleri ping'e yanıt veriyor mu? o Ağ arayüzleri trafik alıyor mu? o Sıcaklık çok mu yüksek? (Sıcaklık verileri her zaman mevcut değildir.) o Rastgele testler yapmak için kullanıcı tanımlı bir komut yürütün. o /etc/watchdog.d içinde bulunan bir veya daha fazla test/onarım komutunu yürütün. Bu komutlar, bağımsız değişken testi veya onarımı ile çağrılır. Bu kontrollerden herhangi biri başarısız olursa, watchdog kapanmaya neden olacaktır. Kullanıcı tanımlı ikili dışında bu testlerden herhangi biri bir dakikadan uzun sürerse, makine de yeniden başlatılacaktır.

Bu bekçi köpeği normal x86 mimarilerinde iyi çalışabilir, ancak Raspberry PI'ler, Orange PI'ler gibi ARM tabanlı kartlarda beni sayısız kez başarısızlığa uğrattı. Sistem, bekçi köpeğinin bile asılı kaldığı asma durumlarına girebilir. Yine de yapılandıralım, belki yıllar içinde apt-get upgrade ile düzelir:(

Adım 4: Yazılım Tasarımı

Yazılım Tasarımı
Yazılım Tasarımı

Yedekleme işleminin kendisi rsync tabanlıdır (şimdiye kadar icat edilen en iyi yedekleme aracıdır) veriler SUNUCU->OrangeBOX'tan gönderilir.

Verileri rsync'den çıkarmak, LCD'de yazdırılan yedekleme hakkında bir ilerleme çubuğuna sahip olmak için projenin tek zorlu kısmıydı.

Yedekleme ilerlemesini hesaplamanın 3 olası yolu vardı:

1, Transferin yaklaşık olarak ne kadar sürebileceğini belirlemek için https://wintelguy.com/transfertimecalc.pl gibi formüller kullanmak

Transfer Süresi (g:s:d:s): 0:02:44:00

Karşılaştırma için: Farklı ağ bağlantıları üzerinden 123 GB dosya aktarımı için tahmini süre (d:s:m:s): T1/DS1 hattı (1.544 Mbps) - 7:09:01:46 Ethernet (10 Mbps) - 1:03: 20:00 Hızlı 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 biterse, komut dosyasına hesaplamayı durdurması için sinyal gönderir. Bu yöntem sadece yaklaşık bir yöntemdir ve güvenilir değildir, ayrıca bağlantı hızı sabit değildir, yavaşlayabilir, tekrar hızlanabilir. Bu sadece teorik bir hesaplamadır.

2, Zaten ne kadar veri senkronize ettiğimizi belirlemek için dizinde boyut kontrolleri yapmak. Yüzlerce GB'lık küçük dosyalarla çok yavaşlayabilir (Linux'ta du -s yeniden çalıştırırsanız biraz önbelleğe alma yapmasına rağmen)

Host A -> Yedeklenecek sunucu verileri Veri dizini: 235GB

Ana Bilgisayar B -> Şu anda elimizdeki turuncu kutu istemci verileri Veri dizini: 112GB

Delta 123 GB'dir.

3, Dosya sistemi bizim durumumuzda olduğu gibi tahsis edilmişse /dev/mapper/backup is yedeklememizin nasıl ilerlediğini belirlemek için genel dosya sistemi kullanım göstergesinden yararlanabiliriz ve bu gerçekten çok hızlıdır. Bu durumda, rsync stdout'u herhangi bir yere yönlendirmemize bile gerek yok, sadece kuru bir rsync çalıştırın, tamamlanana kadar bekleyin, deltayı bayt olarak hesaplayın ve bunu yedek sürücüde sahip olduğumuz boş alanla çapraz kontrol edin ve işte yapabiliriz şimdi güzel bir çubuk grafik yapın. Bu benim seçtiğim yöntemdi ve işte benim senaryom:

#!/bin/bash

# NLD tarafından OrangeBOX için Yedekleme İlerleme Hesaplayıcısı # Sürüm: 0.2 (2018/03/05) # # Cron'dan ayrıcalıksız kullanıcı olarak çalıştırın # * * * * * /home/orange/backup_progress.sh &> /dev/null # # Bu komut dosyası yalnızca LCD'deki verileri görüntülemekten sorumludur, ana programla # konum ve kilit dosyaları aracılığıyla dolaylı olarak iletişim kurar. BACKUP_DRIVE="/dev/mapper/backup" VFILE="$HOME/start.pos" # yedeklemenin başında disk kullanımı TFILE="$HOME/trans.size" # önceden hesaplanmış toplam aktarım boyutu BFILE="$HOME/ backup.lck" # başlangıç durumunu belirler FFILE="$HOME/backup.fin" # bitmiş durumu belirler LFILE1="$HOME/lcd1.bar" # LCD ilerleme göstergesi verileri LFILE2="$HOME/lcd2.bar" # LCD ilerleme durumu gösterge verisi SHUTDOWN="1" # 1 ise, yedeklemenin sonunda kutuyu kapatan başka bir komut dosyası başlatır BACKUP_CURRENT="0" # Başlatılmalı ancak hesaplanacak # Bayt cinsinden sürücü boyutu (ikincil kontrol) 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 mavi() { sudo /bin/lcdcolor blue } # Durumu temizle (önyüklemede bootup_display.sh ile ayarlanır). Devam eden bir yedekleme yok, # durum LCD'sini BIRAKMAYIN. Yalnızca devam eden bir yedekleme olması durumunda ilerlemeyi görüntüleyin => Başlangıç dosyası yok VE Fin dosyası yok = [! -f $BFILE] && [! -f $FFILE]; sonra 1'den çıkın fi # Yedekleme tamamlandıysa, bu komut dosyası bunu gösterecek ve bir sonraki başlatmaya kadar tekrar çalıştırılamaması için # kilitleri kaldıracaktır. eğer [-f $FFILE]; ardından yeşil $LCD " Yedekleme " "** Tamamlandı **" echo "Yedekleme Tamamlandı" rm -rf $BFILE $TFILE $FFILE $LFILE1 $LFILE2 $VFILE # Eğer [$SHUTDOWN == "1"]; sonra echo "Kapatma komut dosyası yürütülüyor…" /home/orange/shutdown.sh & fi çıkış 0 fi # Bu noktadan itibaren komut dosyası YALNIZCA DEVAM EDEN bir yedekleme # varsa yürütülür, bu nedenle tüm hatalar LCD'ye yazdırılır ve komut dosyasına neden olur # iptal etmek, ancak backup.lck dosyasını kaldırmaz, bu nedenle buraya tekrar tekrar # girecek ve koşulları değerlendirecektir. is_mount $BACKUP_DRIVE if [$status -ne 0]; sonra kırmızı $LCD "ERR: Yedekleme sürücüsü" "takılı değil!" echo "Yedekleme sürücüsü takılı değil" çıkış 1 fi eğer [! -s $TFILE]; ardından kırmızı $LCD "ERR: aktarım" "boş" echo "Taşıma boyutu hesaplama dosyası boş." çıkış 1 fi BACKUP_OVERALL=$(head -1 $TFILE |tr -d '\n') if [-z $BACKUP_OVERALL]; ardından kırmızı $LCD "ERR: Boyut okuması" "sunucudan geçersiz" echo "Yedekleme genel boyut okuması geçersiz 1" 1 fi if !

Kod basit olmasına rağmen, burada ne yaptığının bir açıklaması var:

1, Yedekleme işlemi olmadığını gösteren BFILE veya FFILE mevcut değilse (bu, net bir başlatmadan sonraki durumdur), bu nedenle hiçbir şey YAPMAYIN, hemen çıkın. Bu şekilde, açılışla ilgili ana bilgisayar adı, ip, çalışma süresi vb. gibi istediğiniz güzel bilgileri grafik haline getirebilirsiniz ve bunlar berbat olmaz.

2, is_mount $BACKUP_DRIVE bölümüne geçelim. Sadece bir hatırlatma, buraya gelmemizin tek yolu, BFILE'nin var olması için bir yedeklemenin başlatılmış olmasıdır. Şimdi kod, yedekleme sürücüsü takılı mı? gibi çeşitli hata kontrolleri yapıyor, yedeklemek üzere olduğumuz şeyin genel boyutu sürücüyü aşıyor mu? veya diğer hatalar. Bunun yalnızca bir EKRAN programı olduğunu unutmayın, boyut yedeklemeleri aşsa bile hiçbir şeyi iptal etmez.

3, Tamam, yüzde grafiğini hesaplamak için tüm hata kontrolleri temizlendi. İlk olarak, komut dosyası şu anda yedek dosya sistemindeki bayt cinsinden kullanılan alanın bir "anlık görüntüsünü" alır ve VFILE'de saklar. Bunun amacı nedir: bir bash betiği durumsuzdur, yürütmeler arasında veri kaybeder, bu nedenle önceki yürütmeden bazı verileri "hatırlamak" istiyorsanız, onu bir yerde saklamanız gerekir. Bizim durumumuzda bu sadece basit bir metin dosyasıdır. Basitleştirmek için diyelim ki START_POS'umuz 1GB (sahip olduğumuz veriler), yedeklemek istediğimiz +2GB ve toplam sürücü kapasitesi 10GB.

4, Bir dahaki sefere betik çalıştırıldığında VFILE var ve bu, esasen şu anda kullanılan alanın bir deltası olan BACKUP_CURRENT'i hesaplamak için geri okunacak (böylece sürücünün boş olmaması durumunda başlangıç konumunun ne olduğunu biliyoruz). yedekleme sürücüsünde son turda VFILE'a kaydettiğimiz başlangıç konumu eksi başlangıç konumu (yine bu, yedekleme başladığında sürücüde sahip olduğumuz verilerdir). Komut dosyası dahili olarak baytlarla çalışır ancak yarım saat sonra 500MB veriyi yedekledikten sonra bunu basitleştirmek için formül BACKUP_CURRENT=1.5GB - 1GB (ilk durum) => olur ve bu da bize tam olarak 500 MB gerçek veriyi verir, yani şimdiye kadar neyi yedekledik. Yedeklemenin başlangıcında orijinal verilerin ne olduğunu takip etmeden bu boyut hesaplamasının başarısız olacağını görebilirsiniz, çünkü şu anda kullanılan alanın 1,5 GB olduğunu görecektir, çünkü diskte 1 gig verinin başından beri orada olduğunu bilmeden. önceki bir yedekten geliyor, bu nedenle sunucunun bize 500MB yerine 1,5GB veri gönderdiğini varsayar.

5, BACKUP_OVERALL okunacak, bu veriler sunucu tarafından ilk kuru rsync yapıldığında hesaplanmıştır (bu nedenle bu, Sunucu->OrangeBOX'tan yedeklenecek olan bayt miktarını içeren harici bir veri kaynağıdır). Bu değer, o anda diskteki toplam BOŞ alana karşı kontrol edilecek ve onu aşarsa, lcd'de bir hata mesajı görüntülenecek ve komut dosyası yürütmeyi durduracaktır. Bu betiğin yaptığının SADECE görüntülendiğini, yedekleme sürecine müdahale etmediğini tekrar unutmayın. Diskteki dosyaları temizlerseniz veya dosyaların miktarı uzaktan değişirse ve bu nedenle BACKUP_OVERALL bir noktada değişirse, devam eder.

6, Sonunda ikinci seviye kontrolleri bitirdik, bir şeyi gösterme zamanı. Komut dosyası, basit bir C uygulaması kullanarak verileri hem konsolda hem de lcd'de görüntüler. Arka plan MAVİ olarak değiştirilir, bu da yedeklemenin nihayet başladığını ve ilerlemenin aşağıdaki formülle hesaplandığını gösterir PROGRESS=$((($BACKUP_CURRENT * 100) / $BACKUP_OVERALL)). Bu, mevcut miktarı aldığımız temel bir yüzde hesaplamasıdır, örneğimizde 0,5 GB*100/2 GB = %25.

7, Sayılar ayrıca bayttan Mega/Giga bayta dönüştürülür ve 1 GB'den düşükse ekran otomatik olarak MB olarak görüntülenir.

8, Bizim durumumuzda bunu eşleştirmek için kalan bir şey, 20 sütunlu bir LCD'deki %25'tir. Örneğimizde bu 25 * 20 / 100 = 5 olur. Şu anda LCD programı ile yenileme uygulanmaktadır, programı her çağırdığınızda tüm ekranı yeniden çizecektir. Bu durumda, ekranda 5 hashmark # çizmek için 5 kez bir for döngüsü çalıştıracaktı, bu her turda çirkin bir titreme olarak görünecekti, bunun yerine hesaplanan ilerleme çubuğu verilerini LFILE1 ve 2'ye yazıyorum, bu durumda sonra 5 tur ##### içerir ve bu geri okunur ve LCD'de görüntülenir. LFILE1 ve 2'yi ramdisk'e de koyabilirsiniz sdcard'ı ekstra yazma işlemlerinden kurtarmak için, benim için herhangi bir sorun yaratmadı, script cron'dan dakikada bir çalışıyor.

9, Yedekleme bittiğinde, rsync'i çalıştıran sunucudaki diğer komut dosyası FFILE'ye (Dosyayı Bitir) dokunacaktır. Sonraki döngüde backup_progress.sh yedeklemenin tamamlandığını gösterecek ve isteğe bağlı olarak OrangeBOX'ı kapatmak için başka bir komut dosyası çağıracaktır. Bu noktada kilit dosyalarını siler ve daha fazla yürütmeyi imkansız hale getirir, bu nedenle bu komut dosyası çalıştığında bir sonraki dakika kapatmayı etkinleştirmeseniz bile BFILE orada olmadığı ve FFILE orada olmadığı için hemen çıkacaktır. Bu nedenle, yedekleme yeniden başlatılmadıkça, yedekleme tamamlandı mesajını süresiz olarak görüntüler.

Uzak yedekleme komut dosyası (orange-remote.sh):

Yedekleme için bir ssh anahtarı ve sürücü için luks şifrelemesi için bir anahtar oluşturmanız gerekecektir. Uzaktan yedeklemeyi ilk kez manuel olarak çalıştırdığınızda, turuncu kutular ana bilgisayar parmak izini ana bilgisayar dosyasına kaydeder (bu noktadan itibaren cron tarafından otomatik olarak çalışabilir).

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

Sabit disk tanımlayıcınızı bulmak için uuid, blkid komutunu çalıştırın veya ilgili /dev/disk/ dizinlerine bakın.

Her şeyi yedeklemek istemiyorsanız, bir dışlama içeren bir dizin kurulabilir. Bu oldukça can sıkıcı bir işlemdir çünkü rsync için yapının derinliklerinde tek bir alt dizini hariç tutmak istiyorsanız yapmanız gereken:

+ /a

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

Bu betik, OrangeBOX'ta uzaktan komutlar yürüttüğü için, o taraftan dönüş değişkenleri üzerinde hiçbir denetimi yoktur, bu nedenle, uzak sürücüyü /tmp/contmsg.txt'ye açma mesajını verecek ve ardından ayrıştırma gibi bazı akıllı hileler kullanıyorum. başarılı olup olmadığını görmek için, değilse, rsync ikili dosyasını yürütülemez olarak değiştirir, böylece rsync, SD kartını dolduran OrangePIs rootfs'ye veri yüklemeye çalışmaz. Ayrıca, bunu imkansız kılmak için değişmez biti chattr +i /mnt/backup'ta ayarlamak için iyi bir uygulama.

Boyut ön hesaplaması Sunucuda yerel olarak gerçekleşir, bu nedenle bu dosyanın bir sonraki adımda OrangeBOX'a gönderilmesi gerekir.

Ana yedekleme, ((i=0;i<100;i++)); için bir döngü olarak başlatılır. yapın çünkü düşük kaliteli DSL/Kablo internet bağlantılarında rsync sık sık bozulabilir, zaman aşımına uğrayabilir. Başarılı bir şekilde tamamlanırsa, daha fazla yineleme denemeden döngü bozulur. Bu, iyi işletim sistemlerinde kusursuz bir şekilde çalışır, ancak herhangi bir nedenle uzak kutu pencerelerse ve NTUSER. DAT'ta düzenli olarak erişim reddedilirse, rsync bir hata kodu döndürür ve bu döngü 100 kez yürütülür ve ardından yine başarısız olur.

Adım 5: Kapanış ve Yapılacaklar Listesi

Kapanış ve Yapılacaklar Listesi
Kapanış ve Yapılacaklar Listesi
Kapanış ve Yapılacaklar Listesi
Kapanış ve Yapılacaklar Listesi

Eğitilebilirliğim bir kez daha, 10 $ 'lık bir bilgisayardan kendi başınıza nasıl daha iyi, daha özelleştirilebilir bir cihaz yaratabileceğinizi gösteriyor; bu, tescilli kilitli NAS cihazları, garip dahili bölümleme, segfaulting araçlarıyla meşgul kutusu sakat linux ile Buffalo'nun cehennemini yener, yönetilir Windows yazılımları, kapalı aygıt yazılımı, kötü dokümantasyon ve destek sayesinde ve ne kadar para harcarsanız harcayın, OrangeBox'ın ne kadar havalı göründüğünden bahsetmeden yedeklemenizi gösteren bir ilerleme göstergesi asla alamayacaksınız (onunla turuncu CAT5 kablosu bile kullanıyorum: D).

Aynı <100$ fiyat çizgisini korurken mini bilgisayarlar giderek daha güçlü hale geldikçe, onları daha fazla görev için kullanabiliriz. Gbe Ethernet portları 1-2 yıl içinde bu günlerde oldukça yaygın olduğu için bu kartlardaki bellek önemli ölçüde artacak ve ZFS tabanlı yedekleme sistemleri için de kullanılabilirler.

-C programı tarafından ince tane ilerleme göstergesi (diğer projemden biri olan WasserStation'a bakın). Şu anda, lcdPuts(lcd, line1) ile karakter modunda sadece # hashmark # karakterleri kullanılıyor, bu, 1 sütunu 5 parçaya bölmek için karakter LCD'leri kullanıldığında bile geliştirilebilir ve ana C programı sadece 25 gibi bir tamsayı alabilir ve çizebilir ilerleme çubuğu düzgün veya grafik LCD kullanılarak daha da iyileştirildi

-Yeni ve yeni yedeklemeler oluşturmak ve bunları farklı konumlara taşımak için çıkarılabilir bir hdd'ye sahip olma imkanı (kutu boş bir sürücü algılarsa, alındığında şifreleme anahtarı ile otomatik olarak biçimlendirmelidir).

-Makerbot ile kendi kasanızı basmak istiyorsanız OrangeNAS sizin için ilginç olabilir:

Önerilen: