重启后Linux raid消失

Gof*_*off 7 linux raid

我在 Linux 中的故障排除能力并不令人印象深刻,正如您所知。另一方面,我可以很好地遵循指示。我有一台带有 Linux raid 的 Linux 服务器。它运行良好,大约半年没有问题,但后来我断电了,从那以后一直遇到同样的问题。重建raid后,我的所有文件都还在,所以这是一件好事。当我重新启动服务器时,raid 设备 md0 消失了。

pi@pinas:~ $ cat /proc/mdstat 
Personalities : 
unused devices: <none>

pi@pinas:~ $ ls /dev/md*
pi@pinas:~ $ 
Run Code Online (Sandbox Code Playgroud)

我在这里发现了一个似乎对其他人有帮助的问题,但我尝试了它并没有帮助。我还查看了其他几个网站都说类似的话。我使用 webmin 创建raid,mdadm.conf“看起来”没问题。我不知道我是否在互联网上搜索正确的东西,或者即使我正在查看正确的日志文件。有没有人有任何想法?

提前致谢。

*** 编辑 1

root@pinas:/home/pi# service mdadm start
Failed to start mdadm.service: Unit mdadm.service is masked.
Run Code Online (Sandbox Code Playgroud)

我想知道 mdadm 服务是否正在运行。该进程当前在系统上未处于活动状态,我不知道如何判断它是否配置为在启动时启动,如何启动它或将其配置为在启动时启动。

***编辑2

systemctl list-unit-files
mdadm-grow-continue@.service           static  
mdadm-last-resort@.service             static  
mdadm-waitidle.service                 masked  
mdadm.service                          masked  
mdmon@.service                         static  
mdmonitor.service                      static  
Run Code Online (Sandbox Code Playgroud)

我找到了这个。我不知道这是否很糟糕,但看起来很可疑。这是应该的吗?他们都没有说启用,我认为他们应该。有任何想法吗?

*** 编辑 3

systemctl list-unit-files
mdadm-grow-continue@.service           static  
mdadm-last-resort@.service             static  
mdadm-waitidle.service                 masked  
mdadm.service                          masked  
mdmon@.service                         static  
mdmonitor.service                      static  

dpkg-reconfigure mdadm
update-initramfs: deferring update (trigger activated)
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
Processing triggers for initramfs-tools (0.120+deb8u3) ...
Run Code Online (Sandbox Code Playgroud)

我运行了@telcoM 建议的命令,这是输出。我也尝试重新安装这些命令,但输出仍然相同。

我曾尝试在网上查看其他几个类似名称的踏板,但到目前为止我还没有发现任何有用的东西。我认为问题与服务未在启动时启动有关,但我对 Linux 服务的经验不足,不知道如何修复它。@roaima 建议这是 initramfs 的问题,但我不知道如何检查或更正。有没有人有任何想法?

*** 编辑 4

CREATE owner=root group=disk mode=0660 auto=yes
HOMEHOST <system>
MAILADDR root
ARRAY /dev/md/0  metadata=1.2 UUID=d3434dfc:2fb4792e:0b64f806:67e35ee3 name=raspberrypi:0
ARRAY /dev/md/0  metadata=1.2 UUID=40fb937f:870c7c13:46774666:87445bc5 name=pinas:0
Run Code Online (Sandbox Code Playgroud)

这是我的 mdadm.conf 文件的输出。这很有趣,因为第一个列出的数组没有正确的名称......

小智 7

在遇到同样的问题后,这个食谱对我有用。翻遍了整个网络试图找到答案,最后遇到了这个,仍然没有帮助。

我看到的问题是多方面的。

  1. mdadm在下次重新启动时将设备文件重新分配/dev/md0给类似的东西/dev/md127。所以你不能只使用 fstab 中的设备文件。我最终使用了创建的文件系统中的 UUID。

  2. 网络上几乎所有的 RAID 驱动器设置教程都展示了使用如下驱动设备文件创建 RAID 设备:

    mdadm --create --verbose /dev/md0 --level=0 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
    
    Run Code Online (Sandbox Code Playgroud)

    相反,我使用了分区设备文件,如下所示:

    mdadm --create --verbose /dev/md0 --level=0 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
    
    Run Code Online (Sandbox Code Playgroud)

    第二种形式需要使用gdisk或在每个磁盘上正确创建分区fdisk。我使用gdisk并将其分配为 type fd00,这是一个 raid 分区。

  3. 有很多关于需要更新的讨论/etc/mdadm/mdadm.conf。这是错误的。我故意删除了那个文件。不需要。(见下文)

这就是全部了。完整的食谱如下...


使用fd00Linux RAID类型的一个分区对每个驱动器进行分区:

root@teamelchan:~# gdisk /dev/sda
Command (? for help): n
Partition number (1-128, default 1):
First sector (2048-3907029134, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-3907029134, default = 3907029134) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): fd00
Changed type of partition to 'Linux RAID'

Command (? for help): p
Disk /dev/sda: 3907029168 sectors, 1.8 TiB
Model: ST2000DM001-1ER1
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): F81E265F-2D02-864D-AF62-CEA1471CFF39
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 2048, last usable sector is 3907029134
Partitions will be aligned on 2048-sector boundaries
Total free space is 0 sectors (0 bytes)

Number Start (sector) End (sector) Size Code Name
1
2048 3907029134 1.8 TiB FD00 Linux RAID

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.
Run Code Online (Sandbox Code Playgroud)

现在您应该在 /dev 中看到磁盘设备和分区设备

