从这些先前提出的问题中衍生出来
我们有一台 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 系统上不会急剧增加呢?
所以我认为我已经将其缩小到两个解决方案。但我都不知道如何做。
- 无需将虚拟机通过 v-motion 移至不同的存储阵列,即可在 SAN 的整个 SSD 部分运行类似 fstrim 的功能。
附注:如果我理解我所读到的所有内容,fstrim 会查看每个块以查看是否存在数据以及是否需要数据,如果不需要,则会将块清零,而 sdelete 会写入一个大文件然后将其删除。这就是为什么我要寻找一个适用于 3PAR 整个 SSD 部分的 fstrim 选项。
- 但我使用 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 文件清零,以减少存储,并使后端能够缓存/重复数据删除热数据。