前言
为了摆脱对于专业NAS的依赖,我决定专门使用一台Linux服务器安装NAS程序的方式实现NAS功能,这里就需要用到Raid功能,由于目前我只有3块SSD(256G+500G+500G),在ChatGPT的推荐下还是使用一个256G系统盘+2块500G硬盘组Raid1的方式组成一个阵列,结果坑人的事就来了!
使用mdadm创建的raid阵列在重启后不见了!!然后我所有的数据都找不到了!!而且在/dev中甚至找不到md0这个raid磁盘阵列,这还怎么用,难道组成镜像后就不关机了?这肯定不行啊,然后我就踏上了漫漫踩坑路。
坑的来源
由于ChatGPT的信息可能比较落后,它不知道我这个硬盘是GPT分区,组成Raid后会导致分区表出问题,因此给我的答案是:
我说重启后分区找不到了,ChatGPT给我的答复是要在/etc/fstab中增加一条信息:
/dev/md0 /mnt/raid ext4 defaults 0 0
我还以为这就能把这问题解决了,结果是压根不能解决,因为分区表问题,连md0这个Raid磁盘阵列都不见了,然后开机卡了半天,就是因为这个/dev/md0无法加载成功,我也是等了半天进了系统后才发现的。
然后我怀疑是我心急,没等
cat /proc/mdstat
执行到100%就重启服务器了,然后我借助吃饭时间足足等了1个小时啊!!等它磁盘镜像全部同步完了,再去重启,结果还是老样子,磁盘分区丢失!!这可把我给气坏了!!
解决方法
节约大家时间,我先把解决方法说明吧,后面再将华硕主板Raid的问题
ChatGPT犯了一个严重错误——不能直接对/dev/sdb、/dev/sda这两个磁盘进行操作,而需要对它们各自创建的分区进行操作才可以!!
也就是说先要给/dev/sdb和/dev/sda两个磁盘进行分区后才能执行Raid操作,这是ChatGPT它自己都不知道的事。
执行过程如下:
查看分区情况
先需要lsblk一下,查看自己服务器的磁盘分区情况,我这边是这样的:
/dev/sda:256GB,RockyLinux系统安装盘,包括挂载了根目录和用户目录
/dev/sdb:500GB数据盘
/dev/sdc:500GB数据盘
执行分区操作
fdisk /dev/sdb
建议按一下m,然后回车,查看fdisk的功能
我个人建议先按一下d,然后按一下w
注意!!!!!这一步会清空盘内所有数据,请谨慎操作!!
此步的作用是删除该盘内的分区(特别是只有一个分区的情况会删除所有的内容)
然后再执行
fdisk /dev/sdb
进入fdisk功能后执行
g,然后按n,最后按w
按n的时候需要指定分区大小,我这边直接全部回车过去了,创建的分区大小等于我的磁盘大小。然后就能得到/dev/sdb下又多了一个/dev/sdb1这么一个分区。
同样的对/dev/sdc也执行同样的操作,最后得到如图所示的分区信息:
创建Raid阵列
剩下的步骤就和ChatGPT说的一样了,只不过命令需要改一下
执行的是:
mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 /dev/sdc1
这里用到的是/dev/sdb1和/dev/sdc1!!而不是整个磁盘,这就是问题的关键所在,被ChatGPT坑了4个小时!!
后续操作
后续的操作为:
# 查看Raid磁盘同步进度
cat /proc/mdstat# 将Raid阵列格式化为ext4分区
mkfs.ext4 /dev/md0# 由于我不想将这个分区藏太深,直接在根目录创建了一个/data目录
mkdir /data# 将Raid阵列分区挂载到/data路径下
mount /dev/md0 /data# 将Raid信息写入/etc/mdadm.conf中
mdadm --detail --scan | sudo tee -a /etc/mdadm.conf
最后需要将分区信息填入/etc/fstab中
vi /etc/fstab
在最后一行输入:
/dev/md0 /data ext4 defaults 0 0
然后按:wq保存
其实不用等/proc/mdstat都执行完成就能重启服务器,空的磁盘完全不影响
重启后查看效果
由于重启后各个磁盘的加载顺序是随机的,我这边显示的内容如下:
重启后阵列丢失的问题终于算是解决了!在这种情况下博客是必须要写的,避免以后踩同样的坑。
华硕大坑RAID缺少驱动
当时由于系统内软Raid碰壁了,我就想用华硕主板自带的Raid功能,也就是在主板BIOS中,将SATA类型从AHCI改为RAID,直接搞硬Raid得了。硬Raid可以参考其他同行写得博客吧,我这边就先跳过了。大概的步骤就是
1、在BIOS Advance中将SATA模式从AHCI改成RAID后重启
2、重启后再次进入BIOS,在Advance的最后会多出一个RAID相关设置
3、选择创建阵列后选择需要的磁盘,然后保存即可,最后成果如下:
然后我进入了系统,发现全炸了!直接进入dracut环境了,报
/dev/mapper/rl-root does not exist
/dev/rl/root does not exist
/dev/rl/swap does not exist
也就是我所有分区都丢失了,我通过ls /dev也能看见所有分区都找不到了!我还以为是我分区有问题,或者Raid有问题,我一怒之下在华硕BIOS中将所有分区内容全部删了,重新组Raid,从0开始组,结果我去装RockyLinux时发现进入安装环境后磁盘空空如也,我当时还不信,又拿了一个Windows11的安装包试了一下,发现还是一个磁盘都找不到。
我当时就怀疑是Raid驱动的问题,即Windows和RockyLinux的安装包中都没有带华硕的Raid驱动,我直接找到了华硕客服,问其缘由,华硕客服很专业啊,直接就说是缺少Raid驱动,让我去华硕官网下驱动,驱动我是找了半天没找到,只能当个伸手党让客服直接发给我。
使用也很简单,将
解压后放到Windows安装U盘中即可(我的是AMD的主板,这个驱动Intel主板无法使用)
点击“加载驱动程序”,选择目录下的
rcraid这个目录即可,加载驱动完成后,我这个Raid分区就出现了,我试了一下也能正常安装Windows11,也能正常重启进入系统
里面的磁盘叫AMD-Raid Array N SCSI Disk Device
本来我想就用硬Raid得了,然后我问华硕客服,这个驱动有CentOS版本的吗,客服说这个驱动没有Linux版本,我当时就长叹一口气,还得去和软Raid较劲,好在最后我还真给搞出来了。