Giter VIP home page Giter VIP logo

zfsin's Introduction


THIS IS THE OLD PORT: Please move over to https://github.com/openzfsonwindows/openzfs


Build status

To setup a development environment for compiling ZFS.

Download free development Windows 10 image from Microsoft.

https://developer.microsoft.com/en-us/windows/downloads/virtual-machines

and create two VMs.

  • Host (running Visual Studio and Kernel Debugger)
  • Target (runs the compiled kernel module)

The VM images comes with Visual Studio 2017, which we use to compile the driver.

It is recommended that the VMs are placed on static IP, as they can change IP with all the crashes, and you have to configure the remote kernel development again.

Go download the Windows Driver Kit 10

https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit

and install on both VMs. You will need both the SDK and WDK: Download the SDK with the Visual Studio 2017 community edition first and install it. It will update the already installed Visual Studio. Then install the WDK. At the end of the installer, allow it to install the Visual Studio extension.

On Target VM, complete the guide specified here, under section "Prepare the target computer for provisioning".

https://msdn.microsoft.com/windows/hardware/drivers/gettingstarted/provision-a-target-computer-wdk-8-1?f=255&MSPPError=-2147217396

Which mostly entails running:

C:\Program Files (x86)\Windows Kits\10\Remote\x64\WDK Test Target Setup x64-x64_en-us.msi

  • reboot Target VM

On the Host VM, continue the guide to configure Visual Studio 2017.

  • Load Visual Studio 2017, there is no need to load the project yet.
  • Menu > Driver > Test > Configure Devices
  • Click "Add New Device"
  • In "Display name:" enter "Target"
  • In "Device type:" leave as "Computer"
  • In "Network host name:" enter IP of Target VM, for me "172.16.248.103"
  • Provisioning options: o Provision device and choose debugger settings.
  • Click "Next >"

It now confirms that it talked to the Target, and note here that "Host IP" it that of the Host VM, for me, "172.16.248.102", and not to be confused by the Target IP entered on previous screen.

  • Click "Next >"

Watch and wait as remote items are installed on the Target VM. It will most likely reboot the Target VM as well.

I've had dialog boxes pop up and I agree to installation, but I am not sure they are supposed to. They probably shouldn't, it would seem it failed to put WDKRemoteUser in Administrators group. If that happens, use "lusrmgr.msc" to correct it.

The task "Creating system restore point" will most likely fail and that is acceptable, however, if other tasks fail, you may need to retry until they work.

At the end of the run, the output window offers a link to the full log, which is worth reading if you encounter issues.

When things fail, I start a CMD prompt as Administrator, and paste in the commands that fail, from the log file. It would be nice if this process just worked though.

If your version of .NET newer, just move along.

The Target VM should reboot, and login as "WDKRemoteUser".

It is recommended you get GIT bash for Windows and install:

https://git-scm.com/downloads


Handling configuration errors with Visual Studio 2019 & WDK 10:

There are some issues with Visual Studio 2019 which can cause the following problem in setting up kernel debugging. ERROR: Task “Configuring kernel debugger settings (possible reboot)” failed to complete successfully. Look at the logs in the driver test group explorer for more details on the failure.

This problem is related to MSVC debug tool location mismatch, and as a workaround use the following steps to mitigate this problem:

As Administrator, run Developer Command Prompt for VS 2019 in your Host VM Run the following commands in the VS Developer Command Prompt:

cd /d %VCToolsRedistDir%\debug_nonredist MKLINK /J x86\Microsoft.VC141.DebugCRT x86\Microsoft.VC142.DebugCRT MKLINK /J x64\Microsoft.VC141.DebugCRT x64\Microsoft.VC142.DebugCRT

Retry configuration by following guide to configure Visual Studio 2017 mentioned above.


Host and Target VMs are now configured.

First time you load the project it might default to

Debug : ARM

you probably want to change ARM ==> X64.

  • Load ZFSin solution

  • Menu > Debug > ZFSin Properties

  • Configuration Properties > Debugging "Debugging tools for Windows - Kernel Debugger" Remote Computer Name: Target

  • Configuration Properties > Driver Install > Deployment Target Device Name: Target [Tick] Remove previous driver versions O Hardware ID Driver Update Root\ZFSin

You can run DbgView on the Target VM to see the kernel prints on that VM.

Run the compiled Target

  • Compile solution
  • Menu > Debug > Start Debugging (F5)

wait a while, for VS2017 to deploy the .sys file on Target and start it.

Target VM optionals.

If you find it frustrating to do development work when Windows Defender or Windows Updates run, you can disable those in gpedit.msc

  • Computer Configuration > Administrative Templates > Windows Components > Windows Defender Windows Updates

Milestones

✅ Compile SPL sources

  • Godzillion warnings yet to be addressed

✅ Port SPL sources, atomics, mutex, kmem, condvars

  • C11 _Atomics in kmem not yet handled

✅ Compile ZFS sources, stubbing out code as needed

✅ Include kernel zlib library

✅ Load and Unload SPL and ZFS code

✅ Port kernel zfs_ioctl.c to accept ioctls from userland

✅ Compile userland libspl, libzpool, libzfs, ...

✅ Include pthread wrapper library

  • Replaced with thin pthread.h file

✅ Include userland zlib library

✅ Compile cmd/zpool

✅ Port functions in libzpool, libzfs. Iterate disks, ioctl

✅ Test ioctl from zpool to talk to kernel

