Δημιουργία ενός ανέξοδου συστήματος Linux Home NAS

Δημιουργία ενός ανέξοδου συστήματος Linux Home NAS

Εγώ, όπως και πολλοί άλλοι χρήστες MacBook Pro, αντιμετώπισα το πρόβλημα της ανεπαρκούς εσωτερικής μνήμης. Για να είμαι πιο ακριβής, το rMBP που χρησιμοποιούσα καθημερινά ήταν εξοπλισμένο με SSD χωρητικότητας μόλις 256 GB, κάτι που, όπως ήταν φυσικό, δεν ήταν αρκετό για μεγάλο χρονικό διάστημα.

Και όταν, πάνω από όλα τα άλλα, άρχισα να καταγράφω βίντεο κατά τη διάρκεια των πτήσεων μου, η κατάσταση χειροτέρεψε. Ο όγκος του πλάνα που τραβήχτηκε μετά από τέτοιες πτήσεις ήταν 50+ GB και ο φτωχός SSD των 256 GB πολύ σύντομα γέμισε, αναγκάζοντάς με να αγοράσω μια εξωτερική μονάδα δίσκου 1 TB. Ωστόσο, μετά από ένα χρόνο, δεν μπορούσε πλέον να χειριστεί τον όγκο των δεδομένων που δημιουργούσα, για να μην αναφέρουμε ότι η έλλειψη πλεονασμού και η δημιουργία αντιγράφων ασφαλείας το κατέστησαν ακατάλληλο για τη φιλοξενία σημαντικών πληροφοριών.

Έτσι, κάποια στιγμή αποφάσισα να φτιάξω ένα μεγάλο NAS με την ελπίδα ότι αυτό το σύστημα θα διαρκούσε τουλάχιστον μερικά χρόνια χωρίς να απαιτείται άλλη αναβάθμιση.

Έγραψα αυτό το άρθρο κυρίως ως υπενθύμιση του τι ακριβώς έκανα και πώς το έκανα σε περίπτωση που χρειαστεί να το ξανακάνω. Ελπίζω ότι θα είναι χρήσιμο και για εσάς εάν αποφασίσετε να κάνετε το ίδιο.

Ίσως είναι πιο εύκολο να αγοράσετε;

Έτσι, ξέρουμε τι θέλουμε να πάρουμε, το ερώτημα παραμένει: πώς;

Αρχικά κοίταξα τις εμπορικές λύσεις και κοίταξα συγκεκριμένα τη Synology, η οποία υποτίθεται ότι παρείχε τα καλύτερα συστήματα NAS καταναλωτικής ποιότητας στην αγορά. Ωστόσο, το κόστος αυτής της υπηρεσίας αποδείχθηκε αρκετά υψηλό. Το φθηνότερο σύστημα 4-bay κοστίζει $300+ και δεν περιλαμβάνει σκληρούς δίσκους. Επιπλέον, το ίδιο το εσωτερικό γέμισμα ενός τέτοιου κιτ δεν είναι ιδιαίτερα εντυπωσιακό, γεγονός που θέτει υπό αμφισβήτηση την πραγματική του απόδοση.

Τότε σκέφτηκα: γιατί να μην φτιάξω μόνος μου έναν διακομιστή NAS;

Εύρεση κατάλληλου διακομιστή

Εάν πρόκειται να συναρμολογήσετε έναν τέτοιο διακομιστή, τότε πρώτα απ 'όλα πρέπει να βρείτε το σωστό υλικό. Ένας χρησιμοποιημένος διακομιστής θα πρέπει να είναι αρκετά κατάλληλος για αυτήν την κατασκευή, καθώς δεν θα χρειαστούμε μεγάλη απόδοση για εργασίες αποθήκευσης. Μεταξύ των απαραίτητων, θα πρέπει να σημειώσουμε μεγάλη ποσότητα μνήμης RAM, αρκετές υποδοχές SATA και καλές κάρτες δικτύου. Δεδομένου ότι ο διακομιστής μου θα λειτουργεί στον τόπο της μόνιμης κατοικίας μου, το επίπεδο θορύβου έχει επίσης σημασία.

