Membina sistem NAS rumah yang murah di Linux

Membina sistem NAS rumah yang murah di Linux

Saya, seperti ramai pengguna MacBook Pro yang lain, berhadapan dengan masalah memori dalaman yang tidak mencukupi. Untuk lebih tepat, rMBP yang saya gunakan setiap hari dilengkapi dengan SSD dengan kapasiti hanya 256GB, yang, secara semula jadi, tidak mencukupi untuk masa yang lama.

Dan apabila, di atas segala-galanya, saya mula merakam video semasa penerbangan saya, keadaan menjadi lebih teruk. Jumlah rakaman yang dirakam selepas penerbangan sedemikian ialah 50+ GB, dan SSD 256GB saya yang lemah tidak lama lagi terisi, memaksa saya membeli pemacu 1TB luaran. Walau bagaimanapun, selepas satu tahun, ia tidak lagi dapat mengendalikan jumlah data yang saya hasilkan, apatah lagi kekurangan redundansi dan sandaran menjadikannya tidak sesuai untuk mengehos maklumat penting.

Jadi, pada satu ketika saya memutuskan untuk membina NAS yang besar dengan harapan sistem ini akan bertahan sekurang-kurangnya beberapa tahun tanpa memerlukan peningkatan yang lain.

Saya menulis artikel ini terutamanya sebagai peringatan tentang apa yang saya lakukan dan bagaimana saya melakukannya sekiranya saya perlu melakukannya sekali lagi. Saya berharap ia akan berguna untuk anda juga jika anda memutuskan untuk melakukan perkara yang sama.

Mungkin lebih mudah untuk membeli?

Jadi, kita tahu apa yang kita mahu dapatkan, persoalannya tetap: bagaimana?

Saya mula-mula melihat penyelesaian komersial dan melihat khususnya pada Synology, yang sepatutnya menyediakan sistem NAS gred pengguna terbaik di pasaran. Namun, kos perkhidmatan ini ternyata agak tinggi. Sistem 4-bay termurah berharga $300+ dan tidak termasuk cakera keras. Di samping itu, pengisian dalaman kit itu sendiri tidak begitu mengagumkan, yang mempersoalkan prestasi sebenarnya.

Kemudian saya berfikir: mengapa tidak membina pelayan NAS sendiri?

Mencari pelayan yang sesuai

Jika anda akan membina pelayan sedemikian, maka pertama sekali anda perlu mencari perkakasan yang betul. Pelayan yang digunakan sepatutnya agak sesuai untuk binaan ini, kerana kami tidak memerlukan banyak prestasi untuk tugas storan. Antara perkara yang perlu, kita harus perhatikan sejumlah besar RAM, beberapa penyambung SATA dan kad rangkaian yang baik. Memandangkan pelayan saya akan bekerja di tempat kediaman tetap saya, tahap bunyi juga penting.

Saya memulakan carian saya di eBay. Walaupun saya menemui banyak Dell PowerEdge R410/R210 terpakai di sana dengan harga di bawah $100, mempunyai pengalaman bekerja di bilik pelayan, saya tahu bahawa unit 1U ini membuat terlalu banyak bunyi dan tidak sesuai untuk kegunaan rumah. Sebagai peraturan, pelayan menara selalunya kurang bising, tetapi, malangnya, terdapat sedikit daripada mereka di eBay, dan mereka semua sama ada mahal atau kurang kuasa.

Tempat seterusnya untuk melihat ialah Craiglist, di mana saya menemui seseorang yang menjual HP ProLiant N40L terpakai dengan hanya $75! Saya biasa dengan pelayan ini, yang biasanya berharga sekitar $300 walaupun digunakan, jadi saya menghantar e-mel kepada penjual dengan harapan bahawa iklan itu masih aktif. Setelah mengetahui bahawa ini berlaku, saya, tanpa berfikir dua kali, menuju ke San Mateo untuk mengambil pelayan ini, yang pada pandangan pertama pasti menggembirakan saya. Ia mempunyai kehausan yang minimum dan kecuali sedikit habuk, segala-galanya bagus.

Membina sistem NAS rumah yang murah di Linux
Foto pelayan, sejurus selepas pembelian

