FreeBSD 9/ZFS: Striped Pool (2 disks) migrating to mirror (onto additional disk)

Dan Nelson dnelson at allantgroup.com
Wed Jan 26 20:42:35 UTC 2011


In the last episode (Jan 26), Christer Solskogen said:
> On Wed, Jan 26, 2011 at 8:58 PM, Dan Nelson <dnelson at allantgroup.com> wrote:
> > In the last episode (Jan 26), Christer Solskogen said:
> >> On Wed, Jan 26, 2011 at 9:42 AM, O. Hartmann wrote:
> >> > My question is: is it possible to migrate the two-disk pool without
> >> > data loss into a mirrored pool by adding the one 2TB-disk?
> >>
> >> No, you cant create a two-way mirror of three disks with ZFS. The only
> >> way of doing what you want by creating a gmirror (or by hardware raid)
> >> of the two 1TB disks.
> >
> > You can, if you partition the 2tb disk into two smaller volumes, each
> > the same size as one of the 1tb disks, then add one of those as a mirror
> > of each original disk.   You'll end up with two mirrored vdevs in the
> > pool.  Performance probably won't be as good as a real mirror, though,
> > since zfs doesn't know that two of its physical disks share a spindle.
> 
> Rememer that he also asked to do this without data loss. As far as I know
> you cant remove devices from a vdev.  If he is willing to accept data loss
> there are a lots of ways of doing it.

ZFS lets you add and detach mirrors on the fly, since you're not changing
the capacity of the pool itself.  Sure, you're going to lose the contents of
the large 2TB drive, but that's sort of assumed.  You can't convert 4TB of
non-mirrored disks into 2TB of mirrored disks without losing 2TB of space. 
Just make sure you have less than 2TB total used data on all volumes, and
copy the data off the 2TB filessytem onto the striped 1+1TB one before
repartitioning and adding the mirrors.

  zpool attach [-f] pool device new_device

    Attaches  new_device  to  an  existing  zpool  device.   The  existing
    device  cannot  be  part  of a raidz configuration. If _device_ is not
    currently part of a  mirrored  configuration,  _device_  automatically
    transforms  into  a  two-way  mirror  of _device_ and _new_device_. If
    _device_ is part of a two-way mirror, attaching _new_device_ creates a
    three-way  mirror,  and  so on. In either case, _new_device_ begins to
    resilver immediately.

(Do not confuse with zpool add, which adds a whole new vdev to the pool. 
vdevs cannot be removed once added)

-- 
	Dan Nelson
	dnelson at allantgroup.com


More information about the freebsd-questions mailing list