Clearly, the title is an attention-grabbing headline that might imply either lying or something that I didn’t mention – and you’d be exactly right. The basic idea is I have 4TB in “Linux ISOs” (no, it doesn’t involve anything illegal or 18+. Get your mind out of the gutter.) that I would like to store, however my main desktop only has a 1TB drive an and 80GB drive, my old desktop only has an 80GB drive, and my laptops obviously won’t have enough storage. While drives can now be found in the range of $35-50 per TB, in the interest of saving money I will be attempting to take advantage of what I have right now to create an “infinitely expandable” (more on that later) 4TB network share.
Obviously, this network share will have some limitations that I am already aware of. Allow me to explain how it works, and then discuss not only the obvious limitations but also other possible limitations with this design. However, you can’t be free, so the goal will be to minimize limitations without beating the cost of $0.00 (not including power costs and the cost of equipment I already have).
The idea is that a Raspberry Pi connected to a local network can act as an FTP server, but only cache the most accessed files on an external 80GB hard drive. The rest of the files can be stored on a Google Drive account (which I have without paying for) or an Amazon Cloud account (which is relatively cheap for unlimited storage). The data can be encrypted in the cloud and accessed via rclone, and as such if a file needs to be streamed it can easily be done.
This brings me to my first limitation: network speed. Using a Raspberry Pi means that even via Ethernet, the connection is limited to 100 Mbps throughput, which is 12 MB/s. While this should be enough for most files, it may not be enough to stream some higher quality videos like uncompressed videos or videos recorded in 4K HDR wide gamut format. In addition, this is usually not enough to run programs over a network drive, and more than likely would quickly encounter difficulties.
So how can we optimize the speed of a network drive? My current situation is completely wireless: there are no wired connections to the router; all connections, including my desktop, is through a wireless connection. In addition, there is approximately 30 to 40 feet of space between my room (where all my devices are located) and the garage (where the router is located), as well as 3 or 4 walls. As a result, the WiFi connection is often weak, and at peak intervals, I get around 30 Mbps download and 40 Mbps upload on an 80/80 connection. A wired connection test does in fact show around 70 to 80 Mbps download and uploads speed, so clearly the signal strength is a factor in the slower speeds. I do not want to spend money on devices like WiFi repeaters, even though often times the speed will drop to as slow as 5 Mbps or lower, which is often unacceptable on download.
To optimize the speed, clearly the biggest limitation is the network speed, as that could use some severe improvement before considerations to upgrading the internet connection speed are made. In addition, equipment upgrades would be more useful than a monthly internet package upgrade, however, as both cost additional money, neither will be considered in favor of free.
Although I plan to detail this more in a separate, unrelated series of posts as well as videos, for now I have selected the option of creating my own network. By taking advantage of one Raspberry Pi and an old laptop, I can create an ad hoc network that provides an internet connection to all the devices in my room as well as live management of the individual internet connection speed of each device, so it can optimize for the most important use cases first. It works by using the Raspberry Pi to connect to my home WiFi network on one WiFi adapter, and using a second WiFi adapter to broadcast a local network within my room. This can be placed on the edge of my room to receive the best signal possible while still providing optimal wireless connection within my room. The old laptop is a 2000s-era laptop originally running Windows 95 that I will install a Linux-based operating system on and use as a network server – it can be used as network-connected testing environment to run server software, as well as connect any USB to network hardware like printers and hard drives.