有两种报错,其都是指同一种问题。
报错1:
Disk(s): sdx ... are formatted with Data Integrity Feature (DIF) which is unsupported.
或者是:Disk: 'sdx' is incorrectly formatted with Data Integrity Feature (DIF).
报错2:
[EFAULT] Partition type xxxxyyyy-xxxx-xxxx-xxxx-xxxxyyyyzzzz not found on sdx
原因是zfs储存池是不支持扇区(block size)非标准512b的扇区格式,也没办法用开启了PFU(Protection Field Usage)的硬盘。zfs自己就有一套数据自愈体系,会和其他硬件厂商提供的方案起冲突。
捡垃圾的时候不少人都会捡到dell emc的sas硬盘,相对来说便宜,但是从企业机上换下来的时候一般都是520b或者528b,同时也开启了PFU。
你可以用这个命令来确认当前硬盘的状态:
sg_readcap -v -l /dev/sdx
注意其中这行:
Protection: prot_en=1, p_type=1, p_i_exponent=0 [type 2 protection]
即表明这张dell的emc硬盘处于type2保护中。
这个使用就要用sg_format低格工具格掉它。
格式化后将会丢失所有硬盘数据,请务必确认此操作带来的影响。
如果是普通硬盘:
sg_format --format --ffmt=1 --size=512 /dev/sdx
如果是4kn硬盘:
sg_format --format --ffmt=1 --size=4096 /dev/sdx
参数分析:
--format 执行格式化,倒数30秒后开始。在开始前可以通过ctrl+c中断。
--ffmt=1 快速格式化,默认是0,1和2都是快速格式化的选项,1不覆盖数据,2覆盖数据。
--size=4096 扇区的大小,扇区越大硬盘性能越好,但是需要硬盘支持原生4kn。在一个扇区4096k的时候,可以通过512e的方式兼容普通的512b扇区格式。
--fmtpinfo=0 关闭硬盘冗余保护,一般和下面的关闭PFU一起使用。默认值就是0,所以在上面的格式化命令中不带。
--pfu=0 关闭PFU。默认值就是0,所以在上面的格式化命令中不带。
sg_format工具文档参考:
https://linux.die.net/man/8/sg_format
https://sg.danny.cz/sg/sg3_utils.html
truenas论坛文章参考:
https://www.truenas.com/community/threads/troubleshooting-disk-format-warnings-in-truenas-scale.106051/
https://forums.truenas.com/t/data-integrity-feature-dif-which-is-unsupported/6558
https://forums.truenas.com/t/sas-drive-not-showing-up-after-sg-format-command-was-interrupted/22327/4
https://forums.truenas.com/t/error-efault-disk-sde-is-incorrectly-formatted-with-data-integrity-feature-dif/598
reddit文章参考:
https://www.reddit.com/r/truenas/comments/ujggb5/need_help_please_efault_partition_type/
https://www.reddit.com/r/homelab/comments/wdvf2j/psa_working_with_selfencrypting_drives_with/
https://www.reddit.com/r/homelab/comments/10hcxw7/bought_used_sas_drives_for_cheap_but_i_cant/
pve论坛文章参考:
https://forum.proxmox.com/threads/sg_format-installation-to-remove-type-2-protection-on-sas-drives.139347/
其他参考:
https://richardwutt.xyz/truenas-故障排除-format-dif-unsupport/