Growing swap on a ZFS filesystem
Recently I had to tackle a badly installed Solaris machine which hadn’t been configured with enough swap space. Luckily it had been built with a ZFS root filesystem, which made dealing with this a lot less painful.
First of all we need to get the details of our current swap setup:
bash-3.00# swap -l swapfile dev swaplo blocks free /dev/zvol/dsk/rpool/swap 256,2 16 4194288 4194288
New step is to increase the size of the ZFS ‘filesystem’ under the root pool (here called the default, rpool).
bash-3.00# zfs set volsize=4G rpool/swap
Once the filesystem size has been increased, we need to actually add it as swap. The normal swap command will do this – we just need to make sure we’re pointing it at the correct ZFS device:
bash-3.00# env NOINUSE_CHECK=1 swap -a /dev/zvol/dsk/rpool/swap $((8+4194288))
Let’s just check the status via ZFS:
bash-3.00# zfs list rpool/swap NAME USED AVAIL REFER MOUNTPOINT rpool/swap 4G 3.16G 2.03G -
And finally we can see the new swap space we’ve just added:
bash-3.00# swap -l swapfile dev swaplo blocks free /dev/zvol/dsk/rpool/swap 256,2 16 4194288 4194288 /dev/zvol/dsk/rpool/swap 256,2 4194304 4194304 4194304
A simple handful of commands, and no downtime – adding extra swap space using ZFS on Solaris is pretty painless. In another post I’ll explore how to grow ZFS filesystems like /var.
11. January 2012 at 19:36 :
Actually, if all of the swap space is completely free as in your example, you could first delete the existing swap from the system (swap -d /dev/zvol/dsk/rpool/swap), then increase the vol size as you show, then add it back (swap -a /dev/zvol/dsk/rpool/swap 16). This even works if you have active (running) zones on the system.
However, if you’re at the point of needing to add swap, the likelihood of it being unused is practically nil, so it’s important to know how to calculate and specify the swaplow value for the volume whose size has just been increased.
Thanks for showing this.