cmc/cleberg.net
My personal web garden & blog.
clone: git clone https://gitbay.org/cmc/cleberg.net.git
main: content/blog/2022-11-27-server-build.org · raw
1#+date: [2022-11-27 Sun 00:00:00]
2#+title: Server Build: Rack Hardware, Consumer Parts
3#+description: How I built a rack-mounted server with consumer parts.
4#+slug: server-build
5#+filetags: :linux:
6
7* The Dilemma
8
9For years, I have been using desktops and a Raspberry Pi as the backbone of my
10homelab. I have always wanted to move toward a single dedicated server that
11could handle all of my tasks, but was often put off by the complexity of the
12choices (and financial roadblocks at some times).
13
14However, after purchasing a small server rack this past year, I have been
15researching to see what kind of rack-mounted server I could buy. I initially
16bought a Dell R720XD loaded up with everything I could ever want in a server -
17but I did not care for it. It was far too loud, and the age of the CPU/RAM was
18something I wanted to improve upon.
19
20After returning the R720XD, I decided that I wanted to build my own server with
21modern, consumer-grade PC components. This time, I am very happy with the
22results of my server.
23
24* Components
25
26I'll start by listing all the components I used for this server build:
27
28- *Case*: [[https://www.rosewill.com/rosewill-rsv-r4100u-black/p/9SIA072GJ92825][Rosewill RSV-R4100U 4U Server Chassis Rackmount Case]]
29- *Motherboard*: [[https://nzxt.com/product/n7-b550][NZXT B550]]
30- *CPU*: AMD Ryzen 7 5700G with Radeon Graphics
31- *GPU*: N/A - I specifically chose one of the few AMD CPUs that support onboard
32 graphics.
33- *RAM*: 64GB RAM (2x32GB) /Max of 128GB RAM on this motherboard/
34- *Boot Drive*: Western Digital 500GB M.2 NVME SSD
35- *HDD Bay*:
36 - 10TB WD White /(shucked, moved from previous server)/
37 - 8TB WD White /(shucked, moved from previous server)/
38 - 2 x 8TB WD Red Plus /(Black Friday lined up perfectly with this build, so I
39 grabbed two of these)/
40- *PSU*: Corsair RM850 PSU
41- *Extras*:
42 - Corsair TM3Q Thermal Paste
43 - Noctua 120mm fan /(replacement for front case fan)/
44 - 2 x Noctua 80mm fans /(replacement for rear case fans)/
45 - CableMatters 6Gbps SATA Cables
46
47* Building the Server
48
49This took quite a while for me to build (in my opinion of time), totaling around
503 hours from start to finish. The case has some peculiar construction, so you
51have to completely remove the ODD & HDD cages to install the motherboard and
52other components first.
53
54Now, I've never built a computer of any kind before, so I was quite nervous.
55Personally, the only challenging part was getting the CPU cooler to screw into
56the motherboard without sliding the thermal paste around too much underneath.
57I'm still not entirely sure if I did a great job of it, but nothing's broken
58yet.
59
60The main components were all fine and simple. However, installing the hard
61drives is slightly tedious as I need to power off the server and completely
62unscrew the HDD cage to install or remove any drives. Additionally, the drives
63are screwed directly into the metal cage with small screws, which are quite a
64bit different from the HDD trays I'm used to in other machines.
65
66Seeing that the cases with hot-swap bays were 3-4x the price, I'm okay dealing
67with the tedium of removing the cage to install new drives.
68
69* Software
70
71I'm not going to dive into the software as I have done so in other recent posts.
72However, I wanted to note that I am using Alpine Linux on this server and
73hosting most services inside Docker. No virtual machines (VMs) and very few
74bare-metal services.
75
76* The Results
77
78How did my build turn out? Well, after migrating my other servers and their
79services over, I found that my server is blazing fast. The heaviest of my
80applications, Plex, is handled with ease. Even 4k streaming seems to be
81effortless.
82
83I am very happy with the results and will likely continue to improve on this
84server as the years go by rather than buying another used server online.
85
86** Mistakes I Made
87
88This post wouldn't be complete unless I wrote about the mistakes I made while
89building. The only real mistake I made beyond a "whoops I dropped a screw"
90related to airflow and fan direction.
91
92While installing the two new hard drives that showed up on 2022-11-30 and
93getting ready to install the case in my rack, I noticed that the hard drive
94temperatures were quite high.
95
96I used the =smartctl= command for each of my drives (=/dev/sda= through
97=/dev/sdd=):
98
99#+begin_src sh
100doas smartctl -a /dev/sda | grep Temperature_Celsius
101#+end_src
102
103The results were unusual - all four drives were idling at ~44-46 degrees
104Celsius. The only drive that was cooler was my 10TB drive, which was at 38
105degrees Celsius. I noted that this 10TB drive was also closest to the case fan.
106
107#+begin_src sh
108ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
109# /dev/sda
110194 Temperature_Celsius 0x0002 147 147 000 Old_age Always - 44 (Min/Max 22/46)
111# /dev/sdb
112194 Temperature_Celsius 0x0002 141 141 000 Old_age Always - 46 (Min/Max 21/48)
113# /dev/sdc
114194 Temperature_Celsius 0x0002 144 144 000 Old_age Always - 45 (Min/Max 19/61)
115# /dev/sdd
116194 Temperature_Celsius 0x0002 171 171 000 Old_age Always - 38 (Min/Max 14/56)
117#+end_src
118
119After looking to see if I could fit more fans into the case, I noticed that the
120120mm fan used for intake from the front of the case was actually pushing air
121out of the case by mistake. This fan sits right in front of the hard drive bay.
122
123Once I flipped the fan around to act as an intake fan, the temperatures dropped
124immediately! They are now idling at ~31-33 degrees Celsius. A single fan
125spinning the wrong way caused my drives to idle 10-15 degrees higher than they
126should have.
127
128#+begin_src sh
129ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
130# /dev/sda
131194 Temperature_Celsius 0x0002 209 209 000 Old_age Always - 31 (Min/Max 14/56)
132# /dev/sdb
133194 Temperature_Celsius 0x0002 196 196 000 Old_age Always - 33 (Min/Max 19/61)
134# /dev/sdc
135194 Temperature_Celsius 0x0002 203 203 000 Old_age Always - 32 (Min/Max 21/48)
136# /dev/sdd
137194 Temperature_Celsius 0x0002 196 196 000 Old_age Always - 33 (Min/Max 22/46)
138#+end_src
139
140This was a silly error to make, but I'm glad I found it today before I screwed
141the case into the rack and made things a lot more tedious to fix.