收起左侧

【eaves】fnOS系统盘raid探索

1
回复
401
查看
[ 复制链接 ]

5

主题

12

回帖

0

牛值

fnOS系统内测组

2025-4-23 00:27:17 显示全部楼层 阅读模式

前言

最近打算转用fnOS,发现了几个用着不太满意的点,一部分看看怎么克服,如果不能克服则看看能不能反馈给官方解决。

目前的测试清单:

  1. 系统盘raid1(本次)
  2. 通过btrfs文件系统快照实现Windows"过去版本(previous version)"
  3. 存储空间的导入导出

本篇只是一个探索,或者可行性验证,任何情况下不要用在生产/主力环境!!!

如果没有相关技术基础,请勿尝试模仿!!!

可行性分析

看了一下,fnOS是基于开发的,按理来说把系统装到raid不是问题。

cat /etc/os-release

那能不能在装系统的时候添加grub参数,直接把raid1建出来呢?

看了一下,fnOS装完后对raid的支持是通过grub模块实现的

grep CONFI**D_RAID1 /boot/config-$(uname -r)
CONFI**D_RAID1=m

在安装阶段,grub没有加载mdraid/mdadm相关的模块,也没有mdraid/mdadm相关外围文件手动修改grub.cfg,所以确实在装机阶段认不到软raid。

即使fnOS本身是支持os层面的raid,也没有相关的模块提供驱动上的支撑。

所以只能通过较为不优雅的方式:

硬盘A安装OS -> 硬盘B创建raid -> 把A的数据拷到B -> 更新引导 -> 重启进入raid上的系统 -> 把硬盘A加入B

前期准备

首先,无论是BIOS引导还是EFI引导,我们都要做一些前期准备:

1. 提权,打开ssh

sudo passwd root
su - root
systemctl enable --now ssh.service

2. grub加载raid相关模块

vi /etc/defualt/grub
GRUB_PRELOAD_MODULES="mdraid09 mdraid1x diskfilter lvm"
grub-mkconfig

3. sfdisk复制分区结构

sfdisk -d /dev/sda|sfdisk /dev/sdb

For BIOS 引导

创建raid

mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb2
mkfs.ext4 /dev/md0
mount /dev/md1 /mnt
rsync -avxHAX / /mnt

更新fstab和mdadm.conf

瞄一眼uuid

blkid
vi /mnt/etc/fstab
mdadm --detail --scan | sudo tee /mnt/etc/mdadm/mdadm.conf

更新引导

mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
mount --bind /run /mnt/run
chroot /mnt
mount -t efivarfs efivarfs /sys/firmware/efi/efivars
grub-install /dev/sda
grub-install /dev/sdb
update-grub
reboot
mdadm --add /dev/md0 /dev/sda2

For EFI 引导

EFI的引导比较麻烦,如果fnOS打算搞系统RAID,更简易不对EFI分区进行raid,而是进行failover,这一块涉及的工作量比较大,论证可行性就没做了。

vi /etc/default/grub;GRUB_PRELOAD_MODULES="mdraid1x diskfilter lvm"
update-grub

sfdisk -d /dev/sda | sudo sfdisk /dev/sdb
mdadm --create /dev/md0 --level 1 --raid-devices=2 missing /dev/sdb2
mkfs.ext4 /dev/md0
mount /dev/md0 /mnt;rsync -avxHAX / /mnt

blkid /dev/md0;vi /mnt/etc/fstab

mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
mount --bind /dev/pts /mnt/dev/pts
mount --bind /boot/efi /mnt/boot/efi
chroot /mnt
grub-install /dev/sda
grub-install /dev/sdb
grub-update

reboot
df -Th
umount /dev/sda2
mdadm --manage /dev/md127 --add /dev/sda2
cat /proc/mdstat

mount | grep '/boot/efi'

dd if=/dev/sda1 of=/dev/sdb1
efibootmgr -v | grep -i debian
efibootmgr --create --disk /dev/sdb --part 1 --label "debian2" --loader "\\EFI\\debian\\shimx64.efi"

ls -l /dev/disk/by-partuuid/
mdadm --create /dev/md100 --level 1 --raid-disks 2 --metadata 1.0 missing /dev/sdb1
mkfs.fat -F32 /dev/md100
mkdir /tmp/RAID; mount /dev/md100 /tmp/RAID
rsync -av --progress /boot/efi/ /tmp/RAID/

umount /dev/sda1
mdadm --manage /dev/md100 --add /dev/sda1
cat /proc/mdstat
mount -a
vi /etc/fstab
UUID=0B14-8E3E /boot/efi vfat umask=0077  0 1
/dev/md100 /boot/efi vfat umask=0077  0 1
mdadm --detail --scan | grep 100 >> /etc/mdadm/mdadm.conf

cat /proc/mdstat

vi /etc/fstab
/dev/md100     /boot/efi vfat umask=0077  0 1
UUID=0B14-8E3E /boot/efi vfat umask=0077,noauto,defaults 0 0
vi /etc/mdadm/mdadm.conf
ARRAY /dev/md100 metadata=1.0 name=vault:100 UUID=11111111:22222222:3333333:44444444
ARRAY <ignore> /dev/md100 metadata=1.0 name=vault:100 UUID=11111111:22222222:3333333:44444444

touch /etc/systemd/system/mdadm_esp.service
[Unit]
Description=Resync /boot/efi RAID
DefaultDependencies=no
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/sbin/mdadm -A /dev/md100 --uuid=11111111:22222222:3333333:44444444 --update=resync
ExecStart=/bin/mount /boot/efi
RemainAfterExit=yes

[Install]
WantedBy=sysinit.target

systemctl enable mdadm_esp.service
update-initramfs -u

总结

做完raid后fnOS中显示的硬盘类型为未知,操作的时候注意不要把硬盘划到存储空间里,当然理论上会报错device is busy,无法操作成功。

image.png

image.png

EFI的raid配置会比较麻烦,建议官方做raid支持的时候能够对两个或多个硬盘的efi分区做failover,而非直接raid

收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

0

主题

4

回帖

0

牛值

江湖小虾

厉害了 我也想把飞牛装到raid里面,不知道怎么操作。主要是担心某一个盘坏掉了

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则