Ξεκίνησα την αναζήτησή μου στο eBay. Παρόλο που βρήκα πολλά μεταχειρισμένα Dell PowerEdge R410/R210 εκεί για λιγότερο από $100, έχοντας εμπειρία εργασίας σε δωμάτιο διακομιστή, ήξερα ότι αυτές οι μονάδες 1U έκαναν πολύ θόρυβο και δεν ήταν κατάλληλες για οικιακή χρήση. Κατά κανόνα, οι διακομιστές πύργων είναι συχνά λιγότερο θορυβώδεις, αλλά, δυστυχώς, υπήρχαν λίγοι από αυτούς στο eBay και ήταν όλοι είτε ακριβοί είτε με χαμηλή ισχύ.

Το επόμενο μέρος για να ψάξω ήταν το Craiglist, όπου βρήκα κάποιον να πουλάει ένα μεταχειρισμένο HP ProLiant N40L για μόλις 75 $! Ήμουν εξοικειωμένος με αυτούς τους διακομιστές, οι οποίοι συνήθως κοστίζουν περίπου 300 $ ακόμη και χρησιμοποιημένοι, γι' αυτό έστειλα email στον πωλητή με την ελπίδα ότι η διαφήμιση ήταν ακόμα ενεργή. Έχοντας μάθει ότι αυτό συνέβαινε, χωρίς να το σκεφτώ δύο φορές, κατευθύνθηκα στο San Mateo για να παραλάβω αυτόν τον διακομιστή, ο οποίος με την πρώτη ματιά σίγουρα με ικανοποίησε. Είχε ελάχιστη φθορά και εκτός από λίγη σκόνη, όλα τα άλλα ήταν υπέροχα.

Δημιουργία ενός ανέξοδου συστήματος Linux Home NAS
Φωτογραφία του διακομιστή, αμέσως μετά την αγορά

Εδώ είναι οι προδιαγραφές για το κιτ που αγόρασα:

  • CPU: Επεξεργαστής AMD Turion(tm) II Neo N40L Διπύρηνος (64-bit)
  • RAM: 8 GB μη ECC RAM (εγκατεστημένη από τον προηγούμενο ιδιοκτήτη)
  • φλας: Μονάδα USB 4 GB
  • Υποδοχές SATA:4+1
  • NIC: Ενσωματωμένο NIC 1 Gbps

Περιττό να πούμε ότι, παρά το γεγονός ότι είναι αρκετά ετών, οι προδιαγραφές αυτού του διακομιστή εξακολουθούν να είναι ανώτερες από τις περισσότερες επιλογές NAS στην αγορά, ειδικά όσον αφορά τη μνήμη RAM. Λίγο αργότερα, αναβάθμισα ακόμη και στα 16 GB ECC με αυξημένο μέγεθος buffer και αυξημένη προστασία δεδομένων.

Επιλογή σκληρών δίσκων

Τώρα έχουμε ένα εξαιρετικό σύστημα εργασίας και το μόνο που μένει είναι να επιλέξουμε σκληρούς δίσκους για αυτό. Προφανώς, για αυτά τα 75 $ πήρα μόνο τον ίδιο τον διακομιστή χωρίς τον σκληρό δίσκο, κάτι που δεν με εξέπληξε.

Αφού έκανα μια μικρή έρευνα, ανακάλυψα ότι οι σκληροί δίσκοι WD Red είναι οι πλέον κατάλληλοι για τη λειτουργία συστημάτων NAS 24/7. Για να τα αγοράσω, στράφηκα στην Amazon, όπου αγόρασα 4 αντίγραφα των 3 TB το καθένα. Βασικά, μπορείτε να συνδέσετε όποιον σκληρό δίσκο προτιμάτε, αλλά βεβαιωθείτε ότι έχουν την ίδια χωρητικότητα και ταχύτητα. Αυτό θα σας βοηθήσει να αποφύγετε πιθανά προβλήματα απόδοσης RAID μακροπρόθεσμα.

