Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 5 May 2014 10:08:56 -0700
From:      John-Mark Gurney <jmg@funkthat.com>
To:        Paul Darius <paul@ranahminang.net>
Cc:        freebsd-arm <freebsd-arm@freebsd.org>
Subject:   Re: partition resize
Message-ID:  <20140505170856.GQ43976@funkthat.com>
In-Reply-To: <CAAxOLAShH9uMjpcs0nGz9Hj=g3Ln5KzPpD-MqqoGO0CU74%2Bc%2Bw@mail.gmail.com>
References:  <CAAxOLAShH9uMjpcs0nGz9Hj=g3Ln5KzPpD-MqqoGO0CU74%2Bc%2Bw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--Idd68gPqKLz5+Ci0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Paul Darius wrote this message on Sat, May 03, 2014 at 15:10 +0700:
> hi there..
> 
> here is the partition created from the fbsd image
> 
> $ gpart show
> =>      63  61497281  mmcsd0  MBR  (29G)
>         63     34776       1  !12  [active]  (17M)
>      34839  61462485       2  freebsd  (29G)
>   61497324        20          - free -  (10K)
> 
> =>      0  1918278  mmcsd0s2  BSD  (29G)
>         0  1918278         1  freebsd-ufs  (937M)

This partition didn't grow for some reason...
gpart resize -i 1 mmcsd0s2

Should grow it...

> $ cat /etc/fstab
> /dev/mmcsd0s1   /boot/msdos     msdosfs rw,noatime      0 0
> /dev/mmcsd0s2a  /               ufs rw,noatime          1 1
> md              /tmp            mfs rw,noatime,-s30m    0 0
> md              /var/log        mfs rw,noatime,-s15m    0 0
> md              /var/tmp        mfs rw,noatime,-s5m     0 0
> 
> when I do extract the ports.tar.gz into /usr, I end up with file system full
> 
> how do i know which partition for what and how to resize them ?
> 
> the /etc/rc.d/autosize start give the result :
> # /etc/rc.d/autosize start
> Enlarging root partition
> mmcsd0s2 resized
> gpart: autofill: No space left on device
> growfs: requested size 937MB is not larger than the current filesystem
> size 937MB

I just recently rewrote crochet's autosize/growfs rc.d script to be
able to handle any partitioning scheme to grow /...  You could try the
attached...  just run: "growfs start" and it should run all the necesssary
commands...

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

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

--Idd68gPqKLz5+Ci0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=growfs

#!/bin/sh

# PROVIDE: growfs
# BEFORE: sysctl
# KEYWORD: firstbootonly

# Automatically grow / to fill the entire disk.
#
# This allows us to distribute a single image
# and have it work on essentially any sized disk.
#
# TODO: Figure out a clean way to have this run
# only on first boot.  (We can't write anything to
# disk here since the root disk is still mounted
# read-only at this point.)  Fortunately, it completes
# very quickly if it can't actually grow the partition.
#
# TODO: Figure out where this should really be ordered.
# I suspect it should go just after fsck but before mountcritlocal
# but it's hard to tell for sure because of the bug described
# below.
# 

. /etc/rc.subr

name="growfs"
start_cmd="growfs_start"
stop_cmd=":"
rcvar="growfs_enable"

growfs_start ()
{
    echo "Growing root partition to fill device"
    rootdev=$(df / | tail -n 1 | awk '{ sub("/dev/", "", $1); print $1 }')
    if [ x"$rootdev" = x"${rootdev%/*}" ]; then
        # raw device
        rawdev="$rootdev"
    else
        rawdev=$(glabel status | awk '$1 == "'"$rootdev"'" { print $3 }')
        if [ x"$rawdev" = x"" ]; then
            echo "Can't figure out device for: $rootdev"
            return
        fi
    fi

    sysctl -b kern.geom.conftxt | awk '
{
        lvl=$1
        device[lvl] = $3
        type[lvl] = $2
        idx[lvl] = $7
        if (dev == $3) {
                for (i = 1; i <= lvl; i++) {
                        # resize
                        if (type[i] == "PART") {
                                pdev = device[i - 1]
				cmd[i] = "gpart resize -i " idx[i] " " pdev
                        } else if (type[i] == "LABEL") {
                                continue
                        } else {
                                print "unhandled type: " type[i]
                                exit 1
                        }
                }
		for (i = 1; i <= lvl; i++) {
			if (cmd[i])
				system(cmd[i])
		}
                exit 0
        }
}' dev="$rawdev"
    growfs -y /dev/"$rootdev"
}

load_rc_config $name
run_rc_command "$1"

--Idd68gPqKLz5+Ci0--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140505170856.GQ43976>