Pimping Firewalla Gold Plus
WARNING!
If you are reading this post you automatically agree NOT to tell the great folks at Firewalla that I did this nor will you attempt this really stupid hack. You agree to not share this post with them as I don't want them to read it you may continue reading - let's keep this our little secret. Otherwise press the back button.
Also, to be clear, once you do this all bets are off. You no longer have a warranty. There is a really good chance that you are going to brick your Firewalla. There is no one to support you - certainly not the smart folks at Firewalla. There is a good chance you will "let the smoke out" of your Gold Plus. You also have a very good chance of not being able to reflash your Gold Plus.
Another reference, and more details, for this thought exercise can be found here.
PIMPING THE GOLD PLUS - adding a 1TB SSD and 16GB of memory
Again, do not do this. Just have fun reading this post.
Let's look at what the baseline configuration of a Firewalla Gold Plus is.
lsblk
pi@Firewalla:~ (Gold Plus Firewalla) $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
mmcblk0 179:0 0 29.1G 0 disk
├─mmcblk0p1 179:1 0 1M 0 part
├─mmcblk0p2 179:2 0 500M 0 part /boot
├─mmcblk0p3 179:3 0 4.5G 0 part /media/root-ro
├─mmcblk0p4 179:4 0 3.5G 0 part /var/lib/docker
├─mmcblk0p5 179:5 0 2G 0 part /media/home-ro
├─mmcblk0p6 179:6 0 2G 0 part /media/home-rw
├─mmcblk0p7 179:7 0 1G 0 part /log
├─mmcblk0p8 259:0 0 4G 0 part /data
└─mmcblk0p9 259:1 0 256M 0 part /boot/efi
mmcblk0boot0 179:8 0 4M 1 disk
mmcblk0boot1 179:16 0 4M 1 disk
zram0 252:0 0 1.9G 0 disk [SWAP]
zram1 252:1 0 1.9G 0 disk [SWAP]
zram2 252:2 0 1.9G 0 disk [SWAP]
zram3 252:3 0 1.9G 0 disk [SWAP]
... and for memory ...
/proc/meminfo
pi@Firewalla:~ (Gold Plus Firewalla) $ cat /proc/meminfo
MemTotal: 3822628 kB
MemFree: 210248 kB
MemAvailable: 1096136 kB
Buffers: 204512 kB
Cached: 781904 kB
SwapCached: 2944 kB
Active: 685376 kB
Inactive: 1870612 kB
Active(anon): 77044 kB
Inactive(anon): 1546224 kB
Active(file): 608332 kB
Inactive(file): 324388 kB
Unevictable: 124 kB
Mlocked: 0 kB
SwapTotal: 1908720 kB
SwapFree: 1639588 kB
...
Install the SSD and memory cards
I am not going into the details about what SSD and memory cards you should get. I will say, there are a lot of wrong SSD cards to get -- PCIe will not work. There are many physical sizes of SSD cards and anything other than a 2242 will not fit.
Insert the SSD card. Lots of ways to insert the card in the wrong way. Lots of ways that things can break here. Do not do it. If you do this and your Gold Plus starts beeping a lot on startup ... you are hosed.
Install the SO-DIMM memory card.
This is what a Gold Plus with new goodies installed looks like. Yours will never look link this - right?!
The memory will just work. The SSD needs quite a bit of provisioning and configuration.
On Power Up - memory
Check your memory after the first boot. In this proof of concept, memory is now 16GB.
/proc/meminfo
pi@Firewalla:~ (Gold Plus Firewalla) $ cat /proc/meminfo
MemTotal: 16190496 kB
MemFree: 12324264 kB
MemAvailable: 13582596 kB
Buffers: 200688 kB
Cached: 1396628 kB
SwapCached: 56 kB
Active: 1145364 kB
Inactive: 1802880 kB
Active(anon): 88516 kB
Inactive(anon): 1449192 kB
Active(file): 1056848 kB
Inactive(file): 353688 kB
Unevictable: 124 kB
Mlocked: 0 kB
SwapTotal: 8093680 kB
SwapFree: 8046832 kB
...
Provisioning the SSD
Observe where the SSD is logically connected. This is almost certainly going to be at /dev/sda.
lsblk
pi@Firewalla:~ (Gold Plus Firewalla) $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 931.5G 0 disk
mmcblk0 179:0 0 29.1G 0 disk
├─mmcblk0p1 179:1 0 1M 0 part
├─mmcblk0p2 179:2 0 500M 0 part /boot
├─mmcblk0p3 179:3 0 4.5G 0 part /media/root-ro
├─mmcblk0p4 179:4 0 3.5G 0 part /var/lib/docker
├─mmcblk0p5 179:5 0 2G 0 part /media/home-ro
├─mmcblk0p6 179:6 0 2G 0 part /media/home-rw
├─mmcblk0p7 179:7 0 1G 0 part /log
├─mmcblk0p8 259:0 0 4G 0 part /data
└─mmcblk0p9 259:1 0 256M 0 part /boot/efi
mmcblk0boot0 179:8 0 4M 1 disk
mmcblk0boot1 179:16 0 4M 1 disk
zram0 252:0 0 1.9G 0 disk [SWAP]
zram1 252:1 0 1.9G 0 disk [SWAP]
zram2 252:2 0 1.9G 0 disk [SWAP]
zram3 252:3 0 1.9G 0 disk [SWAP]
Partition the SATA SSD using fdisk
Now that it’s know that the SATA SSD is at /dev/sda the drive can be partitioned.
Run the fdisk command and follow the prompts to create a logical partition. These are the answers to the prompts.
sudo fdisk /dev/sda
Add a new partition
n
The new partition should be a primary partition
p
Set the partition number
1
Set the first sector
Accept the default – press [Enter]
Set the last sector
Accept the default – press [Enter]
Remove the signature
y
Write the partition
w
Displaying the new Logical Partition
Running lsblk again show a logical partition at /dev/sda/sda1.
pi@Firewalla:~ (Gold Plus Firewalla) $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 931.5G 0 disk
└─sda1 8:1 0 931.5G 0 part
mmcblk0 179:0 0 29.1G 0 disk
├─mmcblk0p1 179:1 0 1M 0 part
├─mmcblk0p2 179:2 0 500M 0 part /boot
├─mmcblk0p3 179:3 0 4.5G 0 part /media/root-ro
├─mmcblk0p4 179:4 0 3.5G 0 part /var/lib/docker
├─mmcblk0p5 179:5 0 2G 0 part /media/home-ro
├─mmcblk0p6 179:6 0 2G 0 part /media/home-rw
├─mmcblk0p7 179:7 0 1G 0 part /log
├─mmcblk0p8 259:0 0 4G 0 part /data
└─mmcblk0p9 259:1 0 256M 0 part /boot/efi
mmcblk0boot0 179:8 0 4M 1 disk
mmcblk0boot1 179:16 0 4M 1 disk
zram0 252:0 0 1.9G 0
Create a mount point for the SATA SSD
Before adding an entry to fstab, a mount point for the drive has to be created. The mount point is the directory where the data on the drive will be accessed. In this example /sata-drive is going to be the mount point but any name could be used.
sudo mkdir /sata-drive
Create a group to control access permissions
Change the group ownership of the directory so that users can access it. Create a group
called data and then add users to the new group. In this example data is group name but
any name could be used for the group.
sudo groupadd data
There is only “one” user by default on the Firewalla Gold Plus – pi.
sudo usermod -aG data pi
Change the ownership of the mountpoint.
sudo chown -R :data /sata-drive
Format the drive
Format the drive as a ext4 Linux drive.
ssd-data$ sudo mkfs -t ext4 /dev/sda1
The results should look something like this.
pi@Firewalla:~ (Gold Plus Firewalla) $ sudo mkfs -t ext4 /dev/sda1
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 244190390 4k blocks and 61054976 inodes
Filesystem UUID: 1b4271f9-41b9-433f-a9e3-b8b869d30d98
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
Identifying the UUID of the SATA SSD
Use blkid to determine the UUID of /dev/sda1. The UUID will be used to safely mount the
SSD after every boot.
pi@Firewalla:~ (Gold Plus Firewalla) $ blkid
/dev/mmcblk0p3: UUID="b85c6585-fed0-4670-9b84-aa...15" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="5092b152-3ea3-ee47-b754-b9228fdd83ce"
/dev/mmcblk0p2: UUID="6b7f46ff-4dd5-489a-86ae-0c...150" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="57f7bcea-320a-c343-b64b-3aeea0b6bda4"
/dev/mmcblk0p4: UUID="a388bfbd-cd07-413f-ad42-e3...8c" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="9724a787-8ad1-ab4e-a4d6-f90c2ed8c5ef"
/dev/mmcblk0p5: UUID="f9c4c352-f69b-40ea-84b9-4b...ff" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="3660adb0-eb86-4245-8a97-1f3685137ff0"
/dev/mmcblk0p6: UUID="56218b3e-2738-4a8c-9705-01...c8" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="95dc1a8d-0491-3e47-b8f1-2e79b3f11e5a"
/dev/mmcblk0p7: UUID="da357789-9c08-4e83-9ed9-f2...41" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="89b180ec-20cf-ae41-86b6-2f1668631fa2"
/dev/mmcblk0p8: UUID="c841aabc-1bf3-4807-82b6-b1...8b" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="d728af0e-1021-f54a-85c8-86389334143f"
/dev/mmcblk0p9: UUID="F4C5-D8F8" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="db0db46b-5a06-3449-a3af-d6b6b612e1eb"
/dev/zram3: UUID="402c7dd8-64f4-4d3e-a2e1-a0...2c" TYPE="swap"
/dev/zram1: UUID="64634049-8801-4474-8c3a-e8...b0" TYPE="swap"
/dev/zram2: UUID="cca8a4d2-cc88-486b-9c40-c7...d6" TYPE="swap"
/dev/sda1: UUID="71f91b42-433f-41b9-a9e3-b869d8b30d98" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="217b7a91-01"
/dev/zram0: UUID="0f31a690-8ed4-408b-875c-4b...c4" TYPE="swap"
Create an Automount Entry
Create an automount entry in fstab so the drive is mounted after every reboot a line needs to be added to the fstab file. Be aware that at the time of this writing the architecture of the Firewalla Gold is such that user changes such as these are deleted and the system restored to it’s known configuration on every boot. There is a way around that where permanent changes can be made – but if you need to be told how to do that you shouldn’t be doing it.
Edit the fstab file. If you need to be told how to edit the file or install nano then you shouldn't be doing this.
sudo nano /etc/fstab
At the bottom the fstab file add an entry that contains the information about the new hardware. The UUID is from the blkid just run.
UUID=71f91b42-433f-41b9-a9e3-b869d8b30d98 /sata-drive auto nodev,nofail,x-gvfs-show 0 0
UUID= 71f91b42-433f-41b9-a9e3-b869d8b30d98 - is the UUID of the drive from above (but obfuscated in this writeup). UUID doesn’t have to be used - /dev/sda could be used -- but it's always safer to use the UUID as that will never changes where the device name may.
Save and close the file.
Testing the entry
Before rebooting the machine, test your new fstab entry.
sudo mount -a
If no errors are displayed then the fstab entry is correct and it’s safe to reboot.
QED
pi@Firewalla:~ (Gold Plus Firewalla) $ sudo fdisk -l
Disk /dev/mmcblk0: 29.12 GiB, 31268536320 bytes, 61071360 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
Disklabel type: gpt
Disk identifier: C0C5D63B-26C3-8F4E-826A-38BFB370AA18
Device Start End Sectors Size Type
/dev/mmcblk0p1 2048 4095 2048 1M BIOS boot
/dev/mmcblk0p2 4096 1028095 1024000 500M Linux filesystem
/dev/mmcblk0p3 1028096 10465279 9437184 4.5G Linux filesystem
/dev/mmcblk0p4 10465280 17805311 7340032 3.5G Linux filesystem
/dev/mmcblk0p5 17805312 21999615 4194304 2G Linux filesystem
/dev/mmcblk0p6 21999616 26193919 4194304 2G Linux filesystem
/dev/mmcblk0p7 26193920 28291071 2097152 1G Linux filesystem
/dev/mmcblk0p8 28291072 36679679 8388608 4G Linux filesystem
/dev/mmcblk0p9 36679680 37203967 524288 256M EFI System
Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: NGFF SSD 1TB
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7a91217b
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 1953525167 1953523120 931.5G 83 Linux
Disk /dev/zram0: 1.93 GiB, 2071986176 bytes, 505856 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/zram1: 1.93 GiB, 2071986176 bytes, 505856 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/zram2: 1.93 GiB, 2071986176 bytes, 505856 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/zram3: 1.93 GiB, 2071986176 bytes, 505856 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Why
Now there is lots of room for locally stored logs and room for docker images. Additional memory enables memory-resident activities to be performed.
nice
Read about the nice command. Do everything at 19. To be clear, doing this will eat up CPU and you will break your Firewalla. At the very least it will not work as intended and will cause unintended outcomes.
IRL
However ... in three years of running in similar ways, and working with care, we have never experienced any issues and never run into any heat issues.
-
I have been asking for a new Firewalla box that will handle 5Gbps internet for a while now. It needs to have a 5Gbps WAN and LAN port. I know I'm not the only one that has asked for that. Now I see this post of people needing more storage space, and memory. I wish Firewalla would just create a Platinum Firewalla already.
https://help.firewalla.com/hc/en-us/community/posts/16874278620051-Faster-Hardware- -
For my Goldwalla Plus, I can confirm the following:
This hard drive works: TS512GMTS430S (I didn't see the need to go 1TB, but I'm sure it'd be fine)
https://www.bhphotovideo.com/c/product/1665484-REG/transcend_ts512gmts430s_512gb_m_2_2242_ssd.html
Inside the chassis, the mounting screw to secure the M.2 was in a different hole in the motherboard, so if you find yourself looking at the perfect M.2 mount that's like 15mm away from the end of your installed 2242, move it to the correct location so that you can secure your new HDD.
This memory works: CT16G4SFRA32A
https://www.amazon.com/dp/B08C511GQH
I only got a single SO-DIMM @ 3200 Mhz. Also can confirm the full 16GB was recognized.
Hopefully this helps some folks.
-
Hey,
Has anyone could comment on the compatibility of the process and SSD models for the original Firewalla Gold/any changes needed (and re the last comment - is an extra screw is needed? didn't get that part...). I did the easy part with RAM long ago, so that for instance is limited to 8GB, and every time a new image is flashed, it only works with the original 4GB RAM, but any updates related to SSD and Gold would be greatly appreciated
Please sign in to leave a comment.
Comments
8 comments