Εγκατάσταση συστήματος

Νομίζω ότι πολλοί θα χρησιμοποιήσουν το σύστημα για τις εκδόσεις NAS τους FreeNAS, και δεν υπάρχει τίποτα κακό σε αυτό. Ωστόσο, παρά τη δυνατότητα εγκατάστασης αυτού του συστήματος στον διακομιστή μου, προτίμησα να χρησιμοποιήσω το CentOS, καθώς το σύστημα ZFS σε Linux είναι αρχικά προετοιμασμένο για περιβάλλον παραγωγής και γενικά, η διαχείριση ενός διακομιστή Linux είναι πιο οικεία σε μένα. Εξάλλου, δεν με ενδιέφερε η φανταχτερή διεπαφή και οι δυνατότητες που παρέχει το FreeNAS - η συστοιχία RAIDZ και η κοινή χρήση AFP ήταν αρκετά για μένα.

Η εγκατάσταση του CentOS σε USB είναι αρκετά απλή - απλώς καθορίστε το USB ως πηγή εκκίνησης και κατά την εκκίνηση ο οδηγός εγκατάστασης θα σας καθοδηγήσει σε όλα τα στάδια.

Κατασκευή RAID

Μετά την επιτυχή εγκατάσταση του CentOS, εγκατέστησα και το ZFS σε Linux ακολουθώντας τα αναφερόμενα βήματα εδώ.

Μόλις ολοκληρωθεί αυτή η διαδικασία, φόρτωσα τη λειτουργική μονάδα πυρήνα ZFS:

$ sudo modprobe zfs

Και δημιούργησε τον πίνακα RAIDZ1 χρησιμοποιώντας την εντολή zpool:

$ sudo zpool create data raidz1 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609145 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609146 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609147 ata-WDC_WD30EFRX-68AX9N0_WD-WMC1T0609148
$ sudo zpool add data log ata-SanDisk_Ultra_II_240GB_174204A06001-part5
$ sudo zpool add data cache ata-SanDisk_Ultra_II_240GB_174204A06001-part6

Λάβετε υπόψη ότι εδώ χρησιμοποιώ τα αναγνωριστικά των σκληρών δίσκων αντί για τα εμφανιζόμενα ονόματα τους (sdx) για να μειώσετε την πιθανότητα να μην τοποθετηθούν μετά την εκκίνηση λόγω αλλαγής γράμματος.

Πρόσθεσα επίσης την προσωρινή μνήμη ZIL και L2ARC που τρέχει σε ξεχωριστό SSD, χωρίζοντας αυτόν τον SSD σε δύο διαμερίσματα: 5 GB για το ZIL και τα υπόλοιπα για L2ARC.

Όσο για το RAIDZ1, μπορεί να αντέξει 1 αστοχία δίσκου. Πολλοί υποστηρίζουν ότι αυτή η επιλογή συγκέντρωσης δεν πρέπει να χρησιμοποιείται λόγω της πιθανότητας να αποτύχει ο δεύτερος δίσκος κατά τη διαδικασία αναδόμησης RAID, κάτι που μπορεί να οδηγήσει σε απώλεια δεδομένων. Αγνόησα αυτήν τη σύσταση, καθώς έκανα τακτικά αντίγραφα ασφαλείας σημαντικών δεδομένων σε μια απομακρυσμένη συσκευή και η αποτυχία ακόμη και ολόκληρης της συστοιχίας μπορεί να επηρεάσει μόνο τη διαθεσιμότητα των δεδομένων, αλλά όχι την ασφάλειά τους. Εάν δεν έχετε τη δυνατότητα να δημιουργήσετε αντίγραφα ασφαλείας, τότε θα ήταν καλύτερο να χρησιμοποιήσετε λύσεις όπως το RAIDZ2 ή το RAID10.

