zfs on nvme: gnop breaks pool, zfs gets stuck
Gerrit Kühn
gerrit.kuehn at aei.mpg.de
Wed Apr 27 13:22:54 UTC 2016
Hello all,
I have a set of three NVME-ssds on PCIe-converters:
---
root at storage:~ # nvmecontrol devlist
nvme0: SAMSUNG MZVPV512HDGL-00000
nvme0ns1 (488386MB)
nvme1: SAMSUNG MZVPV512HDGL-00000
nvme1ns1 (488386MB)
nvme2: SAMSUNG MZVPV512HDGL-00000
nvme2ns1 (488386MB)
---
I want to use a z1 raid on these and created 1m-aligned partitions:
---
root at storage:~ # gpart show
=> 34 1000215149 nvd0 GPT (477G)
34 2014 - free - (1.0M)
2048 1000212480 1 freebsd-zfs (477G)
1000214528 655 - free - (328K)
=> 34 1000215149 nvd1 GPT (477G)
34 2014 - free - (1.0M)
2048 1000212480 1 freebsd-zfs (477G)
1000214528 655 - free - (328K)
=> 34 1000215149 nvd2 GPT (477G)
34 2014 - free - (1.0M)
2048 1000212480 1 freebsd-zfs (477G)
1000214528 655 - free - (328K)
---
After creating a zpool I recognized that it was using ashift=9. I vaguely
remembered that SSDs usually have 4k (or even larger) sectors, so I
destroyed the pool and set up gnop-providers with -S 4k to get ashift=12.
This worked as expected:
---
pool: flash
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
flash ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
gpt/flash0.nop ONLINE 0 0 0
gpt/flash1.nop ONLINE 0 0 0
gpt/flash2.nop ONLINE 0 0 0
errors: No known data errors
---
This pool can be used, exported and imported just fine as far as I can
tell. Then I exported the pool and destroyed the gnop-providers. When
starting with "advanced format" hdds some years ago, this was the way to
make zfs recognize the disks with ashift=12. However, destroying the
gnop-devices appears to have crashed the pool in this case:
---
root at storage:~ # zpool import
pool: flash
id: 4978839938025863522
state: ONLINE
status: One or more devices contains corrupted data.
action: The pool can be imported using its name or numeric identifier.
see: http://illumos.org/msg/ZFS-8000-4J
config:
flash ONLINE
raidz1-0 ONLINE
11456367280316708003 UNAVAIL corrupted
data gptid/55ae71aa-eb84-11e5-9298-0cc47a6c7484 ONLINE
6761786983139564172 UNAVAIL corrupted
data
---
How can the pool be online, when two of three devices are unavailable? I
tried to import the pool nevertheless, but the zpool command got stuck in
state tx-tx. "soft" reboot got stuck, too. I had to push the reset button
to get my system back (still with a corrupt pool). I cleared the labels
and re-did everything: the issue is perfectly reproducible.
Am I doing something utterly wrong? Why is removing the gnop-nodes
tampering with the devices (I think I did exactly this dozens of times on
normal hdds during that previous years, and it always worked just fine)?
And finally, why does the zpool import fail without any error message and
requires me to reset the system?
The system is 10.2-RELEASE-p9, update is scheduled for later this week
(just in case it would make sense to try this again with 10.3). Any other
hints are most welcome.
cu
Gerrit
More information about the freebsd-fs
mailing list