我一直试图在这个问题上找到一个直接的答案,但事实证明这是难以捉摸的。这个问题和它的答案是接近,但并没有真正给我,我想细节。让我们从我认为我知道的开始。
如果你有一个标准的块设备并且你运行sudo blockdev --report
你会得到这样的东西:
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 500107862016 /dev/sda
rw 256 512 4096 2048 399999238144 /dev/sda1
rw 256 512 1024 781252606 1024 /dev/sda2
Run Code Online (Sandbox Code Playgroud)
现在,您决定使用--setra
任何分区将默认值 256 更改为 128 ,并且它会发生在整个块设备上,如下所示:
sudo blockdev --setra 128 /dev/sda1
sudo blockdev --report
RO RA SSZ BSZ StartSec Size Device
rw 128 512 4096 0 500107862016 /dev/sda
rw 128 512 4096 2048 399999238144 /dev/sda1
rw 128 512 1024 781252606 1024 …
Run Code Online (Sandbox Code Playgroud) 自从我安装了一些新硬件后,我一直在 syslog 中收到这些神秘消息,但我无法弄清楚问题是什么,是否严重,或者如何处理。
它们来自新的 SATA HBA,并且遵循一种模式。5-30 秒后,我将收到几条第一条消息,然后是几条第二条消息。它们出现在同一秒内全部记录的 blob 中,每个 blob 的确切数量在大约 2 到 35 之间变化。条目出现之间可能是几分钟或几小时。
两条消息的示例:
Jul 13 06:06:23 durandal kernel: [366918.435596] mpt2sas0: log_info(0x31120303): originator(PL), code(0x12), sub_code(0x0303)
Jul 13 06:06:28 durandal kernel: [366923.145524] mpt2sas0: log_info(0x31110d01): originator(PL), code(0x11), sub_code(0x0d01)
Run Code Online (Sandbox Code Playgroud)
它始终是 0x31120303 后跟 0x31110d01。
mpt2sas 是我正在使用的 SATA 主机总线适配器的驱动程序,但错误内容过于神秘。它没有告诉我问题是什么,它是什么磁盘或端口,或者它有多严重。
Supermicro X9SCL配备至强 E3-1220和 8GB 内存。
基于 LSI SAS2008 的 Supermicro AOC-USAS2-L8I SAS/SATA HBA 连接到 Supermicro CSE-M35T-1B磁盘托盘组。它插入了三个 Western Digital WD30EZRX和两个Segate ST3000DM001。所有 3TB 驱动器(实际上完全相同的扇区数)。没有使用端口扩展器。
HBA、磁盘托盘和 4 个驱动器是新的。其中一台 …
我正在运行一个不受管理的 Ubuntu 服务器,由于最近的性能问题,我向提供商发送了一个请求,但只收到以下响应:
“亲爱的客户,
根据要求,我们检查了您的驱动器。两个驱动器都通过了测试,没有任何错误,这里没有显示任何临界值。我们注意到 RAID 处于降级状态,因此您需要在此处将驱动器重新添加到阵列:
-----------------%<-----------------
Personalities : [raid1]
md3 : active raid1 sda4[0]
1839089920 blocks super 1.2 [2/1] [U_]
md2 : active raid1 sda3[0]
1073610560 blocks super 1.2 [2/1] [U_]
md1 : active raid1 sda2[0]
523968 blocks super 1.2 [2/1] [U_]
md0 : active raid1 sda1[0]
16768896 blocks super 1.2 [2/1] [U_]
unused devices: <none>
-----------------%<-----------------"
Run Code Online (Sandbox Code Playgroud)
Google 表示 U_ 表示驱动器出现故障,这似乎与支持人员所说的相矛盾。我如何从这里开始?
就像是
mdadm /dev/mdX -r /dev/sdaY
mdadm /dev/mdX -a /dev/sdaY
Run Code Online (Sandbox Code Playgroud)
如果是这样,对于我的情况,X 和 Y 是什么?如果需要有关我的配置的更多信息,请告诉我。
编辑,更多信息如下:
root@Ubuntu-1204-precise-64-minimal /home # …
Run Code Online (Sandbox Code Playgroud) 我最近在 Linux 上使用mdadm
. 将新 HDD 添加到 RAID 1 时,数据开始在我的驱动器之间同步,这是预期的。我没想到它开始同步整个驱动器,包括未使用的空间。HDD 为 6\xc2\xa0TB,只有大约 1\xc2\xa0TB 的数据,因此花费的时间比预期要长。为什么MD要同步未使用的空间?
我目前正在处理由 RAID-5md
设备备份的 Linux LVM 卷组上的多磁盘故障。一个磁盘已被完全取出,另一个磁盘显示有限数量的损坏扇区,原因是电源似乎出现了异常。
问题是一旦发生 I/O 错误,md
阵列就会关闭,因为它没有足够的设备来运行。在md
唯一涉及的地方,我可以mdadm --stop
创建阵列,然后重新创建它以使所有设备再次处于活动状态。
不幸的是,该阵列是 LVM 卷组中的 PV,我似乎无法让内核释放它。vgchange -an
似乎没有做任何事情,酒吧吐出几个 I/O 错误。
我显然遗漏了一些东西,但是如何以-insert-favorite-deity-的名义让 LVM 在不重新启动服务器的情况下释放底层 PV ?
我正在尝试找出要在 RAID10 阵列上设置的正确预读值,我想知道 RAID 条带大小是否应纳入我的考虑因素。
我过去听说过关于此的相互矛盾的信息。我曾经听说您应该始终将预读值设置为 RAID 条带大小的倍数,并且永远不要低于条带大小,因为这是 RAID 控制器尝试一次读取的最小数据量。
然而,其他人告诉我,将预读设置为低于条带大小很好,并且实际上可以增加您可以跨阵列中的设备执行的并行读取量,从而提高性能并减少阵列上的负载。
那么它是哪个?不是条带大小倍数的预读设置是否有意义?
为什么建议在 MD RAID (mdadm) 中禁用每个磁盘的 NCQ?echo 1 > /sys/block/sdX/device/queue_深度
我在许多有关 RAID 调整的文章中读到过此提示,但没有人解释原因。
全新安装的 Ubuntu Server 13.10 (x64) 从位于 md+lvm 的根卷启动时遇到问题。我现在已经找到了一个解决方案,但我想更多地了解正在发生的事情以及可能有哪些更好的解决方案。
由于这台机器的目标是试验 Xen(为了更好地了解商业虚拟机托管),所以这台机器是由我手头的零件组装而成的,具体来说:Q6600 + Asus P5QL Pro、1 TB 和 500 GB SATA 磁盘(尽管 500 GB 光盘仍在其他地方使用,但稍后会添加。)
1TB 磁盘有三个分区:sda1 与 500 GB 磁盘上的 sdb1 大小相等,sda2 是交换区,其余在 sda3 中。md0 是由 sda1+sdb1 组成的 RAID1 卷[1],是 LVM 可用的一个 PV。
Ubuntu 安装在这个 VG (vg_mir) 中的两个 LV(dom0_root 和 dom0_homes)中,/boot 位于 dom0_root 中。
在光盘初始化后,特定问题立即显示为以下消息:
kernel: [ 3.003506] md: bind<sda1>
kernel: [ 3.007705] md/raid1:md0: active with 1 out of 1 mirrors
kernel: [ 3.007768] md0: detected capacity change from 0 to …
Run Code Online (Sandbox Code Playgroud) 我正在尝试自动执行现有 Ubuntu 安装的重新安装过程。
分区布局:
我想要完成的是:
最重要的是保留现有 PV 上的数据。我能够通过在 lvm.conf 中设置一个过滤器来实现这一点,它排除了所有块设备,因此禁用了 lvm 支持。
问题是安装后我必须重新创建/dev/md/2,希望数据完好无损。
配置的预置部分是:
d-i partman/early_command string sed 's/filter\ =\ \[\ "a\/.*\/\"\ \]/filter\ =\ \[\ "r\/.*\/\"\ \]/g' -i /etc/lvm/lvm.conf
d-i partman-auto-raid/recipe string \
1 2 0 swap - /dev/sda1#/dev/sdb1 .\
1 2 0 ext3 / /dev/sda2#/dev/sdb2 .
d-i partman-auto/expert_recipe string \
multiraid :: \
2000 10 2000 raid $primary{ } …
Run Code Online (Sandbox Code Playgroud) 本文指出 RAID 控制器对不可恢复的读取错误很聪明,并尝试使用组件驱动器的冗余来重写此类扇区。如果扇区坏了,磁盘的固件会透明地重新分配扇区。
Linux MD RAID 做类似的事情吗?也许我的 Google-Fu 不好,但我找不到任何关于它的信息。