我正在安装一台备份服务器,该服务器在其 NVMe 磁盘上安装并运行 Debian10。它还有 4x6TB SATA 硬盘,我正在尝试将它们设置为 RAID0 阵列。
我通常会遵循这里的解释: https://www.digitalocean.com/community/tutorials/how-to-create-raid-arrays-with-mdadm-on-debian-9 它对我来说在 Debian9 中总是有效的。
症状是当我重新启动服务器时我的 RAID0 阵列消失了。
/var/log/syslog 中的错误内容如下:
dev-md3.device: Job dev-md3.device/start timed out.
Timed out waiting for device /dev/md3.
Dependency failed for /mnt/md3.
mnt-md3.mount: Job mnt-md3.mount/start failed with result 'dependency'.
dev-md3.device: Job dev-md3.device/start failed with result 'timeout'.
我的RAID0设置过程如下:
$ sudo mdadm --version
mdadm - v4.1 - 2018-10-01
$ sudo lsblk -o 名称、大小、文件系统类型、类型、挂载点
NAME SIZE FSTYPE TYPE MOUNTPOINT
sda 5.5T disk
sdb 5.5T disk
sdc 5.5T disk
sdd 5.5T disk
nvme0n1 477G disk
├─nvme0n1p1 511M vfat part /boot/efi
├─nvme0n1p2 476G ext4 part /
├─nvme0n1p3 511M swap part [SWAP]
└─nvme0n1p4 1M iso9660 part
$ sudo mdadm --create --verbose /dev/md3 --level=0 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
mdadm: chunk size defaults to 512K
mdadm: partition table exists on /dev/sda
mdadm: partition table exists on /dev/sda but will be lost or
meaningless after creating array
mdadm: partition table exists on /dev/sdb
mdadm: partition table exists on /dev/sdb but will be lost or
meaningless after creating array
mdadm: partition table exists on /dev/sdc
mdadm: partition table exists on /dev/sdc but will be lost or
meaningless after creating array
mdadm: partition table exists on /dev/sdd
mdadm: partition table exists on /dev/sdd but will be lost or
meaningless after creating array
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md3 started.
$ sudo cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md3 : active raid0 sdd[3] sdc[2] sdb[1] sda[0]
23441561600 blocks super 1.2 512k chunks
unused devices: <none>
$ sudo mkfs.ext4 -F /dev/md3
mke2fs 1.44.5 (15-Dec-2018)
/dev/md3 contains a ext4 file system
last mounted on Sat Dec 21 10:42:04 2019
Creating filesystem with 5860390400 4k blocks and 366274560 inodes
Filesystem UUID: f8f61563-66ab-4cc6-9876-7f6160c43853
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000, 550731776, 644972544, 1934917632,
2560000000, 3855122432, 5804752896
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
$ sudo mkdir -p /mnt/md3
$ sudo mount /dev/md3 /mnt/md3
$ sudo df -h -x devtmpfs -x tmpfs
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p2 469G 2.5G 443G 1% /
/dev/nvme0n1p1 510M 5.1M 505M 1% /boot/efi
/dev/md3 22T 24K 21T 1% /mnt/md3
此时我的 RAID0 已启用,我可以使用它。现在(尝试)将上述内容保存到永久设置中:
# mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
ARRAY /dev/md3 metadata=1.2 name=xxxxx:3 UUID=71ca2d63:66f64678:02822188:2c2881ba
# 回显‘/dev/md3 /mnt/md3 ext4 defaults,nofail,discard 0 0’ | sudo tee -a /etc/fstab
/dev/md3 /mnt/md3 ext4 defaults,nofail,discard 0 0
/etc/mdadm/mdadm.conf 的实际内容(不含注释):
HOMEHOST <system>
MAILADDR root
ARRAY /dev/md3 metadata=1.2 name=xxxxx:3 UUID=71ca2d63:66f64678:02822188:2c2881ba
现在,如果我重新启动,RAID0 阵列就不存在了,并且我在系统日志中看到了我在这篇文章中提到的错误
更新
尝试使用 RAID10 进行同样的操作--level=10
,结果相同
答案1
你所做的一切看起来都完全正确。partition table exists on /dev/sd[abcd] but will be lost or meaningless after creating array
不过,那些消息令人担忧。
这只是猜测——但我认为可能发生的情况是这些驱动器上有一个 GUID 分区表。创建 RAID 0 时,MD 元数据位于驱动器的前面,从而破坏了那里的分区表。但是,驱动器的末尾存储了分区表的备份副本。我猜系统每次启动时都会从备份副本中恢复。使用 RAID 0,没有初始同步。它只是接受驱动器上的数据。
尝试先清除驱动器上的分区表wipefs -a /dev/sd[abcd]
。然后使用您的程序创建阵列。
答案2
在我的情况下,需要新的 initramfs 文件。我将 Debian 9 安装移至软件 raid1 以实现冗余,并且之前从未使用过 mdadm 安装。因此,在安装数据包、创建测试 raid1 阵列和重新启动之前,我必须重新发出 mkinitramfs 并更正 /etc/lilo.conf initrd= 选项以指向正确的映像文件。
使用之前未更改的 initramfs 映像会导致启动时出现严重延迟,md0 启动超时。但在系统中,系统检测到来自我指定分区的 /dev/md127 阵列
因此,在使用正确创建的阵列重新启动系统之前,您是否应该执行 mkinitramfs,然后更新引导加载程序?