VOISS - Storage
Written by Rich Morin.
Precis: thoughts on long-term storage for VOISS systems
Note: As of early 2020, the VOISS project and F123Light were discontinued. For details, see VOISS - Status.
VOISS) recently introduced the VOISS Classic series of portable computers for the blind. These systems are economical, extremely modular, and should be both extendable and maintainable by their users. I applaud this effort and expect to learn a great deal from it. I also hope to integrate VOISS systems into my plans for Perkian and Perkify.
That said, I’m not sure that their current system design makes the best possible use of the available storage options, particularly when the expected users are visually impaired. Fortunately, it’s quite possible for an individual VOISS user to make different decisions. These decisions may also be relevant to any systems (e.g., some Perkian models) that use a similar hardware platform.
The current VOISS models are based on the Raspberry Pi 3 Model B (aka 3B+). This is an economical, relatively compact, and very popular single-board computer. It has moderate power reqirements, supports a truly amazing number of interfacing options, and is supported by a variety of operating systems. (VOISS develops and distributes F123Light, a blind-friendly variant of Arch Linux.
While writing a HowTo for constructing a homebrew VOISS system, I started thinking about data storage. Eventually, I realized that I have some issues with the system’s emphasis on the microSD card (especially for blind users). This page discusses these issues and some possible ways to address them. First, however, we need to review some basic information on data storage.
When data isn’t being actively used by the processor, it generally resides in persistent storage. That is, storage which doesn’t lose its contents when the power is turned off. Personal computers need to store various types of data, including:
- the user’s data files (e.g., email, images, music)
- temporary data files for running programs
- the base operating system and added software
- virtual memory support (e.g., the “swapfile”)
The microSD card is the RasPi’s default medium for persistent storage. The base operating system is generally loaded (and possibly distributed) on this device. Typically, all of the other persistent data is stored on it, as well. However, data can also be stored on a variety of USB-connected devices. The most popular of these is the flash drives (aka thumb drive, USB fob), but there are many other options. For example, there are magnetic disk drives, solid state drives, and even adaptors that support microSD cards.
Despite the variety of other options, the RasPi gives preeminence to the microSD card. The reasons for this are historic and pragmatic: aside from the Compute Module, every RasPi model has had a built-in microSD socket. Also, even the smallest USB storage devices are larger than microSD cards and the number of USB sockets is limited (none on the Compute Module, one on the Pi Zero, and four on the others).
So, why not stick with the microSD card, given that it’s the default, historic, and pragmatic approach? I’m delighted that you asked; read on…
The microSD Card
The microSD card is an amazing triumph of technology. To begin with, it’s about the size of a fingernail (small enough to be used in a cell phone). Today’s microSD cards can store up to 1 TB of data (e.g., images, music, software, videos); future cards will no doubt hold even more.
This is far more than most VOISS users will ever need, so they can pick a supported size that meets their budget and expected needs. However, if you’re planning to add much data or software, get more storage capacity than you think you’ll need. Basically, dealing with microSD cards isn’t a lot of fun, so you won’t want to do so very often, if at all.
Although the VOISS Classic is very modular and designed to be maintainable by a blind user, installing or replacing the microSD card is still a hassle. (Things could get a lot worse if you’ve put together your own system and mounted the enclosure in some inaccessible manner.)
Unlike all of the other connectors on the 3B+, the microSD socket is located on the bottom of the board. So, you have to remove the enclosure from the satchel, locate the socket, deal with the card, and then put everything (includng any other connections you may have dislodged) back in place.
More generally, just handling a microSD card can be a real challenge. Even for a sighted and reasonably dextrous computer nerd such as me, it’s not a walk in the park. The card is tiny and has to be oriented and inserted just right. Having it slip out of your fingers and fall on the floor could be anything from a nuisance to a disaster, depending on its contents, your luck, and your capabilities.
Another issue has to do with labeling. There isn’t much room to write on a microSD card; even using a sharp pencil or fine-point pen, all I can fit on a card is a two-character ID code. There might be enough room for one braille cell, but labeling tape (even without the raised dots) would prevent the card from being inserted into the socket. Nor is there any practical (let alone convenient) way to attach a tag.
Finally, there is the matter of finding an available socket. Even the full-size RasPi models have only one microSD socket. This means that copying a card will require an adaptor dongle and (probably) a fair amount of expertise with system utilities. In summary, getting a card that you don’t expect to replace often starts to seem like a very reasonable precaution.
As mentioned above, there are a variety of USB-connected storage devices. However, most of these are inappropriate for use in a portable system. Clearly, we don’t want a device that can be confused by impacts, magnetic fields, etc. In practice, this limits us to flash drives and solid-state drives (SSDs). By the way, all SD cards (including the microSD) are actually (fairly slow) flash drives, internally.
SSDs access data much faster than flash drives. They also tend to have greater storage capacity and long-term reliability. However, they also tend to be physically larger and more expensive. So, unless the SSD’s benefits are more important than its drawbacks for a given use case, the flash drive wins. This would seem to be the case for the VOISS, which is intended as an economical, portable system for users with moderate computing needs.
In sharp contrast to the microSD card, USB flash drives are designed to be handled by “the rest of us”. Their “Type A” connectors are bigger than an entire microSD card. It’s impossible plug them in incorrectly and easy to tell whether they are fully inserted. Better yet, even the smallest flash drives tend to have a convenient hole for attaching some form of identification. I like to use cardstock tags with reinforced eyelets. These can be written on, labeled in braille, or modified (e.g, notched, punched) for tactile identification.
Every full-size RasPi has four USB slots, laid out in a 2x2 array. The spacing is pretty tight, so I was unable to plug in two very small USB flash drives as a horizontal pair. However, I was able to plug them in as a vertical pair. In any case, it’s quite possible to purchase 1’ long USB extension cables. This one is only $0.75! In addition, USB hubs are inexpensive and readily available.
OK, so much for the sales pitch; how can we use this technology to minimize contact with the dreaded microSD card?
Although there are more complicated options, I’ll concentrate on two simple ones below. In the first, we use the microSD card for the operating system files, but store all of the user’s data on the flash drive. In the second, we store everything on flash drives.
Option one (use the microSD card for just the operating system files) opens up a number of possibilities. For instance, we can trivially swap in a replacement microSD card (or move the user files to another computer) if the operating system gets confused.
We can also perform system upgrades in a reasonably sane fashion:
- copy the user files to another flash drive
- unmount and unplug both flash drives
- upgrade and check out the operating system
- mount the user flash drive and try it out
Of course, we should also be making backups on a regular basis, but this adds a bit more safety to the upgrade process.
Option two (store everything on flash drives) is quite appealing, from the standpoints of convenience, ease of manipulation, and safety. Basically, the user never has to deal with microSD cards at all! Consider all the ways this helps in the installation process:
- Each flash drive can have a user-readable label.
- Flash drives are harder to lose and easier to find.
- No adapters are required on the creating computer.
- Flash drives are trivial to plug in to the RasPi.
But wait, you ask: can the RasPi even boot from a flash drive? Good question; I hadn’t even considered the possibility of this until I did a web search, but the USB mass storage device boot page is very promising:
This tutorial explains how to boot your Raspberry Pi from a USB mass storage device such as a flash drive or USB hard disk. Be warned that this feature is experimental and does not work with all USB mass storage devices. See this blog post from Gordon Hollingworth for an explanation of why some USB mass storage devices don’t work, as well as for some background information. …
The Raspberry Pi 3A+ and 3B+ are able to boot from USB without any changes …
Following up on this lead, I did a bunch of reading and experimentation. As a result, I have been able to boot a copy of Raspbian on a 3B+, using balenaEtcher and some of the recommended flash drives. For details, see the VOISS - Booting page.
Some USB flash drives do not support use as a RasPi boot device, possibly because they take too long to power up. I couldn’t find an up-to-date list of bootable devices, so I started the RPi USB booting page on the Embedded Linux Wiki. Please report any additional working devices! (If signing up in order to edit the wiki page is too much work, feel free to email errors or omissions to me.)