Skip to main content

How to increase the root filesystem size in FreeBSD.

---
title: Live Resize Root Filesystem on FreeBSD 10
author: Karim Elatov
date: December 17, 2014
source: http://elatov.github.io/2014/12/live-resize-root-filesystem-on-freebsd-10/
---

I was running out of space on my FreeBSD machine and I decided to expand the
root partition (and the fileystem on it). Before any changes, here is what I
had:

    $ gpart show da0
    =>      34  31457213  da0  GPT           (15G)
            34       128    1  freebsd-boot  (64K)
           162  29360000    2  freebsd-ufs   (14G)
      29360162   1572864    3  freebsd-swap  (768M)
      30933026    524221       - free -      (256M)

Then I powered down the system and increased the space on the FreeBSD VM. After
that I powered it on and saw the **new free space**:

    $ gpart show da0
    =>      34  52428733  da0  GPT           (25G)
            34       128    1  freebsd-boot  (64K)
           162  29360000    2  freebsd-ufs   (14G)
      29360162   1572864    3  freebsd-swap  (768M)
      30933026  21495741       - free -      (10G)

Since I will be doing this on a mounted system I had to **disable the GEOM safety features**:

    $ sudo sysctl kern.geom.debugflags=16
    kern.geom.debugflags: 0 -> 16

> **NOTE:** After a reboot, this will be reset to the default setting.

Since the **swap partition is in the middle of our partitions**, we have to
**disable** it. I had it as the 3rd partition:

    $ swapinfo
    Device          1K-blocks     Used    Avail  Capacity
    /dev/da0p3         786432        0    786432       0%

Then I ran the following to **disable the 3rd** (swap) **partition**:

    $ sudo swapoff /dev/da0p3
    $ swapinfo
    Device          1K-blocks     Used    Avail Capacity

Then to **delete the partition**:

    $ sudo gpart delete -i 3 da0
    da0p3 deleted
    $ gpart show da0
    =>      34  52428733  da0  GPT           (25G)
            34       128    1  freebsd-boot  (64K)
           162  29360000    2  freebsd-ufs   (14G)
      29360162  23068605       - free -      (11G)

Now let's **resize the second partition**, which is the ***root*** partition:

    $ df -Ph
    Filesystem    Size    Used   Avail Capacity  Mounted on
    /dev/da0p2     14G     12G    565M    96%    /
    devfs         1.0K    1.0K      0B   100%    /dev

    $ sudo gpart resize -i 2 -a 4k -s 24G da0
    da0p2 resized
    $ gpart show da0
    =>      34  52428733  da0  GPT          (25G)
            34       128    1  freebsd-boot (64K)
           162  50331646    2  freebsd-ufs  (24G)
      50331808   2096959       - free -     (1.0G)

Now let's **re-create the swap partition**:

    $ sudo gpart add -t freebsd-swap -a 4k -s 768M da0
    da0p3 added
    $ gpart show da0
    =>      34  52428733  da0  GPT  (25G)
            34       128    1  freebsd-boot  (64K)
           162  50331646    2  freebsd-ufs   (24G)
      50331808   1572864    3  freebsd-swap  (768M)
      51904672    524095       - free -      (256M)

Everything looks good so far. It looks like you can [resize the ufs filesystem on the fly] starting with FreeBSD 10.

> Growing a live UFS file system is only possible in FreeBSD 10.0-RELEASE and
> later. For earlier versions, the file system must not be mounted.

Luckily I was on **FreeBSD 10**:

    $ freebsd-version
    10.0-RELEASE-p14

So let's give it a shot, **here is the before**:

    $ df -Ph
    Filesystem    Size    Used   Avail Capacity  Mounted on
    /dev/da0p2     14G     12G    565M    96%    /
    devfs         1.0K    1.0K      0B   100%    /dev

First I went ahead and **stopped as many services** as I could
(mysql, apache24, splunk, etc.), and then gave it a try:

    $ sudo growfs /dev/da0p2
    Device is mounted read-write; resizing will result in temporary write suspension for /.
    It's strongly recommended to make a backup before growing the file system.
    OK to grow filesystem on /dev/da0p2, mounted on /, from 14GB to 24GB? [Yes/No] yes
    super-block backups (for fsck -b #) at:
    29491712, 30773952, 32056192, 33338432, 34620672, 35902912, 37185152,
    38467392, 39749632, 41031872, 42314112, 43596352, 44878592, 46160832,
    47443072, 48725312, 50007552

**It looked good** (and it was really quick so I wasn't worried about any writes
getting delayed):

    $ df -Ph
    Filesystem    Size    Used   Avail Capacity  Mounted on
    /dev/da0p2     23G     12G    9.5G    56%    /
    devfs         1.0K    1.0K      0B   100%    /dev

I then **rebooted the system** one more time to **make sure all is well** and it was.

[resize the ufs filesystem on the fly]: https://www.freebsd.org/doc/handbook/disks-growing.html