固态磁盘部署指南

固态磁盘(SSD)是使用NAND闪存芯片持久存储数据的存储设备。这使它们有别于前几代磁盘,前几代磁盘将数据存储在旋转的磁盘上。在SSD中,跨整个逻辑块地址(LBA)范围的数据访问时间是恒定的;而对于使用旋转介质的较旧磁盘,跨越大地址范围的访问模式会招致寻道成本。因此,SSD设备具有更好的延迟和吞吐量。

随着使用的块数接近磁盘容量,性能会下降。 对性能的影响程度因供应商而异。 但是,所有设备都会出现一些性能下降。

为了解决性能下降问题,主机系统(例如,Linux内核)可以使用discard请求来通知存储,不再使用给定范围的块。 SSD可以使用这些信息来释放内部空间,并使用空闲块进行损耗平衡。 仅当存储声明其存储协议(ATA或SCSI)支持时,才会发出discard。 使用特定于存储协议的协商的discard命令(ATA使用TRIM命令,SCSI使用带有UNMAPWRITE SAMEUNMAP命令)向存储发出discard请求。

当满足以下几点时,启用discard支持最有用:

  • 文件系统上仍然有可用空间。
  • 底层存储设备上的大多数逻辑块已写入。

有关TRIM的更多信息,请参阅数据集管理T13规范

有关UNMAP的更多信息,请参见SCSI块命令3 T10规范的4.7.3.4节。

并非市场上所有的固态设备都支持discard。 要确定您的固态设备是否支持,请检查 /sys/block/sda/queue/discard_granularity,它是设备内部分配单元的大小。

部署注意事项

由于SSD的内部布局和操作,最好在内部 erase block boundary上分区设备。 如果SSD导出拓扑信息,则Red Hat Enterprise Linux 7中的分区实用程序选择合理的默认值。 但是,如果设备不导出拓扑信息,则Red Hat建议在1MB边界上创建第一个分区。

根据供应商的选择,固态硬盘有各种类型的TRIM机制。早期版本的磁盘通过降低读命令后可能发生的数据泄漏来提高性能。

以下是TRIM机制的类型:

  • 非确定性TRIM
  • 确定性TRIM(DRAT)
  • TRIM(RZAT)之后确定性读零

前两种TRIM机制可能会导致数据泄漏,因为在TRIM返回不同或相同的数据之后,read命令会被发送到LBA。RZAT在read命令之后返回零,Red Hat建议使用这种TRIM机制来避免数据泄漏。它只在SSD中受影响。选择支持RZAT机制的磁盘。

使用的TRIM机制的类型取决于硬件实现。 要在ATA上找到TRIM机制的类型,请使用hdparm命令。 请参见以下示例以查找TRIM机制的类型:

# hdparm -I /dev/sda |grep TRIM
        *    Data Set Management TRIM supported (limit 4 blocks)
        *    Deterministic read ZEROs after TRIM

有关更多信息,请参见man hdparm

LVM使用的逻辑卷管理器(LVM),设备映射器(DM)目标和MD(软件突袭)目标均支持discards。 唯一不支持discards的DM目标是dm-snapshot,dm-crypt和dm-raid45。 在Red Hat Enterprise Linux 6.1中添加了对dm-mirror的discards支持,从7.0开始,MD支持discards。

如果SSD无法正确处理discard,则在SSD上使用RAID5将导致性能降低。 您可以在raid456.conf文件或GRUB2配置中设置discard。 有关说明,请参阅以下过程。

过程 在raid456.conf中设置discard

devices_handle_discard_safely模块参数在raid456模块中设置。 要在raid456.conf文件中启用discard:

  1. 验证硬件是否支持discard:

    # cat /sys/block/disk-name/queue/discard_zeroes_data
    

    如果返回值为1,则支持discard。 如果命令返回0,则RAID代码必须将磁盘输出清零,这需要更多时间。

  2. 创建**/etc/modprobe.d/raid456.conf**文件,并包含以下行:

    options raid456 devices_handle_discard_safely=Y
    
  3. 使用dracut -f命令重建初始ramdisk(initrd)。

  4. 重新启动系统以使更改生效。

过程 在GRUB2配置中设置discard

devices_handle_discard_safely模块参数在raid456模块中设置。要在GRUB2配置中启用discard,请执行以下操作:

  1. 验证硬件是否支持discard:

    # cat /sys/block/disk-name/queue/discard_zeroes_data
    

    如果返回值为1,则支持discard。 如果命令返回0,则RAID代码必须将磁盘输出清零,这需要更多时间。

  2. 将以下行添加到/etc/default/grub文件中:

    raid456.devices_handle_discard_safely=Y
    
  3. 在使用BIOS固件的系统和使用UEFI的系统上,GRUB2配置文件的位置不同。使用以下命令之一重新创建GRUB2配置文件。

    • 在使用了BIOS固件的系统上,使用:
    # grub2-mkconfig -o /boot/grub2/grub.cfg
    
    • 在使用了UEFI固件的系统上,使用:

      # grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
      
  4. 重新启动系统以使更改生效。

在Red Hat Enterprise Linux 7中,仅ext4和XFS文件系统完全支持discard。

在Red Hat Enterprise Linux 6.3和更早版本中,仅ext4文件系统完全支持discard。 从Red Hat Enterprise Linux 6.4开始,ext4和XFS文件系统都完全支持discard。 要在设备上启用discard命令,请使用mount命令的discard选项。 例如,要在启用discard的情况下将/dev/sda2挂载到/mnt,请使用:

# mount -t ext4 -o discard /dev/sda2 /mnt

缺省情况下,ext4不会发出discard命令,主要是为了避免在可能未正确实现discard的设备上出现问题。 Linux swap代码向以启用discard的设备发出discard命令,并且没有控制该行为的选项。

性能调优注意事项

有关固态磁盘性能调整注意事项的信息,请参阅《 Red Hat Enterprise Linux 7性能调整指南》中的“固态磁盘”部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值