✅ Port kernel vdev_disk.c / vdev_file.c to issue IO

✅ Port over cmd/zfs

✅ Add ioctl calls to MOUNT and create Volume to attach

✅ Add ioctl calls to UNMOUNT and detach and delete Volume

✅ Port kernel zfs_vnops.c / zfs_vnops_windows.c

  • Many special cases missing, flags to create/read/etc

✅ Correct file information (dates, size, etc)

✅ Basic DOS usage

✅ Simple Notepad text edit, executables also work.

✅ Basic drag'n'drop in Explorer

✅ zfs send / recv, file and pipe.

✅ ZVOL support

✅ git clone ZFS repo on ZFS mounted fs

✅ Compile ZFS on top of ZFS

❎ Scrooge McDuck style swim in cash


Design issues that need addressing.

  • Windows does not handle EFI labels, for now they are parsed with libefi, and we send offset and size with the filename, that both libzfs and kernel will parse out and use. This works for a proof of concept.

Possibly a more proper solution would be to write a thin virtual hard disk driver, which reads the EFI label and present just the partitions.

  • vdev_disk.c spawns a thread to get around that IoCompletionRoutine is called in a different context, to sleep until signalled. Is there a better way to do async in Windows?

  • ThreadId should be checked, using PsGetCurrentThreadId() but it makes zio_taskq_member(taskq_member()) crash. Investigate.

  • Functions in posix.c need sustenance.

  • The Volume created for MOUNT has something wrong with it, we are unable to query it for mountpoint, currently has to string compare a list of all mounts. Possibly also related is that we can not call any of the functions to set mountpoint to change it. This needs to be researched.

  • Find a way to get system RAM in SPL, so we can size up the kmem as expected. Currently looks up the information in the Registry. kmem should also use Windows signals "\KernelObjects\LowMemoryCondition" to sense pressure.

Thinking on mount structure. Second design:

Add dataset property WinDriveLetter, which is ignored on Unix system. So for a simple drive letter dataset:

zfs set driveletter=Z pool

The default creating of a new pool, AND, importing a UNIX pool, would set the root dataset to

driveletter=?:

So it is assigned first-available drive letter. All lower datasets will be mounted inside the drive letter. If pool's WinDriveLetter is not set, it will mount "/pool" as "C:/pool".


Installing a binary release

Latest binary files are available at GitHub releases

If you are running windows 10 with secure boot on and/or installing an older release you will need to enable unsigned drivers from an elevated CMD:

  • bcdedit.exe -set testsigning on
  • Then reboot. After restart it should have Test Mode bottom right corner of the screen.

After that either

  • Run OpenZFSOnWindows.exe installer to install
  • Would you like to install device software? should pop up, click install
    • If installing an unsigned release, click "Install anyway" in the "unknown developer" popup

Or if you do not want to run the Installer, run this command by hand from elevated CMD:

  • zfsinstaller.exe install .\ZFSin.inf
  • Would you like to install device software? should pop up, click install
    • If installing an unsigned release, click "Install anyway" in the "unknown developer" popup

Run zpool.exe status to confirm it can talk to the kernel

Failure would be:

Unable to open \\.\ZFS: No error.

Success would be:

No pools available

Creating your first pool.

The basic syntax to creating a pool is as below. We use the pool name "tank" here as with Open ZFS documentation. Feel free to pick your own pool name.

# zpool create [options] tank disk
  - Create single disk pool

# zpool create [options] tank mirror disk1 disk2
  - Create mirrored pool ("raid1")

# zpool create [options] tank raidz disk1 disk2 disk3 .... diskn
  - Create raidz ("raid5") pool of multiple disks

The default options will "mostly" work in Windows, but for best compatibility should use a case insensitive filesystem.

The recommended options string for Windows is currently:

zpool create -O casesensitivity=insensitive -O compression=lz4 \
     -O atime=off -o ashift=12 tank disk
  • Creating filebased pools would look like:
# fsutil file createnew C:\poolfile.bin 200000000
# zpool.exe create tank \\?\C:\poolfile.bin

Note that "\\?\C:\" needs to be escaped in bash shell, ie
"\\\\?\\C:\\".

        TEST                   ONLINE       0     0     0
        \??\C:\poolfile.bin  ONLINE       0     0     0
  • Creating a HDD pool

First, locate disk name

# wmic diskdrive list brief
VMware, VMware Virtual S SCSI Disk Device  \\.\PHYSICALDRIVE2  VMware, VMware Virtual S SCSI Disk Device  0           5362882560
# zpool create tank PHYSICALDRIVE2

Creating a ZVOL virtual hard disk

Creating a virtual hard disk (ZVOL) is done by passing "-V " to the "zfs create" command.

# zfs create -V 2g tank/hello

Which would create a disk of 2GB in size, called "tank/hello". Confirm it was created with:

# wmic diskdrive list brief
Caption                           DeviceID            Model                            Partitions  Size
ZVOL tank/hello SCSI Disk Device  \\.\PHYSICALDRIVE2  ZVOL tank/hello SCSI DiskDevice  0           2105671680

Exporting the pool

If you have finished with ZFS, or want to eject the USB or HDD that the pool resides on, it must first be exported. Similar to "ejecting" a USB device before unplugging it.

# zpool export tank

Importing a pool

If a zpool has been created on a disk partition from a different system make sure the partition label contains "zfs". Otherwise zpool import won't recognize the pool and will fail with "no pools available to import".

# zpool import tank

