Re: adding swap when expanding root filesystem

From: John-Mark Gurney <jmg_at_funkthat.com>
Date: Fri, 18 Nov 2022 22:45:10 UTC
Mike Karels wrote this message on Fri, Nov 18, 2022 at 09:45 -0600:
> On 17 Nov 2022, at 19:03, John-Mark Gurney wrote:
> 
> > Mike Karels wrote this message on Mon, Nov 07, 2022 at 10:10 -0600:
> >> This question is not really arm-specific, but I couldn't think of a better
> >> mailing list for it.
> >>
> >> There are peridic issues reported on small systems like Raspberry Pi
> >> where people are running buildworld or poudriere and running out of
> >> memory.  As the user gets no control over the disk layout when installing,
> >> there is no option to add swap space on the install image.  I have added
> >> swap space on a USB disk, but this is often not an option.  It occurred
> >> to me that it might be reasonable to add swap space before expanding
> >> the root filesystem if there is sufficient space.  I have a prototype,
> >
> > So, if you boot to single user mode, before growfs runs on first boot,
> > you can manually add a swap partition at the end of the disk.
> >
> > You'll need to gpart recover the disk first, so that the gpt (iirc)
> > covers the remaining disk, and then add a swap partition at the end.
> > This'll take a bit of math, but isn't too hard.
> 
> Right, that???s what my prototype does (as part of the growfs script).
> 
> >> and wondered if this is a good thing to do.  Granted, this will often
> >> create swap on microSD, which is not optimal, but probably better than
> >> nothing.
> >
> > The other option is to use a swap file as outlined in the handbook:
> > https://docs.freebsd.org/en/books/handbook/config/#create-swapfile
> >
> >> The current prototype creates a swap partition which is 1/10 of the disk
> >> if the disk is at least 15 GB and the initial root partition is no more
> >> than 1/3 of the disk, but only up to 1.5x of physical memory.  I would
> >> probably enable this by default, but provide a way to disable it via a
> >> kenv variable and/or a variable in /etc/rc.conf.
> >
> > I would like to see the ability to drop a file on the FAT file system
> > so that the system can be configured at first boot w/o requiring someone
> > to either boot to single user mode, or have a FreeBSD system.  This isn't
> > too hard, as I have a review already open for it:
> > https://reviews.freebsd.org/D26713
> >
> > It makes use of cpercival's cloud init, but slightly modified so it looks
> > on the fat file system that most arm images have.
> >
> > with this, it wouldn't be too hard to gin up some commands to automatically
> > add the swap partition on first boot, but until something like this is
> > done, it has to be done manually.
> 
> I like the config script idea, but it runs after the root file system is
> mounted read/write, and growfs runs before that.  Meanwhile, I have added
> the ability to suppress swap space, or set its size, via either /etc/rc.conf
> or kernel environment.  I will probably have something ready for review soon.
> Meanwhile, if anyone wants to test (especially on GPT), let me know.

It looks like growfs can run on read-write UFS filesystems, or at least that's
what the man page implies:

CAVEATS
     When expanding a file system mounted read-write, any writes to that file
     system will be temporarily	suspended until	the expansion is finished.

I haven't tried it though.

https://www.freebsd.org/cgi/man.cgi?query=growfs&apropos=0&sektion=0&manpath=FreeBSD+13.1-RELEASE+and+Ports&arch=default&format=html

-- 
  John-Mark Gurney				Voice: +1 415 225 5579

     "All that I will do, has been done, All that I have, has not."