A Tale of Reinstalling Windows, Vol. 2
I ran out of disk space long ago, even with four 12 TB hard disks[1] and a 1 TB NVMe SSD. I’ve been waiting patiently to set up a NAS box, but I couldn’t stand it any longer. I decided to switch to the largest disks possible, and took the opportunity to reinstall Windows while I was at it, which turned into quite a production.
26 TB hard disks are available only for specialized customers; meanwhile, SSDs are still disproportionately expensive, so I could forget my dreams of high-capacity enterprise disks like Samsung’s 30.72 TB units. I settled for replacing the spinning disks with 22 TB WD Ultrastars and adding a 4 TB NVMe SSD as a new system disk. The upgrade went off with minor hiccups. In addition to the existing 1 TB NVMe disk, I threw in an old 480 GB SATA SSD.
I noted the details of all the disks in advance to make it easier to migrate. I intended to clone the original (VeraCrypt encrypted) 1 TB disk to the new SSD, but I’ve been postponing reinstalling Windows since January anyway, so I connected both old and new NVMe devices and got to installing Windows afresh. It was a bit confusing because all the 22 TB disks were shown as 3.5 TB in the installer. Indeed, I thought the new SSD was one of those at first.
Windows installer woes
The installation kept failing at Copying files (0%). The first few times, it said there might be an issue with the installation media. I noticed each failed attempt was creating the Windows partitions I would expect before copying files. When I deleted those, subsequent attempts said Windows could not prepare the computer to boot into the next phase of installation.
The old installation still worked (ignoring the now-disconnected 12 TB disks), so I booted back into that and decrypted the system drive, which didn’t help. Using diskpart to offline all irrelevant disks within the installer didn’t work either. I found many discussions online mentioning issues with installation media, so I tried re-flashing the USB drive I was installing from, to no avail. Neither did using a different USB drive altogether improve the situation.
I considered using Rescuezilla to clone the old NVMe disk onto one of the new hard disks, to copy to the new SSD later. I could then format the old 1 TB disk. I didn’t think that would help, though. Instead, I unplugged the SATA SSD. Now the installer produced the error about the installation media again.
I was advised to disconnect everything except the destination disk. Out of laziness, I gave it a shot after removing only the old NVMe drive. It worked! I was able to complete the installation. However, the EFI partition and recovery partition were apparently placed on the first hard disk. I must have had that at the top of the boot order. I thought I might have to reinstall Windows to fix it.
Or I could try moving the EFI partition. I managed to copy it onto the SSD and delete it from the HDD, but now it was at the end of the drive instead of the beginning and I couldn’t seem to boot into GParted to fix it. Flashing a USB drive with GParted on my Linux laptop using the dd method didn’t work: I could choose to boot from the drive, but got a blank screen after that, at least for the five minutes I waited. Using Unetbootin also failed: the drive wasn’t shown as an option to boot from. I decided to ignore it for the moment, given that everything was working anyway.
Before continuing, I reconnected the NVMe drive… very… delicately. I was already using a screw that’s not the right size, and then there was the giant GeForce 3080 right next to it. The system wouldn’t boot now, because the old drive had ended up higher in the order, which was easily rectified. This experience was repeated when I later reconnected the SATA SSD after a few days of copying data from the old disks; once again, the computer immediately tried to boot from that partition until I fixed the order.
Putting things in their places
First, I needed to encrypt everything. VeraCrypt’s estimate for the system disk started at 60 minutes remaining and stayed there for 60 minutes. I paused, restarted, and got 30 minutes. It slowly went down to 20 minutes, then climbed back up. I paused again, restarted again, and got 60 minutes again. All told, it took over three hours from start to finish with no wiping and no other processes running.
I always forget the order of operations for encrypting new secondary disks: initialize the disks in Windows, create partitions without drive letters, and encrypt those partitions, not the full disks (since the latter requires MBR formatting, which doesn’t support partitions over 4 TB).
Setting up my custom keyboard layouts is always tedious. Whenever I do it the first time, Windows keeps forgetting the shortcuts upon rebooting and they don’t work at all in applications. I have to repeat a frustrating dance of adding shortcuts, rebooting, and changing settings until they stick.
Thanks to my diligent procrastination, I still only had a partially automated Windows configuration. One of the first things I did was install Emacs, which I couldn’t compile this time thanks to errors I don’t understand. I’ve stuck to the build in Scoop for now. I used it to do a fair amount of work to modify my scripts on the fly, fixing issues with my configuration-in-progress as they came up.
I looked into sandboxing for certain applications. Windows Sandbox is apparently only for ephemeral data. App-V is for virtualizing applications but will stop being supported in 2026 and doesn’t quite appear to fit my requirements. Full virtual machines would be too heavyweight. I installed Sandboxie-Plus only to realize I can’t be bothered. I’d prefer to find alternatives to those applications that I can trust.
I had to rediscover how to run a particular PowerShell command. It needs administrator privileges,
so I have to run it with sudo (the PowerShell
shim).
Trying to run it from the Run dialog with sudo pwsh -c Some-Command fails for no reason I can
fathom, and the window goes away immediately. pwsh -c "sudo Some-Command" also fails because
Some-Command
isn’t an executable but a PowerShell function. What does work is pwsh -c "sudo pwsh
-c Some-Command".
The nice thing about having reinstalled Windows is that, combined with faster hardware and more pragmatic encryption methods, it made everything more responsive and sped up my backups (slashing the duration of the slowest by three quarters). I also turned off animations at the system level for a while, which helped even more, but re-enabled them when I remembered that that blocks animations everywhere, including in the browser. Instead, I dove into Performance Options and disabled whatever I could. Too bad there’s no way to disable smooth scrolling except in list boxes.
I’m seeing sporadic issues with Windows Explorer not recognizing changes, like when I paste files in a directory and they sometimes don’t appear in the list until I refresh it. I have to assume it’s related to VeraCrypt, but I’ve never had such problems before. Another annoyance is that Logitech SetPoint now steadfastly refuses to recognize my keyboard, so I can’t customize the shortcut keys.
I had to reacquaint myself with one of the quirks of managing Node.js via fnm: there are no global npm packages, only packages made available in the active shell. This renders Emacs unable to find language servers, to take one example. The ideal solution would be to make Emacs and other similar programs work with fnm to activate the right version for each project, but my brilliant solution is to also install a single Node version globally with Chocolatey just for those tools.
Tab Session Manager for Firefox is misbehaving more than before. Ever since I reinstalled the browser, saving a new session or importing a session deletes all others in spite of the large limits I’ve set, so I only ever have one at a time. Meanwhile, as before, sessions from one machine won’t show up on the other.
Incidentally, this is the first time in nearly two decades that I haven’t used WinRAR at all. I rarely archive things as RAR files any more, and I can use 7-Zip or PeaZip to extract them if I need to. In future, I’ll probably stick to ZIP, or maybe Zstandard.
- Effectively two, since I mirror them.↩