Uninstalling the driver

If you used the Installer, you can browse to "C:\Program Files (x86)\OpenZFS On Windows" and run the "uninst000.exe" Uninstaller program.

You can also use "Add Remove Programs" from the Settings menu, and click on "OpenZFS On Windows-debug version x.xx" and select Uninstall.

If you did not use the Installer, you can manually uninstall it:

zfsinstaller uninstall .\ZFSin.inf

To verify that the driver got uninstalled properly you can check "zpool.exe status".

When uninstalled with success, "zpool.exe status" should return:

Unable to open \\.\ZFS: No error.

If the driver is still there, it would be:

No pools available

A reboot might be necessary to uninstall it completely.

Tuning

You can use the registry to tune various parameters.
Also, there is kstat to dynamically change parameters.

Nightly builds

There are nightly builds available at AppVeyor

  • These builds are currently not signed and therefore require test mode to be enabled.

There also are test builds available here. These are "hotfix" builds for allowing people to test specific fixes before they are ready for a release.

zfsin's People

Contributors

ahrens avatar alek-p avatar allanjude avatar amotin avatar arun-kv avatar asomers avatar avg-i avatar aviksildc avatar behlendorf avatar brendonhumphrey avatar datacore-rm avatar datacore-tlaurent avatar datacore-yash avatar dehacked avatar don-brady avatar gamlerhart avatar grwilson avatar jheuking avatar jwk404 avatar kusumi avatar loli10k avatar lundman avatar pcd1193182 avatar pzakha avatar rlaager avatar rottegift avatar sdimitro avatar thecakeisnaoh avatar tonyhutter avatar vrajendra-datacore avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zfsin's Issues

Right click file in explorer, properties -> nothing

Nothing happens when properties is selected, many queries are issued though

  fsDispatcher: enter: major 14: minor 0: IRP_MJ_DEVICE_CONTROL fsDeviceObject
IOCTL_MOUNTDEV_QUERY_DEVICE_NAME
replying with '\'
dispatcher: exit: 0x80000005 Overflow Information 0x4
dispatcher: enter: major 14: minor 0: IRP_MJ_DEVICE_CONTROL
  fsDispatcher: enter: major 14: minor 0: IRP_MJ_DEVICE_CONTROL fsDeviceObject
IOCTL_MOUNTDEV_QUERY_DEVICE_NAME
replying with '\Device\ZFS{0b1bb601-af0b-32e8-a1d2-54c167af6277}'
dispatcher: exit: 0x0 OK Information 0x66
dispatcher: enter: major 2: minor 0: IRP_MJ_CLOSE
  fsDispatcher: enter: major 2: minor 0: IRP_MJ_CLOSE fsDeviceObject
dispatcher: exit: 0x0 OK Information 0x0
dispatcher: enter: major 0: minor 0: IRP_MJ_CREATE
  fsDispatcher: enter: major 0: minor 0: IRP_MJ_CREATE fsDeviceObject
IRP_MJ_CREATE: FileObject FFFFC68633F76320 related 0000000000000000 name '\Pippin3.jpg\' flags 0x0
zfs_vnop_lookup: enter
+zget 4
+zget 9
dispatcher: exit: 0x0 OK Information 0x1
dispatcher: enter: major 13: minor 0: IRP_MJ_FILE_SYSTEM_CONTROL(IRP_MN_USER_FS_REQUEST)
  fsDispatcher: enter: major 13: minor 0: IRP_MJ_FILE_SYSTEM_CONTROL(IRP_MN_USER_FS_REQUEST) fsDeviceObject
    FSCTL_GET_REPARSE_POINT
dispatcher: exit: 0xc0000275 <*****> Information 0x0
dispatcher: enter: major 18: minor 0: IRP_MJ_CLEANUP
  fsDispatcher: enter: major 18: minor 0: IRP_MJ_CLEANUP fsDeviceObject
IRP_MJ_CLEANUP: iocount 0 usecount 2
dispatcher: exit: 0x0 OK Information 0x0
dispatcher: enter: major 2: minor 0: IRP_MJ_CLOSE
  fsDispatcher: enter: major 2: minor 0: IRP_MJ_CLOSE fsDeviceObject
IRP_MJ_CLOSE: iocount 0 usecount 1
dispatcher: exit: 0x0 OK Information 0x0
dispatcher: enter: major 0: minor 0: IRP_MJ_CREATE
  fsDispatcher: enter: major 0: minor 0: IRP_MJ_CREATE fsDeviceObject
IRP_MJ_CREATE: FileObject FFFFC68633F76320 related 0000000000000000 name '\Pippin3.jpg' flags 0x0
zfs_vnop_lookup: enter
+zget 4
+zget 9
dispatcher: exit: 0x0 OK Information 0x1
dispatcher: enter: major 5: minor 0: IRP_MJ_QUERY_INFORMATION
  fsDispatcher: enter: major 5: minor 0: IRP_MJ_QUERY_INFORMATION fsDeviceObject
* query_information: FileStreamInformation
file_stream_information: 
dispatcher: exit: 0x0 OK Information 0xffffc6a6

bitesize failures in IFStest.exe

Now that most tests can run and pass, we can look at the smaller issues as well. Although the relative-path tests BSOD, so I'll look at that first.

There are a few failures when running ifstest.exe regarding the correct behaviour of flags to IRP_MJ_CREATE.

