<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hardware on blog.iankulin.com</title><link>https://blog.iankulin.com/tags/hardware/</link><description>Recent content in Hardware on blog.iankulin.com</description><generator>Hugo</generator><language>en-AU</language><lastBuildDate>Mon, 28 Aug 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.iankulin.com/tags/hardware/index.xml" rel="self" type="application/rss+xml"/><item><title>How to install M.2 SSD in HP G2 800 Mini</title><link>https://blog.iankulin.com/how-to-install-m-2-ssd-in-hp-g2-800-mini/</link><pubDate>Mon, 28 Aug 2023 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/how-to-install-m-2-ssd-in-hp-g2-800-mini/</guid><description>&lt;img src="https://blog.iankulin.com/images/img_5821-copy.jpg" width="512" alt=""&gt;
&lt;p&gt;As part of my strategy to not worry about the &lt;a href="https://blog.iankulin.com/sdd-wearout-numbers/"&gt;slightly dodgy SMART reporting&lt;/a&gt; on the SDD&amp;rsquo;s in my HP Elitedesk G2 800 Mini Proxmox nodes, I&amp;rsquo;d decided to make use of the full sized &lt;a href="https://en.wikipedia.org/wiki/M.2"&gt;M.2&lt;/a&gt; slot to install 256GB NVME drives. That way I can boot from those, and have the SSD&amp;rsquo;s running &lt;a href="https://arstechnica.com/information-technology/2020/05/zfs-101-understanding-zfs-storage-and-performance/"&gt;ZFS&lt;/a&gt; which allows &lt;em&gt;&lt;a href="https://openzfs.github.io/openzfs-docs/man/8/zpool-scrub.8.html"&gt;scrubbing&lt;/a&gt;&lt;/em&gt; to check the integrity of all the data. My VM disks can live on this drive.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://support.hp.com/au-en/product/hp-elitedesk-800-35w-g2-desktop-mini-pc/7633266"&gt;G2 800 Mini&lt;/a&gt; has two M.2 slots, a 2230 (M.2 sizes are &lt;code&gt;wwll&lt;/code&gt; where &lt;code&gt;ww&lt;/code&gt; is width in mm, and &lt;code&gt;ll&lt;/code&gt; is length in mm) for the wireless/bluetooth adaptor and a 2280 for storage. These slots are under the SSD drive cage.&lt;/p&gt;
&lt;h2 id="steps"&gt;Steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Undo the large finger-operable screw on the back of the case, then slide the case off in the direction of the front of the unit.&lt;/li&gt;
&lt;li&gt;Unplug the drive SATA connector&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="https://blog.iankulin.com/images/img_5818.jpg" width="800" alt=""&gt;
&lt;ul&gt;
&lt;li&gt;At the right side of the SSD (when the machine is orientated per the photo above) is a lever that can be pushed a little to the right to allow the drive to slide back and be lifted out.&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s three giant screws holding the drive cage in numbered 1, 2 &amp;amp; 3. There&amp;rsquo;s also several smaller screws with numbers - ignore them. The ones you are looking for have a torx in the middle, but also a slot for an ordinary flat blade screwdriver. If you can only find two, that&amp;rsquo;s probably because the drive&amp;rsquo;s SATA connector is covering it up.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="https://blog.iankulin.com/images/img_5829.jpg" width="800" alt=""&gt;
&lt;ul&gt;
&lt;li&gt;Once the drive cage is removed and set aside, you&amp;rsquo;ll be able to see the two M.2 slots. The NVME drive slots in like SODIMM memory - sort of sprung up on the end away from the connector. I didn&amp;rsquo;t like the look of those lose wires - but I assume they are for the wifi or bluetooth antennas.&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="https://blog.iankulin.com/images/img_5821-copy.jpg" width="512" alt=""&gt;
&lt;ul&gt;
&lt;li&gt;Wriggle it in, then push the end down and secure it with the little M.2 screws. You did remember to &lt;a href="https://www.ebay.com.au/itm/254101897159?hash=item3b29a73fc7:g:Wi4AAOSw6JpfdRiw&amp;amp;amdata=enc%3AAQAIAAABAFQS9v%2BRrt%2FNj4OpgTFaOvObhlzxvwZi%2BTxcYYqqbid7A6%2BkHvM6T3%2BDJ%2FegE3E9k3OH8bnHIBDJATYnIeJb9db%2FcKPWZP%2FAeNLDhwPi%2FDebbCZOJmhrSd3j0GRYLzE03YK%2F8DvMMAeLjPWLUO6mqZSUv%2FB7%2FuOs4Yz%2F5%2Bj6atvgCb0afWi9igSdklHlr6N1gqWN7DSb9WrCi2Dx62LQdasjvyrTNm%2BeDGzRj1ADzEJTG1oyJkOto6DOY2cUiGM5gLssMknszOh25RhBgXrNLf%2BUFnzUI2%2BOr5fvcamWs7zxKJJcndcMYOzbm3v%2B243SsWoGymttCsbsWi%2FLRekQRpQ%3D%7Ctkp%3ABFBMvrXWjLBi"&gt;order those screws&lt;/a&gt;, right? My $20 Samsung PM981a 256GB drives didn&amp;rsquo;t come with any, but perhaps fancy ones do.&lt;/li&gt;
&lt;li&gt;Then, as 1970 &lt;a href="https://haynes.com/en-au/holden/kingswood/1968-1971?part=04085&amp;amp;selector=print&amp;amp;gclid=EAIaIQobChMI3u6DqfKjgAMVLtcWBR2U7gT2EAQYBiABEgIgmfD_BwE"&gt;Greggory&amp;rsquo;s workshop manuals&lt;/a&gt; used to say, &amp;ldquo;&lt;em&gt;Assembly is the reverse of the disassembly steps with attention to the following:&lt;/em&gt;&amp;rdquo;. In this case, the attention would be towards being gentle with that SSD ribbon connector.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>HDD Swap on A1278 MacBook Pro</title><link>https://blog.iankulin.com/hdd-swap-on-a1278-macbook-pro/</link><pubDate>Wed, 10 May 2023 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/hdd-swap-on-a1278-macbook-pro/</guid><description>&lt;p&gt;My MacBook died, I guess about three years ago. It was randomly difficult for a week or so, but then just behaving as if it had no hard drive at all. It&amp;rsquo;s been in a drawer ever since waiting for me to replace the hard drive and see if I could sell it, which I never quite got to.&lt;/p&gt;
&lt;p&gt;I mentioned a while ago that I&amp;rsquo;d &lt;a href="https://blog.iankulin.com/linux-on-hp-mini-110/"&gt;borrowed an old Atom powered HP Mini 110&lt;/a&gt; to play with a Linux desktop machine, partly for fun &amp;amp; learning, and partly for a first-class SPICE experience (also fun). Meanwhile I&amp;rsquo;ve got an old but still sexy Intel MacBook Pro sitting in a drawer - that doesn&amp;rsquo;t make sense!&lt;/p&gt;
&lt;p&gt;So I ordered an 2.5&amp;quot; SDD in order to resurrect the MacBook. This era (2012) of MacBooks are quite repairable - even the RAM is just regular SODIMM.&lt;/p&gt;
&lt;h3 id="instructions"&gt;Instructions&lt;/h3&gt;
&lt;p&gt;Lay it upside down and remove the screws with a tiny (I guess #00) Philips screwdriver. Note that the screws don&amp;rsquo;t come out perpendicular to the table you&amp;rsquo;re working on - the top four almost do, but the others are perpendicular to the tangent at the point of the screw hole. ie, the case is curved, so take that into account. It doesn&amp;rsquo;t matter much for removing them, but now is the time to notice.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve got the laptop turned around so you can read the writing, then the long screws are the three top right ones. If you lay them out in the order you remove them, you won&amp;rsquo;t have to remember that.&lt;/p&gt;
&lt;img src="https://blog.iankulin.com/images/img_5087.jpg" width="1008" alt=""&gt;
&lt;img src="https://blog.iankulin.com/images/img_5088.jpg" width="1008" alt=""&gt;
&lt;p&gt;Pick the cover up from the back and it just lifts off.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.iankulin.com/images/img_5067.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;The HDD is in the bottom right corner there. It&amp;rsquo;s locked in with that black plastic retainer you can see above the drive. Use your little Philips screwdriver to undo the two screws holding it in place (they don&amp;rsquo;t come right out), then lift out the retainer and put it down somewhere carefully - you will need to put it back the right way later.&lt;/p&gt;
&lt;img src="https://blog.iankulin.com/images/img_5069.jpg" width="1008" alt=""&gt;
&lt;img src="https://blog.iankulin.com/images/img_5072.jpg" width="1008" alt=""&gt;
&lt;p&gt;That plastic tab is for lifting the far side of the drive out. Only lift it far enough to loosen the remove the SATA plug from the drive, then lift the whole drive out.&lt;/p&gt;
&lt;img src="https://blog.iankulin.com/images/img_5073.jpg" width="1008" alt=""&gt;
&lt;img src="https://blog.iankulin.com/images/img_5075.jpg" width="1008" alt=""&gt;
&lt;p&gt;Once it&amp;rsquo;s unplugged, the drive will lift away from the bottom.&lt;/p&gt;
&lt;p&gt;There are four little lug things screwed into the mounting screw holes on the drive. You&amp;rsquo;ll need to remove them and shift them over to the new drive. They nestle into the little round shock mounts at the case edge. You need a tiny torx driver for those lugs. I&amp;rsquo;m not sure what size, but the driver I bought for taking Nokia 5110&amp;rsquo;s apart fits perfectly.&lt;/p&gt;
&lt;img src="https://blog.iankulin.com/images/img_5081.jpg" width="1008" alt=""&gt;
&lt;p&gt;Re-installation is just the opposite of taking it all apart. Be gentle with the SATA connector. I tried moving that sticky tab over to the new drive, but it wasn&amp;rsquo;t interested in re-sticking. So I McGyvered a bit of packing tape.&lt;/p&gt;
&lt;img src="https://blog.iankulin.com/images/img_5085.jpg" width="1008" alt=""&gt;</description></item><item><title>Linux Shell Script for Temperature Logging</title><link>https://blog.iankulin.com/linux-shell-script-for-temperature-logging/</link><pubDate>Thu, 27 Apr 2023 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/linux-shell-script-for-temperature-logging/</guid><description>&lt;p&gt;A potential solution to my concern about the either perfect, or nearly dead, SSD would be to add a NVMe disk to the M.2 slot in the HP Elitedesk 800 G2&amp;rsquo;s. I&amp;rsquo;d use those to boot from and run Proxmox, then the existing SSD&amp;rsquo;s on each node in the cluster would just be part of the CephFS pool that has some redundancy built into it and hosts the VMs that are not using the NAS for their storage.&lt;/p&gt;
&lt;p&gt;These &amp;lsquo;gumstick&amp;rsquo; NVMe drives are remarkably good value in the smaller sizes at the moment, with Samsung 250GB NVMe&amp;rsquo;s costing less than a pack of cigarettes in Australia.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.iankulin.com/images/screen-shot-2023-04-20-at-7.02.57-pm.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;A small concern I&amp;rsquo;ve got about that, and about the (very cute looking) way I&amp;rsquo;ve just got the computers all stacked on top of each other, is about the internal temperatures. I noticed SSD temperatures in the SMART data I was looking the other day, and I&amp;rsquo;ve seen CPU temperatures somewhere, so this data is available. So I set out on a quest to log some of it so I could do a before and after (NMVe installation) look at the temperatures.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.pyroelectro.com/tutorials/cron-automation/check.html"&gt;This article&lt;/a&gt; was very close to what I wanted - a shell script to run in a cron job that would log the drive and CPU temperatures. The script goes a fair way beyond that, but my main issue was that it uses a couple of packages - &lt;code&gt;sensors&lt;/code&gt;, and &lt;code&gt;hddtemp&lt;/code&gt;. I like to avoid dependencies if I can, but I also thought the temp data was pretty simple and is probably just sitting in the &lt;code&gt;/sys/&lt;/code&gt; directory tree somewhere.&lt;/p&gt;
&lt;p&gt;That sort of turned out to be true. In /sys/class/hwmon/ there&amp;rsquo;s a couple of directories (actually symlinks) for bits of hardware that can be monitored for temperature, and in those directories are text files with some values, the ones we&amp;rsquo;re interested in being &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;temp1_input&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root@pve-dev1:~# tree /sys/class/hwmon/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/sys/class/hwmon/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── hwmon0 -&amp;gt; ../../devices/virtual/thermal/thermal_zone0/hwmon0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── hwmon1 -&amp;gt; ../../devices/platform/coretemp.0/hwmon/hwmon1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── hwmon2 -&amp;gt; ../../devices/pci0000:00/0000:00:17.0/ata1/host0/target0:0:0/0:0:0:0/hwmon/hwmon2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;3 directories, 0 files
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root@pve-dev1:~# ls /sys/class/hwmon/hwmon0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;device name power subsystem temp1_input uevent
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root@pve-dev1:~# cat /sys/class/hwmon/hwmon0/name /sys/class/hwmon/hwmon0/temp1_input
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pch_skylake
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;45500
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://commons.wikimedia.org/w/index.php?curid=9817206"&gt;&lt;img src="https://blog.iankulin.com/images/intel_5_series_architecture.png" width="232" alt=""&gt;&lt;/a&gt;
&lt;em&gt;Intel 5 architecture - Anas hashmi&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The first two are temperatures of the &lt;a href="https://commons.wikimedia.org/w/index.php?curid=9817206"&gt;Platform Controller Hub (PCH)&lt;/a&gt; and actual CPU. Both of these values were already just sitting there.&lt;/p&gt;
&lt;p&gt;The third value, for the SSD temperature didn&amp;rsquo;t appear until added by running &lt;code&gt;modprobe drivetemp&lt;/code&gt; to load a kernel module.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the three values I want to log sorted then, but how to go about it? &lt;a href="http://www.pyroelectro.com/tutorials/cron-automation/check.html"&gt;That first article&lt;/a&gt; I mentioned had a shell script using printf() to output some values to a log file, then the script was triggered by a cron job. Two things I&amp;rsquo;ve never done before, so let&amp;rsquo;s dive in. Here&amp;rsquo;s the finished code.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.iankulin.com/images/screen-shot-2023-04-20-at-8.32.11-pm.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;I wrote MS-DOS batch files in the 1980s so this wasn&amp;rsquo;t completely alien to me. A few points were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Everyone else&amp;rsquo;s shell scripts start with &lt;code&gt;#!/bin/bash&lt;/code&gt; so I assume that&amp;rsquo;s compulsory. Other lines starting with &lt;code&gt;#&lt;/code&gt; are comments.&lt;/li&gt;
&lt;li&gt;In that list of variables, each one is filled with the results of the command being assigned to it in the single quotes. So if typing in &lt;code&gt;cat /sys/class/hwmon/hwmon0/name&lt;/code&gt; at the terminal prompt would result in the output &lt;code&gt;pch_skylake&lt;/code&gt;, then the variable &lt;code&gt;pch_name&lt;/code&gt; will contain &lt;code&gt;pch_skylake&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If you&amp;rsquo;re not coming to this from a programming background, this printf() command is going to look weird.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;printf &amp;#34;$(date +&amp;#39;%d/%m/%Y,%T&amp;#39;),%s,%d,%s,%d,%s,%d\n&amp;#34; $pch_name $pch_temp $cpu_name $cpu_temp $ssd_name $ssd_temp &amp;gt;&amp;gt; $log_file
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;How these work is that the first part is the string to print, but it has some placeholders (all those &lt;code&gt;%&lt;/code&gt;letters). At runtime, the values from the end of the line are inserted into them. Like this:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;root@pve-dev1:~# printf &amp;#34;Hello %s\n&amp;#34; &amp;#34;Ian&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hello Ian
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;%s&lt;/code&gt; is a placeholder for a some text, then we supply the text at the end - &lt;code&gt;&amp;quot;Ian&amp;quot;&lt;/code&gt;. In this case, &lt;code&gt;&amp;quot;Ian&amp;quot;&lt;/code&gt; is a string literal, if we&amp;rsquo;d used a variable (as in our logging script) then the contents of the variable would be used instead. The &lt;code&gt;\n&lt;/code&gt; at the end of the string is a newline character so whatever comes after starts on a new line.&lt;/p&gt;
&lt;p&gt;At this point I know enough about Linux permissions that I knew I&amp;rsquo;d have to set the shell script file to be executable with a &lt;code&gt;chmod 755&lt;/code&gt;, and to call it with the &lt;code&gt;./&lt;/code&gt; in front of it that I was perplexed about a couple of days ago.&lt;/p&gt;
&lt;p&gt;Again, the original article gave an example of the line to put into /etc/crontab. It just needed the path to my script and it was good to go.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# Example of job definition:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# .---------------- minute (0 - 59)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# | .------------- hour (0 - 23)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# | | .---------- day of month (1 - 31)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# | | | | |
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# * * * * * user-name command to be executed
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;*/5 * * * * root /root/bin/tempCheck.sh 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Next thing you know, the log file is slowly growing at &lt;code&gt;/var/log/temps.csv&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;20/04/2023,20:30:01,pch_skylake,45000,coretemp,38000,drivetemp,38000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;20/04/2023,20:35:01,pch_skylake,45000,coretemp,37000,drivetemp,38000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;20/04/2023,20:40:01,pch_skylake,44500,coretemp,37000,drivetemp,38000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;20/04/2023,20:45:01,pch_skylake,45000,coretemp,37000,drivetemp,38000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;20/04/2023,20:50:01,pch_skylake,44500,coretemp,37000,drivetemp,38000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;20/04/2023,20:55:01,pch_skylake,44500,coretemp,37000,drivetemp,38000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;20/04/2023,21:00:01,pch_skylake,45000,coretemp,37000,drivetemp,38000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;20/04/2023,21:05:01,pch_skylake,45500,coretemp,38000,drivetemp,38000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;20/04/2023,21:10:01,pch_skylake,45000,coretemp,38000,drivetemp,38000
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;20/04/2023,21:15:01,pch_skylake,45500,coretemp,37000,drivetemp,38000
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Obviously I&amp;rsquo;m going to graph this, and also obviously, I&amp;rsquo;m going to run a CPU stress test in a VM in the middle of the data collection.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.iankulin.com/images/temp-chart.jpg" alt=""&gt;&lt;/p&gt;</description></item><item><title>SDD Wearout numbers</title><link>https://blog.iankulin.com/sdd-wearout-numbers/</link><pubDate>Tue, 25 Apr 2023 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/sdd-wearout-numbers/</guid><description>&lt;p&gt;I didn&amp;rsquo;t understand why the default Proxmox install sets up the storage the way it does - with the available disk split up into an LVM and an LVM thin storage - so I&amp;rsquo;ve been reading this excellent &lt;a href="https://blog.programster.org/proxmox-storage-guide"&gt;Proxmox Storage Guide&lt;/a&gt; by Programster (spoiler - the LVM thin makes VM snapshots easier).&lt;/p&gt;
&lt;p&gt;At one point in the post they mention that you can see the &amp;ldquo;Wearout&amp;rdquo; percentage for any SSD drives in the Proxmox GUI, so of course, since I now own five second hand HP Elitedesk 800 G1/G2&amp;rsquo;s all with SSD drives, I dived in to have a look at each drive and found this.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Server&lt;/th&gt;
 &lt;th&gt;GB&lt;/th&gt;
 &lt;th&gt;Model&lt;/th&gt;
 &lt;th&gt;SMART&lt;/th&gt;
 &lt;th&gt;Wearout&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;pve-prod1&lt;/td&gt;
 &lt;td&gt;512&lt;/td&gt;
 &lt;td&gt;Micron_1100 SATA&lt;/td&gt;
 &lt;td&gt;Pass&lt;/td&gt;
 &lt;td&gt;6%&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pve-prod2&lt;/td&gt;
 &lt;td&gt;120&lt;/td&gt;
 &lt;td&gt;SSD2S120SF1200SA2&lt;/td&gt;
 &lt;td&gt;Pass&lt;/td&gt;
 &lt;td&gt;100%&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pve-dev1&lt;/td&gt;
 &lt;td&gt;256&lt;/td&gt;
 &lt;td&gt;TOSHIBA_THNSNK256GCS8&lt;/td&gt;
 &lt;td&gt;Pass&lt;/td&gt;
 &lt;td&gt;2%&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pve-kr01&lt;/td&gt;
 &lt;td&gt;120&lt;/td&gt;
 &lt;td&gt;KINGSTON_SA400S37120G&lt;/td&gt;
 &lt;td&gt;Pass&lt;/td&gt;
 &lt;td&gt;0%&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I&amp;rsquo;m no expert, but 100% &amp;ldquo;wearout&amp;rdquo; sounds bad, or maybe these figures go the other way, and that drive is 100% good and the others are just about dead. Either way, I&amp;rsquo;m suddenly interested in this number and what it means.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a button to look at the S.M.A.R.T (Self-Monitoring, Analysis and Reporting Technology backronym) attributes, so let&amp;rsquo;s have a look at this suspicious no-name drive.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.iankulin.com/images/screen-shot-2023-04-19-at-7.27.43-pm.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Well, some of this is comprehensible. The Power_On_Hours is saying it&amp;rsquo;s been on for about one and a half years worth of hours. Since it&amp;rsquo;s been power cycled over a thousand times, that all sort of matches a corporate desk machine that&amp;rsquo;s been in use for five or six years. These values look like the sort of data you get from running the &lt;code&gt;smartctl -a /dev/sda&lt;/code&gt; command. I&amp;rsquo;ve snipped this output because it is huge, but the middle part is very similar to the table above, and there was nothing scary it it,&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#d8dee9;background-color:#2e3440;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SMART overall-health self-assessment test result: PASSED
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 1 Raw_Read_Error_Rate 0x0032 120 120 050 Old_age Always - 0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 5 Reallocated_Sector_Ct 0x0033 100 100 003 Pre-fail Always - 0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 9 Power_On_Hours 0x0032 060 060 000 Old_age Always - 35173 (2 96 0)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 1059
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;171 Unknown_Attribute 0x000a 100 100 000 Old_age Always - 0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;172 Unknown_Attribute 0x0032 100 100 000 Old_age Always - 0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;No self-tests have been logged. [To run self-tests, use: smartctl -t]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s a lot, but it clearly says that it&amp;rsquo;s &amp;ldquo;passed&amp;rdquo; the test.&lt;/p&gt;
&lt;p&gt;I tried to run the short SMART test a couple of times with the command: &lt;code&gt;smartctl --test=short /dev/sda&lt;/code&gt; but each time (after I&amp;rsquo;d waited a couple of minutes) when I ran &lt;code&gt;smartctl -l selftest /dev/sda&lt;/code&gt; to look at the results, it claimed the test had been aborted by the host. Presumably I need to shut down Proxmox to run the test properly.&lt;/p&gt;
&lt;p&gt;For the moment, I&amp;rsquo;m just hoping that different manufacturers report that wearout figure differently, but I&amp;rsquo;ll show an increased interest in these drives health for a while.&lt;/p&gt;
&lt;p&gt;The reason I have three nodes locally is that I&amp;rsquo;m anticipating going to HA (high availability) as I move more services out of the paid cloud onto self-hosted. When I do that some of the VM&amp;rsquo;s (with low disk speed needs) will have their storage on the NAS, and the others in a Ceph or ZFS pool to facilitate quick migration on failure. To support that, I&amp;rsquo;m probably looking at provisioning new high quality 512GB SSDs to these machines anyway, so if I do get to that stage, that&amp;rsquo;s a strong (although expensive) possibility, and I&amp;rsquo;d certainly rather buy two than three.&lt;/p&gt;</description></item><item><title>HP EliteDesk 800 G2 Memory Upgrade</title><link>https://blog.iankulin.com/hp-elitedesk-800-g2-memory-upgrade/</link><pubDate>Sun, 02 Apr 2023 00:00:00 +0000</pubDate><guid>https://blog.iankulin.com/hp-elitedesk-800-g2-memory-upgrade/</guid><description>&lt;p&gt;The hardware engineering of these corporate world mini-PCs is really nice. I swapped out the RAM today to bump my main machine up to 32GB from 16GB. It was a straightforward task - no screwdrivers, no drama.&lt;/p&gt;
&lt;p&gt;To open the machine up, there is a single large screw on the back that can be undone with your fingers - it&amp;rsquo;s a captive screw, as in it doesn&amp;rsquo;t fall out - just another nice engineering thought.&lt;/p&gt;
&lt;img src="https://blog.iankulin.com/images/img_4432.jpg" width="331" alt=""&gt;
&lt;p&gt;Once that&amp;rsquo;s undone, to get the case off, you just push down lightly on the top so the rubber feet grip the desk and slide it towards the front about an inch. Then it just lifts off - no wires. Once that&amp;rsquo;s off, you&amp;rsquo;ll see the SSD on the left (looking from the front) and fan on the right.&lt;/p&gt;
&lt;img src="https://blog.iankulin.com/images/img_4434.jpg" width="364" alt=""&gt;
&lt;p&gt;There&amp;rsquo;s a little plastic tab on the front of the fan just over the front USB ports. If you lift that up a little, you can pull the fan towards you a couple of centimeters then put it down on it&amp;rsquo;s back next to the case without unplugging its power. You can see the RAM modules were underneath the fan.&lt;/p&gt;
&lt;img src="https://blog.iankulin.com/images/img_4438.jpg" width="813" alt=""&gt;
&lt;p&gt;Either side of each RAM module you can see little metal clips. If you push these both outwards, the module will pop up to a 20° angle, then it can just be pulled out of the connector gently. Do this first for the top one, then the bottom.&lt;/p&gt;
&lt;img src="https://blog.iankulin.com/images/img_4439.jpg" width="1000" alt=""&gt;
&lt;p&gt;Inserting the new modules is done in the reverse order. Push the bottom one all the way into it&amp;rsquo;s socket at the same angle you took the other one out. Then with a finger on the raised edge, push it down until the clips both sides engage. Then do the same with the top one.&lt;/p&gt;
&lt;p&gt;When you flip the fan over to replace it, you&amp;rsquo;ll see that it has a small protrusion each side on the back legs, these slide into the two metal slots on top of the CPU cooler, then the fan just sits down into it&amp;rsquo;s previous spot. Lower the case top down about an inch from the back, slide it into place and finger tighten the screw, and you&amp;rsquo;re down.&lt;/p&gt;
&lt;h3 id="ram-specifications"&gt;RAM Specifications&lt;/h3&gt;
&lt;p&gt;The &lt;a href="https://support.hp.com/au-en/product/hp-elitedesk-800-35w-g2-desktop-mini-pc/7633266/manuals"&gt;Hardware Reference and Maintenance and Service guides&lt;/a&gt; for the HP EliteDesk 800 G2 Desktop Mini have this page on the RAM specifications. You&amp;rsquo;re looking for 1.2V DDR4-2133MHz SODIMMs, PC4-17000&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.iankulin.com/images/screen-shot-2023-03-26-at-3.11.40-pm.png"&gt;&lt;img src="https://blog.iankulin.com/images/screen-shot-2023-03-26-at-3.11.40-pm.png" width="1000" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The eBay listing for the ones I bought said they were &amp;ldquo;SK Hynix 16GB DDR4 SODIMM RAM 2133 MHz Laptop PC4-17000 HMA82GS6MFRN-TF&amp;rdquo; and they went in and worked perfectly.&lt;/p&gt;</description></item></channel></rss>