md raid1 ext3 和 4k 扇区因目录操作而变慢

md raid1 ext3 和 4k 扇区因目录操作而变慢

我最近从硬件 RAID1 外壳转向使用两个带 md 的 eSATA 驱动器。一切似乎都工作正常,除了目录遍历/列表有时会爬行(大约需要 10 秒)。我使用的是 ext3 文件系统,块大小设置为 4K。

以下是一些应该很重要的命令的相关输出:

mdadm --详细信息:

/dev/md127:
        Version : 1.2
  Creation Time : Sat Nov 16 09:46:52 2013
     Raid Level : raid1
     Array Size : 976630336 (931.39 GiB 1000.07 GB)
  Used Dev Size : 976630336 (931.39 GiB 1000.07 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Tue Nov 19 01:07:59 2013
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

         Events : 19691

    Number   Major   Minor   RaidDevice State
       2       8       17        0      active sync   /dev/sdb1
       1       8        1        1      active sync   /dev/sda1

fdisk -l /dev/sd{a,b}:

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0xb410a639

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048  1953525167   976761560   83  Linux

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes, 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x261c8b44

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048  1953525167   976761560   83  Linux

时间 dumpe2fs /dev/md127 |grep 大小:

dumpe2fs 1.42.7 (21-Jan-2013)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_file
Block size:               4096
Fragment size:            4096
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Journal size:             128M

real    2m14.242s
user    0m2.286s
sys     0m0.352s

据我了解,这些驱动器上有 4K 扇区(最近的 WD 红色),但分区/文件系统似乎正确对齐。因为看起来我正在使用 md 元数据版本 1.2,所以我认为我也很好(基于mdadm raid1 以及 4k 驱动器上的块大小(或块大小)是多少?)。我在网上没有找到答案的一件事是 inode 大小为 256 是否会导致问题。并非所有操作都很慢,缓冲区缓存似乎在保持事物快速运行方面做得很好(正如它应该的那样)。

我的内核版本是3.11.2

编辑:新信息,2013-11-19

mdadm --examine /dev/sd{a,b}1 | grep -i offset
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
    Data Offset : 262144 sectors
   Super Offset : 8 sectors

另外,我挂载文件系统时noatime,nodiratime我并不太愿意过多地处理日志记录,因为如果我足够关心 RAID1,它可能会弄巧成拙。我很想打开目录索引

编辑2013-11-20

昨天我尝试打开 ext3 的目录索引并运行e2fsck -D -f看看是否有帮助。不幸的是,事实并非如此。我开始怀疑这可能是硬件问题(或者 eSATA 上的 md raid1 真的很愚蠢吗?)。我正在考虑将每个驱动器脱机,看看它们单独的表现如何。

编辑2013-11-21

iostat -kx 10 |grep -P "(sda|sdb|设备)":

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.37     1.17    0.06    0.11     1.80     5.10    84.44     0.03  165.91   64.66  221.40 100.61   1.64
sdb              13.72     1.17    2.46    0.11   110.89     5.10    90.34     0.08   32.02    6.46  628.90   9.94   2.55
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

我将输出截断为 0.00%

我真的觉得它应该与 ext4 和 ext3 无关,因为这不仅仅是感觉有点慢,它可能需要几十秒到一分钟的时间,并且需要对选项卡自动完成或运行 ls 进行一些更改

编辑:可能是硬件问题,确认后将关闭问题

我越想越怀疑这是不是我的eSATA卡的问题。我目前正在使用这个:http://www.amazon.com/StarTech-PEXESAT32-Express-eSATA-Controller/dp/B003GSGMPU 然而,我刚刚检查了 dmesg,里面充斥着这些消息:

[363802.847117] ata1.00: status: { DRDY }
[363802.847121] ata1: hard resetting link
[363804.979044] ata2: softreset failed (SRST command error)
[363804.979047] ata2: reset failed (errno=-5), retrying in 8 secs
[363804.979059] ata1: softreset failed (SRST command error)
[363804.979064] ata1: reset failed (errno=-5), retrying in 8 secs
[363812.847047] ata1: hard resetting link
[363812.847061] ata2: hard resetting link
[363814.979063] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 10)
[363814.979106] ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 10)
....
[364598.751086] ata2.00: status: { DRDY }
[364598.751091] ata2: hard resetting link
[364600.883031] ata2: softreset failed (SRST command error)
[364600.883038] ata2: reset failed (errno=-5), retrying in 8 secs
[364608.751043] ata2: hard resetting link
[364610.883050] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 10)
[364610.884328] ata2.00: configured for UDMA/100
[364610.884336] ata2.00: device reported invalid CHS sector 0
[364610.884342] ata2: EH complete

我还将购买较短的屏蔽 eSATA 电缆,因为我想知道是否存在一些干扰。

答案1

这最终成为硬件问题

切换到新的屏蔽电缆没有帮助,但用这个替换旧卡:http://www.amazon.com/gp/product/B000NTM9SY确实摆脱了错误消息和奇怪的行为。如果有任何变化,将发布新内容。

SATA 外壳的重要注意事项:

即使执行上述操作后,只要驱动器闲置一段时间,任何驱动器操作都会非常慢(仅停止 10-30 秒)。我使用的外壳有一个 eSATA 接口,但由 USB 供电。我确定这是因为它没有足够的力量来旋转,所以我尝试了几件事:

  • 使用外部更高电流的 USB 电源(如果端口仅提供最小 500mA 的电流)
  • 禁用自旋hdparm -S 0 /dev/sdX(这极大地缓解了问题,但并没有完全解决)
  • 通过禁用高级电源管理hdparm -B 255 /dev/sdX(同样,没有完全解决)

最终,我发现西部数据有一个用于降低功率旋转的跳线设置 - 专门为此用例而设计!

我使用的硬盘是: WD Red WD10JFCX 1TB IntelliPower 2.5" http://support.wdc.com/images/kb/scrp_connect.jpg

请注意,我仍然在没有所有电源管理和降速功能的情况下运行(仍然-B 255-S 0hdparm 上)。

最终判决

不幸的是,RPS并没有解决我所有的问题,只是降低了幅度和频率。我认为问题最终是由于外壳无法提供足够的电力(即使我使用 AC-USB 适配器)。我最终买了这个外壳:

http://www.amazon.com/MiniPro-eSATA-6Gbps-External-Enclosure/dp/B003XEZ33Y

过去三周内一切都运行顺利。

相关内容