root@teamelchan:~# ls /dev/sd[a-d]*
/dev/sda /dev/sda1 /dev/sdb /dev/sdb1 /dev/sdc /dev/sdc1 /dev/sdd /dev/sdd1
Run Code Online (Sandbox Code Playgroud)

现在使用 mdadm 使用分区设备文件创建您选择的 RAID,而不是磁盘设备

root@teamelchan:~# mdadm --create --verbose /dev/md0 --level=0 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: chunk size defaults to 512K
mdadm: /dev/sda1 appears to contain an ext2fs file system
size=471724032K mtime=Sun Nov 18 19:42:02 2018
mdadm: /dev/sda1 appears to be part of a raid array:
level=raid0 devices=4 ctime=Thu Nov 22 04:00:11 2018
mdadm: /dev/sdb1 appears to be part of a raid array:
level=raid0 devices=4 ctime=Thu Nov 22 04:00:11 2018
mdadm: /dev/sdc1 appears to be part of a raid array:
level=raid0 devices=4 ctime=Thu Nov 22 04:00:11 2018
mdadm: /dev/sdd1 appears to contain an ext2fs file system
size=2930265540K mtime=Sun Nov 18 23:58:02 2018
mdadm: /dev/sdd1 appears to be part of a raid array:
level=raid0 devices=4 ctime=Thu Nov 22 04:00:11 2018
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
Run Code Online (Sandbox Code Playgroud)

现在检查/dev/disk是否有任何与您的新/dev/md0RAID相关联的 UUID 。应该没有。

root@teamelchan:~# ls -l /dev/disk/by-uuid
total 0
lrwxrwxrwx 1 root root 10 Nov 22 04:24 4777-FB10 -> ../../sdf1
lrwxrwxrwx 1 root root 10 Nov 22 04:24 D616BDCE16BDAFBB -> ../../sde1
lrwxrwxrwx 1 root root 10 Nov 22 04:24 e79571b6-eb75-11e8-acb0-e0d55e117fa5 -> ../../sdf2
Run Code Online (Sandbox Code Playgroud)

制作新的文件系统,然后你现在应该有一个 UUID /dev/md0

root@teamelchan:~# mkfs.ext4 -F /dev/md0
mke2fs 1.44.1 (24-Mar-2018)
Creating filesystem with 2685945088 4k blocks and 335745024 inodes
Filesystem UUID: 7bd945b4-ded9-4ef0-a075-be4c7ea246fb
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

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
Run Code Online (Sandbox Code Playgroud)

瞧,就是这样。

root@teamelchan:~# ls -l /dev/disk/by-uuid
total 0
lrwxrwxrwx 1 root root 10 Nov 22 04:24 4777-FB10 -> ../../sdf1
lrwxrwxrwx 1 root root 9 Nov 22 04:43 7bd945b4-ded9-4ef0-a075-be4c7ea246fb -> ../../md0
lrwxrwxrwx 1 root root 10 Nov 22 04:24 D616BDCE16BDAFBB -> ../../sde1
lrwxrwxrwx 1 root root 10 Nov 22 04:24 e79571b6-eb75-11e8-acb0-e0d55e117fa5 -> ../../sdf2
Run Code Online (Sandbox Code Playgroud)

修改您的 /etc/fstab 并为您的新 RAID 添加挂载 确保使用 UUID,而不是设备文件。

root@teamelchan:~# cat /etc/fstab
UUID=e79571b6-eb75-11e8-acb0-e0d55e117fa5 / ext4 defaults 0 0
UUID=4777-FB10 /boot/efi vfat defaults 0 0
/swap.img none
swap sw 0 0
UUID=7bd945b4-ded9-4ef0-a075-be4c7ea246fb /md0/tweets ext4 auto 0 0
Run Code Online (Sandbox Code Playgroud)

在这里,看不/etc/mdadm/mdadm.conf ,不需要。

root@teamelchan:~# ls -l /etc/mdadm
total 0
Run Code Online (Sandbox Code Playgroud)

重启

root@teamelchan:~# reboot
Connection to 192.168.0.131 closed by remote host.
Connection to 192.168.0.131 closed.
Run Code Online (Sandbox Code Playgroud)

RAID 已挂载,但 mdadm 已将设备文件从 重命名md0md127

好在我们使用了 UUID 而不是实际的设备文件。

root@teamelchan:~# df /md0/tweets
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/md127 10658016696 73660 10120737636 1% /md0/tweets
Run Code Online (Sandbox Code Playgroud)

看 md0 从 /dev 消失了

root@teamelchan:~# ls /dev/md*
/dev/md127

/dev/md:
Run Code Online (Sandbox Code Playgroud)

就是这样。现在我很享受我的 10 TB RAID0,它的运行速度超过 600 MB/秒

root@teamelchan:~# hdparm -tT /dev/md127

/dev/md127:
Timing cached reads: 26176 MB in 1.99 seconds = 13137.47 MB/sec
Timing buffered disk reads: 1878 MB in 3.00 seconds = 625.13 MB/sec
Run Code Online (Sandbox Code Playgroud)


Gof*_*off 0

该服务未启动,因为它被屏蔽了。是我找到如何揭开它的方法。下一个问题是 mdadm-raid 服务未启动 raid。就是我如何让突袭在启动时开始。往下看“2017年7月31日周一晚上7点49分”即可找到相关帖子。这可能不是最好的解决方案,但在 10 次重新启动后,raid 每次仍然会启动。我确实感谢那些试图回答这个问题的人所付出的努力。现在我只需要整理一下提供的其他服务。但这是另一个问题。