Replace failed drive in pool

I am not very savvy with Solaris but am responsible for a server running Solaris 10 that has a failed hard drive in a mirrored pool. I ordered a new drive and attempted to install but received the error "device too small" when using zpool replace. The drive is the same Seagate model number as the old one and has the same nominal capacity of 300GB. Here's what prtvtoc says about the disks. Note that c1t0d0s2 is the new drive.

# prtvtoc /dev/dsk/c1t0d0s2
  * /dev/dsk/c1t0d0s2 partition map
  *
  * Dimensions:
  *     512 bytes/sector
  *    4470 sectors/track
  *       2 tracks/cylinder
  *    8940 sectors/cylinder
  *   65535 cylinders
  *   65533 accessible cylinders
  *
  * Flags:
  *   1: unmountable
  *  10: read-only
  *
  *                          First     Sector    Last
  * Partition  Tag  Flags    Sector     Count    Sector  Mount Directory
         0      2    00          0 585865020 585865019
         2      5    01          0 585865020 585865019
  # prtvtoc /dev/dsk/c1t1d0s2
  * /dev/dsk/c1t1d0s2 partition map
  *
  * Dimensions:
  *     512 bytes/sector
  *     625 sectors/track
  *      20 tracks/cylinder
  *   12500 sectors/cylinder
  *   46875 cylinders
  *   46873 accessible cylinders
  *
  * Flags:
  *   1: unmountable
  *  10: read-only
  *
  *                          First     Sector    Last
  * Partition  Tag  Flags    Sector     Count    Sector  Mount Directory
         0      2    00          0 585912500 585912499
         2      5    00          0 585912500 585912499
  

From what I read, I understand that a mirrored pool cannot shrink. So since I'm not really familiar with all of this, I ask why cant I just create a new pool? Can this be done without loosing the data on c1t1d0s2?

When it says "drive too small" it almost certainly means just that.

Drive manufacturers have a habit of using the same part number/model number for slightly different size drives to give their product line some resemblance of continuity.

If you can, put both drives on a desk and, hopefully, both disk drives will have a LBA (logical block capacity) on their labels. These are big numbers but compare them. Chances are that the number of LBA's on the new drive is less than the number of LBA's on the old drive. Solaris won't like that since when the old drive was configured Solaris used the full available capacity.

You need a drive with the same or greater number of LBAs which will be the number that Solaris is interested in. The new drive can be the same number of LBAs as the old drive or any number greater but NOT a single LBA smaller.

Hope that helps.

Please post "iostat -En" output. I this SPARC hardware ?

What's prtvtoc show for the working drive in the mirror?

The OP provided the output from prtvtoc for both the new disk and an existing disk in their initial post. If you carefully examine the new disk geometry you will see that it is totally different from that of the existing disk.

Yep. Missed that. Doh!

Lesson learned: not all 300gb hard drives are created equal.

And FWIW - this type of mistake is one of the reasons enterprise-level hardware support exists. How much did this "Ooops!" cost the OP's employer? I doubt the "too small" drive came via Oracle, HP, or IBM support.

I wouldn't say totally different. The CHS geometry is essentially irrelevant with modern disks. What really matters are the disk sizes and the difference is about 0,01% (24 MB vs 300 GB).

May be the OS is too old / unpatched. Since a 2010 update, ZFS is able to adjust most of such cases.

Thanks for the input. Some responses:

@hicksd8. Neither disk has any indication of LBAs

iostat -En
c1t0d0           Soft Errors: 0 Hard Errors: 0 Transport Errors: 0 
Vendor: SEAGATE  Product: ST9300605SS      Revision: 0002 Serial No:  
Size: 300.00GB <300000000000 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0 
Illegal Request: 0 Predictive Failure Analysis: 0 
c1t1d0           Soft Errors: 0 Hard Errors: 0 Transport Errors: 0 
Vendor: SEAGATE  Product: ST930005SSUN300G Revision: 0606 Serial No: 1202Q1BSKD 
Size: 300.00GB <300000000000 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0 
Illegal Request: 0 Predictive Failure Analysis: 0 
c0t0d0           Soft Errors: 1 Hard Errors: 0 Transport Errors: 0 
Vendor: TEAC     Product: DV-W28SS-V       Revision: 1.0B Serial No:  
Size: 0.00GB <0 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0 
Illegal Request: 1 Predictive Failure Analysis: 0 

Yes, it is SPARC.

$183 so far

Solaris 10 implemented around summer of 2012

I have been advised by my Technical Assistance Center to buy a drive that has the same Sun/Oracle part number rather than the actual drive manufacturer's part number, like I thought I had done. The iostat output tells me that they are different though. They claim that despite the manufacturer, Seagate, Haitachi, etc, if the Sun part numner is the same then it will have the same geometry. Does this sound right?

Hmmmm, no LBA value on the disk labels, that is unusual.

However, you can see from your prtvtoc's in post#1 that your new disk is smaller than the old one.

Partition 2 (which on Sun describes the whole disk) sector count says:

old 585912500
new 585865020

Some new filesystems will reserve some space (eg, 100MB) on the drives to manage such a situation but if your filesystem has used the full capacity then there's no alternative but to get one with the same, or more, sectors (LBA's).

The disks have actually the same size, reported as exactly 300000000000 bytes. The s2 partition (or slice) is not really the whole disk but the accessible part of it.

The difference is due to the way the disks firmware defines their geometry.

Two cylinders are reserved by Solaris on each disk and the fact the cylinder size differs make the available space slighty smaller on one of the disks.

If you are adventurous, you might try twiddling with the format command to try setting the disk type of the new disk to the same one as the older one.

When was created the pool ?

You get paid $0 per hour?