On 15 January, 2009 - Jim Klimov sent me these 1,3K bytes:

> Is it possible to create a (degraded) zpool with placeholders specified 
> instead
> of actual disks (parity or mirrors)? This is possible in linux mdadm 
> ("missing" 
> keyword), so I kinda hoped this can be done in Solaris, but didn't manage to.
> 
> Usecase scenario: 
> 
> I have a single server (or home workstation) with 4 HDD bays, sold with 2 
> drives.
> Initially the system was set up with a ZFS mirror for data slices. Now we got 
> 2 
> more drives and want to replace the mirror with a larger RAIDZ2 set (say I 
> don't 
> want a RAID10 which is trivial to make). 
> 
> Technically I think that it should be possible to force creation of a degraded
> raidz2 array with two actual drives and two missing drives. Then I'd copy data
> from the old mirror pool to the new degraded raidz2 pool (zfs send | zfs 
> recv),
> destroy the mirror pool and attach its two drives to "repair" the raidz2 pool.
> 
> While obviously not an "enterprise" approach, this is useful while expanding
> home systems when I don't have a spare tape backup to dump my files on it 
> and restore afterwards.
> 
> I think it's an (intended?) limitation in zpool command itself, since the 
> kernel
> can very well live with degraded pools.

You can fake it..

kalv:/tmp# mkfile 64m realdisk1
kalv:/tmp# mkfile 64m realdisk2
kalv:/tmp# mkfile -n 64m fakedisk1
kalv:/tmp# mkfile -n 64m fakedisk2
kalv:/tmp# ls -la real* fake*
-rw------T 1 root root 67108864 2009-01-15 17:02 fakedisk1
-rw------T 1 root root 67108864 2009-01-15 17:02 fakedisk2
-rw------T 1 root root 67108864 2009-01-15 17:02 realdisk1
-rw------T 1 root root 67108864 2009-01-15 17:02 realdisk2
kalv:/tmp# du real* fake*
65555   realdisk1
65555   realdisk2
133     fakedisk1
133     fakedisk2


In reality, those realdisk* should be pointing at real disks, but
fakedisk* should still point at sparse mkfile's with the same size as
your real disks (300GB or whatever).

kalv:/tmp# zpool create blah raidz2 /tmp/realdisk1 /tmp/realdisk2 
/tmp/fakedisk1 /tmp/fakedisk2
kalv:/tmp# zpool status blah
  pool: blah
 state: ONLINE
 scrub: none requested
config:

        NAME                STATE     READ WRITE CKSUM
        blah                ONLINE       0     0     0
          raidz2            ONLINE       0     0     0
            /tmp/realdisk1  ONLINE       0     0     0
            /tmp/realdisk2  ONLINE       0     0     0
            /tmp/fakedisk1  ONLINE       0     0     0
            /tmp/fakedisk2  ONLINE       0     0     0

errors: No known data errors

Ok, so it's created fine. Let's "accidentally" introduce some problems..


kalv:/tmp# rm /tmp/fakedisk1
kalv:/tmp# rm /tmp/fakedisk2
kalv:/tmp# zpool scrub blah
kalv:/tmp# zpool status blah
  pool: blah
 state: DEGRADED
status: One or more devices could not be opened.  Sufficient replicas exist for
        the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
   see: http://www.sun.com/msg/ZFS-8000-2Q
 scrub: scrub completed after 0h0m with 0 errors on Thu Jan 15 17:03:38
2009
config:

        NAME                STATE     READ WRITE CKSUM
        blah                DEGRADED     0     0     0
          raidz2            DEGRADED     0     0     0
            /tmp/realdisk1  ONLINE       0     0     0
            /tmp/realdisk2  ONLINE       0     0     0
            /tmp/fakedisk1  UNAVAIL      0     0     0  cannot open
            /tmp/fakedisk2  UNAVAIL      0     0     0  cannot open

errors: No known data errors


Still working.

At this point, you can start filling blah with data. Then after a while,
let's bring in the other real disks:

kalv:/tmp# mkfile 64m realdisk3
kalv:/tmp# mkfile 64m realdisk4
kalv:/tmp# zpool replace blah /tmp/fakedisk1 /tmp/realdisk3
kalv:/tmp# zpool replace blah /tmp/fakedisk2 /tmp/realdisk4
kalv:/tmp# zpool status blah
  pool: blah
 state: ONLINE
 scrub: resilver completed after 0h0m with 0 errors on Thu Jan 15 17:04:31 2009
config:

        NAME                STATE     READ WRITE CKSUM
        blah                ONLINE       0     0     0
          raidz2            ONLINE       0     0     0
            /tmp/realdisk1  ONLINE       0     0     0
            /tmp/realdisk2  ONLINE       0     0     0
            /tmp/realdisk3  ONLINE       0     0     0
            /tmp/realdisk4  ONLINE       0     0     0


Of course, try it out a bit before doing it for real.

/Tomas
-- 
Tomas Ögren, st...@acc.umu.se, http://www.acc.umu.se/~stric/
|- Student at Computing Science, University of Umeå
`- Sysadmin at {cs,acc}.umu.se
_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss

Reply via email to