Berikut ialah spesifikasi untuk kit yang saya beli:

  • CPU: AMD Turion(tm) II Neo N40L Pemproses Dwi Teras (64-bit)
  • RAM: 8 GB RAM bukan ECC (dipasang oleh pemilik sebelumnya)
  • flash: Pemacu USB 4 GB
  • Penyambung SATA:4+1
  • NIC: 1 Gbps on-board NIC

Tidak perlu diperkatakan, walaupun sudah berusia beberapa tahun, spesifikasi pelayan ini masih unggul berbanding kebanyakan pilihan NAS di pasaran, terutamanya dari segi RAM. Tidak lama kemudian, saya juga menaik taraf kepada 16 GB ECC dengan saiz penimbal yang lebih besar dan perlindungan data yang lebih tinggi.

Memilih cakera keras

Kini kami mempunyai sistem kerja yang sangat baik dan yang tinggal hanyalah memilih pemacu keras untuknya. Jelas sekali, untuk $75 itu saya hanya mendapat pelayan itu sendiri tanpa HDD, yang tidak mengejutkan saya.

Selepas melakukan sedikit penyelidikan, saya mendapati bahawa HDD Merah WD paling sesuai untuk menjalankan sistem NAS 24/7. Untuk membelinya, saya beralih ke Amazon, di mana saya membeli 4 salinan 3 TB setiap satu. Pada asasnya, anda boleh menyambungkan mana-mana HDD yang anda suka, tetapi pastikan ia mempunyai kapasiti dan kelajuan yang sama. Ini akan membantu anda mengelakkan kemungkinan masalah prestasi RAID dalam jangka masa panjang.

Persediaan Sistem

Saya fikir ramai yang akan menggunakan sistem untuk binaan NAS mereka FreeNAS, dan tidak ada yang salah dengan itu. Walau bagaimanapun, walaupun terdapat kemungkinan untuk memasang sistem ini pada pelayan saya, saya lebih suka menggunakan CentOS, kerana sistem ZFS pada Linux pada mulanya disediakan untuk persekitaran pengeluaran, dan secara amnya, mengurus pelayan Linux lebih biasa kepada saya. Selain itu, saya tidak berminat dengan antara muka dan ciri mewah yang disediakan oleh FreeNAS - tatasusunan RAIDZ dan perkongsian AFP sudah memadai untuk saya.

Memasang CentOS pada USB agak mudah - hanya tentukan USB sebagai sumber but, dan semasa pelancaran wizard pemasangan akan membimbing anda melalui semua peringkatnya.

binaan RAID

Selepas berjaya memasang CentOS, saya juga memasang ZFS pada Linux mengikut senarai yang disenaraikan langkah di sini.

Setelah proses ini selesai, saya memuatkan modul ZFS Kernel:

$ sudo modprobe zfs

Dan mencipta tatasusunan RAIDZ1 menggunakan arahan 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

Sila ambil perhatian bahawa di sini saya menggunakan ID pemacu keras dan bukannya nama paparannya (sdx) untuk mengurangkan kemungkinan mereka gagal dipasang selepas but disebabkan oleh perubahan huruf.

Saya juga menambah cache ZIL dan L2ARC yang berjalan pada SSD berasingan, membahagikan SSD itu kepada dua partition: 5GB untuk ZIL dan selebihnya untuk L2ARC.

Bagi RAIDZ1, ia boleh menahan 1 kegagalan cakera. Ramai yang berpendapat bahawa pilihan kumpulan ini tidak boleh digunakan kerana kemungkinan cakera kedua gagal semasa proses membina semula RAID, yang boleh menyebabkan kehilangan data. Saya mengabaikan pengesyoran ini, kerana saya kerap membuat salinan sandaran data penting pada peranti jauh, dan kegagalan malah keseluruhan tatasusunan hanya boleh menjejaskan ketersediaan data, tetapi bukan keselamatannya. Jika anda tidak mempunyai keupayaan untuk membuat sandaran, maka adalah lebih baik untuk menggunakan penyelesaian seperti RAIDZ2 atau RAID10.

Anda boleh mengesahkan bahawa penciptaan kolam berjaya dengan menjalankan:

$ sudo zpool status

ΠΈ

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

Secara lalai, ZFS memasang kolam yang baru dibuat terus ke /, yang secara amnya tidak diingini. Anda boleh menukar ini dengan menjalankan:

