zfs - 设备命名 zfs vs smartctl vs iostat

标签 zfs iostat omnios

我正在努力从 SAN (5.11omnios-7648372) 收集性能指标数据。 我们使用 JBOD 上的数据。

zdb -C mypoolname 输出的片段:

children[0]:
    type: 'disk'
    id: 0
    guid: 7701924650939559899
    path: '/dev/dsk/c1t0d0s0'
    devid: 'id1,sd@n5000c5004cce9b53/a'
    phys_path: '/pci@0,0/pci8086,25f7@2/pci8086,350c@0,3/pci1000,3030@1/sd@0,0:a'
    whole_disk: 1
    DTL: 599
    create_txg: 4

关注“路径”部分,它说“/dev/dsk/c1t0d0s0”我假设设备名称是 c1t0d0s0 并且它与 smartctl“匹配”...除非 smart ctl 说路径是/dev/rdsk/c1t0d0s0

但是“iostat -extnc 3 1”以不同的方式命名设备:c1t0d0

请告诉我为什么他们三个没有在同一台设备上使用相同的名称?

最佳答案

zdb 向您显示 ZFS 在内部使用来寻址设备的路径,这是 /dev 文件系统中的路径,允许访问 block 设备文件。 (顺便说一句,zdb 主要用作调试工具,并且不保证其打印的任何内容具有向后兼容性。)它使用 disk slice 进行寻址。后缀 s0,这就是出现在这些列表中的原因。我认为磁盘片与分区基本相同。当您使用 ZFS 时,切片 0 通常是整个磁盘,因为当您将整个设备添加到 zpool 中时,ZFS 会自动为您格式化该设备,并且它只需要/创建一个切片。但是,也可以仅将磁盘的单个分区添加到 zpool 中(或者更愚蠢的是,将同一驱动器上的多个分区作为单独的 vdevs),因此 ZFS必须跟踪它实际控制的分区。

iostat 仅显示设备名称,没有 /dev 路径或切片编号。这是因为 iostat 不了解切片,它在收集数据时仅查看实际设备。

我不知道smartctl怎么了。我希望它能够像 iostat 一样在设备级别工作,但也许它是通过 ZFS 获取传递给它的数据,ZFS 使用切片编号。对我来说,这似乎是一个错误,因为理想情况下,您会在它们所属的最小故障域中报告错误,在本例中是磁盘。 (尽管至少它很容易解决。)

关于zfs - 设备命名 zfs vs smartctl vs iostat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50530424/

相关文章:

postgresql - Postgres 创建/恢复在亚马逊 ec2 上花费大量时间

javascript - 在 Node.js 程序上使用 DTrace 时没有函数名称

docker - 如何清理Docker ZFS旧共享

filesystems - ZFS 能否在 OpenSolaris 中镜像整个硬盘驱动器?

linux - ZIL 在单个 SSD 上工作的风险

linux - 备份 ZFS 池元数据

perl - 如何让 iostat 表现得像 top

linux - 系统范围的 I/O 统计