令我惊讶的是,CentOS 7 安装程序允许我创建一个 RAID0 设备,其中包含大约 17 GB 磁盘和 26 GB 磁盘。我预计即使允许,逻辑大小也将是2 * min(17 GB, 26 GB) ~= 34 GB. 但我确实可以在文件系统级别看到 44 GB 的可用大小:
$ cat /sys/block/md127/md/dev*/size
16955392
26195968
$ df -h |grep md
/dev/md127 44G 1.9G 40G 5% /
Run Code Online (Sandbox Code Playgroud)
与磁盘相同的情况相比,md 子系统的性能表现如何?因为不可能在 2 个磁盘上进行简单的平衡条带化。
我想在 mdadm raid1 设置中使用两个 3 TB 驱动器(使用 Debian Sequeeze)。
这些驱动器使用 4k 硬件扇区而不是传统的 512 字节扇区。
我有点困惑,因为一方面内核报告:
$ cat /sys/block/sdb/queue/hw_sector_size
512
Run Code Online (Sandbox Code Playgroud)
但另一方面fdisk报告:
# fdisk -l /dev/sdb
Disk /dev/sdb: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Run Code Online (Sandbox Code Playgroud)
因此,内核似乎认为驱动器使用 4k 扇区。
该mdadm男子网页是关于块大小和RAID1有点神秘:
Run Code Online (Sandbox Code Playgroud)-c, --chunk= Specify chunk size of kibibytes. The default when …
我正在尝试为(不断增加)数量的相同服务器编写 RAID 设置脚本。我所看到的使用 mdadm 的建议表明,一旦创建了 RAID 阵列,您就可以运行,mdadm --examine --scan >> /etc/mdadm.conf以便在启动时初始化阵列。但这似乎对我不起作用 - 特别是数组显示为/dev/md/<hostname>:pool,其中mdadm --examine输出/dev/md/pool.
难道我做错了什么?我的 mdadm 版本有什么奇怪的吗?
[root@positron /]# mdadm --create /dev/md0 --level=0 --name=pool --raid-devices=6 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
[root@positron /]# mdadm --examine --scan
ARRAY /dev/md/pool metadata=1.2 UUID=567da122:fb8e445e:55b853e0:81bd0a3e name=positron:pool
[root@positron /]# ls /dev/md/*
/dev/md/md-device-map /dev/md/positron:pool
[root@positron /]# cat /dev/md/md-device-map
md127 1.2 22a17d56:5e448efb:e053b855:3e0abd81 /dev/md/positron:pool
[root@positron /]# mdadm --version
mdadm - v3.1.3 - 6th August 2010
Run Code Online (Sandbox Code Playgroud) 我相当随机地检查了我的 RAID 阵列的状态cat/proc/mdstat并意识到,我的一个阵列似乎正在重新同步:
md1 : active raid1 sdb7[1] sdc7[0]
238340224 blocks [2/2] [UU]
[==========>..........] resync = 52.2% (124602368/238340224) finish=75.0min speed=25258K/sec
Run Code Online (Sandbox Code Playgroud)
这是为什么?它是什么意思?我似乎可以通过权限访问挂载点r/w。
编辑 1(响应SLM 的 ANSWER)
如果我grep通过dmesg,我真的看不到任何东西,而且--detail开关也没有告诉我太多信息,即它显示重新同步正在进行中......但没有提示原因或可能不同步的原因.. . - 我想我可能只需要在开始更换硬件之前密切关注它。
我使用 mdadm 在 RAID 1 阵列中有我的 /boot 分区。这个阵列过去降级过几次,每次我移除物理驱动器,添加一个新的,使阵列恢复正常,它使用一个新的驱动器号。将旧的留在阵列中并失败。我似乎无法删除不再存在的所有组件。
[root@xxx ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdg1[10] sde1[8](F) sdb1[7](F) sdd1[6](F) sda1[4] sdc1[5]
358336 blocks super 1.0 [4/3] [UUU_]
Run Code Online (Sandbox Code Playgroud)
这是我尝试删除不存在的驱动器和分区的方法。例如,/dev/sdb1。
[root@xxx ~]# mdadm /dev/md0 -r /dev/sdb1
mdadm: Cannot find /dev/sdb1: No such file or directory
[root@xxx ~]# mdadm /dev/md0 -r faulty
mdadm: Cannot find 8:49: No such file or directory
[root@xxx ~]# mdadm /dev/md0 -r detached
mdadm: Cannot find 8:49: No such file or directory
Run Code Online (Sandbox Code Playgroud)
8:49 …
我使用 GPT 作为我的分区方案。我检查我的分区的 UUID:
# ls -l /dev/disk/by-partuuid/
total 0
lrwxrwxrwx 1 root root 10 Oct 18 22:39 0793009a-d460-4f3d-83f6-8103f8ba24e2 -> ../../sdb3
lrwxrwxrwx 1 root root 10 Oct 18 22:39 13f83c47-ad62-4932-8d52-e93626166e7f -> ../../sdc3
lrwxrwxrwx 1 root root 10 Oct 18 22:39 1b247b1f-0b7b-419e-bc3b-0f90cbadb87c -> ../../sdc2
lrwxrwxrwx 1 root root 10 Oct 18 22:39 224d5933-7a23-4833-b785-79a67c9b9306 -> ../../sda1
lrwxrwxrwx 1 root root 10 Oct 18 22:39 2ff625b2-b96b-4ce5-b752-57cdf7092258 -> ../../sda3
lrwxrwxrwx 1 root root 10 Oct 18 22:39 449956f9-7289-49ed-9a37-ed6be9264d1c -> ../../sdb1
lrwxrwxrwx 1 root root …Run Code Online (Sandbox Code Playgroud) 我的局域网上有一台 Debian 机器作为其他机器的备份服务器。它有四个硬盘驱动器组合成一个软件 RAID 5 md 设备,在那个 LVM 上,在那个 btrfs 上。使用 rsync 进行备份,对于大型文件系统需要一个多小时。很长一段时间以来,我一直认为我对此无能为力。
然而,最近我注意到传输两端的硬盘活动非常不同。虽然发送端运行 Gentoo 并且主要使用 ext4,几乎没有任何磁盘 IO,但接收端一直很忙。由于大多数数据不会在传输之间发生变化,我认为元数据读取应该构成大部分数据。但是,如果在 btrfs 中读取 inode 比在 ext4 中读取索引节点的工作量大,我会感到非常惊讶。
iotop 确认接收端的磁盘读取速度约为 1-4 MB/s,而发送端只有偶尔的 0.5 MB/s 突发。
我的问题是,谁能解释一下这里发生了什么?如果可能的话,最好有一些如何解决问题的指示。
也许我可以使用一些 btrfs 调整标志或类似的东西。我在备份服务器上需要一个具有快照功能的 FS,而我尝试使用 FreeBSD 和 ZFS 很快就会导致 FS 不一致,所以我目前看不到 btrfs 的替代品。因此,告诉我使用 ext4 或 zfs 的答案可能会收到赞成票但没有复选标记。
--rsync-path='rsync --fake-super'
--archive # -rlptgoD
--hard-links # detect and preserve these
--acls
--xattrs
--sparse
--noatime # based on patch from samba #7249c1 …Run Code Online (Sandbox Code Playgroud) 我最初使用一个控制器创建了一个软件 RAID,每个磁盘只能处理 2TB。磁盘为 3 TB 磁盘。它运行良好,但只使用了每个磁盘的前 2TB。
我现在已经更改了控制器以查看完整的 3TB。因此,我也想/dev/md0使用最后的 1 TB。
我试过了:
# mdadm --grow /dev/md0 --size=max
mdadm: component size of /dev/md0 has been set to 2147479552K
Run Code Online (Sandbox Code Playgroud)
但正如您所见,它只能看到 2TB。如果我尝试将其强制更高:
# mdadm --grow /dev/md0 --size=2147483648
mdadm: Cannot set device size for /dev/md0: No space left on device
Run Code Online (Sandbox Code Playgroud)
所以不知何故系统可以看到磁盘是 3TB(在/proc/partitions),但 RAID 无法将它们视为 3TB。
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Mar 2 15:14:46 2012
Raid Level : raid6
Array Size : …Run Code Online (Sandbox Code Playgroud) 是否可以使用mdadm及其扫描功能组装特定的 RAID 阵列,但不需要配置文件?
背景:
我使用定制的 initramfs 来设置我的系统(dm-crypt 和其他东西)。一切都在 init 脚本中完成和配置,这就是我想要保留它的方式,即没有任何额外的配置文件。
我的目标:
在 init 脚本中,我想仅使用命令行来组装一个特定的 RAID 阵列。该阵列通过其 UUID 进行标识,给出了 md 设备名称,并应扫描阵列成员(因为例如连接的 USB 记忆棒或故障设备会弄乱 /dev/sdX 名称)。所有其他设备和潜在的 RAID 阵列都将被忽略,因为在引导期间只有一个阵列是感兴趣的(携带根文件系统)。
彻底阅读 mdadm 的手册页并执行了几个测试,我想出了这个:
mdadm --assemble --uuid <uuid> /dev/md0
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但这是正确的方法吗?
来自手册页:
如果只列出了一个设备,但没有给出 --scan,那么 mdadm 就像提供了 --scan 一样,并从配置文件中提取了身份信息。
所以我有一个带两个硬盘的 RAID 1。一个硬盘出现故障,然后我更换了它,并在这个新硬盘上重新安装了一个全新的 Linux。
现在如果我输入 fdisk -l 我得到:
root@ns354729:/mnt/sdb2# fdisk -l
Disk /dev/sda: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders, total 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xbb5259be
Device Boot Start End Blocks Id System
/dev/sda1 * 4096 1495042047 747518976 83 Linux
/dev/sda2 1495042048 1496088575 523264 82 Linux swap / Solaris
Disk /dev/sdb: …Run Code Online (Sandbox Code Playgroud)