启用丢弃 HP 3PAR StoreServ 7400

启用丢弃 HP 3PAR StoreServ 7400

从这些先前提出的问题中衍生出来

如何从已安装的驱动器 Redhat 7 获取可用空间

更新 crypttab 要求输入 fstrim 的密码

我们有一台 HP 3PAR StoreServ 7400,其 170 个 VM 分布在 38 台主机上。

这是我所理解的问题:(此外,我还被告知了一些信息,但我不确定它们是否属实,我已经阅读了 HP 3PAR StoreServ 7400 白皮书,但确实找不到任何可以支持我的存储人员告诉我的内容的东西。因此,如果有人在下面发现任何不真实的内容,请告诉我。)

3 PAR 分为三个部分,

第 1 层:SSD 用于缓存和快速访问常访问的文件。

第 2 层:和第 3 层:某种旋转的磁盘,我不确定这是什么以及为什么会有另外的 2 层,但我的假设是第 2 层用于存储不常访问但访问一点的数据,第 3 层用于存储其余数据。

在 SSD 部分,正如我在许多文章中读到的那样,当数据写入 SSD 块然后被删除时,该块不会清零,直到有新数据写入其中,因此当块内的数据被删除时,存储映射信息的表会更新,然后当新数据写入同一个块时,首先需要将该块清零,然后才能写入。如果驱动器没有定期修剪,则 SSD 中的此过程可能会导致较低的读写速度。

3PAR LUN 是精简配置的,而 VM 是急切厚配置的。

据我的存储人员介绍,3PAR 具有内置的特殊功能,可以让未使用的 SSD 存储在需要时供其他 VM 使用,这是没有意义的。

事实核查:

厚配置虚拟机是 VMDK 文件,创建虚拟机时指定虚拟机的大小,然后创建一个 VMDK 文件。在我看来,这告诉我,如果定期访问虚拟机,整个 VMDK 文件就会移动到 SDD,他们告诉我的是,即使 VMDK 设置为使用 40GB,其中的一部分 40GB 也可以在其他虚拟机上使用?这听起来更像是精简配置虚拟机,而不是厚配置虚拟机。

好的,找到问题了。

在我们的 Windows 系统上,我们使用 sdelete 来查找和清零未使用的块。

在我们的 Linux Fedora 系统上,我一直在尝试弄清楚如何让 fstrim 工作。

我确实尝试了 dd=write-big-file delete-big-file 命令,这导致磁盘 I/O 急剧增加,这一点被注意到了,并且我被告知不要再这样做了。

经过一番研究,我发现 sdelete 与 dd=write-big-file delete-big-file 的作用基本相同,那么为什么磁盘 I/O 在 Windows 系统上不会急剧增加呢?

所以我认为我已经将其缩小到两个解决方案。但我都不知道如何做。

  1. 无需将虚拟机通过 v-motion 移至不同的存储阵列,即可在 SAN 的整个 SSD 部分运行类似 fstrim 的功能。

附注:如果我理解我所读到的所有内容,fstrim 会查看每个块以查看是否存在数据以及是否需要数据,如果不需要,则会将块清零,而 sdelete 会写入一个大文件然后将其删除。这就是为什么我要寻找一个适用于 3PAR 整个 SSD 部分的 fstrim 选项。

  1. 但我使用 fstrim 时得到的错误是:

[root@rhtest ~]# fstrim -v / fstrim: /: 不支持丢弃操作

我已经读到需要在操作系统和数据存储上设置丢弃选项,但是我无法弄清楚在哪里或如何在 3PAR 上设置丢弃选项,我可以通过 SSH 和 GUI 访问 3PAR。

我已进行过无数次在操作系统中设置丢弃的演练,但无论我以多少种不同的方式旋转它,我总是会遇到相同的错误。

是的,我也研究过其他选项,zerofree 就是其中之一,还有其他几个我想不起来了,但它们要么像 zdelete 一样工作,要么我读到它们非常危险,我研究了 hdparam 等。

下面我将给出一些有关所讨论的操作系统的输出,它们都是相同的。

