Blog: add ramdisk guide
This commit is contained in:
parent
0cb4ff33dd
commit
b4bf3b6372
109
src/content/blog/use-a-ramdisk.md
Normal file
109
src/content/blog/use-a-ramdisk.md
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
---
|
||||||
|
title: 'Use a Ramdisk'
|
||||||
|
description: 'Why you should use ramdisks'
|
||||||
|
pubDate: 'Dec 29 2023'
|
||||||
|
heroImage: '/blog-placeholder-5.jpg'
|
||||||
|
---
|
||||||
|
|
||||||
|
# RAM Disks
|
||||||
|
|
||||||
|
Traditionally, storage is placed on an SSD or HDD, both of which are are types
|
||||||
|
of non-volatile storage. This means if your computer loses power or restarts,
|
||||||
|
the data will persist on the disk. In most cases, this is desired.
|
||||||
|
|
||||||
|
A RAM disk is a type of storage recorded in in RAM. The key difference is that
|
||||||
|
RAM is volatile storage.
|
||||||
|
|
||||||
|
Let's consider the pros and cons of using RAM for storage:
|
||||||
|
|
||||||
|
Pros:
|
||||||
|
- Very fast, faster than the best NVMe drives
|
||||||
|
- True uniform access
|
||||||
|
|
||||||
|
Cons:
|
||||||
|
- Limited to the size of your RAM, typically smaller than an SSD or HDD
|
||||||
|
- All data is lost on powerless and reboot
|
||||||
|
|
||||||
|
In short, if you have RAM to spare and aren't worried about losing power, a RAM
|
||||||
|
disk is far more performant. It's especially noticeable when you're doing a huge
|
||||||
|
amount of small reads/writes. In fact, the Chromium project [recommends using a
|
||||||
|
RAM disk](https://chromium.googlesource.com/chromium/src/+/main/docs/linux/build_instructions.md#using-tmpfs)
|
||||||
|
to build the browser.
|
||||||
|
|
||||||
|
## Downloads Folder in RAM
|
||||||
|
|
||||||
|
Aside from the speedup, I personally use the RAM disk for its psychological
|
||||||
|
benefits. Knowing the storage is volatile motivates me to clean it up.
|
||||||
|
|
||||||
|
One example is when making changes to a git repository, I'll often clone the
|
||||||
|
repository onto a RAM disk. This reminds me to make *very* frequent commits,
|
||||||
|
since I'm constantly a bit concerned my work will be wiped via power outage or
|
||||||
|
crash. But the outcome is good atomic-committing in git.
|
||||||
|
|
||||||
|
I also put my Downloads folder in the RAM. For one thing, partial downloads from
|
||||||
|
Chromium and Firefox don't matter, since neither can pick up where they left
|
||||||
|
off. This you'll have to restart an interrupted download even if you are using
|
||||||
|
non-volatile storage. I've also found my Downloads folder gets really messy if I
|
||||||
|
don't do this. Wiping it on reboot reminds me to move files into their proper
|
||||||
|
folders.
|
||||||
|
|
||||||
|
The following command will symlink your Downloads folder to the RAM disk. Most
|
||||||
|
programs will never notice the difference:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
rmdir ~/Downloads
|
||||||
|
ln -s /dev/shm/ ~/Downloads
|
||||||
|
```
|
||||||
|
|
||||||
|
## Setting Up a RAM Disk
|
||||||
|
|
||||||
|
### Shared Memory
|
||||||
|
|
||||||
|
If you're on Linux, you already have a RAM disk! The path `/dev/shm` is found on
|
||||||
|
all Linux system. It stands for "shared memory" and is indented as a space for
|
||||||
|
users and programs to "share" data. Very few programs and users actually do
|
||||||
|
this, but it means that directory is accessible for writing for all users
|
||||||
|
including you.
|
||||||
|
|
||||||
|
To verify a directory is mounted on a RAM disk, use the following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
df -h .
|
||||||
|
# OR if you know the path
|
||||||
|
df -h /dev/shm
|
||||||
|
```
|
||||||
|
|
||||||
|
We care about what the `Filesystem` columns reports. It should be "tmpfs",
|
||||||
|
mains "temporary file system". For example mine looks like:
|
||||||
|
|
||||||
|
```
|
||||||
|
Filesystem Size Used Avail Use% Mounted on
|
||||||
|
tmpfs 16G 4.0G 12G 26% /dev/shm
|
||||||
|
```
|
||||||
|
|
||||||
|
We can also see the size of the RAM disk. In this case it's 16GB. By default,
|
||||||
|
Linux mounts half the system RAM for `/dev/shm`. This memory is only used if the
|
||||||
|
system needs to use it, so initially it takes up 0GB. The "size" is the maximum
|
||||||
|
amount of memory the file system can take up.
|
||||||
|
|
||||||
|
### Mount a RAM Disk
|
||||||
|
|
||||||
|
The particularly adventurous can also mount their own RAM disk. The `mount`
|
||||||
|
command bundled with Linux can do this. You will need root privileges.
|
||||||
|
|
||||||
|
The following mounts a 1GB RAM disk onto the directory `/home/emiliko/mnt`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo mount -t tmpfs -o uid=1000,size=1g tmpfs /home/emiliko/mnt
|
||||||
|
```
|
||||||
|
|
||||||
|
## Advanced Notes
|
||||||
|
|
||||||
|
While in this article I implied all temporary file systems are RAM disks and
|
||||||
|
vise versa, neither is technically true. It's possible to run `tmpfs` on
|
||||||
|
non-volatile storage, and many servers choose to do this. Similarly, a RAM disk
|
||||||
|
can be used for a normal file system, like btrfs.
|
||||||
|
|
||||||
|
However, for personal use, you'll never want to disconnect the terms `tmpfs` and
|
||||||
|
RAM disk. Using one without the other doesn't make any sense on a personal
|
||||||
|
computer and is unusual on a shared computer too.
|
|
@ -2,6 +2,7 @@
|
||||||
title: 'SSH Quick Start Guide'
|
title: 'SSH Quick Start Guide'
|
||||||
description: 'The fastest way to get all the SSH essentials out of the way'
|
description: 'The fastest way to get all the SSH essentials out of the way'
|
||||||
updateDate: 'December 26 2023'
|
updateDate: 'December 26 2023'
|
||||||
|
heroImage: '/ssh-logo.png'
|
||||||
---
|
---
|
||||||
|
|
||||||
# SSH
|
# SSH
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
---
|
---
|
||||||
title: 'Systemd Timers'
|
title: 'Systemd Timers'
|
||||||
description: "Replacing Crontabs with Systemd's timer mechanism"
|
description: "Replacing Crontabs with Systemd's timer mechanism"
|
||||||
pubDate: 'Dec 25 2023'
|
updateDate: 'Dec 29 2023'
|
||||||
heroImage: '/blog-placeholder-2.jpg'
|
heroImage: '/systemd-dark.webp'
|
||||||
---
|
---
|
||||||
|
|
||||||
# Systemd Timers
|
# Systemd Timers
|
Loading…
Reference in a new issue