4k 硬盘 freebsd gpart 和 zfs

4k 硬盘 freebsd gpart 和 zfs

我有 3 个硬盘,名称如下camcotrol

root@cirmos:/root # camcontrol identify ada1
pass2: <WDC WD10EZEX-00RKKA0 80.00A80> ATA-8 SATA 3.x device
pass2: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)

protocol              ATA/ATAPI-8 SATA 3.x
device model          WDC WD10EZEX-00RKKA0
firmware revision     80.00A80
serial number         WD-WMC1S4587539
WWN                   50014ee003930f6e
cylinders             16383
heads                 16
sectors/track         63
sector size           logical 512, physical 4096, offset 0
LBA supported         268435455 sectors
LBA48 supported       1953525168 sectors
PIO supported         PIO4
DMA supported         WDMA2 UDMA6 

Feature                      Support  Enabled   Value           Vendor
read ahead                     yes  yes
write cache                    yes  yes
flush cache                    yes  yes
overlap                        no
Tagged Command Queuing (TCQ)   no   no
Native Command Queuing (NCQ)   yes      32 tags
SMART                          yes  yes
microcode download             yes  yes
security                       yes  no
power management               yes  yes
advanced power management      no   no
automatic acoustic management  no   no
media status notification      no   no
power-up in Standby            yes  no
write-read-verify              no   no
unload                         no   no
free-fall                      no   no
data set management (TRIM)     no
root@cirmos:/root # 

从上可以看出,扇区大小检测为:

sector size           logical 512, physical 4096, offset 0

这里已经有一些关于 4k 驱动器调整的主题。我想从以上 3 个驱动器创建 ZFS (raidz),并且有以下问题:

  1. 这些是驱动器吗4k drives?(询问是因为物理扇区大小为 4k,但逻辑扇区大小报告为 512b)
  2. gpart对于上述潜水员的建议是什么correct alignment(想要创建一个freebsd-zfs分区)
  3. 这里是我应该考虑的 zpool 调整吗?(根、系统和交换不应位于上述驱动器中 - 这些驱动器仅用于“纯”文件存储(和主目录)。

答案1

从第 2 点开始;在所有最佳实践中,ZFS 应该“提供”整个驱动器进行管理。无需特殊分区。

其余部分:

此链接有很多有用的提示,我会重复一些。

每个 vdev(如镜像或 raidz)都有一个 ashift。ashift=9 是 512 字节扇区,ashift=12 是 4k 扇区。(计算为 2^ashift=sector-size)

为了帮助确保未来的兼容性,而不必稍后销毁并重新创建池,通常建议使用 ashift=12,而不管实际驱动器功能如何(因为在创建 vdev 后无法更改它)。

来自链接:

# gnop create -S 4096 ada0
# zpool create tank raidz ada0.nop ada1 ada2
# zdb | grep ashift
     ashift: 12

gnop 命令为 ada0 创建强制 4k 对齐直通设备,即 ada0.nop。然后,创建池。ZFS 将对整个 vdev 使用 ashift=12。创建池/vdev 后,建议删除 ada0.nop 直通设备。

# zpool export tank
# gnop destroy ada0.nop
# zpool import tank

现在,池将导入设备 ada0、ada1 和 ada2。并且它仍将具有创建时锁定的 ashift=12。

就是这样。有了 ZFS 管理整个驱动器,您就准备就绪,可以开始了。

答案2

那些是 4k 驱动器吗? 是的,你可以看到他们报告了 4096 字节物理空间,这是这个指标。512 字节逻辑空间报告是驱动器制造商试图向后兼容的结果(因此会造成混淆)。

gpart ?在您的情况下,我将使用以下命令来对磁盘进行 gpart:

# -- Force ashift to be at least 12
sysctl vfs.zfs.min_auto_ashift=12;

# -- Create GPT tables
gpart create -s gpt ada0 &&
gpart create -s gpt ada1 &&
gpart create -s gpt ada2;

# -- Create paritions, align start/stop to 1 MiB boundaries
gpart add -a 1m -t freebsd-zfs -l disk0 ada0 && 
gpart add -a 1m -t freebsd-zfs -l disk1 ada1 && 
gpart add -a 1m -t freebsd-zfs -l disk2 ada2;

# -- Not needed under FreeBSD 10.1 but sometimes is on
#    older versions to get /dev/gpt to update.
#    Run if you don't see /dev/gpt/disk0 etc devices:
true > /dev/ada0; true > /dev/ada1; true > /dev/ada2;

# -- Create temporary GNOP 4k devices
gnop create -S 4k /dev/gpt/disk0 &&
gnop create -S 4k /dev/gpt/disk1 &&
gnop create -S 4k /dev/gpt/disk2;

# --  Create the zpool
zpool create -f -m /mnt zstorage raidz /dev/gpt/disk0.nop /dev/gpt/disk1.nop /dev/gpt/disk2.nop;

# -- Export
zpool export zroot;

# -- Remove temproary GNOP devices
gnop destroy /dev/gpt/disk0.nop &&
gnop destroy /dev/gpt/disk1.nop &&
gnop destroy /dev/gpt/disk2.nop;

# -- Bring back pool with "real" devices
zpool import -d /dev/gpt zstorage;

# -- Check status
zpool status;

# -- Verify ashift is 12
zdb | grep ashift

据我们所知或所见,gpart-ing 不会造成任何性能损失或缺陷。多年来,我们已经在数十个生产地点部署了该技术。它还具有以下优势:

  • 您可以标记(-l)分区(即 disk0、disk1),这样您就知道哪个磁盘是哪个,即使它们的端口号发生变化(即 ada0 可能并不总是 disk0)。 gpart show -l将显示带有这些标签的 GPT 表。
  • 虽然不适用于您,但它可以让您从 ZFS 启动,并且在同一磁盘上拥有交换分区(即使用 GMIRROR)。
  • 由于 1 MiB 对齐,磁盘末尾会留出少量可用空间,因为您的分区四舍五入为 1 MiB。这样可以避免更换其他供应商的驱动器后,驱动器变得非常小而无法使用的情况。

您还会注意到,上面要做的第一件事是检查sysctl vfs.zfs.min_auto_ashift=12;该值,最后一件事是检查该值。在 ZFS 下,ashift=9 是默认值,适用于 512 字节磁盘,但对于 4k 磁盘,您会看到写入放大和性能损失,效果类似,但不是由于分区错位造成的。我们已经看到,由于未知原因,即使使用 GNOP,ZFS 也不会自动选择 ashift=12,因此这会强制执行此问题。此页面很好地描述了整个过程: http://savagedlight.me/2012/07/15/freebsd-zfs-advanced-format/

调音?取决于您的工作量。我们现在在所有新部署中启用 LZ4 压缩,因为事实证明,它在最坏的情况下开销可以忽略不计,而在最好的情况下可以大幅提高可压缩文件的性能。

# -- Set compresison on
zfs set compression=lz4 zstorage;

# -- See compression performance
zfs get used,compressratio,compression,logicalused zstorage;

唯一的“缺点”是,这会影响基准测试,bonnie++当启用此功能时,会报告一些疯狂(非常棒)的数字,这些数字可能无法反映真实世界的性能。dd if=/dev/zero of=test.dat风格基准测试也是如此。

相关内容