Skip to main content
Logo

ZFS Grow rpool disk

December 6, 2012
3 min read

Growing disks for virtual machines have become pretty trivial with tools like livecd”s and gparted. Recently I had to grow my Solaris 11 disk from 16GB to 20GB. And of course on Solaris it”s a ZFS volume.

I don”t think gparted can re-size the Solaris2 partitions used by Solaris 11 so I did the re-size on a running system using format. There might be a better way and I advise you NOT to do this on a critical system. Nonetheless it worked for me on a Virtualbox as well as a KVM virtual machine.

Re-sizing the disk on the host side is out of scope and you can use a myriad of ways to accomplish that for instance lvextend when using LVM. In this case I documented the re-sizing as was performed with Virtualbox.

Also note this only worked on Solaris x86. On Sparc there is no expand option for the partition in the format tool. There is a way to resize a system disk but it is pretty painful. Search my blog for Growing Solaris LDOM rpool.

Re-size Disk:

Logical size:         16384 MBytes
Current size on disk: 9818 MBytes
$ vboxmanage modifyhd Solaris11.vdi --resize 20000
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
$ vboxmanage showhdinfo Solaris11.vdi
Logical size:         20000 MBytes
Current size on disk: 9819 MBytes

Information before disk resize:

SunOS solaris 5.11 11.1 i86pc i386 i86pc
root@solaris:~# zpool status rpool
pool: rpool
NAME        STATE     READ WRITE CKSUM
rpool       ONLINE       0     0     0
c3t0d0s0  ONLINE       0     0     0
root@solaris:~# df -h | grep rpool
rpool/ROOT/solaris-2    16G   3.8G       7.0G    36%    /
root@solaris:~# format
AVAILABLE DISK SELECTIONS:
0. c3t0d0 <ATA-VBOX HARDDISK-1.0 cyl 2085 alt 2 hd 255 sec 63>
/pci@0,0/pci8086,2829@d/disk@0,0
Specify disk (enter its number): 0
selecting c3t0d0
[disk formatted]
/dev/dsk/c3t0d0s0 is part of active ZFS pool rpool. Please see zpool(1M).
...
partition> pr
Current partition table (original):
Total disk cylinders available: 2085 + 2 (reserved cylinders)
Part      Tag    Flag     Cylinders        Size            Blocks
0       root    wm       1 - 2084       15.96GB    (2084/0/0) 33479460
1 unassigned    wm       0               0         (0/0/0)           0
2     backup    wu       0 - 2086       15.99GB    (2087/0/0) 33527655
8       boot    wu       0 -    0        7.84MB    (1/0/0)       16065
...
Total disk size is 2088 cylinders
Cylinder size is 16065 (512 byte) blocks
Cylinders
Partition   Status    Type          Start   End   Length    %
=========   ======    ============  =====   ===   ======   ===
1       Active    Solaris2          1  2087    2087    100

Physical disk information after resize at host level:

...
Total disk size is 2549 cylinders
Cylinder size is 16065 (512 byte) blocks
Cylinders
Partition   Status    Type          Start   End   Length    %
=========   ======    ============  =====   ===   ======   ===
1       Active    Solaris2          1  2087    2087     82

Tell the OS about the new size using expand:

...
partition> expand
Expansion of label cannot be undone; continue (y/n) ? y
The expanded capacity was added to the disk label.
Disk label was written to disk.
partition> pr
Current partition table (original):
Total disk cylinders available: 2546 + 2 (reserved cylinders)
Part      Tag    Flag     Cylinders        Size            Blocks
0       root    wm       1 - 2084       15.96GB    (2084/0/0) 33479460
2     backup    wu       0 - 2086       15.99GB    (2087/0/0) 33527655
8       boot    wu       0 -    0        7.84MB    (1/0/0)       16065

Make the changes to the physical partition. I removed the “backup” slice as well since I don”t need it.

...
partition> pr
Current partition table (unnamed):
Total disk cylinders available: 2546 + 2 (reserved cylinders)
Part      Tag    Flag     Cylinders        Size            Blocks
0       root    wm       1 - 2545       19.50GB    (2545/0/0) 40885425
8       boot    wu       0 -    0        7.84MB    (1/0/0)       16065
partition> label
Ready to label disk, continue? y

Finally scrub and grow ZFS:

root@solaris:~# zpool status rpool
pool: rpool
state: ONLINE
scan: scrub in progress since Fri Dec  7 14:21:25 2012
11.8M scanned out of 8.57G at 670K/s, 3h43m to go
0 repaired, 0.13% done
config:
NAME        STATE     READ WRITE CKSUM
rpool       ONLINE       0     0     0
c3t0d0s0  ONLINE       0     0     0
root@solaris:~# zpool set autoexpand=on rpool
root@solaris:~# zpool get all rpool | grep size
rpool  size          19.4G
root@solaris:~# df -h | grep ROOT
rpool/ROOT/solaris-2   19G  3.8G        10G    27%    /
rpool/ROOT/solaris-2/var    19G   955M        10G     9%    /var
root@solaris:~# zpool set autoexpand=off rpool