{"id":345,"date":"2025-09-07T00:32:57","date_gmt":"2025-09-06T22:32:57","guid":{"rendered":"https:\/\/www.patrickphang.nl\/?p=345"},"modified":"2025-09-07T00:33:21","modified_gmt":"2025-09-06T22:33:21","slug":"upgrading-my-raspberry-pi-webserver-from-pi-3-b-to-pi-5-with-nvme-storage","status":"publish","type":"post","link":"https:\/\/www.patrickphang.nl\/index.php\/2025\/09\/07\/upgrading-my-raspberry-pi-webserver-from-pi-3-b-to-pi-5-with-nvme-storage\/","title":{"rendered":"Upgrading My Raspberry Pi Webserver: From Pi 3 B+ to Pi 5 with NVMe Storage"},"content":{"rendered":"\n<h4 id=\"running-a-home-webserver-on-a-raspberry-pi-has-been-one-of-my-most-rewarding-tech-projects-recently-i-decided-it-was-time-for-a-major-upgrade-moving-from-my-trusty-raspberry-pi-3-b-to-the-new-raspber\" class=\"wp-block-heading alignwide has-accent-background-color has-background\">Running a home webserver on a Raspberry Pi has been one of my most rewarding tech projects. Recently, I decided it was time for a major upgrade, moving from my trusty Raspberry Pi 3 B+ to the new Raspberry Pi 5 with 16GB of RAM, and ditching the SD card for blazing-fast NVMe storage. Here&#8217;s how I made the transition and the incredible performance gains I experienced.<\/h4>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 id=\"why-upgrade\" class=\"wp-block-heading\">Why Upgrade?<\/h2>\n\n\n\n<p>My Pi 3 B+ had served me well for years, hosting my personal website, development projects, and various web applications. However, I was starting to hit some limitations:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Limited RAM causing occasional memory pressure<\/li>\n\n\n\n<li>SD card I\/O bottlenecks during heavy traffic<\/li>\n\n\n\n<li>Slower ARM Cortex-A53 processor struggling with modern web frameworks<\/li>\n\n\n\n<li>USB 2.0 limitations for external storage<\/li>\n<\/ul>\n\n\n\n<p>The Pi 5 promised to solve all these issues and then some.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large is-style-rounded is-style-rounded--1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"740\" data-attachment-id=\"342\" data-permalink=\"https:\/\/www.patrickphang.nl\/version-1-0-0\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/rasp3.jpg?fit=1500%2C1084&amp;ssl=1\" data-orig-size=\"1500,1084\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;Version 1.0.0&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;Version 1.0.0&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Raspberry Pi 3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/rasp3.jpg?fit=1024%2C740&amp;ssl=1\" data-id=\"342\" src=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/rasp3.jpg?resize=1024%2C740&#038;ssl=1\" alt=\"\" class=\"wp-image-342\" srcset=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/rasp3.jpg?resize=1024%2C740&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/rasp3.jpg?resize=300%2C217&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/rasp3.jpg?resize=768%2C555&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/rasp3.jpg?w=1500&amp;ssl=1 1500w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">Raspberry Pi 3 B+<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-style-rounded is-style-rounded--2\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"656\" height=\"437\" data-attachment-id=\"341\" data-permalink=\"https:\/\/www.patrickphang.nl\/rasp5\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/rasp5.jpeg?fit=656%2C437&amp;ssl=1\" data-orig-size=\"656,437\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"Raspberry Pi 5\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/rasp5.jpeg?fit=656%2C437&amp;ssl=1\" data-id=\"341\" src=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/rasp5.jpeg?resize=656%2C437&#038;ssl=1\" alt=\"\" class=\"wp-image-341\" srcset=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/rasp5.jpeg?w=656&amp;ssl=1 656w, https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/rasp5.jpeg?resize=300%2C200&amp;ssl=1 300w\" sizes=\"auto, (max-width: 656px) 100vw, 656px\" \/><figcaption class=\"wp-element-caption\">Raspberry Pi 5<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<h2 id=\"raspberry-pi-3-b-vs-raspberry-pi-5-sidebyside-comparison\" class=\"wp-block-heading\">Raspberry Pi 3 B+ vs Raspberry Pi 5: Side-by-Side Comparison<\/h2>\n\n\n\n<figure class=\"wp-block-table alignwide\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Feature<\/strong><\/td><td><strong>Raspberry Pi 3 B+<\/strong><\/td><td><strong>Raspberry Pi 5 (16GB)<\/strong><\/td><\/tr><tr><td><strong>CPU<\/strong><\/td><td>Quad-core ARM Cortex-A53 @ 1.4GHz<\/td><td>Quad-core ARM Cortex-A76 @ 2.4GHz<\/td><\/tr><tr><td><strong>RAM<\/strong><\/td><td>1GB LPDDR2<\/td><td>16GB LPDDR4X<\/td><\/tr><tr><td><strong>GPU<\/strong><\/td><td>VideoCore IV<\/td><td>VideoCore VII<\/td><\/tr><tr><td><strong>Storage<\/strong><\/td><td>MicroSD only<\/td><td>MicroSD + M.2 NVMe support<\/td><\/tr><tr><td><strong>USB Ports<\/strong><\/td><td>4x USB 2.0<\/td><td>2x USB 2.0, 2x USB 3.0<\/td><\/tr><tr><td><strong>Ethernet<\/strong><\/td><td>300Mbps (shared with USB)<\/td><td>Gigabit Ethernet (dedicated)<\/td><\/tr><tr><td><strong>WiFI<\/strong><\/td><td>802.11ac 2.4\/5GHz<\/td><td>802.11ac 2.4\/5GHz (improved antenna)<\/td><\/tr><tr><td><strong>GPIO<\/strong><\/td><td>40-pin header<\/td><td>40-pin header<\/td><\/tr><tr><td><strong>Power<\/strong><\/td><td>5V\/2.5A via micro USB<\/td><td>5V\/5A via USB-C<\/td><\/tr><tr><td><strong>Boot Options<\/strong><\/td><td>SD card only<\/td><td>SD card, USB, NVMe, Network<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>The performance difference is substantial, the Pi 5 offers roughly 3x the CPU performance and 16x the RAM capacity.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 id=\"the-migration-process\" class=\"wp-block-heading\">The Migration Process<\/h2>\n\n\n\n<h3 id=\"step-1-initial-boot-with-existing-sd-card\" class=\"wp-block-heading\">Step 1: Initial Boot with Existing SD Card<\/h3>\n\n\n\n<p>A nice thing of the Raspberry Pi ecosystem is its backward compatibility. I took the SD card from my Pi 3 B+ and inserted it directly into the Pi 5. To my delight, it booted successfully on the first try!<\/p>\n\n\n\n<p>However, I needed to ensure all drivers and firmware were optimized for the new hardware.<\/p>\n\n\n\n<h3 id=\"step-2-system-update-and-optimization\" class=\"wp-block-heading\">Step 2: System Update and Optimization<\/h3>\n\n\n\n<p>Once booted, I immediately updated the system to ensure compatibility with the Pi 5&#8217;s hardware:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt upgrade -y\nsudo rpi-update\nsudo reboot<\/code><\/pre>\n\n\n\n<p>This process took about 10-15 minutes and installed all the necessary firmware updates and drivers specific to the Pi 5. The system felt noticeably snappier even running from the same SD card.<\/p>\n\n\n\n<h3 id=\"step-3-setting-up-nvme-storage\" class=\"wp-block-heading\">Step 3: Setting Up NVMe Storage<\/h3>\n\n\n\n<p>Next came the exciting part, setting up the NVMe SSD. I installed a 256GB NVMe 2230 SSD onto the <strong>NVMe PCIe Board<\/strong>, which connects directly to the Raspberry Pi 5&#8217;s PCIe slot. This provides much faster performance than USB-based solutions and gives you true PCIe speeds.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-6 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large is-style-rounded is-style-rounded--4\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"682\" height=\"486\" data-attachment-id=\"344\" data-permalink=\"https:\/\/www.patrickphang.nl\/screenshot-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/nvme.jpg?fit=682%2C486&amp;ssl=1\" data-orig-size=\"682,486\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;Screenshot&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;Screenshot&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"256GB NVMe 2230\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;256GB NVMe 2230&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/nvme.jpg?fit=682%2C486&amp;ssl=1\" data-id=\"344\" src=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/nvme.jpg?resize=682%2C486&#038;ssl=1\" alt=\"\" class=\"wp-image-344\" srcset=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/nvme.jpg?w=682&amp;ssl=1 682w, https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/nvme.jpg?resize=300%2C214&amp;ssl=1 300w\" sizes=\"auto, (max-width: 682px) 100vw, 682px\" \/><figcaption class=\"wp-element-caption\">256GB NVMe 2230<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-style-rounded is-style-rounded--5\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" data-attachment-id=\"343\" data-permalink=\"https:\/\/www.patrickphang.nl\/version-1-0-0-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/picasenes.jpg?fit=1600%2C1600&amp;ssl=1\" data-orig-size=\"1600,1600\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;Version 1.0.0&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;Version 1.0.0&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Pi 5 case\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Raspberry Pi 5 case with NVMe PCIe card&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/picasenes.jpg?fit=1024%2C1024&amp;ssl=1\" data-id=\"343\" src=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/picasenes.jpg?resize=1024%2C1024&#038;ssl=1\" alt=\"\" class=\"wp-image-343\" srcset=\"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/picasenes.jpg?resize=1024%2C1024&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/picasenes.jpg?resize=300%2C300&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/picasenes.jpg?resize=150%2C150&amp;ssl=1 150w, https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/picasenes.jpg?resize=768%2C768&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/picasenes.jpg?resize=1536%2C1536&amp;ssl=1 1536w, https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/picasenes.jpg?w=1600&amp;ssl=1 1600w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">Raspberry Pi 5 case with NVMe PCIe card and cooling fans<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p>First, I verified the drive was detected:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>lsblk<\/code><\/pre>\n\n\n\n<p>The NVMe drive appeared as <code>\/dev\/nvme0n1<\/code>.<\/p>\n\n\n\n<h3 id=\"step-4-cloning-sd-card-to-nvme\" class=\"wp-block-heading\">Step 4: Cloning SD Card to NVMe<\/h3>\n\n\n\n<p>For the migration, I used <code>rpi-clone<\/code>, a fantastic utility designed specifically for Raspberry Pi storage cloning:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install rpi-clone -y\nsudo rpi-clone nvme0n1<\/code><\/pre>\n\n\n\n<p>The <code>rpi-clone<\/code> utility is brilliant because it:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Automatically resizes partitions to fit the target drive<\/li>\n\n\n\n<li>Handles the boot partition correctly<\/li>\n\n\n\n<li>Excludes unnecessary files and directories<\/li>\n\n\n\n<li>Provides a bootable clone without manual partition editing<\/li>\n<\/ul>\n\n\n\n<p>Alternatively, you can use the <code>dd<\/code> command to copy the SD content to the NVMe:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>sudo dd if=\/dev\/mmcblk0 of=\/dev\/nvme0n1 bs=4M status=progress<\/code><\/pre>\n\n\n\n<p>However, this is much slower because it&#8217;s a raw copy that copies every bit including empty space, and you&#8217;ll need to manually resize partitions afterward.<\/p>\n\n\n\n<h3 id=\"step-5-switching-boot-to-nvme\" class=\"wp-block-heading\">Step 5: Switching Boot to NVMe<\/h3>\n\n\n\n<p>With the NVMe drive cloned and ready, I needed to switch the boot sequence. I shut down the Pi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo poweroff<\/code><\/pre>\n\n\n\n<p>Then I removed the SD card and powered on the Pi 5. It should now boot directly from the NVMe drive via the PCIe connection.<\/p>\n\n\n\n<p><strong>Option 2: Change Boot Order via raspi-config<\/strong>. Alternatively, you can change the Pi 5&#8217;s boot sequence to prioritize NVMe over SD card using:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo raspi-config<\/code><\/pre>\n\n\n\n<p>Navigate to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Advanced Options<\/strong> \u2192 <strong>Boot Order<\/strong> \u2192 <strong>NVMe\/USB Boot<\/strong><\/li>\n<\/ul>\n\n\n\n<p>This sets the boot order to try NVMe\/USB storage first before falling back to SD card. The Pi 5&#8217;s improved bootloader makes this process much more reliable than previous models.<\/p>\n\n\n\n<p>I chose the physical method for a clean transition, but the raspi-config option is useful if you want to keep the SD card as a backup boot option.<\/p>\n\n\n\n<p>To verify the system was running from NVMe:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>df -h \/\nlsblk<\/code><\/pre>\n\n\n\n<p>The root filesystem now showed as mounted from <code>\/dev\/nvme0n1p2<\/code> instead of <code>\/dev\/mmcblk0p2<\/code>.<\/p>\n\n\n\n<h3 id=\"step-6-expanding-the-filesystem\" class=\"wp-block-heading\">Step 6: Expanding the Filesystem<\/h3>\n\n\n\n<p>Once booted from NVMe, I expanded the filesystem to use the full capacity of the 256GB drive:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo raspi-config<\/code><\/pre>\n\n\n\n<p>I navigated to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Advanced Options<\/strong> \u2192 <strong>Expand Filesystem<\/strong><\/li>\n<\/ul>\n\n\n\n<p>After expanding, I rebooted to ensure all changes took effect.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 id=\"network-configuration-update\" class=\"wp-block-heading\">Network Configuration Update<\/h2>\n\n\n\n<p>With the hardware migration complete, I needed to update my network configuration. The Pi 5 received a new IP address from DHCP, so I had to:<\/p>\n\n\n\n<p><strong>Update Router Port Forwarding<\/strong>: Changed the forwarded IP from the old Pi 3 B+ address to the new Pi 5 address<\/p>\n\n\n\n<p>Pro tip: Consider setting up a static IP reservation in your router for your Pi to avoid this step in future migrations.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 id=\"performance-improvements\" class=\"wp-block-heading\">Performance Improvements<\/h2>\n\n\n\n<p>The difference in performance has been night and day:<\/p>\n\n\n\n<h3 id=\"boot-time\" class=\"wp-block-heading\">Boot Time<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pi 3 B+ (SD)<\/strong>: ~45 seconds<\/li>\n\n\n\n<li><strong>Pi 5 (NVMe)<\/strong>: ~12 seconds<\/li>\n<\/ul>\n\n\n\n<h3 id=\"web-server-response\" class=\"wp-block-heading\">Web Server Response<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Apache benchmark (1000 requests)<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Pi 3 B+: Average 850ms response time<\/li>\n\n\n\n<li>Pi 5: Average 180ms response time<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 id=\"file-operations\" class=\"wp-block-heading\">File Operations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Large file transfers<\/strong>: 5x faster<\/li>\n\n\n\n<li><strong>Database queries<\/strong>: 3x faster<\/li>\n\n\n\n<li><strong>Docker container startup<\/strong>: 4x faster<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 id=\"lessons-learned\" class=\"wp-block-heading\">Lessons Learned<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Always backup before migrating<\/strong> &#8211; While <code>rpi-clone<\/code> is reliable, having a backup of your 128GB SD card image saved me from potential headaches.<\/li>\n\n\n\n<li><strong>NVMe makes a huge difference<\/strong> &#8211; The storage upgrade provided more noticeable improvements than even the CPU upgrade in many scenarios.<\/li>\n\n\n\n<li><strong>Power supply matters<\/strong> &#8211; The Pi 5 needs significantly more power. Using the official 27W USB-C adapter prevented any stability issues.<\/li>\n\n\n\n<li><strong>Check your cooling<\/strong> &#8211; The Pi 5 runs hotter than the 3 B+. I added a small heatsink and fan to maintain optimal temperatures under load.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 id=\"final-thoughts\" class=\"wp-block-heading\">Final Thoughts<\/h2>\n\n\n\n<p>Upgrading from the Raspberry Pi 3 B+ to the Pi 5 with NVMe storage has transformed my home webserver experience. Page loads are snappy, deployments are faster, and I have room to grow with additional services and applications.<\/p>\n\n\n\n<p>The migration process was surprisingly straightforward thanks to excellent tools like <code>rpi-clone<\/code> and the Pi 5&#8217;s flexible boot options. If you&#8217;re running any kind of server workload on an older Pi, I highly recommend making the jump &#8211; the performance gains are absolutely worth it.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<p><em>Have you upgraded your Raspberry Pi setup recently? What performance improvements did you notice? Share your experience in the comments below!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Running a home webserver on a Raspberry Pi has been one of my most rewarding tech projects. Recently, I decided it was time for a major upgrade, moving from my trusty Raspberry Pi 3 B+ to the new Raspberry Pi 5 with 16GB of RAM, and ditching the SD card for blazing-fast NVMe storage. Here&#8217;s [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":351,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"Upgrading My Raspberry Pi Webserver: From Pi 3 B+ to Pi 5 with NVMe Storage","jetpack_seo_html_title":"From Pi 3 B+ to Pi 5 with NVMe Storage","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[11,7],"tags":[],"class_list":["post-345","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hobby","category-tech"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.patrickphang.nl\/wp-content\/uploads\/2025\/09\/patupgraderasp.jpg?fit=1024%2C1536&ssl=1","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.patrickphang.nl\/index.php\/wp-json\/wp\/v2\/posts\/345","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.patrickphang.nl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.patrickphang.nl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.patrickphang.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.patrickphang.nl\/index.php\/wp-json\/wp\/v2\/comments?post=345"}],"version-history":[{"count":6,"href":"https:\/\/www.patrickphang.nl\/index.php\/wp-json\/wp\/v2\/posts\/345\/revisions"}],"predecessor-version":[{"id":352,"href":"https:\/\/www.patrickphang.nl\/index.php\/wp-json\/wp\/v2\/posts\/345\/revisions\/352"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.patrickphang.nl\/index.php\/wp-json\/wp\/v2\/media\/351"}],"wp:attachment":[{"href":"https:\/\/www.patrickphang.nl\/index.php\/wp-json\/wp\/v2\/media?parent=345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.patrickphang.nl\/index.php\/wp-json\/wp\/v2\/categories?post=345"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.patrickphang.nl\/index.php\/wp-json\/wp\/v2\/tags?post=345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}