Mar 122015
 

ReFS format dialogI am a big fan of ZFS and I run it on my main file server. It is mature, stable and its syncing feature is a thing of beauty. Regardless, I decided that a new file server for my kids would use Windows 8.1 (yes, I know that is not a server OS). And I figured it is about a time I tried ReFS – a Windows ZFS alternative.

Feature-wise ReFS is definitely an improvement over NTFS. For one it finally includes checksum. It is mandatory on metadata with an option to enable it for user data (integrity streams feature). It is not as fool-proof as SHA-256 ZFS uses, but it is good enough for error detection. And (almost) all volume fixing is done online – no more reboots to CHKDSK. But you cannot use it as boot drive.

Compared to ZFS there are also quite a few things missing. There are no datasets, there is no parity (without Storage Spaces), there is no compression, and there is no sync (I’ll miss that the most). Main improvement (in my opinion) lies in self-management for all things ZFS requires you to micro-manage. Scrub is self scheduled, memory is handled dynamically, caching just works… While ZFS can be optimized to a specific load a bit better (especially with SSD cache) I didn’t find myself depending on these features that much – especially when setting up client system.

While Windows 8.1 does support ReFS, you cannot just format drive with it – that would be to easy. First you need to create DWORD registry entry AllowRefsFormatOverNonmirrorVolume under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MiniNT and give it value of 1. Or you can import this pre-prepared registry file to do it for you.

Now Explorer will let you format drive but it will do so without integrity streams. Without Storage Spaces, you might not benefit fully as it will only detect corruption without repairing it so that might be as good default as any. As I am a huge believer in copy-on-write, I decided to go to command line and get it enabled:

> FORMAT E: /FS:ReFS /Q /I:enable

As format completes don’t forget to remove registry entry you created as it can prevent System Restore working properly and dual boot might act a bit funny. Again, you can go into Registry Editor and delete it manually or you can just import this registry file. ReFS will still work just fine – you just won’t be able to format new drives.

Mostly everything works as expected. Besides the peace of mind I get from having my data checksummed I didn’t notice much difference. Things work as they did before. Depending on the exact data set it might have been a bit faster but it is hard to tell considering it was a fresh drive. Good news is that it is not slower.

Some programs might complain, most notably Google Drive – mind you not because ReFS is not working nor because Google Drive uses something special – it is just because its programmers are lazy hardcoding bunch.

Of course it would help if Microsoft’s own Hyper-V would work properly with integrity streams. While not as annoying as with Google Drive, Hyper-V virtual disks on ReFS do need a special attention. Yes, there might be valid performance reasons but warning message would do same as completely preventing virtual machine from starting. Fortunately fixing is as easy as disabling integrity on a single file:

Set-FileIntegrity -FileName E:\My.vhdx -Enable $False

I find ReFS really refreshing and promising file system. I can only hope that, with time, Microsoft will get this feature properly supported in its client OS. Who knows, maybe I get to install Windows 10 on ReFS boot drive. :)

  4 Responses to “ReFS on Windows 8.1”

Comments (4)
  1. “Mostly everything works as expected. Besides the peace of mind I get from having my data checksummed I didn’t notice much difference.”
    >>> I believe you are too optimistic. ZFS is quasi open-source, backed by a storage specialist Oracle, yet it took 10 years to mature. Microsoft is neither of those, so storage spaces is still a buggy product.
    Currently I have an issue with my tiered mirrored storage pool. After disc failure the scrub cannot do the job.

    Log Name: Microsoft-Windows-DataIntegrityScan/Admin
    Source: Microsoft-Windows-DataIntegrityScan
    Date: 17.03.2015 20:45:37
    Event ID: 57
    Task Category: None
    Level: Error
    Keywords:
    User: SYSTEM
    Computer: Acronis
    Description:
    Volume metadata scrub operation failed. Volume name: S:; metadata reference: 0x104; range offset: 0x0; range length (in bytes): 0x0; bytes repaired: 0x0; bytes not repaired: 0x1000; status: A device which does not exist was specified..

    All 4 physical disks are reported as being fine. Only the virtual disk is degraded.
    Pool writes to both disks, which means that there is no mistake with device reference. It looks like that it has an issue with one of cache devices. Yet neither GUI nor Powershell indicate any problems with the pool :(

    • I do agree that ZFS is more mature (and more configurable) solution and I simply love it. That said it is quite restricted as far as (proper) OS support is concerned to pretty much only Solaris and BSD.

      Obviously there is no Windows version and that kinda kills it for my everyday machine. Linux port was unstable to start with and push toward BTRFS didn’t help it at all. That kills it pretty much for anything except File server in my house (I’m mostly a Cent OS fan).

      And open source status is highly exaggerated – Oracle pretty much killed it in 2010. Only thing that drives open source is OpenZFS project but feature compatibility with Oracle ZFS is getting worse and worse by day (e.g. check encryption support).

      I will use ZFS on my file servers as long as it resembles any notion of liveliness – I simply see no good alternative with same features. But on anything not BSD I will go with second best – on Windows this is ReFS.

  2. Couldn’t locate the key in Windows 10 client. Do you know how to enable ReFS on Win10.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>