设备命名 zfs vs smartctl vs iostat

device naming zfs vs smartctl vs iostat

我正在从 SAN (5.11 omnios-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

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

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

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

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

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

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