tag:blogger.com,1999:blog-14499453631024510912024-03-13T18:33:10.672+01:00Kaperschipby Hans Lenze Kaperhans_lenzehttp://www.blogger.com/profile/13347543223131494054noreply@blogger.comBlogger13125tag:blogger.com,1999:blog-1449945363102451091.post-56310651037140777982020-09-10T12:02:00.011+02:002022-07-27T13:43:45.578+02:00Cheap energy efficient harddrives<h2 style="text-align: left;">Decisions</h2><p>Every so often I'm faced with a difficult decision: Clean up my digital closet or buy more storage space. It's a good idea to sift through all the files periodically and throw out what's no longer needed but today I'm going the other route: We'll add more storage! My storage needs at home are covered by a Xpenology virtual machine running on my <a href="https://www.kaperschip.nl/2016/07/homelab-part-3-management.html">low power homelab server</a>. It has served me well over the years and I don't intent to replace it anytime soon. </p><p>For home use, I prefer backups over RAID since keeping my data is more important to me than having it always available. For this reason, the disks I use in my NAS are each set up with their own volume. Data I like to keep is copied between disks and to an offsite location by a scheduled job. I consider individual hard drives to be unreliable and have set up my backup schedule accordingly. Important data gets more copies and a higher copy frequency. Unimportant data is only present on a single disk and never gets copied. </p><p>I don't believe I can differentiate a reliable hard drive (one that keeps working for 7+ years) from an unreliable one (one that fails in the first months of use). Therefore I consider "NAS" specific hard drives just as reliable as any other type. I just buy the cheapest one I can find and replace when needed. </p><h3 style="text-align: left;">The search</h3><p>When selecting a hard drive there are a number of things I consider:</p><p></p><ul style="text-align: left;"><li>Price</li><li>Capacity</li><li>Power consumption</li><li>Noise</li></ul><p></p><p>We'll start with price since that's the least complicated factor. There are a good number of websites that compare prices between all the online shops. At €0,020/GB it seems 6TB drives are the sweet spot at the moment. They offer the cheapest storage for their price. However, external USB hard drives dive even lower at €0,016/GB for a 12TB model. So it seems I should shop for an external hard drive, then? Well, why not! </p><p>Capacity is easy, I don't hoard data so I don't need huge capacity. I'm going to buy a single chunk of whatever is the best deal of the day.</p><p>In an always-on scenario, such as my little server that's powered on 24/7, running costs make up the biggest pile of cash needed to keep all my files available, the electricity bill needed to keep it running is higher than the initial purchase. In the search for a harddrive that makes little noise, is energy efficient and cheap, you are going to come across 2,5" models. The amount of power needed to keep a 2,5" drive spinning is significantly less (a little over one Watt) compared to a 3,5" drive (a little over 5 Watts). These models are available up to 5TBs as of now. That's enough for my needs. As every Watt of power used 24/7 costs around €2 every year, a 2,5" drive makes me lose the smallest bag of money all around.</p><p>I've tackled the noise factor at home by placing the homeserver in a padded closet. It's dead silent when I close the door. Case closed.</p><h2 style="text-align: left;">The sale</h2><div>Searching for the cheapest 2,5" external USB drive I ended up <a href="https://www.amazon.de/Seagate-Expansion-Portable-2019-TB/dp/B07TNVBLNT" target="_blank">at Amazon</a>. They offer a Seagate 5TB model for less than 100 euro's. That makes the price €0,019/GB. Together with the low power consumption makes it good enough for me! </div><div>The rest is well known. We found the cheapest hard drive at Amazon and no other shops. Added it to the shopping cart, clicked "Buy now" and a few days later there was a box on my doorstep.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn_mOU6r3f_52KJbLeAi9HIeIbHzwo-VhErmOrlwTg07_1gNwsEoTdMGm1eF7AiEObpW96yS1emkq1RfU8hQoYdhFcv9WGHwwt8l0730go5zNLnARnc7CR8UejTAIcC6xGws3iN4CmZss/s4032/IMG_20200909_134759.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn_mOU6r3f_52KJbLeAi9HIeIbHzwo-VhErmOrlwTg07_1gNwsEoTdMGm1eF7AiEObpW96yS1emkq1RfU8hQoYdhFcv9WGHwwt8l0730go5zNLnARnc7CR8UejTAIcC6xGws3iN4CmZss/s320/IMG_20200909_134759.jpg" width="320" /></a></div><br /><div><b>A word of warning:</b> Western Digital (WD) has big portable external harddrives on sale. Unfortunately some of these disks have a USB port on the drive itself (instead of a SATA-to-USB converter board). I did not want to run into this issue so I selected a Seagate drive.</div><h2 style="text-align: left;">Breaking stuff</h2><div>A USB disk is nice and all, but usually it's a SATA disk in a piece of plastic. I have a bay available in the homeserver so I'll put in inside instead of keeping a dangling box on top. With some tools it's easy to open the plastic case. This process of liberating external USB drives from their housing is known as "shucking" a hard drive. Obviously this voids the warranty!</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8worj2b1QKtEJvNWTh8DUQbRCH3xExS5763wnMTEmZ0N3IoWvcATUfe1L5vNT4wvYgshRE4kQwvToDT7wBud8sLKGvGGZIPXGEtL05333vb3RIH9kiDzN26wgD321G2jwB5_zSRgUeSU/s4032/IMG_20200909_135045.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8worj2b1QKtEJvNWTh8DUQbRCH3xExS5763wnMTEmZ0N3IoWvcATUfe1L5vNT4wvYgshRE4kQwvToDT7wBud8sLKGvGGZIPXGEtL05333vb3RIH9kiDzN26wgD321G2jwB5_zSRgUeSU/s320/IMG_20200909_135045.jpg" width="320" /></a></div><br /><div>Insert the tool into the seam and wiggle until you hear *click* from inside. This housing is not meant to be serviced so I did not expect it to stay in one piece. </div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVsYNwk4B6-Df5mghiRU0Dr0ezCd8zZSGFsH167fa_-9u4Ga9S1VG6kNVXObVarBJ_PnCsvoC-COcYRYT7Tp5zn5hi6FH10ox7VGs0gN8qURvDlIAKuMjRwzq68C-aDx_7l1r87DFLInE/s4032/IMG_20200909_135309.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVsYNwk4B6-Df5mghiRU0Dr0ezCd8zZSGFsH167fa_-9u4Ga9S1VG6kNVXObVarBJ_PnCsvoC-COcYRYT7Tp5zn5hi6FH10ox7VGs0gN8qURvDlIAKuMjRwzq68C-aDx_7l1r87DFLInE/s320/IMG_20200909_135309.jpg" width="320" /></a></div><br /><div>After one round of destroying plastic clips, the hard drive is visible.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgesJehUILT71fv-q86O1_tSrcXDlVEyhOsWifTqHZn4SFD6JmNGSSWgF8ySLUl_x6pgUKicS8ci4tWzVlPD1RnRpW1kU7HcchkJg8volq7VAEAnx4VNXificiGEOuE3u3_Ks4PKkQw0ZE/s4032/IMG_20200909_135400.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgesJehUILT71fv-q86O1_tSrcXDlVEyhOsWifTqHZn4SFD6JmNGSSWgF8ySLUl_x6pgUKicS8ci4tWzVlPD1RnRpW1kU7HcchkJg8volq7VAEAnx4VNXificiGEOuE3u3_Ks4PKkQw0ZE/s320/IMG_20200909_135400.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVpADIz_JlmWrUeUsrrVmyW7wStcXRiGgm248divYeLKC6ywWyxpVGWx8IsVruYk-3qle3Av0X9pdXGAv913CrfJilQ0RLSHPTHHrdsillWYRqk05rgNTIm515H9Hv851UT0VknE6_0kA/s4032/IMG_20200909_135509.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVpADIz_JlmWrUeUsrrVmyW7wStcXRiGgm248divYeLKC6ywWyxpVGWx8IsVruYk-3qle3Av0X9pdXGAv913CrfJilQ0RLSHPTHHrdsillWYRqk05rgNTIm515H9Hv851UT0VknE6_0kA/s320/IMG_20200909_135509.jpg" width="320" /></a></div><br /><div>That looks like a SATA interface to me!</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc9sfaxFMMny4RwnPbco7y55iaANM8ii5zdnWp93eEdBdyet4lz9lcMq5GvIQ-qOlpOtelq9c-afDD6wHjwoHPGmq8lJ5ZnM6CMdxQ_OzKE48hyphenhyphenJa7kMbOyA4IxUu3uOSEHQYg655zij0/s4032/IMG_20200909_135722.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc9sfaxFMMny4RwnPbco7y55iaANM8ii5zdnWp93eEdBdyet4lz9lcMq5GvIQ-qOlpOtelq9c-afDD6wHjwoHPGmq8lJ5ZnM6CMdxQ_OzKE48hyphenhyphenJa7kMbOyA4IxUu3uOSEHQYg655zij0/s320/IMG_20200909_135722.jpg" width="320" /></a></div><br /><div>Removed the rubber grommets and screws.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-24GGBvH-anpGJ3hyBWLc0GknEwx0Wol5TMJ_UjdwC8hGs4CxVZ5l4tH31rYdSmSqDoXYNzCdLr_YV6CD0FWvDdQRyppFzCmRtortFh-CJHFoyNTfOvGJwtoAS8NHd2vBlslWUyUEeV4/s4032/IMG_20200909_135822.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-24GGBvH-anpGJ3hyBWLc0GknEwx0Wol5TMJ_UjdwC8hGs4CxVZ5l4tH31rYdSmSqDoXYNzCdLr_YV6CD0FWvDdQRyppFzCmRtortFh-CJHFoyNTfOvGJwtoAS8NHd2vBlslWUyUEeV4/s320/IMG_20200909_135822.jpg" width="320" /></a></div><br /><div>These parts are no longer needed.</div><div><br /></div><div>Adding the disk to XPenology works as it's supposed to. </div><div><img alt="" height="386" src="data:image/png;base64,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" width="614" /></div><div><br /></div><div>There's an extra disk available, creating a volume is easy using the wizard and that's all folks!</div><div><br /></div><div><img alt="See the source image" height="354" src="https://antivestor.com/wp-content/uploads/2018/12/thats-all-folks.jpg" width="629" /></div>hans_lenzehttp://www.blogger.com/profile/13347543223131494054noreply@blogger.com0tag:blogger.com,1999:blog-1449945363102451091.post-23485953098644935102017-09-01T23:14:00.000+02:002017-09-01T23:48:37.097+02:00Supermicro X10SDV IPMI firmware update, iKVM over HTML5 included!!I own a homelab server based on a Supermicro X10SDV motherboard. I haven't been paying attention to the latest IPMI firmware updates lately and that's a real shame. In June, Supermicro finally released the update that enables iKVM over HTML5. You read that right, no more Java!<br />
<br />
On the main page for my motherboard (<a href="http://www.supermicro.com/products/motherboard/Xeon/D/X10SDV-6C-TLN4F.cfm">http://www.supermicro.com/products/motherboard/Xeon/D/X10SDV-6C-TLN4F.cfm</a>) I was able to download the fresh version 3.58 of Redfish.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOr67O9t98Qwf4OeCBPKMU7LS46wwpQejQpfT0OoJ5SbWLz3h7oHm5QMio1nrN_5pw8-_zlrkdeqGNsTQ1HhadwJNRhcHXkPYLY4QQCa5-PK5mvJxuAnkTy3zh7APsQRKNaZCyL0fYYKM/s1600/IPMI+download.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="519" data-original-width="627" height="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOr67O9t98Qwf4OeCBPKMU7LS46wwpQejQpfT0OoJ5SbWLz3h7oHm5QMio1nrN_5pw8-_zlrkdeqGNsTQ1HhadwJNRhcHXkPYLY4QQCa5-PK5mvJxuAnkTy3zh7APsQRKNaZCyL0fYYKM/s400/IPMI+download.png" width="400" /></a></div>
Since my homelab is running Microsoft Server 2016 at the moment, installing this firmware is a breeze. In the downloaded ZIP file you'll find a simple firmware flash utility.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPcz8DoL1moOcP59Fj_75jRfXeKyGVI3AKNhsjDhalgbPjZjfQFxOpFKzZaDpQd37CB43OwQ0ulrf248ciBBVn0JQ_ZduvdPa33idjOGYqsdDApVGfrC0fLPWK-U5AXKUW0jT99iXfW2g/s1600/IPMI+update.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="519" data-original-width="872" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPcz8DoL1moOcP59Fj_75jRfXeKyGVI3AKNhsjDhalgbPjZjfQFxOpFKzZaDpQd37CB43OwQ0ulrf248ciBBVn0JQ_ZduvdPa33idjOGYqsdDApVGfrC0fLPWK-U5AXKUW0jT99iXfW2g/s400/IPMI+update.png" width="400" /></a></div>
I simply copied the .BIN file into the utility folder and ran the executable with the right parameters (in an elevated command prompt, just to be sure). Since it's a local KCS connection, there are no authentication or network transfer issues.<br />
<br />
The installation itself took a few minutes and after that, you will be able to use the shiny new HTML5 console!<br />
To show you what this looks like, the picture below displays the remote console as well as the command used to update the firmware.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirLxA_gYkzyUYAoBHwLIJ66PD6s_wS-_H7t2tbvul_p4ucUKFX8yh75jFX8pDte_nFPm2cUROGHDnHOtZT4sMz4yOTTddO8H7sYEhSuyrjK6G7NNSbZ41uvD33x_tNndZQ-YAaNnRFNxI/s1600/HTML5+console.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1022" data-original-width="1500" height="436" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirLxA_gYkzyUYAoBHwLIJ66PD6s_wS-_H7t2tbvul_p4ucUKFX8yh75jFX8pDte_nFPm2cUROGHDnHOtZT4sMz4yOTTddO8H7sYEhSuyrjK6G7NNSbZ41uvD33x_tNndZQ-YAaNnRFNxI/s640/HTML5+console.png" width="640" /></a></div>
<br />
And before you ask: Yes, this works on a mobile device! Here are some screenshots of my Android phone using the HTML5 console.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSQnyvh7VIERbtcPVSqKQQNwxIn11IBFa-RFk4HBbcHIvouGmSZyTkAFKO-3Eg_uE0qK4bV1F2AM286KqIpRWgw3mSlXS6V6wpzm-CH8fUjAiodH0Us63TjpyIrSb2owpLbvnU8X9ee48/s1600/Screenshot_20170901-232709.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="900" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSQnyvh7VIERbtcPVSqKQQNwxIn11IBFa-RFk4HBbcHIvouGmSZyTkAFKO-3Eg_uE0qK4bV1F2AM286KqIpRWgw3mSlXS6V6wpzm-CH8fUjAiodH0Us63TjpyIrSb2owpLbvnU8X9ee48/s320/Screenshot_20170901-232709.png" width="180" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOLRHc8UUHwtVI4-J7WpwZ02cWpeA-bG3bwU_46lPRgfpu0l7mmXQmfAGuTQL_bPT13nqi7FefRaHRnoV9pHz82jovbV6QdL_SPRCIHZ26a1rGY9ISUnGn2g0fdMIrnIdgX-V43dN4vFU/s1600/Screenshot_20170901-232838.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="900" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOLRHc8UUHwtVI4-J7WpwZ02cWpeA-bG3bwU_46lPRgfpu0l7mmXQmfAGuTQL_bPT13nqi7FefRaHRnoV9pHz82jovbV6QdL_SPRCIHZ26a1rGY9ISUnGn2g0fdMIrnIdgX-V43dN4vFU/s320/Screenshot_20170901-232838.png" width="180" /></a></div>
<br />
Any reason get rid of Java is a reason for cake! I really dislike those Ask! toolbars.<br />
So far I haven't run in to any issues so I recommend any and all users of a X10 generation Supermicro motherboard to go and check if the IPMI firmware update is available for them.<br />
<br />hans_lenzehttp://www.blogger.com/profile/13347543223131494054noreply@blogger.com0tag:blogger.com,1999:blog-1449945363102451091.post-77501569809573120622017-06-11T01:02:00.000+02:002017-06-11T01:02:20.182+02:00Easy storage benchmark script based on Diskspd<h2>
Intro</h2>
Most of the projects I do for work have some part of storage and virtualisation in them. In order to get a good feeling for what a certain storage platform can deliver, I try to run at least one benchmark. In the past, it has been a pain to get the benchmarks right to be able to compare the results. I sometimes forget which tool I used last. The storage is not always easily accessible to the tool and some tools end up overloading the CPU.<br />
<br />
<h2>
Diskspd to the rescue</h2>
<div>
I've been following the development of Diskspd (<a href="https://github.com/Microsoft/diskspd">https://github.com/Microsoft/diskspd</a>) with interest ever since I saw a demo in some Storage Space talk on some Microsoft conference where it was described as an internal loadtest tool meant to replace SQLIO. Diskspd is easy to use, gives consistent results and is customisable for the type of workload you're trying to mimic.<br />
It's commandline based so it runs on almost any version of Windows (even Hyper-V server and Nano server). Being CLI based means it's easy to script and others have built great scripts to run a benchmark based on all sorts of settings.</div>
<div>
<br />
<h2>
Putting it all together</h2>
The blog post by Jose Baretto (https://blogs.technet.microsoft.com/josebda/2015/07/03/drive-performance-report-generator-powershell-script-using-diskspd-by-arnaud-torres/) really inspired me to try a more diverse approach to benchmarking with lots of different settings in order to generate a "fingerprint" of sorts for any given storage system. This script is not meant to give an in depth view of a storage system's performance for your particular workload but will make it possible to compare different systems and their strong/weak points with a single worker and limited differentiating workloads.<br />
In short: a great way to get a ballpark figure for a storage system.<br />
<br />
<h2>
Description of the script</h2>
<div>
The script works by asking for a few parameters:</div>
<div>
- location to store the test file</div>
<div>
- size of the test file (at least a few times the cache size)</div>
<div>
- duration of each iteration (I use 60 seconds for a standard test run)</div>
<div>
<br /></div>
<div>
A number of parameters for the iterations are hardcoded into the script</div>
<div>
- threadcount = the number of cores that are available to the VM/host where the benchmark is running</div>
<div>
- queue depth = we will run all tests with a queue depth of 1, 8, 16 and 32 outstanding IOs</div>
<div>
- blocksize = we will run all tests with a blocksize of 4k, 8k, 64k and 512k</div>
<div>
- read/write ratio = we will run all tests with a read/write ratio of 100/0, 70/30 and 0/100</div>
<div>
- random/sequential = we will run all tests with both random and sequential IO</div>
<div>
- repeat = to make sure the test iterations are somewhat representative, we will run four iterations with the same parameters in a row</div>
<div>
<br /></div>
<div>
As you can see, this list adds up to quite a number of iterations: 384 of them. As each iteration needs 60 seconds to run, this takes a lot of time so it's not something you run during your lunchbreak. </div>
<div>
<br /></div>
<div>
The last part of the script handles some formatting to get all the relevant numbers on one line (so it's easy to store as a CSV file later on) and outputs to console and file.</div>
<div>
<br /></div>
<h2>
Related automated benchmark: VMFleet</h2>
The other tool that Microsoft released on the same Github page is VMFleet. This script launches a number of VMs and kicks off a DiskSPD worker in them. Since most hyperconverged or active-active storage solutions are able to handle multiple IO streams at once, this is a great way to (synthetically) loadtest a storage system that can handle a large number of simultaneous workloads. </div>
<br />
The code itself<br />
<div style="background: #f8f8f8; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #408080; font-style: italic;"># Drive performance Report Generator</span>
<span style="color: #408080; font-style: italic;"># Original by Arnaud TORRES, Edited by Hans Lenze Kaper on 25 - sep - 2015</span>
<span style="color: #408080; font-style: italic;"># Clear screen</span>
<span style="color: green;">Clear-host</span>
<span style="color: green;">write-host</span> <span style="color: #ba2121;">"DRIVE PERFORMANCE REPORT GENERATOR"</span> -foregroundcolor green
<span style="color: green;">write-host</span> <span style="color: #ba2121;">"Script will stress your computer CPU and storage layer (including network if applicable!), be sure that no critical workload is running"</span> -foregroundcolor yellow
<span style="color: #408080; font-style: italic;"># Disk to test</span>
<span style="color: #19177c;">$Disk</span> = <span style="color: green;">Read-Host</span> <span style="color: #ba2121;">'Which path would you like to test? (example - C:\ClusterStorage\Volume1 or \\fileserver\share or S:) Without the trailing \'</span>
<span style="color: #408080; font-style: italic;"># Reset test counter</span>
<span style="color: #19177c;">$counter</span> = 0
<span style="color: #408080; font-style: italic;"># Use 1 thread / core</span>
<span style="color: #19177c;">$Thread</span> = <span style="color: #ba2121;">"-t"</span>+(<span style="color: green;">Get-WmiObject</span> win32_processor).NumberofCores
<span style="color: #408080; font-style: italic;"># Set time in seconds for each run</span>
<span style="color: #408080; font-style: italic;"># 10-120s is fine</span>
<span style="color: #19177c;">$TimeInput</span> = <span style="color: green;">Read-Host</span> <span style="color: #ba2121;">'Duration: How long should each run take in seconds? (example - 60)'</span>
<span style="color: #19177c;">$Time</span> = <span style="color: #ba2121;">"-d"</span>+<span style="color: #19177c;">$TimeInput</span>
<span style="color: #408080; font-style: italic;"># Choose how big the benchmark file should be. Make sure it is at least two times the size of the available cache. </span>
<span style="color: #19177c;">$capacity</span> = <span style="color: green;">Read-Host</span> <span style="color: #ba2121;">'Testfile size: How big should the benchmark file be in GigaBytes? At least two times the cache size (example - 100)'</span>
<span style="color: #19177c;">$CapacityParameter</span> = <span style="color: #ba2121;">"-c"</span>+<span style="color: #19177c;">$Capacity</span>+<span style="color: #ba2121;">"G"</span>
<span style="color: #408080; font-style: italic;"># Get date for the output file</span>
<span style="color: #19177c;">$date</span> = <span style="color: green;">get-date</span>
<span style="color: #408080; font-style: italic;"># Add the tested disk and the date in the output file</span>
<span style="color: #ba2121;">"Command used for the runs .\diskspd.exe -c[testfileSize]G -d[duration] -[randomOrSequential] -w[%write] -t[NumberOfThreads] -o[queue] -b[blocksize] -h -L $Disk\DiskStress\testfile.dat, $date"</span> >> ./output.txt
<span style="color: #408080; font-style: italic;"># Add the headers to the output file</span>
<span style="color: #ba2121;">"Test N#, Drive, Operation, Access, Blocks, QueueDepth, Run N#, IOPS, MB/sec, Latency ms, CPU %"</span> >> ./output.txt
<span style="color: #408080; font-style: italic;"># Number of tests</span>
<span style="color: #408080; font-style: italic;"># Multiply the number of loops to change this value</span>
<span style="color: #408080; font-style: italic;"># By default there are : (4 queue depths) x (4 blocks sizes) X (3 for read 100%, 70/30 and write 100%) X (2 for Sequential and Random) X (4 Runs of each)</span>
<span style="color: #19177c;">$NumberOfTests</span> = 384
<span style="color: green;">write-host</span> <span style="color: #ba2121;">"TEST RESULTS (also logged in .\output.txt)"</span> -foregroundcolor yellow
<span style="color: #408080; font-style: italic;"># Begin Tests loops</span>
<span style="color: #408080; font-style: italic;"># We will run the tests with 1, 8, 16 and 32 queue depth</span>
(1,8,16,32) | <span style="color: green; font-weight: bold;">ForEach</span>-Object {
<span style="color: #19177c;">$queueparameter</span> = (<span style="color: #ba2121;">"-o"</span>+<span style="color: #19177c;">$_</span>)
<span style="color: #19177c;">$queue</span> = (<span style="color: #ba2121;">"QueueDepth "</span>+<span style="color: #19177c;">$_</span>)
<span style="color: #408080; font-style: italic;"># We will run the tests with 4K, 8K, 64K and 512K block</span>
(4,8,64,512) | <span style="color: green; font-weight: bold;">ForEach</span>-Object {
<span style="color: #19177c;">$BlockParameter</span> = (<span style="color: #ba2121;">"-b"</span>+<span style="color: #19177c;">$_</span>+<span style="color: #ba2121;">"K"</span>)
<span style="color: #19177c;">$Blocks</span> = (<span style="color: #ba2121;">"Blocks "</span>+<span style="color: #19177c;">$_</span>+<span style="color: #ba2121;">"K"</span>)
<span style="color: #408080; font-style: italic;"># We will do Read tests, 70/30 Read/Write and Write tests</span>
(0,30,100) | <span style="color: green; font-weight: bold;">ForEach</span>-Object {
<span style="color: green; font-weight: bold;">if</span> (<span style="color: #19177c;">$_</span> <span style="color: #666666;">-eq</span> 0){<span style="color: #19177c;">$IO</span> = <span style="color: #ba2121;">"Read"</span>}
<span style="color: green; font-weight: bold;">if</span> (<span style="color: #19177c;">$_</span> <span style="color: #666666;">-eq</span> 30){<span style="color: #19177c;">$IO</span> = <span style="color: #ba2121;">"Mixed"</span>}
<span style="color: green; font-weight: bold;">if</span> (<span style="color: #19177c;">$_</span> <span style="color: #666666;">-eq</span> 100){<span style="color: #19177c;">$IO</span> = <span style="color: #ba2121;">"Write"</span>}
<span style="color: #19177c;">$WriteParameter</span> = <span style="color: #ba2121;">"-w"</span>+<span style="color: #19177c;">$_</span>
<span style="color: #408080; font-style: italic;"># We will do random and sequential IO tests</span>
(<span style="color: #ba2121;">"r"</span>,<span style="color: #ba2121;">"si"</span>) | <span style="color: green; font-weight: bold;">ForEach</span>-Object {
<span style="color: green; font-weight: bold;">if</span> (<span style="color: #19177c;">$_</span> <span style="color: #666666;">-eq</span> <span style="color: #ba2121;">"r"</span>){<span style="color: #19177c;">$type</span> = <span style="color: #ba2121;">"Random"</span>}
<span style="color: green; font-weight: bold;">if</span> (<span style="color: #19177c;">$_</span> <span style="color: #666666;">-eq</span> <span style="color: #ba2121;">"si"</span>){<span style="color: #19177c;">$type</span> = <span style="color: #ba2121;">"Sequential"</span>}
<span style="color: #19177c;">$AccessParameter</span> = <span style="color: #ba2121;">"-"</span>+<span style="color: #19177c;">$_</span>
<span style="color: #408080; font-style: italic;"># Each run will be done 4 times for consistency</span>
(1..4) | <span style="color: green; font-weight: bold;">ForEach</span>-Object {
<span style="color: #408080; font-style: italic;"># The test itself (finally !!)</span>
<span style="color: #19177c;">$result</span> = .\diskspd.exe <span style="color: #19177c;">$CapacityPArameter</span> <span style="color: #19177c;">$Time</span> <span style="color: #19177c;">$AccessParameter</span> <span style="color: #19177c;">$WriteParameter</span> <span style="color: #19177c;">$Thread</span> <span style="color: #19177c;">$queueparameter</span> <span style="color: #19177c;">$BlockParameter</span> -h -L <span style="color: #19177c;">$Disk</span>\TestDiskSpd\testfile.dat
<span style="color: #408080; font-style: italic;"># Now we will break the very verbose output of DiskSpd in a single line with the most important values</span>
<span style="color: green; font-weight: bold;">foreach</span> (<span style="color: #19177c;">$line</span> <span style="color: green; font-weight: bold;">in</span> <span style="color: #19177c;">$result</span>) {<span style="color: green; font-weight: bold;">if</span> (<span style="color: #19177c;">$line</span> <span style="color: #666666;">-like</span> <span style="color: #ba2121;">"total:*"</span>) { <span style="color: #19177c;">$total</span>=<span style="color: #19177c;">$line</span><span style="border: 1px solid #FF0000;">;</span> <span style="color: green; font-weight: bold;">break</span> } }
<span style="color: green; font-weight: bold;">foreach</span> (<span style="color: #19177c;">$line</span> <span style="color: green; font-weight: bold;">in</span> <span style="color: #19177c;">$result</span>) {<span style="color: green; font-weight: bold;">if</span> (<span style="color: #19177c;">$line</span> <span style="color: #666666;">-like</span> <span style="color: #ba2121;">"avg.*"</span>) { <span style="color: #19177c;">$avg</span>=<span style="color: #19177c;">$line</span><span style="border: 1px solid #FF0000;">;</span> <span style="color: green; font-weight: bold;">break</span> } }
<span style="color: #19177c;">$mbps</span> = <span style="color: #19177c;">$total</span>.Split(<span style="color: #ba2121;">"|"</span>)[2].Trim()
<span style="color: #19177c;">$iops</span> = <span style="color: #19177c;">$total</span>.Split(<span style="color: #ba2121;">"|"</span>)[3].Trim()
<span style="color: #19177c;">$latency</span> = <span style="color: #19177c;">$total</span>.Split(<span style="color: #ba2121;">"|"</span>)[4].Trim()
<span style="color: #19177c;">$cpu</span> = <span style="color: #19177c;">$avg</span>.Split(<span style="color: #ba2121;">"|"</span>)[1].Trim()
<span style="color: #19177c;">$counter</span> = <span style="color: #19177c;">$counter</span> + 1
<span style="color: #408080; font-style: italic;"># A progress bar, for fun</span>
<span style="color: green;">Write-Progress</span> -Activity <span style="color: #ba2121;">".\diskspd.exe $CapacityPArameter $Time $AccessParameter $WriteParameter $Thread $queueparameter $BlockParameter -h -L $Disk\TestDiskSpd\testfile.dat"</span> -status <span style="color: #ba2121;">"Test in progress"</span> -percentComplete (<span style="color: #19177c;">$counter</span> / <span style="color: #19177c;">$NumberofTests</span> * 100)
<span style="color: #408080; font-style: italic;"># We output the values to the text file</span>
<span style="border: 1px solid #FF0000;">“</span>Test <span style="color: #19177c;">$Counter</span>,<span style="color: #19177c;">$Disk</span>,<span style="color: #19177c;">$IO</span>,<span style="color: #19177c;">$type</span>,<span style="color: #19177c;">$Blocks</span>,<span style="color: #19177c;">$queue</span>,Run <span style="color: #19177c;">$_</span>,<span style="color: #19177c;">$iops</span>,<span style="color: #19177c;">$mbps</span>,<span style="color: #19177c;">$latency</span>,<span style="color: #19177c;">$cpu</span><span style="color: #ba2121;">" >> ./output.txt</span>
<span style="color: #ba2121;"> </span>
<span style="color: #ba2121;"> # We output a verbose format on screen</span>
<span style="color: #ba2121;"> “Test $Counter, $Disk, $IO, $type, $Blocks, $queue, Run $_, $iops iops, $mbps MB/sec, $latency ms, $cpu CPU"</span>
}
}
}
}
}
</pre>
</div>
hans_lenzehttp://www.blogger.com/profile/13347543223131494054noreply@blogger.com0tag:blogger.com,1999:blog-1449945363102451091.post-62973356787415223692017-04-14T12:15:00.000+02:002017-04-23T21:45:31.177+02:00Pinging a subnet range using PowerShellEvery once in a while I come across a network with sub-optimal documentation. I usually want to add a new device to the network without having to hunt for a free IP address. One of the simple tests to see if an IP address is in use, is sending a ping. You can use a network scanner to ping an entire IP subnet or you can script something yourself. This is my PowerShell based script that I use in these cases:<br />
<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #888888;"># Ping an IP range</span>
<span style="color: #888888;"># based on PoshPortScanner.ps1 (https://blogs.technet.microsoft.com/heyscriptingguy/2014/03/19/creating-a-port-scanner-with-windows-powershell/)</span>
<span style="color: #996633;">$Net</span> = <span style="background-color: #fff0f0;">"192"</span>
<span style="color: #996633;">$Brange</span> = <span style="background-color: #fff0f0;">"168"</span>
<span style="color: #996633;">$Crange</span> = 2..8
<span style="color: #996633;">$Drange</span> = 1..254
<span style="color: #996633;">$Logfile</span> = C<span style="background-color: #ffaaaa; color: red;">:</span>\users\Pietje\Desktop\<span style="color: #007020;">ping-output</span>.txt
<span style="color: #008800; font-weight: bold;">foreach</span> (<span style="color: #996633;">$B</span> <span style="color: #008800; font-weight: bold;">in</span> <span style="color: #996633;">$Brange</span>) {
<span style="color: #008800; font-weight: bold;">foreach</span> (<span style="color: #996633;">$C</span> <span style="color: #008800; font-weight: bold;">in</span> <span style="color: #996633;">$Crange</span>) {
<span style="color: #008800; font-weight: bold;">foreach</span> (<span style="color: #996633;">$D</span> <span style="color: #008800; font-weight: bold;">in</span> <span style="color: #996633;">$Drange</span>) {
<span style="color: #996633;">$ip</span> = <span style="background-color: #ffaaaa; color: red;">“</span>{0}.{1}.{2}.{3}<span style="background-color: #ffaaaa; color: red;">”</span> <span style="color: #333333;">-F</span> <span style="color: #996633;">$Net</span>,<span style="color: #996633;">$B</span>,<span style="color: #996633;">$C</span>,<span style="color: #996633;">$D</span>
<span style="color: #008800; font-weight: bold;">if</span>(<span style="color: #007020;">Test-Connection</span> -BufferSize 32 -Count 1 -Quiet -ComputerName <span style="color: #996633;">$ip</span>)
{ <span style="background-color: #ffaaaa; color: red;">“</span><span style="color: #996633;">$ip</span>, responding to ping<span style="background-color: #ffaaaa; color: red;">”</span> >> <span style="color: #996633;">$Logfile</span>}
}
}
}
</pre>
</div>
hans_lenzehttp://www.blogger.com/profile/13347543223131494054noreply@blogger.com0tag:blogger.com,1999:blog-1449945363102451091.post-6006982393006580962017-03-21T23:21:00.001+01:002017-05-11T12:02:27.390+02:00Supermicro X10SDV CPU coolingMy homelab server uses a Supermicro X10SDV-6c-TLN4F motherboard that does not come with a CPU fan because it's meant to be screwed into a 1u chassis with its own fans. There's a low heatsink on the CPU to keep it cool using the chassis fans. The X10SDV-6c+-TLN4F does have a little CPU fan on the heatsink but was not available at the webshop where I bought the homelab server.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.servethehome.com/wp-content/uploads/2016/02/Supermicro-X10SDV-4C-TLN4F-CPU-and-DIMMs.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://www.servethehome.com/wp-content/uploads/2016/02/Supermicro-X10SDV-4C-TLN4F-CPU-and-DIMMs.jpg" width="400" /></a></div>
<br />
<br />
<b>Silence</b><br />
I did not buy myself a 1u chassis but a <span style="background-color: white; color: #333333;"><span style="font-family: inherit;">Supermicro Super-chassis <a href="http://www.supermicro.com.tw/products/chassis/tower/721/SC721TQ-250B" target="_blank">CSE-721TQ-250B</a> micro tower. This nice steel chassis offers a bit more storage options and thanks to the huge fan in the back, it's near silent. </span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.supermicro.com/CDS_Image/uploads/chassis/CSE-721TQ_Back_0.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.supermicro.com/CDS_Image/uploads/chassis/CSE-721TQ_Back_0.jpg" height="320" width="279" /></a></div>
<span style="background-color: white; color: #333333;"><span style="font-family: inherit;"><br /></span></span>
<span style="background-color: white; color: #333333;"><span style="font-family: inherit;">This fan is mostly there to keep the four 3,5" drivebays cool and it's placed too high on the back of the chassis to add a significant airflow over the tiny heatsink on the CPU. With all the extra space around and above the heatsink, it gets barely any cooling at all.</span></span><br />
<span style="background-color: white; color: #333333;"><span style="font-family: inherit;"><br /></span></span>
<b>Heat</b><br />
The low heatsink requires a lot of moving air to keep the CPU at a reasonable temperature. For example: Using no fan on the CPU heatsink means I must finish my calculations within three minutes or the CPU moves into thermal shutdown range. This makes using the little server no fun. A single Windows installation makes the CPU overheat and causes the whole server to power off. My collegue already warned me about this before I bought the server so I knew I had to create more airflow over the heatsink.<br />
<br />
<b>Old stuff</b><br />
Because I like pragmatic solutions, I decided to use a fan I had lying around since that's the cheapest and fastest solution. A bigger fan can move the same amount of air while making less RPM. So I grabbed the biggest PWM fan from the drawer filled with old computer stuff. It was actually a boxed cooler of some sort.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLEfWzLdoex0PeSEfX5J8b8yngmC0Upkk6dbWs9NZBQCk8Cb7JnnTf_mf5k4Uh4IrYlKAn05S4L5PPuT9GiHXNGV_31STDdULNx-NcZueCJ7yefthXP_Ua2IOZBWQaLkPTVe-UgBzL3Ng/s1600/CPUfan.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLEfWzLdoex0PeSEfX5J8b8yngmC0Upkk6dbWs9NZBQCk8Cb7JnnTf_mf5k4Uh4IrYlKAn05S4L5PPuT9GiHXNGV_31STDdULNx-NcZueCJ7yefthXP_Ua2IOZBWQaLkPTVe-UgBzL3Ng/s400/CPUfan.PNG" width="400" /></a></div>
<br />
I don't remember ever owning an AMD desktop but I sure was happy to find this fan.<br />
The attached heatsink is far to big to be mounted on the X10SDV motherboard so that had to go. Someday I may need it, so it's back in the drawer. Yes, I keep way to much junk. But look, sometimes it's very usefull to keep a heap of old stuff!<br />
<br />
<b>Let it fly</b><br />
Having selected a big fan, there's no way to mount it on the tiny heatsink on the motherboard. I decided to add to the "front-to-back" airflow and keep some hot components near the CPU cool too. I suspended the fan in a diagonal manner, shown in the picture below.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdYi1l_h2CEdR4SAD3ro-xUSC38MFSQF9OZrWTOgr0U9k2O4B5hrxLxqLjwWEFjhETYylYycHC5WSWvDb7c0u7_Dv__SxbtT6lLEr3qdWAiGk1lopy7EIDfhzBZoLglrUlUECCdxwop-g/s1600/FanSuspended.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="275" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdYi1l_h2CEdR4SAD3ro-xUSC38MFSQF9OZrWTOgr0U9k2O4B5hrxLxqLjwWEFjhETYylYycHC5WSWvDb7c0u7_Dv__SxbtT6lLEr3qdWAiGk1lopy7EIDfhzBZoLglrUlUECCdxwop-g/s400/FanSuspended.PNG" width="400" /></a></div>
<br />
That's right, the fan is hanging from the drivecage with two tie-wraps. Some times I fear one of the cables will end up in the blades but so far, none have. The fan pushes air around and into the heatsink and up the backside of the chassis, where it's extracted by the main case fan.<br />
<br />
<b>Cool and silent</b><br />
So does it work? Yes it does! It keeps the CPU nice and cool and it adds some airflow over the rest of the components on the motherboard near the CPU. The NVMe SSD, BMC and the network controller get to experience a nice cool breeze.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRdLwwYrAEcgMRR7J9DasniandlYrDzanIX7cBHBmosMDJWMvAH9ZJzhFhX4f_ghssXVCQtnY4GGXnhfliDiVF721ENUXIXjuAnSfvBisYlTKCNnyjU-k2fKeFVBL08itdQjShT1fpfAg/s1600/CPU+temps.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRdLwwYrAEcgMRR7J9DasniandlYrDzanIX7cBHBmosMDJWMvAH9ZJzhFhX4f_ghssXVCQtnY4GGXnhfliDiVF721ENUXIXjuAnSfvBisYlTKCNnyjU-k2fKeFVBL08itdQjShT1fpfAg/s640/CPU+temps.PNG" width="640" /></a></div>
<br />
FAN1 is the CPU fan and FAN2 is the case fan. Both are BIOS controlled and spin up when needed. I've never actually heard the fans spin up during use. Just once during testing (blowing hot air into the chassis with a hair dryer to make sure it worked).hans_lenzehttp://www.blogger.com/profile/13347543223131494054noreply@blogger.com0tag:blogger.com,1999:blog-1449945363102451091.post-23725262501461861852016-09-05T11:45:00.000+02:002017-03-18T16:58:21.166+01:00Building a vSphere lab using ESXi linked clones<b>Update: </b>William Lam has posted the <a href="http://www.virtuallyghetto.com/2016/11/vghetto-automated-vsphere-lab-deployment-for-vsphere-6-0u2-vsphere-6-5.html" target="_blank">ultimate nested homelab deployment script</a>. I highly recommend it! I'll leave this blogpost up for historical sake but any and all information in it has been superseeded with the script mentioned above.<br />
<br />
--------Original post-----------<br />
When I'm setting up a nested vSphere lab, I don't wont to spend a lot of time doing the actual setup and start playing as soon as possible. Up until now I've used the ESXi appliance <a href="http://www.virtuallyghetto.com/2015/12/deploying-nested-esxi-is-even-easier-now-with-the-esxi-virtual-appliance.html" target="_blank">distributed by William Lam</a>. My current workflow looks like this:<br />
<br />
<ol>
<li>Import OVF to vCenter using OVF customization</li>
<li>Boot the imported VM so the parameters get picked up by the guest OS</li>
<li>Done!</li>
</ol>
<br />
With a simple PowerShell script it is possible to deploy the OVF, add some advanced parameters to the VMX and have a working nested ESXi after the initial boot. All in one simple "wizard" like experience.<br />
Most of the waiting time is used to deploy the OVF itself so I thought to myself: why not shorten the time needed to set up a nested lab! And if I do so using linked clones, I get the shortest deployment time possible, since it's just a thin clone. It should be possible since the script imports the same OVF multiple times anyway. I'll try to import the OVF once, make a snapshot and use the snapshot as the base template for the linked clones. Once the linked clone is created I'll add the advanced parameters to the VMX and get the nested lab off and running! So the new workflow should look like:<br />
<br />
<ol>
<li>Make linked clone</li>
<li>Add advanced parameters to the VMX</li>
<li>Boot the imported VM so the parameters get picked up by the guest OS</li>
<li>Done!</li>
</ol>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdFDyP5Lq6LFeFb4eKPyFhD3nj4in3ocZi4itscxd0Eu-V90WVkvhTYNrjKDf5SkqeazEra07sdmrtehOydMVlnlkOUld_SaHxagweOLdDG255BsZ0eFLpqwuYIXrgNT-bOQHM67XAseA/s1600/AdvancedProperty1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdFDyP5Lq6LFeFb4eKPyFhD3nj4in3ocZi4itscxd0Eu-V90WVkvhTYNrjKDf5SkqeazEra07sdmrtehOydMVlnlkOUld_SaHxagweOLdDG255BsZ0eFLpqwuYIXrgNT-bOQHM67XAseA/s400/AdvancedProperty1.PNG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Unfortunately it's not possible to make a linked clone using the vSphere Web Client. PowerCLI to the rescue! With the cmdlet New-VM we should be able to make a new virtual machine out of an existing snapshot. So for this to work, you'll need to import William Lam's nested ESXi appliance OVA and make one snapshot. Be sure to skip all the OVF customization since we'll do that later.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn_wmVAVCiEOUey6Z36PtFKjWtkxMj7mIiCUt5wReFi7GiK72RbxEb0_WScYEospp7VXuNi0gxaT7KorZzL6o0lMK4DKorEQpDlluJ3Qae7uf2cKzesAiXDC7xrsZCFzmRxhy6nriHSYY/s1600/nestedESXi-template.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn_wmVAVCiEOUey6Z36PtFKjWtkxMj7mIiCUt5wReFi7GiK72RbxEb0_WScYEospp7VXuNi0gxaT7KorZzL6o0lMK4DKorEQpDlluJ3Qae7uf2cKzesAiXDC7xrsZCFzmRxhy6nriHSYY/s320/nestedESXi-template.PNG" width="320" /></a></div>
After taking the snapshot, we can see the virtual machine files and the snapshot in the datastore browser. The main VMDK that contains the ESXi install itself is about 540MB large. The snapshot delta file contains no data so that's nice and small. The new clone ends up taking under 3MB. As soon as you start it up, it will grow a bit but only the new written blocks are kept in the snapshot delta file.<br />
<br />
<br />
<br />
Since I set up most of my labs the same way, there are some entries added to the script variables that don't change between script runs. The only variable that has to be entered into the clone script each and every time is the number of nested ESXi hosts I want. This changes every time I set up a lab so I've used a Read-Host prompt for that. I mostly use VSAN or some type of shared storage for the lab, so I set the createvmfs variable to false. If I don't use VSAN, I usually set up a <a href="https://www.starwindsoftware.com/starwind-virtual-san" target="_blank">Starwind Virtual SAN</a>. It's an easy to set up iSCSI target with a free 2-node license for many IT professionals. It also offers VAAI support and some storage acceleration, so that's nice.<br />
<br />
Creating one ESXi clone takes about 30 seconds until boot. During the first boot it runs through some configuration scripts and is ready to be used in under two minutes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjly2APLRlztxYtGa8vmsKwE4UOVIQUs0qejxosbDokDk2sMaDBVJ7Ue62JD6rgxPPIBfMJsQX9m2dNXlHhdoicbjlbFRaChjTfwNCdHukN57lOYpm4Zmqm9q2FYwI4DzS7uvqqJVElHoA/s1600/esx01console.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjly2APLRlztxYtGa8vmsKwE4UOVIQUs0qejxosbDokDk2sMaDBVJ7Ue62JD6rgxPPIBfMJsQX9m2dNXlHhdoicbjlbFRaChjTfwNCdHukN57lOYpm4Zmqm9q2FYwI4DzS7uvqqJVElHoA/s320/esx01console.PNG" width="320" /></a></div>
<br />
Next up will be a blogpost on how to automate a vCenter deployment into this lab and a script to add the nested ESXi hosts to the fresh vCenter server. Adding all of these together should give you a quick and easy way to deploy a nested vSphere lab.<br />
<br />
<b>New script (for the linked clones)</b><br />
<b><br /></b>
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0;"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66</pre>
</td><td><pre style="line-height: 125%; margin: 0;"><span style="color: green;"># Script by Hans Lenze Kaper - www.kaperschip.nl</span>
<span style="color: green;"># heavily inspired by William Lam - www.virtuallyghetto.com</span>
<span style="color: green;"># Variables for connecting to vCenter server</span>
$viServer = <span style="color: #a31515;">"192.168.2.200"</span>
$viUsername = <span style="color: #a31515;">"root"</span>
$viPassword = <span style="color: #a31515;">"password"</span>
<span style="color: green;"># Variables for the lab host</span>
$sourceVM = <span style="color: #a31515;">'nestedESXi-template'</span>
$sourceSnapshot = <span style="color: #a31515;">'20160904'</span>
$destDatastore = <span style="color: #a31515;">'SSD1'</span>
$destVMhost = <span style="color: #a31515;">"192.168.2.230"</span>
$numberNestedESXiInput = read-host -Prompt <span style="color: #a31515;">"How many nested ESXi hosts do you want to deploy?"</span>
<span style="color: green;"># Variables for the nested lab</span>
$iprange = <span style="color: #a31515;">"192.168.10"</span>
$netmask = <span style="color: #a31515;">'255.255.255.0'</span>
$gateway = <span style="color: #a31515;">'192.168.10.254'</span>
$dns = <span style="color: #a31515;">'192.168.10.254'</span>
$dnsdomain = <span style="color: #a31515;">'test.local'</span>
$ntp = <span style="color: #a31515;">'192.168.2.254'</span>
$syslog = <span style="color: #a31515;">'192.168.10.100'</span>
$password = <span style="color: #a31515;">'password'</span>
$ssh = <span style="color: #a31515;">"True"</span>
$createvmfs = <span style="color: #a31515;">"False"</span> <span style="color: green;"># Creates a Datastore1 VMFS volume on every host if true</span>
<span style="color: green;"># Actions - pay attention when making changes below - things may break #</span>
$numberNestedESXi = (100 + $numberNestedESXiInput)
. <span style="color: #a31515;">'C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Modules\VMware.VimAutomation.Core\VMware.VimAutomation.Core.ps1'</span>
Connect-VIServer -Server $viServer -User $viUsername -Password $viPassword
101..$numberNestedESXi | <span style="color: blue;">Foreach</span> {
$ipaddress = <span style="color: #a31515;">"$iprange.$_"</span>
<span style="color: green;"># Try to perform DNS lookup</span>
<span style="color: blue;">try</span> {
$vmname = ([System.Net.Dns]<span style="border: 1px solid #FF0000;">::</span>GetHostEntry($ipaddress).HostName).split(<span style="color: #a31515;">"."</span>)[0]
write-host <span style="color: #a31515;">"Resolved $vmname"</span>
}
<span style="color: blue;">Catch</span> [system.exception]
{
$vmname = <span style="color: #a31515;">"vesxi-$ipaddress"</span>
write-host <span style="color: #a31515;">"Set VMname to $vmname"</span>
}
<span style="color: green;"># Make my nested ESXi VM already!</span>
Write-Host <span style="color: #a31515;">"Deploying $vmname ..."</span>
$vm = new-vm -Name $vmname -Datastore $destDatastore -ReferenceSnapshot $sourceSnapshot -LinkedClone -VM (get-vm $sourceVM) -vmhost $destVMhost
<span style="color: green;"># Add advanced parameters to VMX</span>
New-AdvancedSetting -Name guestinfo.hostname -Value $vmname -Entity $vm -Confirm<span style="border: 1px solid #FF0000;">:</span>$false
New-AdvancedSetting -Name guestinfo.ipaddress -Value $ipaddress -Entity $vm -Confirm<span style="border: 1px solid #FF0000;">:</span>$false
New-AdvancedSetting -Name guestinfo.netmask -Value $netmask -Entity $vm -Confirm<span style="border: 1px solid #FF0000;">:</span>$false
New-AdvancedSetting -Name guestinfo.gateway -Value $gateway -Entity $vm -Confirm<span style="border: 1px solid #FF0000;">:</span>$false
New-AdvancedSetting -Name guestinfo.dns -Value $dns -Entity $vm -Confirm<span style="border: 1px solid #FF0000;">:</span>$false
New-AdvancedSetting -Name guestinfo.dnsdomain -Value $dnsdomain -Entity $vm -Confirm<span style="border: 1px solid #FF0000;">:</span>$false
New-AdvancedSetting -Name guestinfo.ntp -Value $ntp -Entity $vm -Confirm<span style="border: 1px solid #FF0000;">:</span>$false
New-AdvancedSetting -Name guestinfo.syslog -Value $syslog -Entity $vm -Confirm<span style="border: 1px solid #FF0000;">:</span>$false
New-AdvancedSetting -Name guestinfo.password -Value $password -Entity $vm -Confirm<span style="border: 1px solid #FF0000;">:</span>$false
New-AdvancedSetting -Name guestinfo.ssh -Value $ssh -Entity $vm -Confirm<span style="border: 1px solid #FF0000;">:</span>$false
New-AdvancedSetting -Name guestinfo.createvmfs -Value $createvmfs -Entity $vm -Confirm<span style="border: 1px solid #FF0000;">:</span>$false
$vm | Start-Vm -RunAsync | Out-Null
Write-Host <span style="color: #a31515;">"Starting $vmname"</span>
}
</pre>
</td></tr>
</tbody></table>
</div>
<b><br /></b>
<br />
<b>Old script (for deploying the OVF)</b><br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0;"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61</pre>
</td><td><pre style="line-height: 125%; margin: 0;"><span style="color: green;"># William Lam</span>
<span style="color: green;"># www.virtuallyghetto.com</span>
. <span style="color: #a31515;">"C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1"</span>
$vcname = <span style="color: #a31515;">"192.168.2.200"</span>
$vcuser = <span style="color: #a31515;">"root"</span>
$vcpass = <span style="color: #a31515;">"password"</span>
$ovffile = <span style="color: #a31515;">"%userprofile%\Desktop\Nested ESXi\Nested_ESXi_Appliance.ovf"</span>
$cluster = <span style="color: #a31515;">"VSAN Cluster"</span>
$vmnetwork = <span style="color: #a31515;">"Lab_network"</span>
$datastore = <span style="color: #a31515;">"SSD1"</span>
$iprange = <span style="color: #a31515;">"192.168.10"</span>
$netmask = <span style="color: #a31515;">"255.255.255.0"</span>
$gateway = <span style="color: #a31515;">"192.168.10.254"</span>
$dns = <span style="color: #a31515;">"192.168.10.254"</span>
$dnsdomain = <span style="color: #a31515;">"test.local"</span>
$ntp = <span style="color: #a31515;">"192.168.10.254"</span>
$syslog = <span style="color: #a31515;">"192.168.10.150"</span>
$password = <span style="color: #a31515;">"password"</span>
$ssh = <span style="color: #a31515;">"True"</span>
<span style="color: green;">#### DO NOT EDIT BEYOND HERE ####</span>
$vcenter = Connect-VIServer $vcname -User $vcuser -Password $vcpass -WarningAction SilentlyContinue
erver $vcenter -Confirm<span style="border: 1px solid #FF0000;">:</span>$false
$datastore_ref = Get-Datastore -Name $datastore
$network_ref = Get-VirtualPortGroup -Name $vmnetwork
$cluster_ref = Get-Cluster -Name $cluster
$vmhost_ref = $cluster_ref | Get-VMHost | Select -First 1
$ovfconfig = Get-OvfConfiguration $ovffile
$ovfconfig.NetworkMapping.VM_Network.value = $network_ref
190..192 | <span style="color: blue;">Foreach</span> {
$ipaddress = <span style="color: #a31515;">"$iprange.$_"</span>
<span style="color: green;"># Try to perform DNS lookup</span>
<span style="color: blue;">try</span> {
$vmname = ([System.Net.Dns]<span style="border: 1px solid #FF0000;">::</span>GetHostEntry($ipaddress).HostName).split(<span style="color: #a31515;">"."</span>)[0]
}
<span style="color: blue;">Catch</span> [system.exception]
{
$vmname = <span style="color: #a31515;">"vesxi-vsan-$ipaddress"</span>
}
$ovfconfig.common.guestinfo.hostname.value = $vmname
$ovfconfig.common.guestinfo.ipaddress.value = $ipaddress
$ovfconfig.common.guestinfo.netmask.value = $netmask
$ovfconfig.common.guestinfo.gateway.value = $gateway
$ovfconfig.common.guestinfo.dns.value = $dns
$ovfconfig.common.guestinfo.domain.value = $dnsdomain
$ovfconfig.common.guestinfo.ntp.value = $ntp
$ovfconfig.common.guestinfo.syslog.value = $syslog
$ovfconfig.common.guestinfo.password.value = $password
$ovfconfig.common.guestinfo.ssh.value = $ssh
<span style="color: green;"># Deploy the OVF/OVA with the config parameters</span>
Write-Host <span style="color: #a31515;">"Deploying $vmname ..."</span>
$vm = Import-VApp -Source $ovffile -OvfConfiguration $ovfconfig -Name $vmname -Location $cluster_ref -VMHost $vmhost_ref -Datastore $datastore_ref -DiskStorageFormat thin
$vm | Start-Vm -RunAsync | Out-Null
}
</pre>
</td></tr>
</tbody></table>
</div>
<br />
<br />hans_lenzehttp://www.blogger.com/profile/13347543223131494054noreply@blogger.com2tag:blogger.com,1999:blog-1449945363102451091.post-78076076815761477602016-08-30T16:07:00.000+02:002016-10-02T00:51:10.945+02:00In Win MS04 home server case<b>Out with the old</b><br />
<div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihsvmLD2eUIx86DKX4ohXSFaQ_KZPXsARWkdMcfS7_eOy0lO4PUdLUdn1etzC8eqyQncdEYk11NGYEuzcQT98p1Vi8v3Ko48-GandSiVe7fQNPW65hVPi9TV_RnkqQUjq6b7fWYHubQ6w/s1600/IMG_20160825_130838.jpg" imageanchor="1" style="clear: left; display: inline !important; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihsvmLD2eUIx86DKX4ohXSFaQ_KZPXsARWkdMcfS7_eOy0lO4PUdLUdn1etzC8eqyQncdEYk11NGYEuzcQT98p1Vi8v3Ko48-GandSiVe7fQNPW65hVPi9TV_RnkqQUjq6b7fWYHubQ6w/s320/IMG_20160825_130838.jpg" width="240" /></a>For some time I've been looking for a nice computer case to house my small homelab server. Finding a case that fits a mini-ITX motherboard, two 3,5" HDDs and a 2,5" SSD while omitting the PSU has been hard. So hard that I gave up. During my search I put the homeserver into a shoe box and for the past few months, the server has been running happily in it's bright red "case".</div>
<div>
<br />
<div class="separator" style="clear: both; text-align: left;">
<b>In with the new</b></div>
<div>
One of the Dutch one-day offer sites offered an <a href="http://www.in-win.com.tw/Server/zh/goods.php?act=view&id=IW-MS04" target="_blank">In Win MS04 with a 265W PSU</a> with a 30% discount. I first came across this case when I was shopping for the SuperMicro Xeon-D based home server and thought it looked nice but a bit expensive. The discount and the fact that my colleagues were making fun of my makeshift bright red case made me decide to go for this offer. It arrived in a plain beige box with some tape and some foam to keep it save.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKybWg3WjJ_NX_Pa2_hExjO-NLAXgetUDhQdUZJFmvcnhnVLgg0KtgviDn3i6A07ZBGXzgFbE8U6d92TdDV7hmRlDj9AOaVXr7UjhdoXQrV7TWcuGggabENJ3tVaHESNezgG527hZJcUA/s1600/IMG_20160825_131601.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKybWg3WjJ_NX_Pa2_hExjO-NLAXgetUDhQdUZJFmvcnhnVLgg0KtgviDn3i6A07ZBGXzgFbE8U6d92TdDV7hmRlDj9AOaVXr7UjhdoXQrV7TWcuGggabENJ3tVaHESNezgG527hZJcUA/s320/IMG_20160825_131601.jpg" width="320" /></a></div>
<div>
<br /></div>
<div>
In case you don't know this case, here are some highlights:</div>
<div>
<ul>
<li>4 hot swap drive bays</li>
<li>Slim ODD bay</li>
<li>internal 2,5" HDD bay</li>
<li>mini-itx motherboard tray</li>
<li>265W 80+ bronze PSU</li>
<li>120mm PWM fan</li>
<li>one low profile PCI-E slot</li>
<li>power button with blue LED</li>
</ul>
The metal case is about as big as an HP Microserver Gen8 but fits a standard sized mini-itx motherboard. Hooray for choice!</div>
<div>
<br /></div>
</div>
<div>
<b>Installation</b></div>
<div>
Since I'm only replacing the case, the contents is still the <a href="http://www.kaperschip.nl/2016/07/homelab-part-3-management.html" target="_blank">old homelab management server</a>. The removable motherboard tray made installing the motherboard a breeze. The screws for the motherboard were in a clearly labeled plastic bag. After installation of the motherboard, connecting all the wires for the frontpanel was easy. Only the front USB3.0 connector was a bit finicky since it required nimble fingers to get underneath the drive bays and push the connector to the board right-side up. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEtqLYLnfKimEFQ_g-kFF1MNjnIhGUFYeUSdZL4li4qojl_bduGjQOO3dNdil5fskI9HFemzjRRG_hvAACb3bxZb5BU1ScO_04dmt1HVVMgKOy8b4C0nl7eLmX393oEt8GcfIIopTvXOk/s1600/IMG_20160825_132628.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEtqLYLnfKimEFQ_g-kFF1MNjnIhGUFYeUSdZL4li4qojl_bduGjQOO3dNdil5fskI9HFemzjRRG_hvAACb3bxZb5BU1ScO_04dmt1HVVMgKOy8b4C0nl7eLmX393oEt8GcfIIopTvXOk/s320/IMG_20160825_132628.jpg" width="320" /> </a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEZN6DcfjKGA1rerkRufmuhuJ6imyAaQKIZgsstSNDYZnoWKblxmdRStzr-kkvE0xNPgpyUL0m8soQHdt470lMhFBFJw_r1Bl1nEuCsQyiY__xpvOu1w8XvRVZKwEVw9sxFzC3t24IQuI/s1600/IMG_20160825_134257.jpg" imageanchor="1" style="display: inline !important; margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEZN6DcfjKGA1rerkRufmuhuJ6imyAaQKIZgsstSNDYZnoWKblxmdRStzr-kkvE0xNPgpyUL0m8soQHdt470lMhFBFJw_r1Bl1nEuCsQyiY__xpvOu1w8XvRVZKwEVw9sxFzC3t24IQuI/s320/IMG_20160825_134257.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Minor issue with the cabling: the Pico-PSU molex connector to feed power to the backplane is a very, very tight fit. There's not enough slack in the cable to unplug the molex. A motherboard with a 24pin connector on the "north-end" won't have this issue though. </div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNu2RYt3k2L1JlJCUsvAbLWYm67eFxbrZmkU0rTSZyMhroAhZwkDaBmKHbbwzFHeJWsvWYKKWuWWscV4fUPyuMZd7RCP_pVtwnjPrMQARTkVTPRJiZbJ13wBM6oOx_XQ88HyRkGXJkcro/s1600/IMG_20160825_135323.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNu2RYt3k2L1JlJCUsvAbLWYm67eFxbrZmkU0rTSZyMhroAhZwkDaBmKHbbwzFHeJWsvWYKKWuWWscV4fUPyuMZd7RCP_pVtwnjPrMQARTkVTPRJiZbJ13wBM6oOx_XQ88HyRkGXJkcro/s320/IMG_20160825_135323.jpg" width="320" /></a></div>
I like the drive trays that allow you to mount both 3,5" and 2,5" drives in a caddy (not simultaneously). One houses a 2,5" SSD and two others house a 3,5" HDD each.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
In the end I think it's a nice case that will serve it's purpose well. For now I'm not using the included PSU because my 80W Pico-PSU delivers enough power with greater efficiency. Maybe I'll use the included PSU when I upgrade to another motherboard or maybe I won't. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5H6IT6Lh9s8HBqaPf7xvPqzzbJ538x8u_DAQZGHUSdP3BrI6hmdtRAYFsx677cOaDxs7ShwL6KBoVoMkrN36BS51TXWfBn05lTLeUET_aUr9cnWnmnCnIRZqmbPZeg5k5Jx23-_gcTRA/s1600/IMG_20160825_140804.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5H6IT6Lh9s8HBqaPf7xvPqzzbJ538x8u_DAQZGHUSdP3BrI6hmdtRAYFsx677cOaDxs7ShwL6KBoVoMkrN36BS51TXWfBn05lTLeUET_aUr9cnWnmnCnIRZqmbPZeg5k5Jx23-_gcTRA/s640/IMG_20160825_140804.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Here you can see it humming along next to it's big brother. The 25W usage is just the management server running ESXi 6.0u2 and three VMs (VCSA, Xpenology and Server 2016).</div>
hans_lenzehttp://www.blogger.com/profile/13347543223131494054noreply@blogger.com0tag:blogger.com,1999:blog-1449945363102451091.post-55132919419201751132016-08-23T17:11:00.001+02:002016-08-23T17:29:43.400+02:00Homelab part 4: Suspending the labSince my homelab is just a playground to try and test things, there's no point it keeping it running when I'm not actively using it. I've decided to shut down or suspend the virtual machines that are running and make a script that saves the state of the lab so it all comes back when it's time to go play. I use a Windows virtual machine as a jumphost and ESXi as the hypervisor so I've chosen PowerCLI as the glue that sticks it all together.<br />
<div>
<br /></div>
<div>
The first script is used to start the homelab.
<!-- HTML generated using hilite.me --><br />
<div style="background: #f8f8f8; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0;"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46</pre>
</td><td><pre style="line-height: 125%; margin: 0;"><span style="color: #408080; font-style: italic;">#variables</span>
<span style="color: #19177c;">$ipmiCred</span> = <span style="color: green;">Get-Credential</span> ADMIN
<span style="color: #19177c;">$Ip</span> = <span style="color: #ba2121;">"192.168.2.229"</span>
<span style="color: #19177c;">$vcenterCred</span> = <span style="color: green;">get-credential</span> root
<span style="color: #19177c;">$vcenterserver</span> = <span style="color: #ba2121;">'192.168.2.200'</span>
<span style="color: #19177c;">$vmhost</span> = <span style="color: #ba2121;">'192.168.2.230'</span>
<span style="color: #19177c;">$PoweredOnVMspath</span> = <span style="color: #ba2121;">'c:\temp\PoweredOnVMs.csv'</span>
<span style="color: #408080; font-style: italic;">#boot host using IPMI</span>
<span style="color: green; font-weight: bold;">try</span> {
<span style="color: green;">Get-PcsvDevice</span> -TargetAddress <span style="color: #19177c;">$Ip</span> -ManagementProtocol IPMI -Credential <span style="color: #19177c;">$ipmiCred</span> | <span style="color: green;">Start-PcsvDevice</span>
}
<span style="color: green; font-weight: bold;">catch</span> {
<span style="color: #19177c;">$ErrorMessage</span> = <span style="color: #19177c;">$_</span>.Exception.Message
<span style="color: #19177c;">$FailedItem</span> = <span style="color: #19177c;">$_</span>.Exception.ItemName
<span style="color: green;">write-host</span> <span style="color: #ba2121;">"error connecting to IPMI: $faileditem $errormessage"</span>
}
<span style="color: #408080; font-style: italic;">#load PowerCLI</span>
. <span style="color: #ba2121;">'C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1'</span>
<span style="color: #408080; font-style: italic;">#connect to vCenter server</span>
<span style="color: green; font-weight: bold;">try</span>{
<span style="color: green;">Connect-VIServer</span> -Server <span style="color: #19177c;">$vcenterserver</span> -Credential <span style="color: #19177c;">$vcenterCred</span>
}
<span style="color: green; font-weight: bold;">catch</span>{
<span style="color: green;">write-host</span> <span style="color: #ba2121;">'Connection to vCenter server failed'</span> -ForegroundColor Red
}
<span style="color: #408080; font-style: italic;">#wait for the host to start up</span>
<span style="color: green; font-weight: bold;">do</span> {
sleep 10
<span style="color: #19177c;">$ServerState</span> = (<span style="color: green;">get-vmhost</span> <span style="color: #19177c;">$vmhost</span>).ConnectionState
}
<span style="color: green; font-weight: bold;">while</span> (<span style="color: #19177c;">$ServerState</span> <span style="color: #666666;">-eq</span> <span style="color: #ba2121;">'NotResponding'</span>)
<span style="color: green;">Write-Host</span> <span style="color: #ba2121;">"$vmhost is still booting"</span>
<span style="color: #408080; font-style: italic;">#load the list of VMs that were powered on last time</span>
<span style="color: green; font-weight: bold;">try</span>{
<span style="color: #19177c;">$PoweredOnVMs</span> = <span style="color: green;">Import-Csv</span> -Path <span style="color: #19177c;">$PoweredOnVMspath</span>
}
<span style="color: green; font-weight: bold;">catch</span>{
<span style="color: green;">Write-Host</span> <span style="color: #ba2121;">'Import CSV of powered on VMs failed'</span> -ForegroundColor Red
}
<span style="color: #408080; font-style: italic;">#start VMs that were powered on last time</span>
<span style="color: green; font-weight: bold;">try</span>{ <span style="color: green;">start-vm</span> <span style="color: #19177c;">$PoweredOnVMs</span>.name}
<span style="color: green; font-weight: bold;">catch</span>{<span style="color: green;">Write-Host</span> <span style="color: #ba2121;">'VMs power on failed'</span> -ForegroundColor Red}
</pre>
</td></tr>
</tbody></table>
</div>
</div>
So this script starts the ESXi host using IPMI and loads the CSV file that contains the running virtual machines from last time and starts them as soon as the ESXi host is connected to vCenter.<br />
<br />
The second script is used to store the running virtual machines into the CSV file and shut down the ESXi host.<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #f8f8f8; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;">
<table><tbody>
<tr><td><pre style="line-height: 125%; margin: 0;"> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46</pre>
</td><td><pre style="line-height: 125%; margin: 0;"><span style="color: #408080; font-style: italic;">#variables</span>
<span style="color: #19177c;">$vcenterCred</span> = <span style="color: green;">get-credential</span> root
<span style="color: #19177c;">$vcenterserver</span> = <span style="color: #ba2121;">'192.168.2.200'</span>
<span style="color: #19177c;">$vmhost</span> = <span style="color: #ba2121;">'192.168.2.230'</span>
<span style="color: #19177c;">$PoweredOnVMspath</span> = <span style="color: #ba2121;">'c:\temp\PoweredOnVMs.csv'</span>
<span style="color: #408080; font-style: italic;">#load PowerCLI</span>
. <span style="color: #ba2121;">'C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1'</span>
<span style="color: #408080; font-style: italic;">#connect to vCenter server</span>
<span style="color: green; font-weight: bold;">try</span>{
<span style="color: green;">Connect-VIServer</span> -Server <span style="color: #19177c;">$vcenterserver</span> -Credential <span style="color: #19177c;">$vcenterCred</span>
}
<span style="color: green; font-weight: bold;">catch</span>{
<span style="color: green;">write-host</span> <span style="color: #ba2121;">'Connection to vCenter server failed'</span> -ForegroundColor Red
}
<span style="color: #408080; font-style: italic;">#find powered on VMs</span>
<span style="color: green; font-weight: bold;">try</span>{
<span style="color: #19177c;">$PoweredOnVMs</span> = <span style="color: green;">get-vmhost</span> <span style="color: #19177c;">$vmhost</span> | <span style="color: green;">get-vm</span> | <span style="color: green;">Where-Object</span>{<span style="color: #19177c;">$_</span>.PowerState <span style="color: #666666;">-eq</span> <span style="color: #ba2121;">'PoweredOn'</span>}
}
<span style="color: green; font-weight: bold;">catch</span>{ <span style="color: green;">write-host</span> <span style="color: #ba2121;">'Failed to find Powered On VMs'</span> -ForegroundColor Red}
<span style="color: #408080; font-style: italic;">#export powered on VMs to CSV</span>
<span style="color: green; font-weight: bold;">try</span>{
<span style="color: #19177c;">$PoweredOnVMs</span> | <span style="color: green;">Export-Csv</span> -Path <span style="color: #19177c;">$PoweredOnVMspath</span>
}
<span style="color: green; font-weight: bold;">catch</span> { <span style="color: green;">Write-Host</span> <span style="color: #ba2121;">'failed to export CSV'</span> -ForegroundColor Red}
<span style="color: #408080; font-style: italic;"># shut it all down, start with VMs that have VMtools installed</span>
<span style="color: green; font-weight: bold;">foreach</span> (<span style="color: #19177c;">$PoweredOnVM</span> <span style="color: green; font-weight: bold;">in</span> <span style="color: #19177c;">$PoweredOnVMs</span>) { <span style="color: green; font-weight: bold;">try</span>{ Shutdown-VMGuest <span style="color: #19177c;">$PoweredOnVM</span>.Name -Confirm<span style="border: 1px solid #FF0000;">:</span><span style="color: #19177c;">$false</span>} <span style="color: green; font-weight: bold;">catch</span>{<span style="color: green;">Suspend-VM</span> <span style="color: #19177c;">$PoweredOnVM</span>.Name -Confirm<span style="border: 1px solid #FF0000;">:</span><span style="color: #19177c;">$false</span>}}
<span style="color: green;">write-host</span> <span style="color: #ba2121;">'Shutting down VMs and waiting some minutes'</span> -foregroundcolor Green
<span style="color: #408080; font-style: italic;">#wait for the VMs to shut down or suspend</span>
<span style="color: green; font-weight: bold;">do</span> {
<span style="color: green;">start-sleep</span> 10
<span style="color: #19177c;">$VMState</span> = (<span style="color: green;">get-vmhost</span> <span style="color: #19177c;">$vmhost</span>|<span style="color: green;">get-vm</span>)
}
<span style="color: green; font-weight: bold;">while</span> (<span style="color: #19177c;">$VMState</span>.PowerState <span style="color: #666666;">-eq</span> <span style="color: #ba2121;">'PoweredOn'</span>)
<span style="color: #408080; font-style: italic;">#wait a few more seconds</span>
<span style="color: green;">start-sleep</span> 15
<span style="color: #408080; font-style: italic;">#shut down the ESXi host</span>
<span style="color: green;">write-host</span> <span style="color: #ba2121;">'Shutting down ESXi host'</span>
<span style="color: green; font-weight: bold;">try</span>{<span style="color: green;">Stop-VMHost</span> <span style="color: #19177c;">$vmhost</span> -Force -Confirm<span style="border: 1px solid #FF0000;">:</span><span style="color: #19177c;">$false</span> | <span style="color: green;">Out-Null</span>}
<span style="color: green; font-weight: bold;">catch</span>{<span style="color: green;">Write-Host</span> <span style="color: #ba2121;">'ESXi host shutdown failed'</span> -ForegroundColor Red}
</pre>
</td></tr>
</tbody></table>
</div>
<br />
As with all things in a homelab, these scripts are subject to change as soon as I think of something new. Suggestions are welcome!hans_lenzehttp://www.blogger.com/profile/13347543223131494054noreply@blogger.com0tag:blogger.com,1999:blog-1449945363102451091.post-27291049420910522022016-08-17T21:10:00.001+02:002021-02-10T15:37:03.017+01:00AHCI controller passthrough with a Supermicro Xeon-D motherboardSo someone asked me if it is possible to passthrough the onboard AHCI SATA controller from a Supermicro Xeon-D motherboard to a VM. Since I use ESXi, that's what I'll use to show you this. Hyper-V 2016 features <a href="https://blogs.technet.microsoft.com/virtualization/2015/11/19/discrete-device-assignment-description-and-background/" target="_blank">discrete device assignment</a> in the latest technical preview builds, you can try this with Hyper-V too. Maybe I'll do a blogpost on that some other time.<br />
<br />[10 feb 2021 - Update] This still works in ESXi 7.0.1 but the passtru.map has been placed in the subfolder /etc/vmware/.<br /><br />
I started by having a look in the list of devices that are available for passthough. The Lynx Point AHCI Controller was not on the list of devices since SATA controllers are unsupported for passthrough. Let's fix that!<br />
<br />
Log in to your host using SSH or use the DCUI locally.<br />
Find out the PCI ID using the following command:<br />
<i>esxcli storage core adapter list</i><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXhddgalCtboZq-uLB3k2ANK-DWpSe3tFn320SIGb4I0igx6QfCJXbkK6f60WoCy2HHHl9FQoead3Ua5KYCl1ls3UxQ_S7APaTvu9G3hOMx0cjLdSkfUF3zL3uUuH1S0B2CGdTpnYhHtc/s1600/FindPCI-ID.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="100" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXhddgalCtboZq-uLB3k2ANK-DWpSe3tFn320SIGb4I0igx6QfCJXbkK6f60WoCy2HHHl9FQoead3Ua5KYCl1ls3UxQ_S7APaTvu9G3hOMx0cjLdSkfUF3zL3uUuH1S0B2CGdTpnYhHtc/s640/FindPCI-ID.PNG" width="640" /></a></div>
<br />
Your onboard SATA controller is usually listed as vmhba0. The ID we're looking for is listed in the Description. So in this case, it's 0000:00:1f.2.<br />
<br />
Enter the next command to find the PID. Substitute the PCI ID with your own ID if needed.<br />
<i>lspci -n | grep 0000:00:1f.2</i><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4guuavn2Hwtm-bSMXxoJxKnVfSl9T_Pf5i0kUxi_l-YrW8KSkdv_XhrLssG3TjZHdDusLpdUGC2g0RM9wFysKu_YhSxQ102DuG65pumoDC36L4z3O5fK-25OkvvzaMdonmhKLVnAqxnI/s1600/FindPCI-ID2.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="33" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4guuavn2Hwtm-bSMXxoJxKnVfSl9T_Pf5i0kUxi_l-YrW8KSkdv_XhrLssG3TjZHdDusLpdUGC2g0RM9wFysKu_YhSxQ102DuG65pumoDC36L4z3O5fK-25OkvvzaMdonmhKLVnAqxnI/s320/FindPCI-ID2.PNG" width="320" /></a></div>
<div>
In this case, the PID we're looking for is 8c02. Add this PID at the bottom of /etc/passthrou.map like so.</div><div>Edit: In ESXi 7.01, this file can be found here: /etc/vmware/passthru.map</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifjEvcOjVC_znH5wFsg5EEpgMjb6hHEpNwHkXl2gT2nI5V6Blhyphenhyphen1RBAUyGQc_A9uqYaEai8Wml-fZtO5VI4oB3Ct9_ouHxpR5BtnW4F8lOOAYyCP1KnKocuE-taOPGgObsZq107J9Ltc0/s1600/AddToPassthroughMap.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifjEvcOjVC_znH5wFsg5EEpgMjb6hHEpNwHkXl2gT2nI5V6Blhyphenhyphen1RBAUyGQc_A9uqYaEai8Wml-fZtO5VI4oB3Ct9_ouHxpR5BtnW4F8lOOAYyCP1KnKocuE-taOPGgObsZq107J9Ltc0/s400/AddToPassthroughMap.PNG" width="400" /></a></div>
<div>
Save your changes and reboot the ESXi host.</div>
<div>
<br /></div>
<div>
After the reboot, you'll be able to select the Lync Point AHCI controller.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1nUXwvAo__y7Ni7V6efK_ILa7LcJGtz4rWFmmRrUFBFbydceWSAi-uUHnSdqwkIvP7x77RHKnrcljEJD1iMO8nlJWUFFdmcWidKdR3GBXpJ4Nq9sGD6HpynUnL3_1tJXtq_ab2JHVBsA/s1600/PassthroughAHCIcontroller.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1nUXwvAo__y7Ni7V6efK_ILa7LcJGtz4rWFmmRrUFBFbydceWSAi-uUHnSdqwkIvP7x77RHKnrcljEJD1iMO8nlJWUFFdmcWidKdR3GBXpJ4Nq9sGD6HpynUnL3_1tJXtq_ab2JHVBsA/s400/PassthroughAHCIcontroller.PNG" width="327" /></a></div>
<div>
<br /></div>
<div>
So after this, follow<a href="https://kb.vmware.com/kb/1010789" target="_blank"> the normal procedure for adding a passthrough device to a VM</a>.</div>
<div>
Mark the device for passthrough and reboot the host.</div>
<div>
<br /></div>
<div>
When the host is up again, edit the VM settings to add the PCI device.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg451x_e3YKdaoiZeTm_jvGBjypdvAqM1GGrB4kYyQ7E5nIurhbFRNrtu4yxlpjIWa6am1zq5i39P1e3nWZB9xs5RL1-PUrQGrH1huIjoPKYjDZdB_FNstQ2LvFgfREk6g5d81yGanNK6o/s1600/EditVM.PNG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="287" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg451x_e3YKdaoiZeTm_jvGBjypdvAqM1GGrB4kYyQ7E5nIurhbFRNrtu4yxlpjIWa6am1zq5i39P1e3nWZB9xs5RL1-PUrQGrH1huIjoPKYjDZdB_FNstQ2LvFgfREk6g5d81yGanNK6o/s320/EditVM.PNG" width="320" /></a></div>
<div>
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7QFqo7snXnUqt1bOXRSQvtMolxWV2SVK49Ak2kU3EpGCqMIwcPqp208g7HsOwn8HDwVoKOxiUal7-QQL2Lty2N24IZM2cNiT46VQCLmLurDAZ7GIkATeynP2Xn-vjebiicf8WqWNnyqk/s1600/AddControllerToVM.PNG" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="254" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7QFqo7snXnUqt1bOXRSQvtMolxWV2SVK49Ak2kU3EpGCqMIwcPqp208g7HsOwn8HDwVoKOxiUal7-QQL2Lty2N24IZM2cNiT46VQCLmLurDAZ7GIkATeynP2Xn-vjebiicf8WqWNnyqk/s320/AddControllerToVM.PNG" width="320" /></a></div>
After adding the PCI device to the VM, boot it to see the result.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
In my case, the VM I added the controller to is a Windows 7 virtual machine. To show you the controller and the connected disks, I added a screenshot of the device manager. I have two Samsung 850 Pro SSDs connected to the onboard SATA controller.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLi5VPVzSlGT0Ba0WhCFxMx8_-YHSjMIhsXwVLU75wOcYKE7OrcDPc0kwb604wVDUJAGPpOb9e1fUNtwPjO6hbIMv_fce-e3d7aJ2R1ssQBB66LY_PABHq6rfQK9cOE6hhVXs9h_PsQUE/s1600/DeviceManager.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLi5VPVzSlGT0Ba0WhCFxMx8_-YHSjMIhsXwVLU75wOcYKE7OrcDPc0kwb604wVDUJAGPpOb9e1fUNtwPjO6hbIMv_fce-e3d7aJ2R1ssQBB66LY_PABHq6rfQK9cOE6hhVXs9h_PsQUE/s400/DeviceManager.PNG" width="325" /></a></div>
<b>Reminder:</b> Since the files for the VM itself have to be stored somewhere, you'll need another storage device. In my case, all the VM files are stored on an NVMe SSD. This method can be used to create a dedicated storage VM with a number of hard drives. It's a great way to give a FreeNAS VM direct access to a number of SATA drives.<br />
<br />
Many thanks to Hilko for showing me the commands in the "Energy efficient ESXi server" thread on <a href="https://gathering.tweakers.net/forum/list_message/46209703#46209703" target="_blank">got.tweakers.net</a>. Most of this blogpost is a shameless copy of his post.hans_lenzehttp://www.blogger.com/profile/13347543223131494054noreply@blogger.com3tag:blogger.com,1999:blog-1449945363102451091.post-24290805051547044062016-07-31T21:28:00.000+02:002016-07-31T21:50:56.704+02:00Homelab part 3: ManagementIn my opinion, a homelab should be volatile. Most of my lab is used in a simple cycle:<br />
<div>
<ol>
<li>You think of something to try, test or wreck.</li>
<li>You build it as fast as possible while cutting as little corners as you can in order to make sure the results are valid.</li>
<li>Execute your test plan.</li>
<li>Evaluate the results to see if they are as expected. Troubleshoot or repeat the tests as necessary.</li>
<li>Decide if you need your setup for more tests. If yes, shut it down or safe. If in doubt or you no longer need the setup, delete all the bits.</li>
</ol>
This cycle does not mean I try one thing at a time. What it does mean is that I try to remove clutter as much as possible.</div>
<div>
In order to set up a lab as fast as possible, there are some parts of the lab I don't rebuild with every test. This is the management part of the lab. To make sure the management stuff doesn't get wiped, I put up a separate physical server just to host the management roles. So what are these roles?</div>
<div>
<ul>
<li>vCenter server for the deployment of templates and tracking of performance over longer periods of time. I also use the vSphere Web Client to manage the lifecycle of the virtual machines. </li>
<li>Sexilog to collect logs and alerts and display them on a dashboard.</li>
<li>A Windows virtual machine to use as an RDP jump box to the lab when I'm not at home. This is also the Windows server that runs all the PowerCLI/PowerShell scripts in the homelab.</li>
<li>A virtual NAS to store ISOs, templates and random bits of data. This is also the primary data storage device in the house containing all the photos, documents and other important data.</li>
</ul>
I specifically chose not to set up a domain controller because I prefer to set up a fresh copy for every test (a simple PowerCLI/PowerShell workflow makes this really easy). This way I know for certain that specific settings I use for one setup don't interfere with another.</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDFThOjDHwTTv-6eoBmh_Dw9Pn6wwQuTEzZBNVdQyAHKTjR7EgQ_nuKqUpjQSB3F9Vmdlsgmq6XCinr_GG2KN1SqW4D956UChbvO_VWjN7uq7oKIyKQc0RpjNfqPDAcj1UorAN1XqCV6Q/s1600/N3700-ITX%2528L1%2529.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDFThOjDHwTTv-6eoBmh_Dw9Pn6wwQuTEzZBNVdQyAHKTjR7EgQ_nuKqUpjQSB3F9Vmdlsgmq6XCinr_GG2KN1SqW4D956UChbvO_VWjN7uq7oKIyKQc0RpjNfqPDAcj1UorAN1XqCV6Q/s320/N3700-ITX%2528L1%2529.jpg" width="320" /></a></div>
The resources needed for these workloads are quite modest. This enables me to look at a low-power option that is affordable (usually, the nice low-power servers that have some grunt are costly. The Supermicro SYS-E200-8D for example). After a lot of contemplation I decided to try a very low cost option and see if I could make it work. I had 16GB DDR3 SO-DIMM and a PicoPSU lying around. That should be enough to run my management workloads. I went looking for a low-power motherboard with a few CPU cores so I wouldn't have to worry about CPU contention. Because of this reason, a quad core CPU was preferable to a dual core option. <br />
I found an <a href="http://www.asrock.com/mb/Intel/N3700-ITX/" target="_blank">Asrock N3700-ITX</a> and I decided to give it a shot. It looked a bit underpowered with a quad core Atom (Braswell) processor, passive cooling and four SATA ports. The N3700 provides a little higher turbo speed over the N3150. No idea if this really helps but the price difference is small enough to try. If I didn't have a PicoPSU, I'd have bought the Asrock N3150DC-ITX because it has a 12V DC input and comes with the appropriate 65W adapter.<br />
<br />
The first attempts to get ESXi to run on the system were unsuccessful. Many thanks to Antonio Jorba for <a href="http://mobiletiger.jorba.de/vmware-esxi-6-0-n3150-itx-intel-celeron-braswell-platform-problem-solved/" target="_blank">solving the problem</a>. Deploying the vCenter appliance was simple enough once I figured out how to connect to the Host Client and such. An SSD stores all of the virtual machines and two connected 5TB disks take care of storage for the virtual NAS. Running just ESXi 6.0 idle with a single SSD connected uses 11W (balanced power management). The complete system with the disks and the virtual machines running uses around 25W. That equals about 50 euros a year in power if I leave it running 24/7. So it meets <a href="http://www.kaperschip.nl/2016/07/homelab-part-1-requirements.html" target="_blank">the requirements</a>.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD6UcQ_2xp9ldTM7cBdZzR21VeCetzQZq2_OoeD_DMwpn0ogeSrQLsYjcCbcPF7lOE-DoOzgoh6z1SIRo2jcg6RHY3Xust9S-Iut8KlT4o5elQdXJURshk0TRmPbEPo5IrPjhV_tVARXk/s1600/N3700.PNG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="242" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD6UcQ_2xp9ldTM7cBdZzR21VeCetzQZq2_OoeD_DMwpn0ogeSrQLsYjcCbcPF7lOE-DoOzgoh6z1SIRo2jcg6RHY3Xust9S-Iut8KlT4o5elQdXJURshk0TRmPbEPo5IrPjhV_tVARXk/s400/N3700.PNG" width="400" /></a></div>
<br />
Shopping list:<br />
<br />
<ul>
<li>Asrock N3700-ITX</li>
<li>PicoPSU 90W</li>
<li>80W 12V Leike adapter</li>
<li>2x 8GB Corsair Vengance</li>
<li>Samsung SM843T - 480GB</li>
<li>Random shoe box I dug out of the waste paper bin</li>
</ul>
<br />
I'm still looking for a nice case to put the board, SSD and two HDDs into. Something the size of an average shoe box would be perfect. If you have a good suggestion, let me know!</div>
hans_lenzehttp://www.blogger.com/profile/13347543223131494054noreply@blogger.com0tag:blogger.com,1999:blog-1449945363102451091.post-51530622196220099462016-07-17T01:02:00.000+02:002016-07-31T21:47:24.204+02:00Homelab part 2: router and networking<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.telfort.nl/gx_upload_mm/6/3/7/901_fullimage_1d98ecbe-2112-48ab-93de-8aeb1706bdf1_arcadyan-vgv.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="132" src="https://www.telfort.nl/gx_upload_mm/6/3/7/901_fullimage_1d98ecbe-2112-48ab-93de-8aeb1706bdf1_arcadyan-vgv.jpg" width="200" /></a></div>
I've been an ADSL/VDSL internet customer with the same telco provider for many years. They offer me a simple internet connection with an Arcadyan VGV7519 modem/router/wireless access point style device. The telco I chose does not limit the functions of their modem or limit access to the webinterface. This allows me to make any configuration changes I want (requiring frequent resets to factory defaults when I first started tinkering). There's one specific feature I'm really happy about: bridge mode! This feature puts the all-in-one device into a modem only mode. The first Gigabit ethernet port on the modem becomes an unfiltered TCP/IP connection with a public DHCP IP address from my provider. Why does this feature make me happy? Because the Arcadyan is not as stable as I'd like. During the time I've used it as a modem/router, I had to reset it about once every week. Always around 21:00 in the evening. This doesn't sound to bad but the wife agreed it was an annoyance. Internet problems while watching a movie or her favorite series is a no-go. Time for improvements! Hence bridge mode. Being able to provide a gigabit ethernet cable to a router of choice is a big plus.<br />
<a href="http://wiki.mikrotik.com/images/thumb/2/2c/Winbox-window-trafmon.png/640px-Winbox-window-trafmon.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://wiki.mikrotik.com/images/thumb/2/2c/Winbox-window-trafmon.png/640px-Winbox-window-trafmon.png" height="147" width="200" /></a>While exploring the wonderful world of cheap routers I came across Mikrotik. This Eastern European<br />
company makes network devices that can be described as true jack-of-all-trades. Most models they make combine a hardware switch chip with a processor, some RAM and a wireless antenna. Throw in some Linux based software and a GUI with a gazillion buttons and you have an ultimate nerd device. If you want it to be a simple managed switch, it can do that. If you want it to be a router with multiple routing protocols (MPLS, BGP and OSPF, to name a few) it can do that too. Being able to do all I need from my network in a single affordable box is a big plus. <i><a href="http://www.kaperschip.nl/2016/07/homelab-part-1-requirements.html" target="_blank">Requirement: Hardware reset possible</a></i> is met by allowing the wife to pull a single plug to reset internet access.<br />
<br />
The Mikrotik rb2011uias-2hnd-in:<br />
<ul>
<li>Offers 5Gbit and 5 Fast Ethernet ports (plenty for my lab)</li>
<li>Does NAT routing to the internet with minimal CPU load</li>
<li>Does DHCP for all the networks</li>
<li>Hosts some DNS zones for the lab</li>
<li>Terminates my SSTP VPN tunnels (both for site2site tunnels and remote access when I'm not at home)</li>
<li>Splits my network into two VLANs: normal network and lab network</li>
<li>Offers separate SSIDs for normal network, lab network and a guest wifi network that is isolated and has a limited bandwidth</li>
<li>Routes between the networks</li>
<li>Creates graphs of the network traffic on every interface</li>
<li>Firewalls internet traffic based on ports and mangle rules</li>
<li>Has the ability to run virtual RouterOS or OpenWRT instances (multiple routing instances, yeeh!)</li>
<li>Has a small touchscreen for quick interface configuration or graphs</li>
<li>Uses about 10 Watts</li>
</ul>
<br />
So far I'm really happy with it and I keep thinking of new things I can do with it. Next up is trying to set it up as a wireless access point controller. I've been eyeing the <a href="http://routerboard.com/RBwAPG-5HacT2HnD" target="_blank">RBwAPG-5HacT2HnD</a>, a dual band AC wireless access point to make this work throughout the house.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://img.routerboard.com/mimg/1113_l.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://img.routerboard.com/mimg/1113_l.jpg" height="396" width="640" /></a></div>
<br />hans_lenzehttp://www.blogger.com/profile/13347543223131494054noreply@blogger.com0tag:blogger.com,1999:blog-1449945363102451091.post-58119921487718076102016-07-12T15:49:00.000+02:002016-07-12T22:22:14.146+02:00Homelab part 1: requirementsI run a homelab where I play with a lot of new technology and I like to tell you about my setup. I have a number of demands (honestly, most of them are my wife's demands) that I have to adhere to:<br />
<br />
<ul>
<li>Low Power - It's nice to have a full enterprise environment to play with at home but there's a limit to how much I want to pay for such a playground. Power costs around 2 euros for every Watt burned 24/7. To meet this requirement I've decided to split up my lab into two distinct parts with a different purpose. Part 1 is the always-on stuff. The equipment that offers the core infrastructure at home (also used by the wife, so it has to be stable and easy to reset). Part 2 is the lab itself, my playground where I can build and tear down to my hearts content. Since this equipment only runs when I'm actively using it, it can be a more power hungry setup.</li>
<li>Low Noise - I like silence - so hearing a jet engine-like sound in the background when I'm at home playing with my lab is not something I want. A homelab has to be silent! More about this under the next bullet.</li>
<li>Smallish - The best room 'in the house' to host my equipment is the shed. While this may sound like bad idea, it's not. The shed is underneath the kitchen in one corner of the house. It's dry, has a relatively constant temperature and is connected to the house for power and networking. Since the kitchen has a heavy and solid floor that offers excellent noise isolation. This means I can house noisier stuff, hooray! The kitchen floor is built using big wooden beams that offer a nice space between them. While this space will comfortably fit a number of 2u rack servers, there is a limit to what it can accommodate in size and weight. </li>
<li>Fast - There's no joy in waiting for installations or configurations. I usually want to try and replicate a very specific setup and I tear down the virtual setup as soon as my tests are done. This usually means I start with an empty slate every time I decide to try something. There's no joy in having to invest multiple hours every time I want to see the effects of a single configuration change. The faster I can build and set up the test environment, the better!</li>
<li>Hardware Reset Possible - My wife has to be able to restore internet connectivity without using a single web interface or login. This means that all the devices used for the internet connectivity have to cope with a reset by power plug removal. If I'm not at home and the wife calls to tell Netflix isn't working, I want to be able to say "Don't worry darling, just pull the plug to reset it." This requirement eliminates the possibility for virtual appliances to deliver core network services. With a virtual appliance I cannot say "See the red box? Reset it by pulling the plug."</li>
</ul>
As a general rule of thumb I like integration where possible and separation where needed to get to a homelab setup that is as simple as I can make it without sacrificing functionality. Putting all the equipment behind a single power supply is a big plus as it drives efficiency. Separating lab and important data is a must as I regularly wipe and rebuild the lab to try different hardware based products.<br />
If price was no object, I'd probably buy a nice 4 node in 2u appliance with a lot of SSDs. If it were possible to make a heterogeneous appliance that'd be my dream. One Xeon-D based low-power node for the always-on part and three Xeon E5-26XXv4 nodes with lots of compute power and memory to run beastly virtual labs.<br />
<br />hans_lenzehttp://www.blogger.com/profile/13347543223131494054noreply@blogger.com0tag:blogger.com,1999:blog-1449945363102451091.post-11709184608896854382016-07-12T15:45:00.003+02:002022-07-27T13:44:48.831+02:00Start of a blogSo this is the start of a blog. What do I hope to achieve by maintaining this blog? Mostly an archive of my own findings and solutions while doing my work. If you like what you read, great! Maybe you'll like some other posts as well. Have a look.<br />
<div>
<br /></div>
<div>
<b>About me</b></div>
<div>
I work for a Managed Service Provider in the IT space for ten years and counting. While most content will be work related, opinions are my own and do not reflect the position and/or opinion of my employer.<br />
You can also find me on<div class="LI-profile-badge" data-locale="en_US" data-size="medium" data-theme="light" data-type="horizontal" data-vanity="hans-lenze-kaper" data-version="v1"><a class="LI-simple-link" href="https://nl.linkedin.com/in/hans-lenze-kaper?trk=profile-badge">-- Linkedin here --</a></div>.
<br />
<b>Content</b><br />
Since I work for an MSP (Managed Service Provider) in the Netherlands, most of the content will cover IT topics and related technology. In recent years I've been focusing on storage and server virtualization. Since this is the corner of IT where I spend most of my time, I expect the majority of content to cover this area.<br />
Homelabs in general and improving mine in particular takes up a lot of my time at home. I spend many evenings tinkering away at systems I'll probably never use. Some of this research and/or interesting findings will be posted as well. Some posts might be considered failures from the start because of the ludicrous ideas that are tried and tested anyway. Warning, not all tests have a happy ending. </div>
<script async="" defer="" src="https://platform.linkedin.com/badges/js/profile.js" type="text/javascript"></script>
hans_lenzehttp://www.blogger.com/profile/13347543223131494054noreply@blogger.com0