Here is my guide (v1.2) for the ESP8266 Wemos D1 Mini Pro pin’s.

Full Size Image: https://fearby.com/WeMosMiniD1ProGuide.png
IoT, Code, Security, Server Stuff etc
Views are my own and not my employer's.
by Simon
Here is my guide (v1.2) for the ESP8266 Wemos D1 Mini Pro pin’s.
Full Size Image: https://fearby.com/WeMosMiniD1ProGuide.png
by Simon
I had a friend who said his Windows PC was not booting and needed advice on how to fix it.
This post is to help others and to assist with a Warranty RMA ticket (spoiler one part died).
I have been in the computer industry for 27 years working in the following areas.
Jobs I have worked in:
In this time I have built possibly 50 computers and reinstalled the following versions of Windows thousands of times
How hard can it be, it was possibly a dead power supply or corrupt BIOS based on what I knew.
The specifications of the PC are as follows.
The PC was pre-built and tested by a leading Australian store on the 12th of December 2019 (#1225616)
This was my roughy plan
Warning: Do not open a computer without an anti-static strap and use a clean static-free earthed surface (do not walk on carpet and touch computer parts). Make sure the power cable is not connected to the power supply and let the power in the system dissipate over 30 minutes first.
The PC had no BIOS Speaker installed one
On power on the PC speaker made a short beep (video card present but no kleyboard_ code)
Nothing displayed on screen and I tried another keyboard but no luck.
There was no external damage on the corners or the case or damage to parts inside of the PC.
All external case screws are connected and present. I opened the side panel (thumbscrews) and have a look around.
All internal cables were firmly connected and not loose.
My heart sank when I saw that there was little dust inside the PC. Dust is usually is a good sign that the PC can be quickly repaired as dust can block fans.
I checked the Antec Dark Phantom DP301M Case top, front panel and bottom dust filters and they were a bit dusty but not bad.
Looks like Dust is not an issue. I know the family who uses this PC are not smokers or cat owners so this explains the clean PC.
I started the system with my nose right behind the back of the PC to quickly smell evidence of past or present electrical shorting.
When I pressed the Power button to turn on the Power Supply, CPU, Video card and case fans all spun up. No bad smell from dead parts. I kept tapping the delete key every few seconds to hopefully enter the BIOS. After a few seconds, the PC did not fire up the Video card image connected to a 1080P screen.
The PC had no PC Speaker so I connected a spare one I had. The BIOS was not loading and no BIOS beep codes came out of the speaker.
Hmmm, Maybe the mainboard or video card is dead. I cannot get an image on a screen?
I shut down the PC and installed an MSI 1030 Ti video card and tried to start the PC.
No luck, the system would not boot with a working video card.
I installed known good DDR 4 memory into the system to test the memory.
Installing working memory did not help.
I plugged in a Radeon 570 Video card and it to would not boot.
I plugged in the ASUS TUF 1660Ti video card into another working PC and it worked just fine. The video card was not dead.
Maybe the Power supply is not properly working?
I plugged in a working 750W power supply to the system.
The external working power supply did not allow the PC to boot.
Maybe the Mainboard, Mainboard BIOS or processor is dead?
I read the manual and tried restoring the BIOS and reloading the BIOS with the ASUS Crash Free BIOS.
The manual had a nice QR code link with instructions to follow.
I placed a new BIOS onto a USB key as instructed, renamed it and started the PC and waited 10 minutes.
The BIOS did not load.
In my 27 Years, I have only heard of one processor dying (an AMD Duron 600Mhz with no internal temperature sensors where the heatsink fell off). I was 99% certain that the Mainboard was dead. I gave the processor a 1% chance of being dead.
The only way to confirm this was to swap in an AMD Ryzen 3200G processor into the dead system.
I removed the heatsinks from the donor and dead systems and cleared the thermal paste off the processor(s) and heatsink(s)
When I removed the heatsink from the dead system there was some dust under the heatsink fins. There was a good coating of thermal compound on the heatsink.
I had plenty of fresh thermal compound so I used a fresh application on each processor installation.
I started the dead PC with a known good AMD Ryzen 3200G processor and to my amazement the system booted and I was able to enter the BIOS.
I am glad I did not order a new mainboard on a 99% hunch as it looks like the AMD Ryzen 3600X is dead.
I reviewed BIOS settings (nothing unusually) and I loaded optimized defaults and booted the PC to Windows.
Windows loaded just fine.
After a few hours of testing, updating drivers and software updates I rebooted to the BIOS and applied the latest BIOS.
Maybe a fresh BIOS will get the system loaded with the Ryzen 3600X processor?
The new BIOS applied just fine.
Is the Ryzen 3600X dead?
I installed the Ryzen 3600X into a good PC, applied thermal paste and a heatsink (for an AMD 3700X) and tried to boot the PC, It would not boot.
Looks like the AMD 3600X is dead.
I returned the Ryzen 3200G to its PC and reinstalled the dead Ryzen 3600X to its PC, Maybe the new BIOS will get it going?
I will submit an RMA as this is still covered under warranty.
We received an RMA authorization
I checked every CPU pin and took a photo (10x photos)
The CPU Box did not have a plastic holder for the CPU fan so I wrapped it in bubble wrap.
I placed the CPU in its clam shell and an anti-static bag
CPU Box
Bubble Wrap
Packaged ready to send for RAM
Now we wait.
by Simon
Even since the mid 90’s I have alway wanted a dual processor/socket system. My first PC was an AMD K6-2 333 MHz (Single Core) processor and I have always loved building computers from parts.
Recently, I stumbled across Tech Yes City’s video about buying a 12 year old Xeon (server) processors an dusing it in a gaming machine..
I do not need a gaming PC but I do need a spare development PC and PC my kids can use for Homework.
I searched eBay, GumTree and AliExpress in vein for a cheap a X58 mainboard. I ended up finding a new (new really) Tyan S7012 (S7012GM4NR) mainbaiord for $119 USD.
I was mesmerized by the 18 Memory Slots and dual CPU sockets.
I orderd 12 x Hynix RDIMM PC3-10600R 1333Mhz (HMT351R7BFR8C) memory modules (48GB in total).
I ordered 12 because I could not find a cheap set of 18 x RDIMM’s. I will try and find 6 more memory modules later.
I ordered 2x Intel Xeon E5620 SPEC SLBV4 for 99c. These chips are 4 core, 8 threads per processor.
After some research, I realised these chips are way too slow.
At the same time, I accidentally won an auction for 2x 6 core/12 Thread Intel Xeon E5645 Processor (SLBWZ 2.4GHz 12M).
The more I researched, I realised I should purchase 2 of the fastest X5600 series processor possible. I purchased 2x X5690 Xeon processors from Ali Express.
Each processor is a 6 core/12 thread 3.46Ghz (single-core boost to 3.73Ghz), 12MB cache processor made with 32nm lithography.
1 hour after purchasing from Ali Express I has confirmation from the seller.
The board arrived in a few weeks, The board was in mint condition.
I ordered2 S7012 compatible heatsinks (Noctua NH-U9DX i4)
I was a bit scared of the potential 2x 130W each processor could generate at 100% usage so I decided to lap the surface of each processor using 400 to 3000 grit sandpaper. I used a sheet of glass to lap each processor with a fresh wet/dry sandpaper sheet. I used Isopropot alcohol to lubricate the paper and carry away metal.
It turns out that each processor was very distorted. The IHS was bent out of shape.
I lapped each processor to remove each concave and convex shape.
Each processor IHS was very flat.
I was lucky enough to get a Phanteks Enthoo Pro 2 D-RGB Tempered Glass Full-Tower ATX Case – Black case for $141
The Tyan S7012 Mainbioard is 30cm x 33cm and it will nt fit in a ATX case.
The installed Tyan S7012 case looks tiny when installed in the Phanteks case.
I ordered a Corsair RMx Series™ RM1000x — 1000 Watt 80 PLUS Gold Fully Modular ATX PSU as it has the 3x EPS12V power connectors that the Tyan S7120 requires.
I added a Sound card, USB 3 card, 12 fans.
I added a Wifi6 card
I grabbed a DVD Drive, 500Gb Solid State Drive (from an old Retina Mac book and a GT1033 Video card and plugged it all together. I had read that the northbridge CPOU gets hot so I added a fan to the heatsink on the Northbridge.
The S7012 booted after a 30 seconds self-test, I installed Windows 10 and to my surprise, everything was detected.
After the first boot, the Windows 10 Task Masnger reported 12 cores/24 threads and 48GB of memory.
On a cool winters night, the CPU’s were barely 10c above ambiet temperatures.
Time to run Cinebench R23 and stress every core.
Now CPU cores were hitting 39c under 100% load.
Cinebench R23 was reporting 8277 points, that’s only 20% behind my AMD Ryzen 3700X
What was concerning was 366 Watts full load (all Core stress test
I set the Windows Power plan to “Power Savings” and now the power dray is a respectable 128W.
In order to use more than 4 PCI cards, I had to buy some PCI over USB extension cards. The Heatsinks were blocking 2x PCIe slots.
In routed 2x PCI-E slots over USB to allow the Heatsink to intake air.
I routed 1x sound cards and 1x USB 3 card to the vertical PCIe card mounts on the case.
Looks ghetto but it works
I managed to find 6 more RDIMM memory sticks that matched the memory that was installed. It was even made in the same week.
18 Memory banks were populated.
72GB memory installed at full speed.
I installed the fans ready for summer.
I routed some case RGB under my power cable.
Even though this system is 12 years old it boots Windows in 20 seconds (after self-test) and it is a fast machine to use.
Would I game on this? No.
Would I code on it? Yes.
Would I run it 24/7? No.
Would I do this again? Yes
I still have a spare PCI-E slot for a SATA 3 card.
by Simon
Here is a guide on using the GUI TortoiseGIT, GIT for Windows with GitHub.
Make sure you have a GitHub account (free is OK) https://github.com/
Login to GitHub
I used my defined hardware Security Key
I clicked New Repo
Repo Settings
I clicked Create repository
Now I will create an SSH key to protect communications with GitHub.
When logged into GitHub, I clicked the SSH and GPG Keys menu
I clicked New SSH Key button
GitHub wants a public SSH Key
I used this command to generate a public and private SSH key
ssh-keygen -t rsa
Generate key output.
FYI: These Keys have been deleted, they have not been used beyond this demo
A Public and Private key was generated
id_github_test.pub = Public Key
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDKeAydCIpEB9EuBH/h0FbsnhUlmQT/ylKowlOWEkvl0CRZO2b7ak71GI5V4IJtVESjx/yZ3hHAhlOYp5VXbpTXv9rbKGEA12ii6d7cNOzfaAqXoHhdWqxfsfSRq0oocDVt1Inwdwsnh7tRqLHxRt0z0Gg/7m2s3sEIQqbtFkaQGjugQqs6Y9npWLd9utUcnUIRk3kajnlEeAZNVUMEn1hbX/PjODrzyI2JvGMxFzeRUTOSDWRAh6cNTM6fNZI6TLBdWHbmlZujgitiRxkWjmph31epxAkyTc0CsZ4VelU2uDgRLiWFdv+/SY2uT0/WaqZY3AlqM2GdR+WVTtiJJoh4e9ARR/ehZIkJMoWQlZa5Y8t1GnMcOa9sj3VTW5lGt1u+0JJP6IGa9T4UmxkqZRvJTDrZ1Flxcdu61is5tNLI10PYOcXz78jGSNnb8cfNzaMIHsI4oLMdurDDUz5w+5AQ9lA7gi4DE4uiX5cAsNe9jJsixB7TvCr6LF+k36Q0T3c= [email protected]
id_github_test = Private Key
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABB8qp/Pde
q+G2Xrp+27vB7PAAAAEAAAAAEAAAGXAAAAB3NzaC1yc2EAAAADAQABAAABgQDKeAydCIpE
B9EuBH/h0FbsnhUlmQT/ylKowlOWEkvl0CRZO2b7ak71GI5V4IJtVESjx/yZ3hHAhlOYp5
VXbpTXv9rbKGEA12ii6d7cNOzfaAqXoHhdWqxfsfSRq0oocDVt1Inwdwsnh7tRqLHxRt0z
0Gg/7m2s3sEIQqbtFkaQGjugQqs6Y9npWLd9utUcnUIRk3kajnlEeAZNVUMEn1hbX/PjOD
rzyI2JvGMxFzeRUTOSDWRAh6cNTM6fNZI6TLBdWHbmlZujgitiRxkWjmph31epxAkyTc0C
sZ4VelU2uDgRLiWFdv+/SY2uT0/WaqZY3AlqM2GdR+WVTtiJJoh4e9ARR/ehZIkJMoWQlZ
a5Y8t1GnMcOa9sj3VTW5lGt1u+0JJP6IGa9T4UmxkqZRvJTDrZ1Flxcdu61is5tNLI10PY
OcXz78jGSNnb8cfNzaMIHsI4oLMdurDDUz5w+5AQ9lA7gi4DE4uiX5cAsNe9jJsixB7TvC
r6LF+k36Q0T3cAAAWQW2CKdldNidDA+k4SncUsW+IYNcL85ir3tozfEaJHQB8icJJQpMB/
x0Y8pCpo88L3uaIeh5013yaiX4wPLt45701g0r4sBzH2UirEeyWRMGU02K2MNbGBgWUJJR
74VJ1ZjVVCptlNKoh0hebsOoVO4cdbN3FDs0D3ui/dXQb9h6D0UdyMmN9yFO7YXvtvmNyI
JEvVTJEPlt55Bill+0AQJex7lHj0z1B5sDZyjfDeMuKys+kb8ly73ZVm/59DQYiEVTAlU+
Ky70jzgwRTxhhmziGfDl+YhJI/xIYvWLhTZIw87kWyjP1fNIy4pYWLeCz+pLFDgVEI23Gl
f4P/r/OtPOf6tDu1MmHAlZ0Hw7qLTxu8sHtRxinzHcin7HcarquoouGPXPjFPPINjS/s4I
OPApLBsh0TvQdlkyTnQK2ZjNNoedLE5467sMN8sp65z+8LwaSidJkmrG38eUKWtg1qtDJN
Iyh8/5UVp+pyyu4IDVRIull6b0qmY93EcPfZVaADIKj0DDSZyacjkywSJDdupRwdCmwwKc
QB5ENvBNMU3f5IuL14F1VGickRcz2P1rLN1bndffH6MbvHRlrzKM9fymexTT1uFFTPtOnK
wzI8KYMwUynt7FDcUVTnK6OIyTxN/tfkaYWmV7AtTM5TH+GmJL+R+8QVlU+9i8LRzmjnVE
fUYc0zem/5sJqVQgJu/uSCCmtNdSVFKnSWq+/WFa1cQjnJ0baC9kuviFN/iWPZOvLJ1tyS
WsVxU+oTLCf9L0gTE8MJGFBh8QB7DVDuFFBrM3h0SsqkESKicWKL0RIPcyChQXAiQgxbSK
YAvTl6znCgVLyUHG5ggJpfKp+T57MqVUuZCPsEwAZ9ZOik3fPyVPN5a59SmCRMpY5w8N3Y
n+YgAd3tyIkzH/RbGOOGS2Oy8FyONWMXt9XnAXx2HHbvYl7nqCiSIfTSrsuAqX7CwaXk/5
8FHsx65YYWikxtb2FY5Mo+mKONXIbEbDlmFuDXYmGdi2dUyrrZMpfUMRMI4VaARH2Y1pX4
MtLfAjPPFkYF2GFnI1eUnexH36FS6DKoM5/YhQbqMlsEtzsyH2l2sosd/PgITpq94quToA
Cr12uXaYy/037pNutZXPkYD5R5vwcZgnAu8d3KOA+VzRedz1R4K4iTGgfoRRFyjz1tugvM
ruJGLDyAk09JDoqWasFtpsjjGAt9Z9s34s9PbQggFFs44ZbBvPeaD5peBbaP6bo1ekG+2B
5A+zMkeajCoKJx/W3T7oZeSL5Z9SscwsmcPRA/hP9tfXMKA93b55pHgXlu0Qbkvm3mrd05
a3RrrPCfy8dJAeW7ieR1p+BSc7t1btZfQ1n2HF994hOEkkWZ1lghXNY0/F5eP6glDnT795
ZPx00M96+6Jz7EnJOblQemfKfB3Da33MgyTMnQ/5kzQMMhk2KD7CFvzFXuVmA0oTy8Ney6
6w7BreBWYmuNUYPa+WGxkkGlivMf0a4uIcjNcPD/eyKnAp+sbRP8ZrfKFyAaZC8KWNkhPf
GA13aqMF2vIDCBTlvhMN8uGsojn7f4NVy8Frvqbm+ZqG3TwSrtgUfx2cXN1QLXvuAcFc0z
BQrh4aLy31dXpzoj0cPp3DMQF7jyp6mhcFopICrpUW+2wQKD8wOMc1BtziIpJtDXFQrh3l
QhN3/T15hnwgrt2qO/cyP0MxNLgVqN8F1+Am2gPqASyI0U/mZbh1W0ydpupcHBRc/BN37U
pc6KwT2uQ8D/b/Y8etn3QSlcTnVzZIFSSUWTHJKDnGIh/UwFj/6rESuuV+oSmH3nTVAjPT
XDTZUjd3GH7R4Ghf5dfl7eouHHLvYd58EVSZV1kGEY7W3jk74y0Vkjx9unjY1TtolIiNkD
A6h6Yt32e8MjNec0XzVHjEbXn+8=
-----END OPENSSH PRIVATE KEY-----
FYI: These Keys have been deleted, they have not been used beyond this demo
I added the Public Key to GitHub
SSH Keys are listed in GitHub
I create a different key per repository.
I checked to see if the “git” command was installed on my local machine.
I will install Git from https://gitforwindows.org/
I download Git-2.32.0.2-64-bit.exe and started the installer
Folder C:\Program Files\Git
Set Options (e.g I like Check for Daily updates)
Start Menu Folder
Text Editor: I like Sublime Text from https://www.sublimetext.com/3
Set an Initial Branch name
Set 3rd party software options
Set HTTPS options
Set Line Endings preferences
Set Terminal Emulators preferences
Set Git Pull default preferences
Set Credential Manager preferences
Set Extra Options
Experimental Options
Installing
First Launch
Git is installed
Visit https://tortoisegit.org/
Download Gif (64bit)
I started the installer.
Licence Agreement
SSH Type
Components
Install
Installing (Wizard)
Language: English
Shell Extension
I checked for a known git path.
I set my desired git username and email
I set desired SSH settings
I create C:\Code\MyTestRepo
Before I can clone a repository I need o set the past to SSH in TortoiseGit.
I right-clicked on C:\Code\MyTestRepo and selected TortiseGit\Settings
I expanded the Network Node and set the following as the SSH Client
“C:\Program Files\TortoiseGit\bin\TortoiseGitPLink.exe”
I saved the Settings.
Now I can clone a repositor to C:\Code\MyTestRepo,
I right clicked on C:\Code\MyTestRepo in explorer and clicked Git Clone
I added by GIT URL (Obtained from GitHub), I also set the path for the Private Key I created earlier.
I was informed that the key is in the wrong format
I need to convert the RAS Private Key to a Putty PPK Key
I opened the Open Putty Gen
I click Load and select the id_github_test private key I created earlier
I entered my private key password
The private key loaded.
Now I can export the private key to a PPK format
Getting back to cloning a repository I right-clicked on C:\Code\MyTestRepo
I set the PPK private key
I entered the password
I accepted the key
The Repository started cloning.
I created a quick Visual Studio project and saved it to C:\Code\MyTestRepo\Hello World
Visual Studio files were visible in C:\Code\MyTestRepo
I Commit the new files to the repository (main branch)
I selected desired files to commit
Files were added
I right-clicked on C:\Code\MyTestRepo and selected TortoiseGit\Push
Files are now visible in GitHub
Awesome
I set up Git on multiple machines, cloned, made chances, committed those changes and pushed. I was able to Sync down those changes to each machine.
Good advice on Using Git
Happy Coding
by Simon
In early 2021 www.fearby.com died and it was all my fault. Here is my breakdown of the events.
On the 4th of January 2021, I woke to see my website not loading.
https://www.fearby.com had 2 servers.
Upon investigating why my website was down I found out that WordPress could not talk to the database server. I tried to log into the database server via SSH failed (no response). I tried logging into my db.fearby.com server via the root console and it too did not work.
I was locked out of my own server and memory told me it was caused by my be playing with fail2ban and other system auditing tools a few months earlier.
I tried restoring the db.fearby.com serer from backups (one at a time). I had the last 7 days as individual backups. I had no luck, all of my backups were no good (I sat on the problem too long).
In mid-2020 I locked myself out of db.fearby.com (SSH and root console) because I setup an aggressive fail2ban, AIDE intrusion detection system(s) and firewall rules. I could no longer access my db.fearby.com server via SSH or the root console. The database server was still operational and I foolishly left it running (with no access).
I did not know how to (or had enough time) reset the root password on the Debian server. I was unable to think of a fix to restore my website. I should have reset the root password, it is easy to do thanks to a post from Janne Roustemaa – How to reset root password on cloud server.
A few months ago I finally found out how to reset the root password of a Debian server.
I followed Janne Roustemaa’s guide here: How to reset root password on cloud server.
I logged into the Up Cloud Hub.
I shut down db.fearby.com from the UpCloud Dashboard.
I created a backup of db.fearby.com (just in case). I upgraded my backup plan from 1 backup every 7 days to daily backups for 7 days and weekly backups for 1 month.
I deployed a new temporary (cheap) server alongside the dead server in Chicago.
Get $25 free credit on UpCloud and deploy your own server: Use this link to get $25 credit (new UpCloud users only).
I called the server “recovery.fearby.com” and set Debian 9 and the Operation System (same as the dead server).
I added the command “shutdown -h 1” to the Initialization script to ensure the server shuts down after it was deployed.
I can only add the disk to the new server if the old db.fearby.com server is shut down.
I shut down db.fearby.com and recovery.fearby.com servers.
Both servers have shut down
I detach the disk from db.fearby.com server.
In the UpCloud Dashboard, I opened the db.fearby.com and clicked the resize tab
I clicked the Detach button.
I clicked Continue
Now I attached this disk as a secondary disk onto the recovery.fearby.com server.
In the UpCloud hub I clicked Servers then selected the recovery.fearby.com server, then clicked the Resize Tab
I scrolled down and clicked Attach existing storage
Attach existing storage dialogue
I selected the system disk from the db.fearby.com (that I detached earlier)
I clicked Add a storage device button
Now I have attached the storage from db.fearby.com and attached it to recovery.fearby.com as a secondary disk.
I started the recovery.fearby.com server by clicking Start
The server is starting
When the server started, I obtained its IP and connect to it with MobaXTerm.
Now I can access the db.fearby.com disk.
I do not want to reset the root password until I undelete the files I need.
I ran this command to verify the attached disks.
lsblk
Two disks were visible
Alternatively, I can view partitions with the following command
cat /proc/partitions
major minor #blocks name
254 0 26214400 vda
254 1 26213376 vda1
254 16 52428800 vdb
254 17 52427776 vdb1
I can see partition data with these commands
recovery.fearby.com disk: /dev/vda1
fdisk -l /dev/vda1
Disk /dev/vda1: 25 GiB, 26842497024 bytes, 52426752 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
db.fearby.com disk: /dev/vdb1
fdisk -l /dev/vdb1
Disk /dev/vdb1: 50 GiB, 53686042624 bytes, 104855552 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
I ran this command to mount the second disk
mount /dev/vdb1 /mnt
I looked in the “/mnt/Backup” folder as this was where I had daily MySQL dumps saving too on the old system.
The folder was empty. It looks like the file system was corrupted.
I assumed the file system was corrupt, I installed Testdisk as I wanted to recover deleted SQL dump backups in the backup folder.
sudo apt-get update
sudo apt-get install testdisk
I confirmed testdisk was installed
photorec --version
I ran testdisk and passed in the disk as a parameter
sudo photorec /dev/vdb1
I selected the Disk /dev/vdb1 – 53GB and pressed enter
I selected ext4 partition and pressed enter (not whole disk)
I selected ext2/ext3/ext4 filesystem and pressed enter
I selected Free to only scan in unallocated space and pressed enter
When asked to choose the recovery location to restore files to I selected /recovery (on the recovery.fearby.com disk , not the db.fearby.com disk.
I just realized that the recovery.fearby.com disk is 25Gb and the db.fearby.com disk is 50GB, lets hope I do not have more than 25GB of deleted files (or I will have to delete recovery.fearby.com and deploy a 100GB system) and run undelete again.
After 20 minutes 32,809 files were recovered to /recovery/recup_dir
I pressed CTRL+C to exit photorec
I changed directory to /recovery
cd /recovery
I counted the recovered files
find . -type f | wc -l
>32810
Recovered Files were placed in sub folders.
drwxr-xr-x 68 root root 4096 Jan 19 13:28 .
drwxr-xr-x 23 root root 4096 Jan 19 13:28 ..
drwxr-xr-x 2 root root 20480 Jan 19 13:21 recup_dir.1
drwxr-xr-x 2 root root 20480 Jan 19 13:21 recup_dir.10
drwxr-xr-x 2 root root 20480 Jan 19 13:21 recup_dir.11
drwxr-xr-x 2 root root 20480 Jan 19 13:21 recup_dir.12
drwxr-xr-x 2 root root 20480 Jan 19 13:21 recup_dir.13
drwxr-xr-x 2 root root 20480 Jan 19 13:21 recup_dir.14
drwxr-xr-x 2 root root 20480 Jan 19 13:22 recup_dir.15
drwxr-xr-x 2 root root 20480 Jan 19 13:22 recup_dir.16
drwxr-xr-x 2 root root 20480 Jan 19 13:22 recup_dir.17
drwxr-xr-x 2 root root 20480 Jan 19 13:22 recup_dir.18
drwxr-xr-x 2 root root 20480 Jan 19 13:22 recup_dir.19
drwxr-xr-x 2 root root 20480 Jan 19 13:21 recup_dir.2
drwxr-xr-x 2 root root 36864 Jan 19 13:22 recup_dir.20
drwxr-xr-x 2 root root 24576 Jan 19 13:22 recup_dir.21
drwxr-xr-x 2 root root 20480 Jan 19 13:22 recup_dir.22
drwxr-xr-x 2 root root 24576 Jan 19 13:22 recup_dir.23
drwxr-xr-x 2 root root 20480 Jan 19 13:22 recup_dir.24
drwxr-xr-x 2 root root 20480 Jan 19 13:22 recup_dir.25
drwxr-xr-x 2 root root 32768 Jan 19 13:22 recup_dir.26
drwxr-xr-x 2 root root 32768 Jan 19 13:22 recup_dir.27
drwxr-xr-x 2 root root 36864 Jan 19 13:22 recup_dir.28
drwxr-xr-x 2 root root 32768 Jan 19 13:22 recup_dir.29
drwxr-xr-x 2 root root 20480 Jan 19 13:21 recup_dir.3
drwxr-xr-x 2 root root 20480 Jan 19 13:22 recup_dir.30
drwxr-xr-x 2 root root 20480 Jan 19 13:22 recup_dir.31
drwxr-xr-x 2 root root 20480 Jan 19 13:22 recup_dir.32
drwxr-xr-x 2 root root 20480 Jan 19 13:22 recup_dir.33
drwxr-xr-x 2 root root 36864 Jan 19 13:22 recup_dir.34
drwxr-xr-x 2 root root 36864 Jan 19 13:22 recup_dir.35
drwxr-xr-x 2 root root 36864 Jan 19 13:22 recup_dir.36
drwxr-xr-x 2 root root 32768 Jan 19 13:22 recup_dir.37
drwxr-xr-x 2 root root 20480 Jan 19 13:23 recup_dir.38
drwxr-xr-x 2 root root 20480 Jan 19 13:23 recup_dir.39
drwxr-xr-x 2 root root 20480 Jan 19 13:21 recup_dir.4
drwxr-xr-x 2 root root 20480 Jan 19 13:23 recup_dir.40
drwxr-xr-x 2 root root 20480 Jan 19 13:23 recup_dir.41
drwxr-xr-x 2 root root 20480 Jan 19 13:23 recup_dir.42
drwxr-xr-x 2 root root 20480 Jan 19 13:23 recup_dir.43
drwxr-xr-x 2 root root 20480 Jan 19 13:23 recup_dir.44
drwxr-xr-x 2 root root 20480 Jan 19 13:23 recup_dir.45
drwxr-xr-x 2 root root 20480 Jan 19 13:23 recup_dir.46
drwxr-xr-x 2 root root 20480 Jan 19 13:24 recup_dir.47
drwxr-xr-x 2 root root 20480 Jan 19 13:24 recup_dir.48
drwxr-xr-x 2 root root 20480 Jan 19 13:24 recup_dir.49
drwxr-xr-x 2 root root 20480 Jan 19 13:21 recup_dir.5
drwxr-xr-x 2 root root 20480 Jan 19 13:24 recup_dir.50
drwxr-xr-x 2 root root 20480 Jan 19 13:24 recup_dir.51
drwxr-xr-x 2 root root 20480 Jan 19 13:25 recup_dir.52
drwxr-xr-x 2 root root 20480 Jan 19 13:25 recup_dir.53
drwxr-xr-x 2 root root 20480 Jan 19 13:25 recup_dir.54
drwxr-xr-x 2 root root 20480 Jan 19 13:25 recup_dir.55
drwxr-xr-x 2 root root 20480 Jan 19 13:26 recup_dir.56
drwxr-xr-x 2 root root 20480 Jan 19 13:26 recup_dir.57
drwxr-xr-x 2 root root 24576 Jan 19 13:26 recup_dir.58
drwxr-xr-x 2 root root 36864 Jan 19 13:26 recup_dir.59
drwxr-xr-x 2 root root 20480 Jan 19 13:21 recup_dir.6
drwxr-xr-x 2 root root 20480 Jan 19 13:26 recup_dir.60
drwxr-xr-x 2 root root 20480 Jan 19 13:26 recup_dir.61
drwxr-xr-x 2 root root 20480 Jan 19 13:27 recup_dir.62
drwxr-xr-x 2 root root 20480 Jan 19 13:27 recup_dir.63
drwxr-xr-x 2 root root 20480 Jan 19 13:27 recup_dir.64
drwxr-xr-x 2 root root 20480 Jan 19 13:28 recup_dir.65
drwxr-xr-x 2 root root 12288 Jan 19 13:28 recup_dir.66
drwxr-xr-x 2 root root 20480 Jan 19 13:21 recup_dir.7
drwxr-xr-x 2 root root 20480 Jan 19 13:21 recup_dir.8
drwxr-xr-x 2 root root 20480 Jan 19 13:21 recup_dir.9
66 folders were recovered
I calculated the folder size
sudo du -sh /recovery
13G /recovery
I immediately started downloading ALL recovered files (13GB) to my local PC with MobaXTerm
On recovery.fearby.com I searched for any trace of recovered *.sql files that I was dumping daily via cron jobs
find /recovery -name "*.sql"
Many pages of recovered sql files were listed
/recovery/recup_dir.49/f36487168.sql
/recovery/recup_dir.49/f35110912.sql
/recovery/recup_dir.49/f36667392.sql
/recovery/recup_dir.49/f36995072.sql
/recovery/recup_dir.49/f35667968.sql
/recovery/recup_dir.49/f35078144.sql
/recovery/recup_dir.49/f37535744.sql
/recovery/recup_dir.49/f36913152.sql
/recovery/recup_dir.49/f33996800.sql
/recovery/recup_dir.49/f36421632.sql
/recovery/recup_dir.49/f35061760.sql
/recovery/recup_dir.49/f36143104.sql
/recovery/recup_dir.49/f36618240.sql
/recovery/recup_dir.49/f34979840.sql
/recovery/recup_dir.49/f37273600.sql
/recovery/recup_dir.49/f35995648.sql
/recovery/recup_dir.49/f36241408.sql
/recovery/recup_dir.49/f37732360.sql
/recovery/recup_dir.49/f34603008.sql
/recovery/recup_dir.49/f33980416.sql
/recovery/recup_dir.1/f0452896.sql
/recovery/recup_dir.1/f0437184.sql
/recovery/recup_dir.1/f0211232.sql
/recovery/recup_dir.17/f16547840.sql
/recovery/recup_dir.17/f16252928.sql
/recovery/recup_dir.17/f15122432.sql
/recovery/recup_dir.17/f17159720.sql
/recovery/recup_dir.17/f15089664.sql
/recovery/recup_dir.17/f15958016.sql
/recovery/recup_dir.17/f15761408.sql
/recovery/recup_dir.57/f69582848.sql
/recovery/recup_dir.57/f69533696.sql
/recovery/recup_dir.57/f69173248.sql
/recovery/recup_dir.57/f68321280.sql
/recovery/recup_dir.57/f70483968.sql
/recovery/recup_dir.57/f70746112.sql
/recovery/recup_dir.57/f68730880.sql
/recovery/recup_dir.57/f67862528.sql
/recovery/recup_dir.57/f70123520.sql
/recovery/recup_dir.57/f68337664.sql
/recovery/recup_dir.57/f70172672.sql
/recovery/recup_dir.57/f71057408.sql
/recovery/recup_dir.57/f68796416.sql
/recovery/recup_dir.57/f70533120.sql
/recovery/recup_dir.57/f69419008.sql
/recovery/recup_dir.57/f68239360.sql
/recovery/recup_dir.57/f69779456.sql
/recovery/recup_dir.57/f68255744.sql
/recovery/recup_dir.57/f67764224.sql
/recovery/recup_dir.57/f71204864.sql
/recovery/recup_dir.57/f70336512.sql
/recovery/recup_dir.57/f68501504.sql
/recovery/recup_dir.57/f67944448.sql
/recovery/recup_dir.50/f39059456.sql
/recovery/recup_dir.50/f38518784.sql
/recovery/recup_dir.50/f40206336.sql
/recovery/recup_dir.50/f40927232.sql
/recovery/recup_dir.50/f39485440.sql
/recovery/recup_dir.50/f39092224.sql
/recovery/recup_dir.50/f40861696.sql
/recovery/recup_dir.50/f39731200.sql
/recovery/recup_dir.50/f40337408.sql
/recovery/recup_dir.50/f38862848.sql
/recovery/recup_dir.50/f41664512.sql
/recovery/recup_dir.50/f41074688.sql
/recovery/recup_dir.50/f40828928.sql
/recovery/recup_dir.50/f41713664.sql
/recovery/recup_dir.50/f38092800.sql
/recovery/recup_dir.50/f39878656.sql
/recovery/recup_dir.50/f38305792.sql
/recovery/recup_dir.50/f38830080.sql
/recovery/recup_dir.50/f39534592.sql
/recovery/recup_dir.50/f39813120.sql
/recovery/recup_dir.50/f40435712.sql
/recovery/recup_dir.50/f41467904.sql
/recovery/recup_dir.50/f37901728.sql
/recovery/recup_dir.50/f38682624.sql
/recovery/recup_dir.50/f38191104.sql
/recovery/recup_dir.50/f38174720.sql
/recovery/recup_dir.50/f40878080.sql
//and many more
It would take a few hours to download 32,000 files from the other side of the world. Next time I deploy fearby.com, I will deploy it to Sydney Australia.
It looks like MobaXTerm does not copy to the selected destination that I selected when dragging and dropping files, Being impatient I scanned my system for a file that MobaXTerm had copied. MobaXTerm saves download to “%Documents%\MobaXterm\splash\tmp\dragdrop\”.
I opened some of the recovered SQL files and it looks like all files were partial and were not the whole database backup. A compete mysql dump should be over 200 lines long. Dang.
I downloaded all files I could from the these folders
Disappointed, I sat on things for a few weeks, I thought I had lost my website.
After I copied files from the old db.fearby.com serve to recovery.fearby.com, I reattached the storage to the old db.fearby.com system.
In vein, I tried mending the broken MySQL service on db.fearby.com. I tried uninstalling and reinstalling MySql on db.fearby.com (each time no luck). I was having trouble with MySQL not starting.
I had too many rabbit holes (mysql errors) to list. I thought my database was corrupt.
I was kicking myself for letting my access to db.fearby.com lapse, I was kicking myself for not having more backups.
I tried deploying a new server and setting it up, maybe from the frustration I did not do it correctly. I had HTTPS issues with CloudFlare. I gave up for a few months
I downloaded DiskInternals – MySQL Recovery and scanned my database. To my amazement, it reported no database corruption.
Maybe I can recover my website?
Having failed with setting up a server from scratch, a friend (Hi Zach) said I should try RunCloud to deploy a server.
I tried to document everything from attaching RunCloud to UpCloud and Cloudflare’s API to deploying a server.
Long story short, RunCloud is not for me. I had too many issues with RunCloud and IPV6, CloudFlare API Integration, No SSH access to my server, no Nginx editing capabilities with RunCloud.
I deleted the RunCloud deployed server.
I ended up deploying a server in 10 minutes manually without taking notes.
Summary
I deployed a server (this time to Sydney).
I Installed the UFW firewall (configured and started)
sudo apt-get install ntp
Set the date and time
sudo timedatectl set-timezone Australia/Sydney
Installed ntp time server
sudo apt-get install ntp
I Installed PHP 7.4 and PHP 7.4 FPM (I cheated and googled: https://www.cloudbooklet.com/install-php-7-4-on-debian-10/ )
I edited PHP Config
sudo nano /etc/php/7.4/fpm/php.ini
Installed NGINX webserver
sudo apt-get install nginx
Configured NGINX (I got an CLoudflare to NGINX SSL Certificate), I also sighned up for a Cloud flare SSL certificate
sudo nano /etc/nginx/nginx.conf
Contents
worker_cpu_affinity auto;
worker_rlimit_nofile 100000;
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
multi_accept on;
}
http {
root /www-root;
client_max_body_size 10M;
proxy_connect_timeout 1200s;
proxy_send_timeout 1200s;
proxy_read_timeout 1200s;
fastcgi_send_timeout 1200s;
fastcgi_read_timeout 1200s;
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain application/xml;
gzip_min_length 256;
gzip_proxied no-cache no-store private expired auth;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
I edited sudo nano /etc/nginx/sites-available/default
Contents
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl on;
ssl_certificate /path/to/ssl/certs/cert.pem;
ssl_certificate_key /path/to/ssl/private/key.pem;
root /path-to-www;
# Add index.php to the list if you are using PHP
index index.html index.php;
server_name fearby.com;
#Security Headers
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade";
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Frame-Options SAMEORIGIN always;
add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()";
# Force HTTPS
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
# DENY RULES
location ~ /\.ht {
deny all;
}
location ~ ^/\.user\.ini {
deny all;
}
location ~ (\.ini) {
return 403;
}
if ($http_referer ~* "laptrinhx.com") {
return 404;
}
if ($http_referer ~* "bdev.dev") {
return 404;
}
if ($http_referer ~* "raoxyz.com") {
return 404;
}
if ($http_referer ~* "congtyaz.com") {
return 404;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
# DNS
resolver 1.1.1.1 1.0.0.1 valid=60s;
resolver_timeout 1m;
}
I tested Nginx and PHP.
I installed MySQL (I Googled a guide)
I created a database, database user and assigned permissions for my blog.
I installed the WordPress CLI tool
I installed WordPress the using the wp-cli tool
wp core install --url=example.com --title=Example --admin_user=supervisor --admin_password=strongpassword [email protected]
When I had a blank WordPress I uploaded the blog folder that I backed up before.
I ran this command to allow Nginx to read the backed up website files
sudo chown -R www-data:www-data /path-to-www
I also uploaded the backup of my mysql database to /var/lib/mysql/oldblogdatabase
I ran this command to allow mysql to read the backed up database
sudo chown -R mysql:mysql /var/lib/mysql/oldblogdatabase
I also uploaded the following files to /var/lib/mysql
TIP: These files are very important to restore. You cannot just copy a database in a subfolder.
I ran this command to allow mysql ro read the ib* files
sudo chown -R mysql:mysql /var/lib/mysql/ib*
I was able to load my old website
I still have some issues to solve but it is back.
Get $25 free credit on UpCloud and deploy your own server: Use this link to get $25 credit (new UpCloud users only).
Change Log
Version 1.2
by Simon
I searched google for one of my articles and I noticed that the website https://laptrinhx.com had copied over a hundred of my blog posts and were re-publishing them at https://laptrinhx.com/tag/fearby-com
I could see they copied 127 of my blog posts. They never asked for my permission.
laptrinhx.com is copying the text content and were loading resources from my website.
A quick browse revealed that they were copying hundreds of other peoples websites and passing it off as guest posts.
It looks like they are well known for stealing peoples content
I could not see an about page or contact form but I can see these websites in the footer
It looks like Cloudflare is their Registrar.
I opened the Cloudflare Report Abuse Page
I submitted a report with the URL’s
Let’s see how long until Cloudflare takes down the pages.
I also visited Cloudflare’s contact form (https://domaincontact.cloudflareregistrar.com/laptrinhx.com) for the site owner and requested they take down my content.
At first Cloudflare’s form failed to submit.
After a few retries I was able to submit this.
I was not happy with Cloudflare’s terse message about the site owner is under no obligation to reply.
If Cloudflare does not resolve this I am under no obligation to pay Cloudflare for services for my website.
I edited my /etc/nginx/sites-available/default file and added the following rules to block requests from their servers.
if ($http_referer ~* "laptrinhx.com") {
return 404;
}
if ($http_referer ~* "bdev.dev") {
return 404;
}
if ($http_referer ~* "raoxyz.com") {
return 404;
}
if ($http_referer ~* "congtyaz.com") {
return 404;
}
I loaded the config and restarted NGINX
sudo nginx -t
sudo nginx -s reload
sudo service nixstatsagent restart
I checked the status of NGINX to ensure it came back up.
sudo systemctl status nginx
I will keep adding refer blocks if they are using other domains to scrape my site.
FYI: I resolved a CDN issue and also asked my CDN provider (EWWW Image Optimizer) to block image loads from these domains. EWWW.io are awesome.
I will keep updating this post with news from Cloudflare etc.
Good luck content owners.
Update: July 2021, Still no reply from Cloudflare, I submitted a second Copyright form with Cloudflare
Version: 1.5 Fixed image Links
by Simon
Twenty years ago it was quite common for me to reinstall Windows (Windows 3.11, 95/98/Me/2k/XP/Vista/7/8) every 6 months due to Windows becoming slow or error-prone. Luckily Windows 10 only needs to be reinstalled every year or two.
Fyi: Windows 10 has had 8 minor releases since 2018 and Windows 10 (Version 20H2) is the latest version.
In the last 3 months, my Windows (v2004) installation has become unresponsive and some USB devices are not detecting properly. I looked at my hard drive SMART data on my Windows drive and it has reported that Windows has been on for 5,152 hours, started 589 times and had 65 unsafe shutdowns (from Windows lockups).
Over 60 unsafe Widnbows shutdowns are not surprising as my Mainboard has some BIOS stability issues for 6 months.
I could have restored an Acronis True Image backup of my Windows installation but I did not keep a copy of a stable Windows from a few months ago. Lesson learned I have ordered larger hard drive to store more Acronis backups.
I can confirm Windows needs a reinstall by using a free program called DPC Latency Checker.
It shows frequent delays in Windows performing low-level tasks (red spikes in latency).
Running a system benchmark tool like Cinebench shows a 10% drop in system speed since the first time I ran this after building my system.
I always make sure I have backups of my files before reinstalling Windows.
I use Backblaze and Back Blaze Buckets to backup files and I use Acronis True Image software to backup my Windows 10 Partition. Every month I back up my Windows drive with Acronis and upload it offsite.
It’s time I reinstall Windows.
I will perform a full (clean) Windows 10 installation by.
I have a 1TB C Drive (M.2 NVME SSD) with Windows on it and a multiple spinning magnetic hard drives where I redirect Windows folders to.
I am fortunate that I have redirected (moved) many of my system folders (e.g Favorites, Downloads, My Music, My Pictures, My Videos etc) to other drives and I can disconnect them to keep files safe before reinstalling Windows.
Never perform a Windows reinstall if you have files or data partitions on the same disk that Windows is installed on.
I will use a free program called WinDirtStat to find files still on C drive.
After scanning C Drive with WinDirStat I can spot large files and file types on my C Drive.
I can see a large Outlook file that needs backing up.
I moved all files I wanted to keep from C Drive to another Drive (that will be disconnected before reinstalling Windows).
I manually reviewed C:\ Drive for missed files to ensure I have backed up everything.
If I forget a file I can log in to my Backblaze backup history and restore it. I pay and extra $2 a month to ensure every file is kept for a year (all versions of every file too).
I backed up my Simon profile (default Windows User) folder with the free FreeFileSync Program.
All files I want to keep are off C:\ Drive.
I need to audit the location of all system folders so I can remap them after I reinstall.
I opened regedit.exe and navigate to the following registry path
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
In the past, I have redirected the following paths and I do not need to back these up as they are on other drives.
I open Computer Management (Start, Run then compmgmt.msc) tool, click Disk Management and view attached Disks.
I will set up the same drive letters after the rebuild so BackBlaze backup can resume backup states. If I do not record the drive letters the new Windows will assign new drive letters. If I have new drive letters Back Blaze will re-upload 7TB of data. If I reassign the same drive letters post Install Back blaze will not get confused.
I used SUMo (Software Update Monitor) software (read my review here) from https://www.kcsoftwares.com/?sumo to list all of my installed applications.
I exported all applications to a Spreadsheet in SUMo
I used DUMo (Driver Update Monitor) also from https://www.kcsoftwares.com/?dumo to document my drivers.
I exported a list (Text file and Spreadsheet) in case I needed it later.
Now I am confident I have documented my current system.
I pre-downloaded all of my computers drivers and apps that I might need after reinstalling Windows.
There is nothing worse than reinstalling Windows and not having drivers for Network or WiFi Cards.
I methodically store all files needed for a reinstall on a separate hard drive.
I have all fresh drivers needed to reinstall all devices in my new Windows.
I checked to see if I have all of my serial numbers and passwords needed to activate software.
I obtained my Windows 10 Serial number with help from here.
I can create a free USB based Windows installation media instead of using a Windows 10 DVD by visiting https://www.microsoft.com/en-gb/software-download/windows10.
I clicked “Download tool now“.
I ran the MediaCreationTool20H2.exe
I accepted the terms by clicking Accept.
Getting things ready appeared again.
After a few minutes, I was able to select “Create installation media (USB Flash drive, DVD, or ISO file) for another PC“
I accepted the defaults and clicked Next
I selected my USB Drive to save the installation media to.
The correct USB drive was selected
The Media Creation tool was busy “Getting a few things ready“
Downloading took about 20 minutes
The USB key is ready to use to Install Windows 10.
It’s time to install Windows 10 🙂
Now I will shut down my PC and physically disconnected all of my secondary SATA hard drives (where the data is that I want to keep).
Experience has taught me to only connect the desired C drive disk when installing Windows. If other drives are present Windows can get confused.
I will leave my G:\ Games M.2 Drive connected (as I deleted all partitions on it). The second M.2 drive has a heatsink on it with sticky thermal adhesive strip and I do not want to damage it.
Now I am ready to wipe my old Windows drive and install a fresh copy.
I inserted the freshly made Windows Install USB device into my PC USB port and restarted my PC. I entered my BIOS (by pressing F2). I configured my PC boot drive from the USB Key (not the drive with Windows on it).
On the next reboot, the Windows 10 Install program loaded from the USB key.
I set the language and keyboard location clicked Next.
I clicked Install now.
I entered my previously purchased Windows 10 Serial number and clicked Next.
I reviewed the license terms and clicked Next.
I had the following options.
I will choose Custom (advanced) as it will be a clean install.
I selected my C:\ Drive (1TB) as the drive to install Windows to, not the second 500GB M.2 SSD (I will use for games later).
I deleted the existing Windows partition to delete the existing Windows 10 installation.
I clicked OK to the message about additional partitions being created.
fyi: This is what the storage disk will look like after Window’s is installed
Windows gave me a breakdown of the partitions. Windows will install to the 931GB partition.
I clicked Next.
Windows is installing 🙂
After 10 minutes Windows had installed enough to start asking questions.
I selected Australia (my country).
I selected the US keyboard layout.
Windows took a moment to install some more files.
I was asked is this is a Personal or Business installation.
Personal of course.
I entered my Microsoft Account. This appears to be unskippable like in previous versions of Windows.
I entered my MFA password to verify my account.
Windows asked me to create a PIN (not a password)
I setup a pin
I disabled all options giving away my privacy
I skipped saving files to One Drive.
Windows resumed installing
I entered my Product Key for Office
I clicked Not Now to disable setting up Cortana
Windows processed files for 2 more minutes.
Windows Rebooted and it started downloading plug and play devices.
Windows 10H2 was installed and I was logged into the desktop.
That took less than 30 minutes.
I shut down my PC and plugged in all hard drives again.
70% of my drivers were auto set up by Windows and I just had to install the odd (pre-downloaded) driver install files.
It only took 5 minutes to install all missing drivers.
I went through my list of applications that I wanted to be reinstalled and installed them one by one.
I skipped installing the older apps that I no longer wanted.
I opened the Windows 10 Disk Manager application and reset all drive letters and te redirected Special Folders to their old values (e.g Favorites, Downloads, My Music, My Pictures, My Videos etc)
I noticed that one of my 2TB Drives was reporting (S.M.A.R.T data) that is was not healthy.
I ordered a 10TB Western Digital Gold Drive) to swap out the 10-year-old WD Green Hard Drive. I can use the extra space to keep 6 months of weekly Acronis backups too.
The 10TB drive arrived.
I plugged in the new 10TB WD Gold hard drive and gave it the temporary Y:\ drive letter. The drive was healthy (0 power-on hours) and not a refurbished drive.
I performed a Full format (not quick) to test every sector, this format took over 12 hours,
I swapped the drive letters M: became X:, and Y: became M:\ drive.
I copied (with FreeFileSync) everything from the aging 2TB drive to the new 10TB drive.
Before disconnecting the old 2TB Drive I copied data to as another backup. It may die, but may not.
Copying large amount’s of data between SATA drives takes a long time.
I have about 4TB of data backed up to Back Blaze on my older Windows installation. I could delete that and re-upload 4TB but In will Inherit my backup state from my older Windows and only back up what I have moved between drives.
Snip from Backblaze – Inherit Backup State
NO IU need to inherit my old Back Blaze backup state so I don’t have to re upload 4TB of data.
The Inherit Backup State feature allows a new installation of the Backblaze software to inherit an existing license and backup under the same account. This will prevent the unnecessary re-upload of files that have previously been backed up. This is useful in a number of circumstances, such as the following examples:
Inherit Backup State – Backblaze Help
To inherit the backup state I logged into Back Blaze and downloaded Back Blaze (trial), I Installed it and logged in.
Back Blaze installed files.
Back Blaze took 10 minutes scanning my hard drives.
Back Blaze reported I had 7+ TB of data on all of my disks.
I only want to backup 4TB of files.
Back Blaze has not prompted me to inherit a backup state yet???
I selected my desired drives to backup.
I also excluded folders that I did not wan’t backed up.
I clicked Inherit Backup State. I logged in again.
I could see previous backups states 🙂
Upon selecting a previous backup state I had to enter the Encryption key (created at the time of the previous backup creation).
Inheriting the previous backup state takes a while.
Please wait dialog.
Success the past backup state was intertied.
I double checked that my excluded paths and folders were still being excluded.
I could see the files left to upload.
I only had 970GB of files to upload now after inheriting 4.8TB of previously backed up data.
This is a relief, I always feel safer when I have online backups..
I use Acronis True Image to take full backups of my C:\ (read my review here).
I opened Acronis True Image 2021 and clicked the Backup Tab to specify what to backup (by default Acronis will back up all disks and partitions).
I clicked my PC’s name (ZENigma) and then clicked Disks and partitions.
I selected my C:\ Drive partition (named MP600_1TB) and then presses OK.
I selected Browse to specify a local drive to back up to.
Acronis True Image can backup to the cloud but I prefer to do that myself with BackBlaze (it’s way cheaper).
I selected M:\_Acronis_Backups\ZENigma as the location to Backup C:\ Drive to. M:\ now has 5TB free.
I set a schedule to backup at 7PM on Friday’s.
I specified Version Chain as the backup type.
Read more on backup types here: Acronis True Image 2021 Help – Backup Schemes
I configures email alerts.
I set backups to be split into 100MB chunks. I find 100MB is the optimal size to upload to BackBlaze.
I configured backup validation frequency.
Now my Windows (C:\ partition) is ready to be backed up.
TIP: It is a good idea to disable any of your Antivirus programs before performing a backup of system files.
I disabled my Bitdefender Antivirus until my next Windows Reboot.
I started my Acronis true Image backup of C:\ Drive.
I could see the backup is being created in the M:\_Acronis_Backups\ZENigma folder.
Although I have little faith in Windows System Restore I will create a System Restore Image just in case.
If I am feeling lazy I can use this restore point to restore my system at a future date.
I can choose from past restore points.
While I am here I will document my hard disk and estimate the replacement date (10 years).
One hard drive was 10 years old and S.M.A.R.T Diagnostics was recommending I replace the drive ASAP. This is how I knew to buy a bigger hard drive (above).
I created a partition on the games M.2 SSD and downloaded games to that drive. This took days.
All games.
fyi only:
Here is a chart of all of my drives:
Hard Drive – Power On Count:
All of my Magnetic rives are very old.
Hard Drive – Power On Hours.
Hard Drive – Read Benchmark
Hard Drive – Write Benchmark
One thing to note is NVME M.2 SSD’s are way faster than SATA drives.
Acronis has been running for 2 weeks now and a restore of Windows is quite easy. Under the Backups menu, I can click Recovery then restore the Windows partition.
I can restore individual partitions if needed.
I can just restore files if I wish form Acronis inside Windows.
I followed the prompts to create a Universal Restore boot media
I installed the Acronis Universal Restore bootable media builder program.
I created a USB based Bootable rescue media.
I can use this USB key to boot my system and restore and files, partitions of weekly snapshots of Windows.
I redirected my Windows Temp Folder to my new M Drive to prevent my Windows Solid-state drive getting worn out.
Windows is reinstalled and is super snappy and had less junk installed.
Reinstalling is much easier with a second hard drive and patience backing everything up at before you start reinstalling.
DPC Latency checker showed I had no issues with latency.
1.0 Initial Draft
by Simon
After posting my last blog post (Goodbye Dropbox, One Drive, iCloud and Hello Nextcloud private cloud on UpCloud) I received comments from readers as to why I used Putty/WinSCP and not MobaXterm. To be honest I had no idea MobaXterm existed.
I did a quick Google and checked out the pros and cons of Putty/WinSCP v MobaXTerm.
MobaXterm Highlights
Nice
I visited https://mobaxterm.mobatek.net/
I had an option to download the Free Version or to purchase a Professional Version.
I will be reviewing the Pro version (you will see why later). I am reviewing Version 20.2 (Build 249). You can download the free version at https://mobaxterm.mobatek.net/download.html.
If you purchase the Pro version (with 12 months of updates) for $69 USD. Delivery is done by email within 24 hours after payment is received.
I downloaded the 1.5MB Installer (the link was emailed to me after purchase)
I opened the MobaXterm installer and entered my Pro serial number (emailed to me) then I clicked Next
I clicked Customise MobaXTerm Professional settings button
The customizer options are impressive (Import and export settings, enable/disable features, generate a portable package etc)
I had an option to customise the banner or any server I connect to but I left the banner as the default banner.
I reviewed all options for the application. This is more in depth than Putty for sure.
I reviewed my default SSH settings. SSH Keep alive will be turned on for sure.
I had an option to add plugins to MobXTerm
I had the option to generate a portable of full installer
Now I can resume the setup of MobaXterm, I clicked Next
I accepted the licence agreement and clicked Next
I installed MobaXterm to my C:\ Drive
I clicked Install
MobaXterm was now installed
I opened MobaXterm
Apologies in advance I setup Dark Mode in MobaXterm as soon as I opened the Configuration. All screenshots will be shown below in Dark Mode.
There are 12 colour themes to choose from.
The MobaXterm interface is more feature packed than Putty.
Windows prompted me to allowed access to MobaXTerm in my Windows firewall.
Time to create a connection to a server.
I created a new SSH server connection to one of my existing servers.
I specified the path to my private key (for the server)
I reviewed other terminal settings.
I changed the font to Courier New, Size 12 (I am sad). I also increased the initial size of the terminal (width and height)
I reviewed network settings (all good)
I added a shortcut to the server onto my desktop
When I opened the connection to the server I was prompted to enter the Passphrase I set on my Public Key (nice).
Then I was prompted to put in my 2FA One Time Password (OTP) in the main terminal windows and a second time in a popup form (for the connection that builds the folder structure on the left). This is how I configured my website. To get the OTP I need to insert my YubiKey and one the YubiCo Authenticator app and enter my keys password.
Some people say that having a passphrase on a public/private key and 2FA Authentication is a bit overkill but that is not everything I do.
I need to enter two OTP’s to connect to my site.
If you are fast you can use the same OTP in both windows (but they expire in 30 seconds)
Nice I was able to connect to my Server just like Putty. The cool thing is I can see files and folders without opening WinSCP.
This is way more convenient than using two programs.
I enabled the Remote Monitoring status bar in MobaXterm. Now I can see system resources on my server without running CLI commands.
I uploaded a 1GB file with to the same server from WinSCP and MobaXterm to simulate a restore.
I was gobsmacked, WinSCP could only upload a file at 342KB/s, MobaXterm could upload at 4.42MB/s.
I was uploading a 1GB file from my house to a server in Singapore (within 5 minutes of each other). I did set “SCP (enhanced speed)” when Installing MobaXterm.
MobaXTerm is 12x faster than WinSCP at uploading for me. This is well worth upgrading to a Professional licence.
I ran a practical download test (this time from Chicago). In the right-hand side of MobaXterm I zipped up my entire website folder (1.66GB)
zip -r /temp/www-22-Jun-2020.zip /www-folder
Then in the left-hand side of MobaXterm I downloaded the file, this is as simple as right-click then download.
I was presented with a directory tree specify where to save the file to.
I noticed the file was downloading at 16Mbps then 18Mbps then 22Mbps within seconds.
The download speed settled down to 26Mbps after a few minutes.
This is amazing for a download from the other side of the world (200ms ping and on a VPN, 19 traceroute server hops away).
I downloaded the same file from the same server with WinSCP to compare and MobaXTerm was 10x faster at downloading. WinSCP could only manage 2.57/MB/s
I will look into plugins soon: https://mobaxterm.mobatek.net/plugins.html
I can also start a local terminal (documentation here)
I can run Linux commands on my Windows machine via Cygwin
“ls -al” on Windows anyone
I noticed MobaXterm had found my WSL 2 Installation of Debian on my Windows 10 v2020.
I can now use MobaXterm to open my WSL Linux installations.
MobaXterm can easily connect to my local and online Linux servers with ease.
I used the Multiple Exec (similar to the multiple cursors in Sublime Text Editor) to control 2 serves at once and run identical commands.
I did not notice until later but you can import existing Putty connections.
Also, you can generate SSH Public and Private Keys from the Tools menu or the left-hand side (tab).
Honestly having faster uploads and downloads over SSH is a dream come true. I live in Australia and we have terrible latency and I have better things to do than to watch slow uploads/downloads.
I look forward to investigating MobaXterm plugins in the near future as I feel I I have just scratched the surface.
MobaXterm Documentation: https://mobaxterm.mobatek.net/documentation.html
v.1.1 Plugin info fix
by Simon
Recently I blogged about using Acronis True Image 2020 to backup and restore your Windows computer after a friend had to manually reinstall her Windows PC.
Her Windows PC died and she could not recover Windows with a System Restore snapshot or via the retailers systems image recovery process.
I use Back Blaze software to automatically backup my computer but I do not have an up to date collection of needed installation files in case I need to perform a Clean Installation of Windows 10.
I found SUMo in the process of assisting my friend.
I found SUMo (Software Update Monitor) from KC Softwares that allows me to analyse my existing installed software and their versions, find and download new versions (installers or setup files) for my software.
I am using the Pro version of SUMo (buy here).
Tip: The trial version will inform you of an update but it will not show you links to obtain the updates easily.
The best feature of SUMo is I can find apps on my PC that need updating.
Also in one click (Right click) you will be directed to the applications official site (official site (or App page on SUMo)) and be able to download the app installer to the new version of the app.
The Trial version is limited to informing you that an update is available.
Also updating SUMo to the PRO version streamlines it’s own updates too. You can update SUMo in the PRO version with one click. 🙂
After I opening SUMo PRO (I waited for it to find installed apps) then I clicked “Check” to scan all my apps for updates.
SUMo happily went through the list of my installed apps and gathered the applications versions (and checked online if newer versions existed).
SUMo found 239 installed applications on my PC, 188 were up to date, 53 needed minor (recent updates) and 2 needed major (old) updates.
Its awesome that in one click and I can see what software needs updating. In the process I was able to see what applications I don’t use (they were old versions) and I uninstalled them
I will update my software and to ensure my software does not get out of date I enabled “Load at startup” and “Check for new software at startup” (SUMo).
I did not enable “Scan for new software at startup” but seeing SUMo Start and update will remind me to check for updates if I have time.
I also enabled “Show file path” in the SUMo Application list so I can see where the programs are. I found multiple instances of Python installed all over my PC.
I right clicked on each of my applications (that needed updating) and clicked “Get Update from…” then “.. from developer’s Site (Direct)“.
If you don’t want to right click you can click the “Get Update” button in the tool bar to get selected applications update.
This will open a web browser page to the software vendors website.
SUMo also has a page available with stats on the application’s known statistics (nice table of versions, beta or stable status and numbers of users).
I was able to right click “Get Update from…” – “.. from developer’s Site (Direct)” for each application in the list that needed an update. I was directed to the software vendors page for each software where I could download the app updates.
Within minutes I had dozens of vendor pages open with links to new versions of my outdated software.
Within a short period I had amasses gigabytes of new application installs.
I installed each of the new updates and then moved the new installs to my B:\Installs folder (in case I have to manually reinstall Windows in the future).
After I updated my out of date applications I then right clicked on the apps in SUMo and clicked Check to re check the status of the applications
Fyi: SUMo has a number of actions in the right click menu (on an installed Application).
(snip from here)
I had a few items I Deleted from the list or Ignored.
My Visual Studio (development) software was reporting an older version of Python (2.7). I updated Visual Studio to the latest version but Python 2.7 remained. I deleted Visual Studio from the list and was prompted (this is not deleting the application from the hard disk just from the generated list.
I whittled down the list of my applications that needed updating
I could sort applications in the list by OK status or apps that needed Minor or Major updates applied.
I can now say that all of my Applications are all up to date.
I used the export feature in SUMo to build an excel file listing all my applications.
Fyi: SUMo exported this list as a “;” separated file, I opened the file in Sublime Text Editor and replaced “;” with TAB and then pasted this list back into Excel.
SUMo allowed me to update my installed applications and update my aged cache of application installs I was keeping in case I needed to manually rebuild Windows.
SUMo made this an absolute pleasure to do.
Pros
Cons
Try the free version here
v 1.0 Initial Post
by Simon
I recently setup a Raspberry PI as a DNS Sinkhole to block ads and Trackers on my home network and I love it. I paid about $120 for a Raspberry Pi LCD Screen and Case from Pakronics to go with a Raspberry Pi 3B+ I had laying around to Setup as a PiHole. This post will show how I made my Screen buttons work.
This post is not a sponsored advertisement, I like to log what I have done for documentation
Long story short, the Pi Hole is great and the LCD Screen and Case is working a treat and I needed to get the buttons on the LCD Panel and case working.
I love the stats that PiHole provides.
In only have Python 2.7 (and for a device on a private home network) and this is ok, given Python 2.7 is no longer supported.
How to check your Python version.
$ python --version
Python 2.7.16
I know Python 2.7 is a bit old, Python 2.7.16 was released in March 2019. I need to update my script to Python 3.
I created this Python Script to handle the button events
sudo nano ~/simonpihole_buttons.py
I added this code to the Python file that will handle the LCD button presses.
Tip: Make sure your commands work before you add them to the Python Script.
#!/usr/bin/python
import subprocess
import time
import RPi.GPIO as GPIO
import os
GPIO.setwarnings(False)
channel_list = [17, 22, 23, 27]
backlightOn = True
piHoleOn = True
def buttonPowerOff(channel):
os.system("sudo shutdown -h now")
def buttonToggleBacklight(channel):
global backlightOn
if backlightOn:
backlightOn = False
backlight.start(0)
else:
backlightOn = True
backlight.start(100)
def buttonDisablePiHole(channel):
global piHoleOn
if piHoleOn:
piHoleOn = False
os.system('pihole disable')
else:
piHoleOn = True
os.system('pihole enable')
def buttonRestartDNS(channel):
os.system('pihole restartdns')
GPIO.setmode(GPIO.BCM)
GPIO.setup(channel_list, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(18, GPIO.OUT)
backlight = GPIO.PWM(18, 1023)
backlight.start(100)
GPIO.add_event_detect(27, GPIO.FALLING, callback=buttonPowerOff, bouncetime=200)
GPIO.add_event_detect(22, GPIO.FALLING, callback=buttonToggleBacklight, bouncetime=200)
GPIO.add_event_detect(23, GPIO.FALLING, callback=buttonDisablePiHole, bouncetime=200)
GPIO.add_event_detect(17, GPIO.FALLING, callback=buttonRestartDNS, bouncetime=200)
while True:
time.sleep(1)
GPIO.cleanup()
I tested the script and commands many many times and I can the python script to test the button functionality
cd ~
sudo python simonpihole_buttons.py
I decided to make the first button (from the top) power down the pi, then Disable the PiHiole Service then toggle the Raspberry Pi LCD (ON/OFF) and finally the last button restarts the DNS service.
I created this file to create the service for the Python script
sudo nano /etc/systemd/system/simonspibuttons.service
I added the following code to the service
[Unit]
Description=Simons pibuttons Script
After=multi-user.target
[Service]
User=pi
WorkingDirectory=/home/pi
ExecStart=/usr/bin/python -u /home/pi
/simonpihole_buttons.py
[Install]
WantedBy=multi-user.target
I ran this command to start the button service
sudo systemctl enable simonspibuttons.service
sudo systemctl start simonspibuttons.service
If this does not work you can reboot your pi.
{“type”:”block”,”srcIndex”:24,”srcClientId”:”00b90020-9b1d-4d70-a9f9-62282db13e7f”,”srcRootClientId”:””}After the service was enabled I checked it’s status.
sudo systemctl status simonspibuttons.service
● pibuttons.service - pibuttons Padd PiHole Script
Loaded: loaded (/etc/systemd/system/simonspibuttons.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-05-08 19:13:33 AEST; 21h ago
Main PID: 787 (python)
Tasks: 3 (limit: 2067)
Memory: 6.4M
CGroup: /system.slice/simonspibuttons.service
└─787 /usr/bin/python -u /scripts/simonpihole_buttons.py
May 08 19:13:33 raspberrypihole systemd[1]: Started Simons pibuttons Script.
Cool the service has enabled and is working
After a few weeks I am happy with the button order and functionality.
Shutting down from a button press (before a storm or a the kids bedtime is priceless). I did add some of my wife’s nail polish to add a different colour to each button.
I intend to add a flat heat pipe and external heatsink to the PiHole so there will be heaps of room for printed labels for each button. The Pi CPU doe’s not get super hot but it does get above 55c from time to time.
I love my PiHole
If you having troubles making the service run the following to force the service creation (but enter your service name)
cd /etc/systemd/system
sudo systemctl --force --full edit simonpibuttons.service
The Python service won’t boot, try
systemctl journalctl --boot --unit=simonibuttons.service
The Python script won’t run, try
chmod +X /scripts/simonpihole_buttons.py
Install Python 2.7
sudo apt-get install python2.7
v1.1