Μπορείτε να επαληθεύσετε ότι η δημιουργία πισίνας ήταν επιτυχής εκτελώντας:

$ sudo zpool status

и

$ sudo zfs list
NAME                               USED  AVAIL  REFER  MOUNTPOINT
data                               510G  7.16T   140K  /mnt/data

Από προεπιλογή, το ZFS προσαρτά απευθείας τη νέα πισίνα /, το οποίο είναι γενικά ανεπιθύμητο. Μπορείτε να το αλλάξετε εκτελώντας:

zfs set mountpoint=/mnt/data data

Από εδώ μπορείτε να επιλέξετε να δημιουργήσετε ένα ή περισσότερα σύνολα δεδομένων για την αποθήκευση των δεδομένων. Δημιούργησα δύο, ένα για δημιουργία αντιγράφων ασφαλείας του Time Machine και ένα για κοινόχρηστο χώρο αποθήκευσης αρχείων. Περιόρισα το μέγεθος του συνόλου δεδομένων Time Machine σε ένα όριο 512 GB για να αποτρέψω την ατελείωτη ανάπτυξή του.

Βελτιστοποίηση

zfs set compression=on data

Αυτή η εντολή επιτρέπει την υποστήριξη συμπίεσης ZFS. Η συμπίεση χρησιμοποιεί ελάχιστη ισχύ CPU, αλλά μπορεί να βελτιώσει σημαντικά την απόδοση I/O, γι' αυτό συνιστάται πάντα.

zfs set relatime=on data

Με αυτήν την εντολή μειώνουμε τον αριθμό των ενημερώσεων σε atimeγια να μειώσετε τη δημιουργία IOPS κατά την πρόσβαση σε αρχεία.

Από προεπιλογή, το ZFS σε Linux χρησιμοποιεί το 50% της φυσικής μνήμης για το ARC. Στην περίπτωσή μου, όταν ο συνολικός αριθμός αρχείων είναι μικρός, αυτό μπορεί να αυξηθεί με ασφάλεια στο 90% αφού δεν θα εκτελούνται άλλες εφαρμογές στον διακομιστή.

$ cat /etc/modprobe.d/zfs.conf 
options zfs zfs_arc_max=14378074112

Στη συνέχεια χρησιμοποιώντας arc_summary.py Μπορείτε να επαληθεύσετε ότι οι αλλαγές έχουν τεθεί σε ισχύ:

$ python arc_summary.py
...
ARC Size:				100.05%	11.55	GiB
	Target Size: (Adaptive)		100.00%	11.54	GiB
	Min Size (Hard Limit):		0.27%	32.00	MiB
	Max Size (High Water):		369:1	11.54	GiB
...

Ρύθμιση επαναλαμβανόμενων εργασιών

χρησιμοποίησα systemd-zpool-scrub για να ρυθμίσετε τους χρονοδιακόπτες συστήματος ώστε να εκτελούν εκκαθάριση μία φορά την εβδομάδα και zfs-auto-snapshot για αυτόματη δημιουργία στιγμιότυπων κάθε 15 λεπτά, 1 ώρα και 1 ημέρα.

Εγκατάσταση του Netatalk

nettalk είναι μια εφαρμογή ανοιχτού κώδικα του AFP (Πρωτόκολλο αρχειοθέτησης Apple). ΕΠΟΜΕΝΟ επίσημες οδηγίες εγκατάστασης για το CentOS, έλαβα κυριολεκτικά ένα συναρμολογημένο και εγκατεστημένο πακέτο RPM σε λίγα μόλις λεπτά.

Ρύθμιση διαμόρφωσης

$ cat /etc/netatalk/afp.conf
[datong@Titan ~]$ cat /etc/netatalk/afp.conf 
;
; Netatalk 3.x configuration file
;

[Global]
; Global server settings
mimic model = TimeCapsule6,106

; [Homes]
; basedir regex = /home

; [My AFP Volume]
; path = /path/to/volume

; [My Time Machine Volume]
; path = /path/to/backup
; time machine = yes