zfs set mountpoint=/mnt/data data

Dari sini anda boleh memilih untuk membuat satu atau lebih set data untuk menyimpan data. Saya mencipta dua, satu untuk sandaran Time Machine dan satu untuk storan fail kongsi. Saya mengehadkan saiz set data Mesin Masa kepada kuota 512 GB untuk mengelakkan pertumbuhannya yang tidak berkesudahan.

Pengoptimuman

zfs set compression=on data

Perintah ini membolehkan sokongan mampatan ZFS. Mampatan menggunakan kuasa CPU yang minimum, tetapi boleh meningkatkan daya pemprosesan I/O dengan ketara, jadi sentiasa disyorkan.

zfs set relatime=on data

Dengan arahan ini kami mengurangkan bilangan kemas kini kepada atimeuntuk mengurangkan penjanaan IOPS apabila mengakses fail.

Secara lalai, ZFS pada Linux menggunakan 50% memori fizikal untuk ARC. Dalam kes saya, apabila jumlah fail adalah kecil, ini boleh ditingkatkan dengan selamat kepada 90% kerana tiada aplikasi lain akan berjalan pada pelayan.

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

Kemudian menggunakan arc_summary.py Anda boleh mengesahkan bahawa perubahan telah berkuat kuasa:

$ 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
...

Menyediakan tugasan berulang

sudah biasa systemd-zpool-scrub untuk mengkonfigurasi pemasa systemd untuk melakukan pembersihan sekali seminggu dan zfs-auto-snapshot untuk membuat syot kilat secara automatik setiap 15 minit, 1 jam dan 1 hari.

Memasang Netatalk

nettalk ialah pelaksanaan sumber terbuka AFP (Protokol Pemfailan Apple). Mengikuti arahan pemasangan rasmi untuk CentOS, saya benar-benar menerima pakej RPM yang dipasang dan dipasang hanya dalam beberapa minit.

Persediaan konfigurasi

$ 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

Sila ambil perhatian bahawa vol dbnest adalah peningkatan besar dalam kes saya, kerana secara lalai Netatalk menulis pangkalan data CNID ke akar sistem fail, yang sama sekali tidak diingini kerana sistem fail utama saya berjalan pada USB dan oleh itu agak perlahan. Menghidupkan vol dbnest mengakibatkan penjimatan pangkalan data dalam akar Volume, yang dalam kes ini tergolong dalam kumpulan ZFS dan sudah menjadi susunan magnitud yang lebih produktif.

Mendayakan port dalam Firewall

$ 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
Jika semuanya telah dikonfigurasikan dengan betul, mesin anda akan muncul dalam Finder, dan Mesin Masa akan berfungsi juga.

Tetapan tambahan
Pemantauan SMART

Adalah disyorkan untuk memantau status cakera anda untuk mengelakkan kegagalan cakera.

$ sudo yum install smartmontools
$ sudo systemctl start smartd

Daemon untuk UPS

Memantau cas APC UPS dan mematikan sistem apabila cas menjadi sangat rendah.

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

Peningkatan perkakasan

Seminggu selepas menyediakan sistem, saya mula menjadi semakin bimbang tentang memori bukan ECC pelayan. Di samping itu, dalam kes ZFS, memori tambahan untuk penimbalan akan sangat berguna. Jadi saya kembali ke Amazon di mana saya membeli 2x Kingston DDR3 8GB ECC RAM untuk $80 setiap satu dan menggantikan RAM desktop yang dipasang oleh pemilik sebelumnya. Sistem but buat kali pertama tanpa sebarang masalah, dan saya memastikan sokongan ECC diaktifkan:

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

Keputusan

Saya sangat gembira dengan hasilnya. Kini saya boleh sentiasa memastikan sambungan LAN 1Gbps pelayan sibuk dengan menyalin fail dan Mesin Masa berfungsi dengan sempurna. Jadi, secara keseluruhan, saya gembira dengan persediaan.

Jumlah kos:

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

Dalam jumlah = $ 689

Sekarang saya boleh katakan bahawa harganya berbaloi.

Adakah anda membuat pelayan NAS anda sendiri?

Membina sistem NAS rumah yang murah di Linux

Membina sistem NAS rumah yang murah di Linux

Sumber: www.habr.com

Tambah komen