-------------------------------
Group: OpenCreateGeneral
NonDirectoryFileOpenTestTest         :NonDirectoryFileOpenTest
Group        :OpenCreateGeneral
Status       :C000001E (IFSTEST_TEST_NTAPI_FAILURE_CODE)
LastNtStatus     :C0000034 STATUS_OBJECT_NAME_NOT_FOUND
ExpectedNtStatus :C00000BA STATUS_FILE_IS_A_DIRECTORY
Description  :{Msg# OpCreatG!nondirf!10} Attempt to open a directory
              with NON DIRECTORY FILE specified. This operation
              did not return the expected status.

Looks like wrong errorcode returned, easy.

-------------------------------
Group: OpenCreateGeneral
OpenVolumeTestTest         :OpenVolumeTest
Group        :OpenCreateGeneral
Status       :C000001E (IFSTEST_TEST_NTAPI_FAILURE_CODE)
LastNtStatus     :00000000 STATUS_SUCCESS
ExpectedNtStatus :C0000043 STATUS_SHARING_VIOLATION
Description  :{Msg# OpCreatG!openvol!11} Attempting to open the
              volume with ShareAccess 0. This can only work if
              there are NO open handles. We were expecting a failure
              since we have 1 open handle.

Guess volumes IRP_MJ_CREATE needs to have a open counter, and return error in the non-zero case here.

-------------------------------
Group: OpenCreateGeneral
FileNameLengthTestTest         :FileNameLengthTest
Group        :OpenCreateGeneral
Status       :C0000021 (IFSTEST_TEST_FILENAME_FAILURE)
LastNtStatus     :C0000161 STATUS_ILLEGAL_CHARACTER
ExpectedNtStatus :00000000 STATUS_SUCCESS
LastGeneralValue :00000200
TestVariant  :00010000 TEST_VARIANT_FILE
Description  :{Msg# OpCreatG!fnlen!10} The file name length test
              failed. This was at length 512 with the boundary is
              1024.

Not sure this is fixable

-------------------------------
Group: OpenCreateGeneral
UnicodeOnDiskTestTest         :UnicodeOnDiskTest
Group        :OpenCreateGeneral
Status       :C000002E (IFSTEST_TEST_UNICODE_NAME_PRESERVED)
LastNtStatus     :6CA52CE8 ?
ExpectedNtStatus :00000000 STATUS_SUCCESS
Description  :{Msg# OpCreatG!unicode!12} Failure quering directory
              for a file/directory with unicode name.

Should work, but clearly doesn't. Debugging needed

-------------------------------
Group: OpenCreateGeneral
CaseSensitiveTestTest         :CaseSensitiveTest
Group        :OpenCreateGeneral
Status       :C000001E (IFSTEST_TEST_NTAPI_FAILURE_CODE)
LastNtStatus     :C0000002 STATUS_NOT_IMPLEMENTED
ExpectedNtStatus :00000000 STATUS_SUCCESS
Description  :{Msg# OpCreatG!casesen!12} Failure while querying
              internal information of test file \casesen\nesesac.dat.
              We need this unique number to verify case sensitivity.

Missing FileID support

-------------------------------
Group: OpenCreateParameters
CreateFileTestTest         :CreateFileTest
Group        :OpenCreateParameters
Status       :C000001E (IFSTEST_TEST_NTAPI_FAILURE_CODE)
LastNtStatus     :00000000 STATUS_SUCCESS
ExpectedNtStatus :C0000035 STATUS_OBJECT_NAME_COLLISION
Description  :{Msg# OpCreatP!crfile!14} An attempt was made to
              create an existing file \crfile.dat in the directory
              \??\E:\run1\opcreatp.  The status returned should
              have been: object name collision.  Check the last NT
              status returned.

Looks like we overwrite when we shouldn't. Connect Windows flag to ZFS flag. Easy

-------------------------------
Group: OpenCreateParameters
CreateFileDirTestTest         :CreateFileDirTest
Group        :OpenCreateParameters
Status       :C000001E (IFSTEST_TEST_NTAPI_FAILURE_CODE)
LastNtStatus     :00000000 STATUS_SUCCESS
ExpectedNtStatus :C0000035 STATUS_OBJECT_NAME_COLLISION
Description  :{Msg# OpCreatP!crfiled!14} An attempt was made to
              create an existing file \crfiled in the directory
              \??\E:\run1\opcreatp.  The status returned should
              have been: object name collision.  Check the last NT
              status returned.

Same

-------------------------------
Group: OpenCreateParameters
OpenAlwaysFileTestTest         :OpenAlwaysFileTest
Group        :OpenCreateParameters
Status       :C000001F (IFSTEST_TEST_IOSTATUSBLOCK_FAILURE)
LastGeneralValue :00000002
ExpectedGeneralValue :00000001
Description  :{Msg# OpCreatP!opalfile!15} The Io Status Block did
              not say the file \opalfile.dat in the directory
              \??\E:\run1\opcreatp was opened.  The Io Status Block
              contains results of Nt function calls.

Looks like we should return something to say if file was created or not. Easy

-------------------------------
Group: OpenCreateParameters
OverwriteFileTestTest         :OverwriteFileTest
Group        :OpenCreateParameters
Status       :C000001F (IFSTEST_TEST_IOSTATUSBLOCK_FAILURE)
LastGeneralValue :00000001
ExpectedGeneralValue :00000003
Description  :{Msg# OpCreatP!ovwrfile!14} The Io Status Block did
              not say the file \ovwrfile.dat in the directory
              \??\E:\run1\opcreatp was overwritten.  The create
              function returned back a success status on the actual
              overwrite but the IoStatusBlock did not contain the
              status.

same

-------------------------------
Group: OpenCreateParameters
SupersedeFileTestTest         :SupersedeFileTest
Group        :OpenCreateParameters
Status       :C000001E (IFSTEST_TEST_NTAPI_FAILURE_CODE)
LastNtStatus     :C0000034 STATUS_OBJECT_NAME_NOT_FOUND
ExpectedNtStatus :00000000 STATUS_SUCCESS
Description  :{Msg# OpCreatP!suprfile!11} A failure was encountered
              when trying to create the file \elifrpus.dat in the
              directory \??\E:\run1\opcreatp.  This create was
              called with a disposition of file supersede.  Check
              the last NT status returned.

Map Windows flag to ZFS flag again.

-------------------------------
Group: OpenCreateParameters
ReadOnlyAttributeTestTest         :ReadOnlyAttributeTest
Group        :OpenCreateParameters
Status       :C000001E (IFSTEST_TEST_NTAPI_FAILURE_CODE)
LastNtStatus     :00000000 STATUS_SUCCESS
ExpectedNtStatus :C0000022 STATUS_ACCESS_DENIED
LastGeneralValue :00000001
Description  :{Msg# OpCreatP!roattr!10} An attempt was made to open
              the read only file \roattr\roattr.dat in the directory
              \??\E:\run1\opcreatp with the write data access set.
              This should have failed with a access denied error.
              Check the last NT status.

Neat, you can create files read-only, guess we need to map this flag to Unix file permissions.

-------------------------------
Group: OpenCreateParameters
NormalAttributeTestTest         :NormalAttributeTest
Group        :OpenCreateParameters
Status       :C000001A (IFSTEST_TEST_NORMAL_ATTRIBUTE_ERROR)
LastGeneralValue :00000080
ExpectedGeneralValue :00000020
Description  :{Msg# OpCreatP!normattr!12} The ARCHIVE attribute
              was not set on the file normattr.dat in the directory
              \??\E:\run1\opcreatp.  This attribute was set at file
              creation time.

Map Windows attributes to ZFS attributes. We already have code for this to map OSX "bsd" to ZFS, in zfs_vnop_windows_lib.c so make it be called, and update flags for windows.

-------------------------------
Group: OpenCreateParameters
DirectoryAttributeTestTest         :DirectoryAttributeTest
Group        :OpenCreateParameters
Status       :C000001A (IFSTEST_TEST_NORMAL_ATTRIBUTE_ERROR)
LastGeneralValue :00000080
ExpectedGeneralValue :00000020

same

Panic: Stop Code: REFERENCE BY POINTER

Steps to reproduce:
Import pool
Change directory to pool's "implicit dataset" (top directory)
Edit a file in VIM with a leftover from the previous session (i.e. .touch-files.sh.swp for file touch-files.sh)$ cat .touch-files.sh.swp
U3210#"! U¦[¦C¦¦@!dexterT430/cygdrive/d/touch-files.shutf-8
Using Cygwin, not sure if that changes anything.
See attached debug output.
dbgview2018-09-15-4.txt

Something wrong with ZIL, file transfer stops at 99%

In commit ad3380c some hackery was done with ZIL, which leads to the problem, that file transfers take a long time to finish (if they even come to an end). When copying or moving files into the zpool, the explorer shows the progress bar, which then stops at 99%. Sometimes the process finishes by itself after 5-10 minutes. In other cases I did not have had enough patience to wait for it...
When setting the sync property of the mounted dataset to "disabled", single small files can be copied instantly. (In my understanding, enforcing asynchronous operation should get ZFS to not use ZIL, as it is intended to accelerate synchronous operation)
Nevertheless, large files or a large number of files still cause the file transfer to hang. But that is another problem I guess...

File deletion does not free space appropriately

While testing large file copies on windows, I recognized that at some point the whole memory in my zpool was occupied, even though I deleted the files after copying.
To rule out that it is not a problem with copying on windows, I created a 1GB file with FreeBSD and deleted it on windows.
This is the free space before the deletion:
before_deletion

And this after deletion:
after_deletion

As you can see, the free space got even less (~50kB), really strange ... 😳
I placed the file in the root directory, don't know if that has any impact ..?

It seems that on re-import windows gets the free space right again:
after_reimport

install ZFS on Windows Server 2012 R2

Hi
at first : awsome job to port ZFS for windows. I really needed this. Thanks alot !!

Now I am trying to install the driver to Windows Server 2012 R2 running in an VMWare ESXi virtual Machine. I try to install the latest binary (OpenZFSonWindows-20180202).

I set bcdedit.exe -set testsigning on
and also I set
bcdedit.exe /set nointegritychecks on
bcdedit.exe /set LoadOptions DDISABLE_INTEGRITY_CHECKS

Also I booted with the "disable driver signing", but I still get
Unable to open \.\ZFS: No error.
Failed to initialize the libzfs library.
when running zpool status.

What am I dooing wrong ?

Creating new text file in explorer creates error due missing set FileAllocationInformation

Error:

  • In Windows Explorer, on ZFS Volume. Right-Click->New Text File.
  • It shows Error dialog: 0x8000FFFF Catastrophic failure.
  • After confirming, the file is actually created just fine.

It fails on the missing `FileAllocationInformation'. If that is implemented very crudely, it works.
The very crude implementation to confirm that its the missing FileApplicationInfo call: #23

NAMED_STREAMS should be made into XATTR and be hidden

Currently we claim to support NAMED_STREAMS, and they should be mapped as XATTR, but currently if they are used they are exposed:

-rw-r--r-- 1 WDKRemoteUser 197121      27 May 30 14:11 ZFSuninstall.bat
-????????? ? ?             ?            ?            ? ZFSuninstall.bat:Zone.Identifier
-rwxr-xr-x 1 WDKRemoteUser 197121 1698304 May 30 14:11 zpool.exe*
-????????? ? ?             ?            ?            ? zpool.exe:Zone.Identifier
-rwxr-xr-x 1 WDKRemoteUser 197121  163328 May 30 14:11 zstreamdump.exe*
-????????? ? ?             ?            ?            ? zstreamdump.exe:Zone.Identifier

Easily tested by drag'n'drop files from a .ZIP archive to ZFS.

Copying of large files to zpool hangs

When copying large files (last tested 367MB) to the zpool, the process suddenly stops in the middle and after that nothing happens anymore.

...
zfs_write: resid/n 1048576 : offset 134217728 (rl_len 1048576) blksz 18446670930792613376
zfs_write done remainder 0
dispatcher: enter: major 4: minor 0: IRP_MJ_WRITE: type 0x6
  fsDispatcher: enter: major 4: minor 0: IRP_MJ_WRITE fsDeviceObject
zfs_write: resid/n 1048576 : offset 135266304 (rl_len 1048576) blksz 18446735286582576640
zfs_write done remainder 0
dispatcher: enter: major 4: minor 0: IRP_MJ_WRITE: type 0x6
  fsDispatcher: enter: major 4: minor 0: IRP_MJ_WRITE fsDeviceObject
zfs_write: resid/n 1048576 : offset 136314880 (rl_len 1048576) blksz 18446735286582576640

(that's it)

as I wasn't able to abort the copy-process, I tried to restart the PC, but it seems to hang in flush_buffers:

dispatcher: enter: major 9: minor 0: IRP_MJ_FLUSH_BUFFERS: type 0x6
  fsDispatcher: enter: major 9: minor 0: IRP_MJ_FLUSH_BUFFERS fsDeviceObject
flush_buffers: 


will add some printfs to get some more detailed info...

maybe that is something?
https://github.com/openzfsonwindows/ZFSin/blob/master/ZFSin/zfs/module/zfs/dmu.c#L1559

                 /*
		 * XXX uiomove could block forever (eg.nfs-backed
		 * pages).  There needs to be a uiolockdown() function
		 * to lock the pages in memory, so that uiomove won't
		 * block.
		 */
		err = uiomove((char *)db->db_data + bufoff, tocpy,
		    UIO_WRITE, uio);

here is the same code, but it has been commented out ...
https://github.com/openzfsonwindows/ZFSin/blob/master/ZFSin/zfs/module/zfs/dmu.c#L1788

Native encryption support

Thanks a lot to the author of this awesome project, being able to natively access ZFS pools from Windows would be awesome. Do you also plan to add support for native encryption to this driver or it's something not really feasible do accomplish?

access denied error

When trying to access second level folders (and probably also deeper folders and maybe also files?) I get an access denied error. Editing files and folders on the top level is also not allowed.
File/folder creation on the top level works and I am even able to modify files that I have created in that session. But after a remount of the dataset I get an access error on that files, too.
I suspect the causal change was made somewhere between prerelease 0.03 and 0.04?

capture

CcPurgeCacheSection fails in IRP_MJ_CLEANUP

Once in a while a vnode is recycled via fsdispatcher()->IRP_MJ_CLEANUP->VN_RELE(vp)->...
After that the cache file (if it exists) shall be purged with

SECTION_OBJECT_POINTERS *section;
section = vnode_sectionpointer(vp);
if (/*(IrpSp->FileObject->Flags & FO_CACHE_SUPPORTED) &&*/ section && section->DataSectionObject) {
	CcPurgeCacheSection(section, NULL, 0, FALSE);
}

This fails with BSOD because every parameter of the vnode is something like 0xdeadbeef after recycling, which is obviously an invalid value.

dprintf output:

IRP_MJ_CLEANUP: '\usr\share\man\man3' iocount 1 usecount 0
  zfs_vnop_recycle: releasing zp FFFF9988462507B8 and vp FFFF998846238080: '\usr\share\man\man3'
Removing all notifications for directory: FFFF9988462507B8
Removing notifications for file
KDTARGET: Refreshing KD connection

*** Fatal System Error: 0x0000000a
                       (0x0000000000000008,0x0000000000000002,0x0000000000000000,0xFFFFF8036487F82A)

Break instruction exception - code 80000003 (first chance)
Connected to Windows 10 16299 x64 target at (Mon Jul 30 16:27:08.445 2018 (UTC + 2:00)), ptr64 TRUE

In other cases the vnode won't be recycled, therefore the section object pointer is (probably) NULL, which is caught by the if query...
For me the problem occurs when searching for "*" on my FreeBSD card...

We probably could just check for 0xdeadbeef, but I am actually looking for a cleaner solution...

hmm..looks like it is not that easy, just crashed the Filesystem Filter Manager 😒

New folder changing name corrupts stack

Creating a new folder, and leaving the name New Folder works, and renaming it to another name as a separate process also works. But creating a new folder, and changing the name as part of the same task will corrupt stack.

if (vnode_isdir(ZTOV(szp))) {
		if ((error = zfs_rename_lock(szp, tdzp, sdzp, &zl)))

sets up the zl structure, which is from kmem_alloc(). Inside is mostly NULLs.

Then the return of this call

	error = dmu_tx_assign(tx, waited ? TXG_WAITED : TXG_NOWAIT);

corrupts the inside of zl. Cause unknown.

EFI Partitions and Virtual Volumes

To handle EFI partitions, a possible good solution would be to take the sources for disk.sys kindly opensourced by Microsoft.

Rename it efidisk.sys or similar, and remove the regular partition support (So that MS is still controlling that part). Then link with libefi, and create the Volumes as needed but for EFI partitions instead.

We could even add code to SET_PARTITION_INFORMATION as well, and properly handle creating of pools on Windows to be the same partition layout as upstream.

In addition to this, if the functions for creating volumes (and removing) can be called directly, the ZFS current sources can call them for the MOUNT, and ZVOL creation. Since now, that Volume code is not quite right, and hopefully disk.sys's Volume code will be perfection.

Should be about a week's worth of work.

This is awesome. What's its license?

This just got posted to Hacker News (https://news.ycombinator.com/item?id=15549190), where a ton of people are going to learn about it. It'll probably end up on Reddit soon too, if it hasn't already.

I don't see a license file anywhere. Now would be a good time to clarify the license.

AFAIK, the difference between BSD and MIT is that (IIRC!!!) BSD requires you to cite the original author(s), while MIT does not.

When mentioning licenses I usually link to the https://en.wikipedia.org/wiki/Sybase_Open_Watcom_Public_License as well, primarily because it makes for good food for thought. (In certain ways it's stricter than the GPL, but these differences also make it GPL incompatible).

inaccurate zpool history

When verifying the zpool history on a ZFSin-created pool under FreeBSD, the zpool history appears to be inaccurate or incomplete:

zpool history tank
History for 'tank':
-1704805-09-07.09:48:22
2018-05-28.19:48:01 zpool import -f -R /media tank
2018-05-28.19:50:05 zfs create tank/dataset1
2018-05-28.19:50:07 zfs create tank/dataset2
1969-12-31.16:00:00 zfs.exe snap tank/dataset1@send
2018-06-01.22:27:29 zpool import -f tank
2018-06-01.22:30:06 zpool scrub tank
2018-06-01.22:31:54 zpool export tank
2018-06-01.23:11:42 zpool import -f tank

The original creation command is absent and one data is 1969-12-31.16:00:00

Try out Deferred Procedure Calls in vdev_disk.c / vdev_file.c

As recommended at https://news.ycombinator.com/item?id=15549190#15549410 a possibly better way to handle that IO completion callback coming back at a different IRQ level (calling ZIO continue will die at first mutex call), is to use Deferred Procedure Calls (DPC) to call ZIO continue.

Right now, I spawn a thread which goes into sleep on Event, and IO completion routine just triggers the Event. thread resumes and calls ZIO continue.

https://github.com/lundman/ZFSin/blob/master/ZFSin/zfs/module/zfs/vdev_disk.c#L523
https://github.com/lundman/ZFSin/blob/master/ZFSin/zfs/module/zfs/vdev_disk.c#L470
https://github.com/lundman/ZFSin/blob/master/ZFSin/zfs/module/zfs/vdev_disk.c#L728

Driver cannot be uninstalled properly

I used devcon.exe install ZFSin.inf ROOT/ZFSin to install the driver.

After that I tried to uninstall it through the device manager. Right-clicked "ZFSin Controller" -> Uninstall device, ticked "Delete driver software for this device." -> Uninstall -> Reboot.

When I execute zpool status after that, I get no pools available, so the driver is still there...
Probably something wrong with the .inf file?

'notepad.exe' shows old content, while 'cat' shows correct content.

Reproduce:

  • Open file with notepad.exe (or right click edit).
  • Edit it, save.
  • Reopen it: It shows old content.
  • However 'cat file' (powershell) shows correct content.

Given that 'cat' and notepad give different content: Looks like it's served from different cache?
Looks like one is served via ZFS, one from Windows cache.

More investigations will follow.

Cygwin "touch" fails

On the "implicit" (top of the pool) dataset:

dexter@T430 /cygdrive/d
$ touch foo
touch: setting times of 'foo': Invalid request code

dexter@T430 /cygdrive/d
$ touch ~/cyghome/foo

Attaching debug information.
dbg-2018-09-17-1.txt

Same memory returned twice by kmem

The test command git clone https://github.com/lundman/ZFSin.git will eventually get the following request

  FileName: \ZFSin\.git\objects\pack\pack-18ffe57b902f601b8f93f745d0eaf79d55425f29.pack offset 0x20000 len 0x8000 mdl FFFF8087E4086B60 System 0000000000000000

and we start in fs_read() for it;

source

	uio = uio_create(1, byteOffset.QuadPart, UIO_SYSSPACE, UIO_READ);
	ASSERT(address != NULL);
	uio_addiov(uio, address, bufferLength);
	error = zfs_read(vp, uio, 0, NULL, NULL);

In this case, the allocations are (lower 32bits)

uio = 0xebb4bb80 (size 0x40)
uio->iov = 0xeb44ddd0 (size 0x10)
uio->iov->iov_base[0] = 0x15a18000

Nothing special about that, we will be keeping an eye on uio->iov.

So, we enter zfs_read() and the stack looks like

	ZFSin!dmu_buf_hold_array_by_dnode+0x1d9 [c:\src\zfsin\zfsin\zfs\module\zfs\dmu.c
 	ZFSin!dmu_read_uio_dnode+0x78 [c:\src\zfsin\zfsin\zfs\module\zfs\dmu.c @ 1194]
 	ZFSin!dmu_read_uio_dbuf+0x60 [c:\src\zfsin\zfsin\zfs\module\zfs\dmu.c @ 1264]
 	ZFSin!zfs_read+0x43b [c:\src\zfsin\zfsin\zfs\module\zfs\zfs_vnops.c @ 725]
 	ZFSin!fs_read+0x343 [c:\src\zfsin\zfsin\zfs\module\zfs\zfs_vnops_windows.c @ 2118]

which is pretty much a straight shot down. (up).

dmu_buf_hold_array_by_dnode

	dbp = kmem_zalloc(sizeof (dmu_buf_t *) * nblks, KM_SLEEP);

Here nblks = 2 so the size allocated is 0x10. The inside of kmem looks like

zfs_kmem_zalloc

void *
zfs_kmem_zalloc(uint32_t size, int kmflag)
{
	uint32_t index;
	void *buf;

	if ((index = ((size - 1) >> KMEM_ALIGN_SHIFT)) < KMEM_ALLOC_TABLE_MAX) {
		kmem_cache_t *cp = kmem_alloc_table[index];
		buf = kmem_cache_alloc(cp, kmflag);

Where cp points to kmem_alloc_16, so that is all good. Inside that

kmem_cache_alloc

	for (;;) {
		/*
		 * If there's an object available in the current CPU's
		 * loaded magazine, just take it and return.
		 */
		if (ccp->cc_rounds > 0) {
			buf = ccp->cc_loaded->mag_round[--ccp->cc_rounds];

Here, cc_rounds == 2 before the decrement, so it assigns [1] and the value of buf = 0xeb44ddd0, which is the same address as uio->iov. :(

The following bzero() (we are in zalloc) blows the data away, and we are going down a dark road.

So both allocs come from kmem_alloc_16 with correct cp and size is 0x10. Nothing has been freed. It is somewhat undesirable to return the same value twice. The cpu cache (controlled by cpu_number()) has been tested to always return 0, which makes no difference.

Something wrong with log on export

The logged commands below should be:
zpool.exe import -N tank
zpool export tank

but, obviously, something goes wrong

2018-07-09.16:34:32 zpool.exe import -N tank
2018-07-09.16:39:51 þÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺþÊݺ

How to install released binary?

I would like to try ZFS in VMware but I failed to find any instructions about installing released binary. I don't want to compile source code. I just want to try if latest build is working.

Something wrong with the virtual disks used for mounts/zvol

Even though the virtual volumes we create to simulate a mount work, they are not quite right. No calls to mountmanager to set drive letter or path will work, so only the initial drive letter set will work.

This turns up again for ZVOLs when we create volumes to use, they are not quite recognised, so you can not do anything useful with them.

This needs someone who knows more about volumes to take a peek and see if they can't be made more correctly.

userid / groupid do not connect to Windows SIDs.

Currently there is no connection between the uid/gid on ZFS disk, and the Windows users. Research other software solutions, like smb, ext3, btrfs etc, and attempt to find a good workable solution. Keep in mind we can probably use ZFS ZAP, or SA, to store any ID hashing needed.

2018-05-29 Snapshot: zpool.exe export and destroy report "pool is busy"

Version in title. Output:

PS C:\Users\dexter\Desktop> .\zpool.exe export tank
(ioctl 0x805 status 0 bytes 4548)
(ioctl 0x804 status 0 bytes 4548)
(ioctl 0x812 status 0 bytes 4548)
(ioctl 0x805 status 0 bytes 4548)
(ioctl 0x814 status 3 bytes 4548)
(ioctl 0x815 status 0 bytes 4548)
(ioctl 0x815 status 3 bytes 4548)
(ioctl 0x803 status 16 bytes 4548)
cannot export 'tank': pool is busy

Same output for:

PS C:\Users\dexter\Desktop> .\zpool.exe destroy tank

Keep up the good work!

vp->iocount>0 assertion fails in vnode_put on file copy

I tried to copy a few dummy .txt-files to the zpool one by one. After some files vnode_put is called with the callstack below and the vnode->iocount is already 0.
I would suggest this is a timing problem. I have the feeling, that the problem occurs earlier, when I copy the files faster one behind the other.

>	ZFSin!vnode_put+0xa7 [c:\users\julianh\source\repos\zfsin\zfsin\spl\module\spl\spl-vnode.c @ 767]	C/C++/ASM
 	ZFSin!spl_rele_async+0x25 [c:\users\julianh\source\repos\zfsin\zfsin\spl\module\spl\spl-vnode.c @ 586]	C/C++/ASM
 	ZFSin!taskq_thread+0x494 [c:\users\julianh\source\repos\zfsin\zfsin\spl\module\spl\spl-taskq.c @ 1610]	C/C++/ASM
 	nt!PspSystemThreadStartup+0x47	C/C++/ASM
 	nt!KiStartSystemThread+0x16	C/C++/ASM

install fail on updated win10

Hello,
I try to install zfs on win10entreprise on my laptop (no vm) after reading the install procedure.
zfs win10

What can i do?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.