[Datong's Files]
path = /mnt/data/datong
valid users = datong

[Datong's Time Machine Backups]
path = /mnt/data/datong_time_machine_backups
time machine = yes
valid users = datong

Σημειώστε ότι vol dbnest είναι μια σημαντική βελτίωση στην περίπτωσή μου, καθώς από προεπιλογή το Netatalk εγγράφει τη βάση δεδομένων CNID στη ρίζα του συστήματος αρχείων, κάτι που δεν ήταν καθόλου επιθυμητό αφού το κύριο σύστημα αρχείων μου τρέχει σε USB και επομένως είναι σχετικά αργό. Ανάβοντας vol dbnest έχει ως αποτέλεσμα την αποθήκευση της βάσης δεδομένων στη ρίζα Volume, η οποία σε αυτή την περίπτωση ανήκει στο ZFS pool και είναι ήδη μια τάξη μεγέθους πιο παραγωγική.

Ενεργοποίηση θυρών στο τείχος προστασίας

$ sudo firewall-cmd --permanent --zone=public --add-service=mdns
$ sudo firewall-cmd --permanent --zone=public --add-port=afpovertcp/tcp

sudo firewall-cmd --permanent --zone=public --add-port=afpovertcp/tcp
Εάν όλα έχουν ρυθμιστεί σωστά, το μηχάνημά σας θα πρέπει να εμφανίζεται στο Finder και το Time Machine θα πρέπει επίσης να λειτουργεί.

Επιπρόσθετες ρυθμίσεις
SMART παρακολούθηση

Συνιστάται να παρακολουθείτε την κατάσταση των δίσκων σας για να αποτρέψετε την αστοχία του δίσκου.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Daemon για UPS

Παρακολουθεί τη φόρτιση του UPS APC και απενεργοποιεί το σύστημα όταν η φόρτιση είναι εξαιρετικά χαμηλή.

$ sudo yum install epel-release
$ sudo yum install apcupsd
$ sudo systemctl enable apcupsd

Αναβάθμιση υλικού

Μια εβδομάδα μετά τη ρύθμιση του συστήματος, άρχισα να ανησυχώ ολοένα και περισσότερο για τη μνήμη μη ECC του διακομιστή. Επιπλέον, στην περίπτωση του ZFS, η πρόσθετη μνήμη για buffering θα είναι πολύ χρήσιμη. Έτσι επέστρεψα στο Amazon όπου αγόρασα 2x Kingston DDR3 8GB ECC RAM για 80 $ το καθένα και αντικατέστησα τη μνήμη RAM επιφάνειας εργασίας που είχε εγκαταστήσει ο προηγούμενος ιδιοκτήτης. Το σύστημα εκκινήθηκε την πρώτη φορά χωρίς προβλήματα και βεβαιώθηκα ότι η υποστήριξη ECC ήταν ενεργοποιημένη:

$ dmesg | grep ECC
[   10.492367] EDAC amd64: DRAM ECC enabled.

Αποτέλεσμα

Έμεινα πολύ ευχαριστημένος με το αποτέλεσμα. Τώρα μπορώ να κρατάω συνεχώς απασχολημένη τη σύνδεση LAN 1 Gbps του διακομιστή αντιγράφοντας αρχεία και το Time Machine λειτουργεί άψογα. Έτσι, συνολικά, είμαι ευχαριστημένος με τη ρύθμιση.

Το συνολικό κόστος:

  1. 1 * HP ProLiant N40L = 75 $
  2. 2 * 8 GB ECC RAM = 174 $
  3. 4 * WD Red 3 TB HDD = 440 $

Σε συνολικά = $ 689

Τώρα μπορώ να πω ότι η τιμή άξιζε τον κόπο.

Δημιουργείτε τους δικούς σας διακομιστές NAS;

Δημιουργία ενός ανέξοδου συστήματος Linux Home NAS

Δημιουργία ενός ανέξοδου συστήματος Linux Home NAS

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο