This needs to be done under single-user mode and I don't know
how to get at single-user in RasPiOS.
Is there a "recipe" for adding a hardware swap partition to an
existing RasPiOS installation? Ideally I'd like a traditional
layout, with swap situated between / and /usr. I know how to
do it with FreeBSD during the install process but this particular
case involves a running, somewhat valuable RasPiOS installation
and the tools offered on RasPiOS are different enough to warrant
a study of prior art if it's available.
What I'd like to do is resize the existing root to roughly its
present, occupied size, add a swap partition in the freed space
and then create /usr in the remaining space, copying the old
/usr to the new, cleaning out usr files from the original root
partition and mounting the new /usr on the empty mountpoint.
This needs to be done under single-user mode and I don't know
how to get at single-user in RasPiOS. It could be done via booting
from a microSD, but that pitches me into the installer which isn't
exactly familiar territory.
In case it matters, this is on an 8GB Pi5 running Bookworm with
dual monitors and a 1 TB mechanical hard drive. df reports
Filesystem 1K-blocks Used Available Use% Mounted on
udev 4081296 0 4081296 0% /dev
tmpfs 1650304 6512 1643792 1% /run
/dev/sda2 961067256 61907904 850331260 7% /
tmpfs 4125728 163136 3962592 4% /dev/shm
tmpfs 5120 48 5072 1% /run/lock
/dev/sda1 522230 79520 442710 16% /boot/firmware
tmpfs 825136 272 824864 1% /run/user/1000
The need for "real" swap arises when Chromium and Firefox are both
running with multiple tabs open.
Thanks for reading, and any suggestions!
bob prohaska
Is there a "recipe" for adding a hardware swap partition to an
existing RasPiOS installation? Ideally I'd like a traditional
layout, with swap situated between / and /usr.
Lawrence D?Oliveiro <ldo@nz.invalid> wrote:
This is done by modifying the kernel command line -- there should
be a bootloader option to do this on a one-time basis before
actually loading the kernel.
I can understand editing cmdline.txt and rebooting as a way to get
single user ...
On Wed, 11 Mar 2026 16:20:15 -0000 (UTC), bp wrote:
This needs to be done under single-user mode and I don't know
how to get at single-user in RasPiOS.
This is done by modifying the kernel command line -- there should be a bootloader option to do this on a one-time basis before actually
loading the kernel.
The option ?single? should do the trick, though I think it will prompt
for the root password before allowing you in.
Another option to try is ?init=/bin/bash?.
These options should be common across Linux kernels, independent of architecture or bootloader.
On Thu, 12 Mar 2026 15:37:29 -0000 (UTC), bp wrote:
Lawrence D?Oliveiro <ldo@nz.invalid> wrote:
This is done by modifying the kernel command line -- there should
be a bootloader option to do this on a one-time basis before
actually loading the kernel.
I can understand editing cmdline.txt and rebooting as a way to get
single user ...
No, this is using one of the options in the bootloader menu
(?advanced?, I think it is) to do a one-time edit to the command line
for that boot.
You don?t want to permanently put the system to bootingNo, but I could edit cmdline.txt, reboot to single-user,
into single-user mode every time, do you?
I was hopeful somebody would respond to my query regarding
the relative speeds of swapfiles vs swap partitions. If
they're anywhere close in performance a swapfile seems
worth trying.
On 13/03/2026 14:16, Theo wrote:
The Natural Philosopher <tnp@invalid.invalid> wrote:
I think that is an interesting summary, the point being made that speed
is dominated today by disk access times, not CPU cycles in addressing a >> file system.
And with the demise of spinning rust, there is no seek delay either, so
the theoretical advantages of an actual partition in the disks low
sector area, no longer outweigh the operational simplicity of a swap file. >>
Like so many other things that grew out of limited RAM and slow spinning >> rust disks, the swap partition is really no longer necessary...
One advantage of a swap partition is that it's a dedicated space - if you start running low on space it may limit the size of swapfile that can be created, which has a knock-on impact on performance.
I dont think you understand the nature of a swapfile.
It is a fixed length file.
Another reason is if you're using hibernate. You need swap space at least as large as RAM to save out your memory contents to, so that can prevent hibernate working if you are running low on space. Also hibernate/restore is a fairly low-level process and swap partitions are easier to setup for that than swap files.
Again, you are talking bollocks. Swap files are pre-allocated, of fixed size, and zero filled.
What I'd like to do is resize the existing root to roughly its
present, occupied size,
I think that is an interesting summary, the point being made that speed
is dominated today by disk access times, not CPU cycles in addressing a file system.
And with the demise of spinning rust, there is no seek delay either, so
the theoretical advantages of an actual partition in the disks low
sector area, no longer outweigh the operational simplicity of a swap file.
Like so many other things that grew out of limited RAM and slow spinning rust disks, the swap partition is really no longer necessary...
The Natural Philosopher <tnp@invalid.invalid> wrote:
I think that is an interesting summary, the point being made that speed
is dominated today by disk access times, not CPU cycles in addressing a
file system.
And with the demise of spinning rust, there is no seek delay either, so
the theoretical advantages of an actual partition in the disks low
sector area, no longer outweigh the operational simplicity of a swap file. >>
Like so many other things that grew out of limited RAM and slow spinning
rust disks, the swap partition is really no longer necessary...
One advantage of a swap partition is that it's a dedicated space - if you start running low on space it may limit the size of swapfile that can be created, which has a knock-on impact on performance.
Another reason is if you're using hibernate. You need swap space at least
as large as RAM to save out your memory contents to, so that can prevent hibernate working if you are running low on space. Also hibernate/restore
is a fairly low-level process and swap partitions are easier to setup for that than swap files.
Theo
I was hopeful somebody would respond to my query regarding
the relative speeds of swapfiles vs swap partitions. If
they're anywhere close in performance a swapfile seems
worth trying.
The Natural Philosopher <tnp@invalid.invalid> wrote:I posted the magic spell
On 13/03/2026 14:16, Theo wrote:
The Natural Philosopher <tnp@invalid.invalid> wrote:I dont think you understand the nature of a swapfile.
I think that is an interesting summary, the point being made that speed >>>> is dominated today by disk access times, not CPU cycles in addressing a >>>> file system.
And with the demise of spinning rust, there is no seek delay either, so >>>> the theoretical advantages of an actual partition in the disks low
sector area, no longer outweigh the operational simplicity of a swap file. >>>>
Like so many other things that grew out of limited RAM and slow spinning >>>> rust disks, the swap partition is really no longer necessary...
One advantage of a swap partition is that it's a dedicated space - if you >>> start running low on space it may limit the size of swapfile that can be >>> created, which has a knock-on impact on performance.
It is a fixed length file.
Ah, it seems only Windows does variable length files.
Depending on the filesystem the swapfile may not be backed by physical blocks, ie the file exists but the space is not preallocated. It looks like you have to explicitly force that.
Another reason is if you're using hibernate. You need swap space at least >>> as large as RAM to save out your memory contents to, so that can prevent >>> hibernate working if you are running low on space. Also hibernate/restore >>> is a fairly low-level process and swap partitions are easier to setup for >>> that than swap files.Again, you are talking bollocks. Swap files are pre-allocated, of fixed
size, and zero filled.
For swap files, hibernation appears to be more complicated:
https://wiki.debian.org/Hibernation/Hibernate_Without_Swap_Partition
indicates you need to tell the kernel the offset of the swapfile within the partition, which suggests that the kernel is reading it directly rather than via the filesystem. That implies the filesystem must allocate it contiguously and is not allowed to have any kind of fragmentation. That means it could be impossible to set up on a machine that's been running a while.
Theo
On 15/03/2026 13:25, druck wrote:
The whole separate partition thing was way back in the days of
unreliable filing systems on small discs. It just isn't needed these
days when you can just have everything on one large partition and not
have to try and work out the high water mark needed for each part.
Whilst that is true, there are newer reasons for partitioning..
- You cant fill a root partition with user data if that is on a separate partition.
- You cant e.g. fill /var with e.g. MySQL data if that is on a separate partition..
On 15/03/2026 13:25, druck wrote:
The whole separate partition thing was way back in the days of
unreliable filing systems on small discs. It just isn't needed these
days when you can just have everything on one large partition and not
have to try and work out the high water mark needed for each part.
Whilst that is true, there are newer reasons for partitioning..
- You cant fill a root partition with user data if that is on a separate partition.
The whole separate partition thing was way back in the days of
unreliable filing systems on small discs. It just isn't needed these
days when you can just have everything on one large partition and not
have to try and work out the high water mark needed for each part.
Back in the good old days there were enough programs in /bin (which
was an actual directory, not a link to /usr/bin) to recover a system
with disk errors (when possible, anyway). But now that /bin is a
link, I wonder if the system will even boot properly, since "user
space" would have to mount /usr before almost all (all?) programs
are available. Including systemd.
Yes, but that has nothing much to do with the OP's plan to put /usr on its own partition. He didn't indicate where /home was going, but if he puts it on the root partition, he can still fill that up. And if /var is on /root, also problems.
Which is why I was curious about why he wants to a separate /usr partition.
Back in the good old days there were enough programs in /bin (which was an actual directory, not a link to /usr/bin) to recover a system with disk errors (when possible, anyway). But now that /bin is a link, I wonder if
the system will even boot properly, since "user space" would have to mount /usr before almost all (all?) programs are available. Including systemd.
OP, where are you... ?
The system was short of memory. It needed swap to cope this those
occasions.
Hardware swap is _supposed_ to be faster than a swap partition,
which made it, at least in principle, more attractive. Also, in
principle, a physical swap partition can be placed _between_ (in the
sense of seek stroke) /uar and /, minimizing the amount of head
movevent. This was true in the days of st506 disks, I'm not sure how
true it is with SATA.
On 2026-03-15 at 11:02 ADT, The Natural Philosopher <tnp@invalid.invalid> wrote:
On 15/03/2026 13:25, druck wrote:
The whole separate partition thing was way back in the days of
unreliable filing systems on small discs. It just isn't needed these
days when you can just have everything on one large partition and not
have to try and work out the high water mark needed for each part.
Whilst that is true, there are newer reasons for partitioning..
- You cant fill a root partition with user data if that is on a separate
partition.
- You cant e.g. fill /var with e.g. MySQL data if that is on a separate
partition..
Yes, but that has nothing much to do with the OP's plan to put /usr on its own partition. He didn't indicate where /home was going, but if he puts it on the root partition, he can still fill that up. And if /var is on /root, also problems.
It was a surprise to learn that a single partition is somehow required
for RasPiOS to function correctly. If true, it's a good thing to know.
Back in the good old days there were enough programs in /bin (which
was an actual directory, not a link to /usr/bin) to recover a system
with disk errors (when possible, anyway). But now that /bin is a
link, I wonder if the system will even boot properly, since "user
space" would have to mount /usr before almost all (all?) programs are
available. Including systemd.
Given that RasPiOS has an /sbin directory, I'm pretty sure the machine
will come up at worst in single-user if /usr can't be mounted
normally.
Whether /home/, /var/ and /tmp/ can be links to /usr is less clear to
me at this point.
On Sun, 15 Mar 2026 18:04:10 -0300, Jim Diamond wrote:
Back in the good old days there were enough programs in /bin (which
was an actual directory, not a link to /usr/bin) to recover a system
with disk errors (when possible, anyway). But now that /bin is a
link, I wonder if the system will even boot properly, since "user
space" would have to mount /usr before almost all (all?) programs
are available. Including systemd.
There was this conventional separation into two levels:
Absolutely core, indispensable stuff:
/bin
/lib
/sbin
Somewhat less important stuff:
/usr/bin
/usr/lib
/usr/sbin
The core point being that things in the first group had no
dependencies on things in the second group. So, for example, there
would be no executable in /bin or /sbin that depended on a shared
library in /usr/lib. But everything could safely depend on things in
the first group, since pretty much by definition, you wouldn?t have a functional system without that.
On 16/03/2026 09:54, Richard Kettlewell wrote:
bp@www.zefox.net writes:
It was a surprise to learn that a single partition is somehow requiredSeparate /usr probably still works, but I doubt it gets much
for RasPiOS to function correctly. If true, it's a good thing to know.
testing.
Can you guarantee that /usr will be mounted at boot time?
I remember having to use /bin/sh in init.d scripts because
/usr/bin/ksh didn't exist yet. That may have changed.
A long time ago, and not on an rpi. AIX or HP/UX or something.
bp@www.zefox.net writes:
It was a surprise to learn that a single partition is somehow required
for RasPiOS to function correctly. If true, it's a good thing to know.
Separate /usr probably still works, but I doubt it gets much testing.
It?s really not going to make swapping significantly faster. Nor is
trying to find an optimal location for swap - you have quite possibly
already spent more time on the matter in this thread than you could ever possibly save.
Back in the good old days there were enough programs in /bin (which
was an actual directory, not a link to /usr/bin) to recover a system
with disk errors (when possible, anyway). But now that /bin is a
link, I wonder if the system will even boot properly, since "user
space" would have to mount /usr before almost all (all?) programs are
available. Including systemd.
Given that RasPiOS has an /sbin directory, I'm pretty sure the machine
will come up at worst in single-user if /usr can't be mounted
normally.
$ ls -ld /sbin
lrwxrwxrwx 1 root root 8 Nov 17 2023 /sbin -> usr/sbin
However I believe this is neither here nor there since initramfs is responsible for mounting /usr if it?s separate. If it fails to mount you
will most likely end up in an initramfs shell (which is a pretty
reasonable recovery environment).
Whether /home/, /var/ and /tmp/ can be links to /usr is less clear to
me at this point.
You might run into trouble with AppArmor. Not particularly hard to fix.
If all this is about adding some swap space then you are massively overcomplicating matters. If there?s no unpartitioned space left then
just create a swapfile and get on with your life. If you do anything
more complicated than that then make sure your backups are up to date
first.
It was also that you could then make /usr an NFS share, to be shared
by all the computers on the network. ...
Of course network boot has moved on a lot since then.
Jim Diamond <zsd@jdvb.ca> wrote:
Yes, but that has nothing much to do with the OP's plan to put /usr on its >> own partition. He didn't indicate where /home was going, but if he puts it >> on the root partition, he can still fill that up. And if /var is on /root, >> also problems.
Which is why I was curious about why he wants to a separate /usr partition.
Since you ask...8-)
On rare occasions my 8GB Pi5 slowed to a crawl. Eventually I realized it
was happening when I had two browsers (firefox and chromium) both running with too many tabs open. The system was short of memory. It needed swap
to cope this those occasions.
Hardware swap is _supposed_ to be faster than a swap partition, which
made it, at least in principle, more attractive. Also, in principle, a physical swap partition can be placed _between_ (in the sense of seek
stroke) /uar and /, minimizing the amount of head movevent. This was true
in the days of st506 disks, I'm not sure how true it is with SATA. So, I inquired about how this might be done under RasPiOS. It's not hurgely
hard under FreeBSD and I thought there might be some nifty tools for the purpose in RasPiOS.
The answers received have now led me to question the orignal premises.
No nifty tools have come to light. The relative speed of
file-vs-hardware swap haven't been quantified. The need for occasional
swap use remains, but it's sporadic. Maybe a swapfile is good
enough.... it's certainly easier.
It was a surprise to learn that a single partition is somehow required
for RasPiOS to function correctly. If true, it's a good thing to know.
Back in the good old days there were enough programs in /bin (which was an >> actual directory, not a link to /usr/bin) to recover a system with disk
errors (when possible, anyway). But now that /bin is a link, I wonder if
the system will even boot properly, since "user space" would have to mount >> /usr before almost all (all?) programs are available. Including systemd.
Given that RasPiOS has an /sbin directory, I'm pretty sure the machine
will come up at worst in single-user if /usr can't be mounted normally.
Whether /home/, /var/ and /tmp/ can be links to /usr is less clear to
me at this point.
The original plan would have left the machine with a /root of around
100GB and a /usr of around 800GB so running out of space isn't a problem.
OP, where are you... ?
Busy trying to drink from a firehose 8-)
On 2026-03-15 at 19:53 ADT, bp@www.zefox.net <bp@www.zefox.net> wrote:
Jim Diamond <zsd@jdvb.ca> wrote:
Yes, but that has nothing much to do with the OP's plan to put /usr on its >>> own partition. He didn't indicate where /home was going, but if he puts it >>> on the root partition, he can still fill that up. And if /var is on /root, >>> also problems.
Which is why I was curious about why he wants to a separate /usr partition.
Since you ask...8-)
Thanks. :-)
On rare occasions my 8GB Pi5 slowed to a crawl. Eventually I realized it
was happening when I had two browsers (firefox and chromium) both running
with too many tabs open. The system was short of memory. It needed swap
to cope this those occasions.
So far, I follow you.
Hardware swap is _supposed_ to be faster than a swap partition, which
made it, at least in principle, more attractive. Also, in principle, a
physical swap partition can be placed _between_ (in the sense of seek
stroke) /uar and /, minimizing the amount of head movevent. This was true >> in the days of st506 disks, I'm not sure how true it is with SATA. So, I
inquired about how this might be done under RasPiOS. It's not hurgely
hard under FreeBSD and I thought there might be some nifty tools for the
purpose in RasPiOS.
Assuming you are using a mechanical disk (I don't think you said anywhere, did you?), there is some (a smallish?) gain to be had for minimizing head movement. If you are using an SSD through some SATA-USB dongle, then you
can completely forget about worrying where on the disk to put swap... the
end is fine.
Carrying on with the assumption that you are using a mechanical disk...
Someone else already pointed out that /sbin is (on Raspberrry Pi OS and
many others) just yet another sym link. On current systems where /bin is just a link to /usr/bin, except for occasional updates for log files, I
doubt that your system would be accessing / (the "without /usr" version of
/) very often. (Unless your /tmp is not a tmpfs and you are using /tmp a lot, for whatever reason.)
You also didn't tell us where /home is going to be. Were you thinking
of having it on its own partition? That decision may be more significant than any possible benefit from separating /usr from /.
The answers received have now led me to question the orignal premises.
No nifty tools have come to light. The relative speed of
file-vs-hardware swap haven't been quantified. The need for occasional
swap use remains, but it's sporadic. Maybe a swapfile is good
enough.... it's certainly easier.
That is true.
It was a surprise to learn that a single partition is somehow required
for RasPiOS to function correctly. If true, it's a good thing to know.
You mean "a single partition for / and /usr" ?
I'm not sure that it is required, but I wouldn't be surprised if having
/usr on its own partition caused problems. But I'm happy to be educated about that!
Back in the good old days there were enough programs in /bin (which was an >>> actual directory, not a link to /usr/bin) to recover a system with disk
errors (when possible, anyway). But now that /bin is a link, I wonder if >>> the system will even boot properly, since "user space" would have to mount >>> /usr before almost all (all?) programs are available. Including systemd.
Given that RasPiOS has an /sbin directory, I'm pretty sure the machine
will come up at worst in single-user if /usr can't be mounted normally.
See above.
Whether /home/, /var/ and /tmp/ can be links to /usr is less clear to
me at this point.
/home certainly can, and if /usr gets mounted "early enough" during boot, maybe /var and /tmp can be too. But if you do that, you now have a
minuscule amount of stuff sitting there by itself on /, and I can't imagine the benefit of having swap between "almost nothing" and "almost everything".
The original plan would have left the machine with a /root of around
100GB and a /usr of around 800GB so running out of space isn't a problem.
OK. I thought it your original message you said something about making /
as small as possible.
OP, where are you... ?
Busy trying to drink from a firehose 8-)
Tricky to not drown. Although I've seen dogs trying to drink from garden hoses, it might just be a matter of scale.
If I was going to set up swap it seemed prudent to make it as fast
as I reasonably could. I didn't (and so far still don't) have a clear
idea how much difference a swap file versus a swap partition makes.
Since /sbin isn't a freestanding directory, this seems impossible
without booting from a separate root device, likely a microSD. I
didn't see this hurdle coming, at all. It isn't a fatal blunder, but
it's a blunder.
| Sysop: | Eric Oulashin |
|---|---|
| Location: | Beaverton, Oregon, USA |
| Users: | 126 |
| Nodes: | 16 (0 / 16) |
| Uptime: | 492696:37:52 |
| Calls: | 7,919 |
| Calls today: | 1 |
| Files: | 9,413 |
| D/L today: |
135 files (18,645K bytes) |
| Messages: | 400,959 |