[root@rhtest ~]# hostnamectl
    Static hostname: rhtest.domain.com
    Icon name: computer-vm
    Chassis: vm
    Machine ID: f52e8e75ae704c579e2fbdf8e7a1d5ac
    Boot ID: 98ba6a02443d41cba9cf457acf5ed194
    Virtualization: vmware
    Operating System: Red Hat Enterprise Linux Server 7.2 (Maipo)
    CPE OS Name: cpe:/o:redhat:enterprise_linux:7.2:GA:server
    Kernel: Linux 3.10.0-327.el7.x86_64
    Architecture: x86-64

[root@rhtest ~]# blkid
    /dev/block/8:2: UUID="2OHGU8-ir1w-LLGB-6v72-zZqN-CIaX-FjGImJ" TYPE="LVM2_member"
    /dev/block/253:1: UUID="ad872f09-5147-4252-af56-aa6244219515" TYPE="xfs"
    /dev/block/8:1: UUID="83aac355-a443-4ff9-90fa-9f6da8e31cc2" TYPE="xfs"
    /dev/block/253:0: UUID="dbe56f6a-2a4a-42da-82e2-bef9a73caafb" TYPE="swap"

[root@rhtest ~]# lsblk
    NAME                           MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    fd0                              2:0    1    4K  0 disk
    sda                              8:0    0   50G  0 disk
    ââsda1                           8:1    0  500M  0 part /boot
    ââsda2                           8:2    0 49.5G  0 part
        âârhel_-rhtest-swap 253:0    0    2G  0 lvm  [SWAP]
        âârhel_-rhtest-root 253:1    0 47.5G  0 lvm  /
    sdb                              8:16   0   50G  0 disk
    sr0                             11:0    1 1024M  0 rom


[root@rhtest ~]# df -h
    Filesystem                              Size  Used Avail Use% Mounted on
    /dev/mapper/rhel_-rhtest-root   48G  883M   47G   2% /
    devtmpfs                                991M     0  991M   0% /dev
    tmpfs                                  1001M     0 1001M   0% /dev/shm
    tmpfs                                  1001M  8.5M  993M   1% /run
    tmpfs                                  1001M     0 1001M   0% /sys/fs/cgroup
    /dev/sda1                               497M  124M  374M  25% /boot
    tmpfs                                   201M     0  201M   0% /run/user/0

答案1

能够在 / 分区上运行 fstrim 将是最好的解决方案,但是由于您的 ESXi 配置方式,这是不可能的。

您需要能够在虚拟机和存储设备上启用丢弃。

尝试使用 xfs 文件系统缩小分区或逻辑卷的大小是无法完成的,这是 Fedora 的一个已知错误。如果您对该功能感兴趣,请联系 Red Hat 支持并参考 Red Hat bugzilla 1062667,并提供需要 XFS 缩小/收缩的用例。

在某些环境中,作为一种可能的解决方法,可以将精简配置的 LVM 卷视为 XFS 文件系统下方的附加层。

如果虚拟机是急切厚配置的 VMDK,这意味着当您尝试修剪(技术上讲;SCSI UNMAP)卷时没有什么可回收的。

如果后端存储正在运行精简配置,那么您还需要使用延迟清零 VMDK 文件以减少存储并使后端能够缓存/重复数据删除热数据。

两种可能的选择:

1. When storage is provided by a remote server across a SAN, you can only discard blocks if the storage is thin provisioned.

    1. VMotion all the VM's to a different data store and use the built-in VMWare tools
    2. Connect to the ESXi Host with SSH
    3. Navigate to the Virtual Machine Folder
    4. Verify disk usage with du
    5. Run vmkfstools -K [disk]
    6. Verify disk usage with du

2.  dd if=/dev/zero of=BIGFILE bs=1024000
    rm -f BIGFILE

据我所知,它的作用与 sdelete 相同,但是它会导致磁盘 I/O 激增,并且需要一段时间才能运行。

过夜可以尝试的东西

任何一个选项都不是最好的,但重新格式化每个虚拟机以获取 ext3 或 ext4 听起来不可行。

您可以做的是为所有 Linux VM 设置亲和性规则并使用上面的选项 1。

答案2

您正在使用急切厚配置的 VMDK,这意味着当您尝试修剪(技术上讲;SCSI UNMAP)卷时没有任何内容可回收。

如果后端存储运行精简配置,那么您还需要使用懒惰的将 VMDK 文件清零,以减少存储,并使后端能够缓存/重复数据删除热数据。

相关内容