The ultimate read-only file system on the SD card
This is a kind of follow-up of my previous post:
https://blog.vidakovic.xyz/posts/2019/01/read-only-file-system-on-raspberry-pi
I have recently stumbled upon this tool:
https://github.com/BertoldVdb/sdtool
I immediately forked it:
https://github.com/milanvidakovic/sdtool
The main idea behind this tool is to set one of the following command bits of the CSD register (very low level communication) of the SD card (via SPI interface):
https://blog.vidakovic.xyz/posts/2019/01/read-only-file-system-on-raspberry-pi
I have recently stumbled upon this tool:
https://github.com/BertoldVdb/sdtool
I immediately forked it:
https://github.com/milanvidakovic/sdtool
The main idea behind this tool is to set one of the following command bits of the CSD register (very low level communication) of the SD card (via SPI interface):
- TMP_WRITE_PROTECT - temporarily enable/disable write protection for the SD card,
- PERM_WRITE_PROTECT - permanently enable write protection for the SD card (cannot be reversed).
The behavior of the temporary write protection is quite interesting: when you
enable it, it will silently fail when writing to the SD card. In reality, it means that when you try to
write to a file (or create a new file), you will not get any error, and you might even be able to read that
file (probably because it was placed in the cache of the file system), but as soon as you reboot, you will
see that there have not been any changes.
How can this be used? First of all, you should set up your Raspberry Pi file
system to read-only (for example, you can use this), so it would be normal not to have writes to the
SD card. Then you can use the sdtool to enable the write protection. With those two steps, you should
get the ultimate protection of your SD card.
Why is this important? I have couple of RPIs which work constantly for years.
My experience with SD cards and RPIs is that they eventually corrupt the SD card. Sooner or later it will
happen. If you just enable the read-only file system, it seems that the SD card still gets corrupted. I
don't know why, but it happened to me several times. I have changed several SD cards (different vendors,
different models), and several power adapters, and still got SD cards corrupted at some point. I thought
that having the file system set to read-only would not corrupt the SD card during power loss (unattended
shutdown), but, unfortunately, the SD card would get corrupted anyway.
Even if the RPi is on the UPS (doesn't get turned off improperly), it would
still corrupt the SD card sooner or later. It happened too many times with my RPIs (and the Odroid, too).
One way to fix this is to boot the device from the USB hard disk instead of SD card, but then
the same problem can occur with the hard disk (although, not that bad as it occurs with the SD card). As a
matter of fact, it happened once with my Odroid and once with my RPi 3 (to have the USB hard disk
corrupted). In addition, why would you put the USB hard disk on your RPI 0? It is supposed to be a
lightweight system, not having a hard disk that consumes more power than RPI 0.
I have found an information on some forums that a special (quite expensive) SD
card types do not get corrupted at all: aMLC and SLC type. Both are significantly more expensive than the
usual cards, but people claim that they simply do not get corrupted.
One funny thing - my RPI 1 has corrupted the SD card only once in almost five
years, while RPI Zero and RPI 2 and 3 can corrupt the SD card in a matter of months (or even sooner). Does
it have to do with the speed of the system? Is the SD card overwhelmed with data and then it goes corrupt?
Why is it corrupted in the read-only mode, then? I don't know answers to all those questions. What I do
know, however, is the fact that the SD card would eventually get corrupted and that is the main reason for
this post.
I am now testing this temporary write protection in conjunction with the
read-only file system on my RPIs, and I will update this post with my experience.
At the end, just to repeat the fact that the contacts on the SD card are
actually the SPI interface contacts, meaning that all the communication with the SD card goes over the SPI
interface:
Comments
Comments powered by Disqus