{"id":5552,"date":"2026-08-31T00:00:37","date_gmt":"2026-08-30T15:00:37","guid":{"rendered":"https:\/\/donguri3.net\/server-tech\/pt3-server-fan-failure-thermal-runaway-container-migration-2\/"},"modified":"2026-08-31T00:00:38","modified_gmt":"2026-08-30T15:00:38","slug":"pt3-server-fan-failure-thermal-runaway-container-migration","status":"publish","type":"post","link":"https:\/\/donguri3.net\/en\/server-tech\/linux-server-network\/pt3-server-fan-failure-thermal-runaway-container-migration\/","title":{"rendered":"Thermal Runaway Caused by PT3 Recording Server Fan Failure and Emergency Evacuation of Key Containers"},"content":{"rendered":"<p>I have been operating an ASRock Beebox equipped with a PT3 tuner for many years as both a recording server and a host for various services. However, due to age-related wear and tear, the cooling fan has begun producing a loud, harsh noise.<\/p>\n<blockquote class=\"wp-embedded-content\" data-secret=\"JwHKSPju1R\">\n<p><a href=\"https:\/\/donguri3.net\/server-tech\/linux-server-network\/asrock-beebox-pt3-mini-pc-server\/\">Introduction to the Mini PC Recording Server Built with ASRock Beebox + PT3<\/a><\/p>\n<\/blockquote>\n<p><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"\u201cIntroduction to the Mini PC Recording Server Built with ASRock Beebox + PT3\u201d \u2014 Nando Kobo\" src=\"https:\/\/donguri3.net\/server-tech\/linux-server-network\/asrock-beebox-pt3-mini-pc-server\/embed\/#?secret=vC55ZvaHF7#?secret=JwHKSPju1R\" data-secret=\"JwHKSPju1R\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<p>Up until now, I tried to extend its lifespan by implementing a fan control script to keep the rotation speed down to the bare minimum.<\/p>\n<blockquote class=\"wp-embedded-content\" data-secret=\"Cq3fK5sRfz\">\n<p><a href=\"https:\/\/donguri3.net\/server-tech\/linux-server-network\/linux-server-fan-control-guide\/\">Fan Control on Linux Servers<\/a><\/p>\n<\/blockquote>\n<p><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"\u201cFan Control on Linux Servers\u201d \u2014 Nando Kobo\" src=\"https:\/\/donguri3.net\/server-tech\/linux-server-network\/linux-server-fan-control-guide\/embed\/#?secret=DMBebzMYPI#?secret=Cq3fK5sRfz\" data-secret=\"Cq3fK5sRfz\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<p>However, the fan has finally stopped spinning altogether. Because the heat inside the compact chassis could no longer be expelled, the CPU temperature spiked during high loads or recording processes. This led to frequent system freezes and forced reboots caused by kernel panics triggered by thermal runaway.<\/p>\n<p>Upon dismantling the unit to check the fan model number, I found it was &#8220;BSB05505HP-SM (DC05V 0.40A)&#8221;. I ordered a compatible replacement fan, but it will take a few days to arrive.<\/p>\n<p><a href=\"https:\/\/amzn.to\/4gQpihF\" target=\"_blank\" rel=\"noopener\" data-blogcard=\"1\">BSB05505HP CPU GPU Cooling Fan for S, 5V, 0.4A, 4-Pin<\/a><\/p>\n<h2>Separating Hardware-Dependent Functions and Evacuating to an Idle Machine<\/h2>\n<p>If I were to keep running the Beebox as-is until the replacement fan arrives, it could lead to permanent thermal damage to the motherboard and the PT3 itself. Therefore, I decided to review all running services and separate functions tied to physical devices from other general-purpose services.<\/p>\n<p>Since the PT3 recording function is directly tied to the hardware, it will remain on the Beebox side, maintaining an operating state that keeps heat generation to an absolute minimum. On the other hand, I made the decision to urgently evacuate critical container groups directly tied to daily operations and data synchronization\u2014such as the web server, n8n, DAViCal, and Gitea\u2014to alternative hardware.<\/p>\n<p>For the evacuation target, I repurposed a Surface Pro 5, which had previously been set up with Harvester but lost its use case due to a lack of resources.<\/p>\n<blockquote class=\"wp-embedded-content\" data-secret=\"4XP7MM3Nui\">\n<p><a href=\"https:\/\/donguri3.net\/server-tech\/virtualization-container-wsl\/surface-pro5-harvester-success-but-cpu-limit\/\">Successfully Installed Harvester on Surface Pro 5, but Unable to Create VMs Due to Insufficient CPU Resources<\/a><\/p>\n<\/blockquote>\n<p><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"\u201cSuccessfully Installed Harvester on Surface Pro 5, but Unable to Create VMs Due to Insufficient CPU Resources\u201d \u2014 Nando Kobo\" src=\"https:\/\/donguri3.net\/server-tech\/virtualization-container-wsl\/surface-pro5-harvester-success-but-cpu-limit\/embed\/#?secret=a5TsSlG6Va#?secret=4XP7MM3Nui\" data-secret=\"4XP7MM3Nui\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<p>I reinitialized the Surface Pro 5, installed Ubuntu 26.04, and redeployed it as a lightweight container host.<\/p>\n<h2>Challenges in Reconnecting Cloud HA VPNs and Redesigning the Network<\/h2>\n<p>This migration involved more than just copying containers; there were several infrastructure design challenges to address.<\/p>\n<p>First was the risk of shutting down the home LAN infrastructure. Stopping dnsmasq (DNS\/DHCP), which was running on the Beebox, would have caused all devices on the home LAN to lose communication, so a safe disconnection procedure was required.<\/p>\n<p>Second was rebuilding the WireGuard VPN topology. The setup adopts a topology where an HA configuration on Oracle Cloud Infrastructure (OCI)\u2014consisting of MAIN and SUB servers\u2014independently connects to the Beebox and Surface on the premises. Because independent VPN connections had to be established from each cloud site to each local machine, I needed to accurately generate and deploy a total of four keys (two pre-shared keys, plus public and private keys).<\/p>\n<p>Third was migrating the environment from Docker to Podman (podman-compose). Since it would run on the same LAN as the Beebox, I needed to rebuild the network settings while avoiding IP address overlaps defined in the existing docker-compose.yml.<\/p>\n<h2>Service Evacuation and Migration to the Podman Environment<\/h2>\n<h3>Stopping dnsmasq and Migrating to the Wi-Fi Router&#8217;s DHCP Function<\/h3>\n<p>To prevent the entire home LAN from being affected if the Beebox crashed, I stopped dnsmasq on the Beebox and reverted the processing to the Wi-Fi router&#8217;s standard DHCP function. This maintained home network communications even during server maintenance.<\/p>\n<h3>Key Generation and VPN Activation Using a WireGuard Container<\/h3>\n<p>To generate WireGuard key pairs and shared keys without polluting the host environment, I temporarily spun up a WireGuard container with a local mount and used the tools inside the container to batch-generate the keys.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n# Generate keys inside a temporary container and output them to the local directory\npodman run --rm -v $(pwd)\/wireguard_keys:\/keys:Z docker.io\/linuxserver\/wireguard\n\nsh -c &quot;wg genkey &gt; \/keys\/privatekey &amp;&amp; wg pubkey &lt; \/keys\/privatekey &gt; \/keys\/publickey &amp;&amp; wg genpsk &gt; \/keys\/presharedkey_main &amp;&amp; wg genpsk &gt; \/keys\/presharedkey_sub&quot;\n<\/pre>\n<p>Using the generated keys, I created the configuration file on the Surface Pro 5 side and established independent tunnels to OCI-MAIN and OCI-SUB.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n[Interface]\nPrivateKey = [Surface Private Key]\nAddress = 10.x.x.x\/24\n\n# Settings for OCI-MAIN\n[Peer]\nPublicKey = [OCI-MAIN Public Key]\nPresharedKey = [presharedkey_main]\nEndpoint = [OCI-MAIN IP]:51820\nAllowedIPs = 10.x.y.0\/24\nPersistentKeepalive = 25\n\n# Settings for OCI-SUB\n[Peer]\nPublicKey = [OCI-SUB Public Key]\nPresharedKey = [presharedkey_sub]\nEndpoint = [OCI-SUB IP]:51820\nAllowedIPs = 10.x.z.0\/24\nPersistentKeepalive = 25\n<\/pre>\n<h3>Synchronizing Configurations and Volume Data via rsync<\/h3>\n<p>I synchronized the target service container configurations and persistent volumes from the Beebox to the Surface Pro 5 using rsync.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n# Transfer configuration files and persistent volumes\nrsync -avz -e ssh \/opt\/services\/ root@[Surface IP]:\/opt\/services\/\n<\/pre>\n<h3>Starting Containers with podman-compose<\/h3>\n<p>On the Surface side, I ran Podman as the root user. Operating with root privileges avoided permission errors caused by binding privileged ports or file permissions, thereby speeding up the process.<\/p>\n<p>I updated the IP definitions within each service&#8217;s docker-compose.yml to avoid overlapping with the Beebox&#8217;s IP, and launched everything at once using podman-compose.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n# Start containers in each service directory\ncd \/opt\/services\/web-stack\npodman-compose up -d\n<\/pre>\n<h3>Minimizing Server Load and Achieving Stable Operation<\/h3>\n<p>As a result of evacuating the primary containers (Web, n8n, DAViCal, Gitea) to the Surface Pro 5, the CPU load on the Beebox dropped to an absolute minimum. Even with the fan stopped, kernel panics caused by thermal runaway completely ceased.<\/p>\n<p>Furthermore, communication with the HA configuration servers on OCI was maintained normally via the new WireGuard tunnels, and externally integrated services recovered with minimal downtime. By utilizing the idle Surface Pro 5, I successfully established an environment that safely balances recording standby and service provisioning until the replacement fan arrives from AliExpress.<\/p>\n<p>Meanwhile, the Beebox unit itself continues to run on a legacy, antique-like environment of CentOS 7. Along with hardware recovery via this fan replacement work, I am also planning to upgrade the OS environment to the latest Ubuntu 26.04.<\/p>\n<p><a href=\"https:\/\/amzn.to\/3UUoXBX\" target=\"_blank\" rel=\"noopener\" data-blogcard=\"1\">[Refurbished] Microsoft Surface Pro 5 &#8211; Win11 Installed \/ 12.3-inch (2736&#215;1824) \/ 7th Gen Core i5-7300U \/ 8GB RAM \/ 256GB SSD \/ LTE \/ Wireless LAN \/ Bluetooth \/ Office H&amp;B 2019 \/ Dedicated Keyboard Included (Refurbished)<\/a><\/p>\n<h2>Conclusion<\/h2>\n<p>I urgently evacuated key container groups from the PT3 recording machine\u2014which was suffering from thermal runaway due to a stopped fan\u2014to an idle Surface Pro 5. To preserve the home LAN, I reverted dnsmasq back to the router and rebuilt the WireGuard tunnels to OCI using keys generated in a temporary container. By migrating Web, n8n, DAViCal, and Gitea using podman-compose under root privileges while avoiding IP collisions, the Beebox&#8217;s load decreased and kernel panics were resolved, successfully establishing a stable operational setup until the replacement fan arrives.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I have been operating an ASRock Beebox equipped with a PT3 tuner for many years as both a recording server and [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":4679,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"en_US","_original_post":"https:\/\/donguri3.net\/?p=4677","footnotes":""},"categories":[1170],"tags":[18,19,20,21,10],"class_list":["post-5552","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux-server-network","tag-docker","tag-docker-compose","tag-oci","tag-oracle-cloud-infrastructure","tag-server","en-US"],"_links":{"self":[{"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/posts\/5552","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/comments?post=5552"}],"version-history":[{"count":1,"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/posts\/5552\/revisions"}],"predecessor-version":[{"id":5555,"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/posts\/5552\/revisions\/5555"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/media\/4679"}],"wp:attachment":[{"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/media?parent=5552"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/categories?post=5552"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/donguri3.net\/wp-json\/wp\/v2\/tags?post=5552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}