When I first upgraded to consumer-grade M.2 NVMe SSDs, the sheer speed was invigorating. But, within six months, two drives failed. While enterprise U.2 NVMe SSDs are typically more readily available and might offer better performance, space constraints led me to M.2 drives. I settled on Samsung PM983 M.2 NVMes, which, while substantially more durable than my previous choice, were still accessible, cost-effective, and close to 2TB in size. The unique capacity of 1.92TB, in contrast to a rounded 2TB, likely signifies their enterprise readiness. However, such a size difference isn’t trivial when working with ZFS.

I plan to maximize the use of my consumer-grade SSDs before transitioning completely to enterprise-grade. My strategy is to establish a new pool with durable NVMe drives mirrored to my consumer ones. Given that my least healthy drive still retains over half of its write lifespan, and considering the impressive 2.5PB durability of the PM983s compared to the premature failing 800TB consumer SSDs, it’s anticipated that I will deplete my consumer-grade stock first.

Steps:

  1. Backup: Ensure you have a full backup before beginning.
  2. Downtime: Migrate data to the backup machine using zfs send and zfs receive. If this isn’t feasible, establish a maintenance window.
  3. Initialize New ZFS Pool: Form a fresh ZFS pool with the enterprise SSDs, and for clarity, I’m designating them as consumer-pool and durable-pool.
  4. Data Migration: Shift datasets from consumer-pool to durable-pool.
  5. Detach Consumer SSDs: Safely disengage consumer SSDs from consumer-pool.
  6. Partition Resizing: Modify consumer SSD partitions to coincide with enterprise SSD sizes and then reformat.
  7. Mirror Integration: Merge the resized consumer SSDs with the durable-pool.
  8. Data Verification: Cross-check data consistency across both pools using ZFS’s checksum capabilities.
  9. Old Pool Decommission: Upon successful validation of durable-pool, decommission consumer-pool.
  10. Implement Hot-Spares: Assign the surplus consumer SSDs as hot spares within durable-pool.
  11. Activate New Zpool: Transition operations based on your storage strategy.

Resizing

Given the use of fdisk, we’ll work with sectors. To illustrate, for a disk showing as 1.7TB and 1920383410176 bytes, sectors are computed as:

Sectors (1.7TB) = 1920383410176 bytes / (512 bytes/sector)

Adjust the calculations as necessary for different block sizes.

For a streamlined operation, after confirming the sequence above, it can be echoed as shown to facilitate batch processing or loop operations:

echo -e "g\nn\n\n\n3750748848\nw\n" | fdisk /dev/nvme6n1

Conclusion:

This strategy eased my transition to enterprise SSDs without forsaking my consumer SSDs. Though certain steps entail risks, vigilance and adequate preparation ensure smooth migration. Remember: Preparation is key to any successful migration. Happy data transitioning!