ubuntu 以及 centos 单盘改为 软raid1

发布时间 2023-09-18 17:55:54作者: zhouyqax11

项目有一个需要 批量克隆系统盘。给多台服务器使用。但是单盘的安全性不好。要使用软raid1.

组成软raid1再克隆有很多技术问题。工具很少支持。

找到的解决办法是 先普通硬盘 单盘安装系统。再加一块硬盘 ,组软raid1.

 

下面是单盘改软raid的方法:

### centos 和 ubuntu的 单盘改 软raid1

#### 默认第一块盘是sda,要加入raid1的是sdb

分区表克隆
```
sfdisk -d /dev/sda | sfdisk -f /dev/sdb
-d 读取分区表
-f 强制写入分区表
```

设置2块磁盘为raid模式
```
 查看sda有几个分区。默认是2个
 有几个分区设置 几个raid

parted /dev/sda set 1 raid on
parted /dev/sda set 2 raid on
parted /dev/sdb set 1 raid on
parted /dev/sdb set 2 raid on
```

创建raid
```
mdadm --create  /dev/md0 --level=1 --raid-disks=2 missing  /dev/sdb1 --metadata=1.0 
mdadm --create  /dev/md1 --level=1 --raid-disks=2 missing  /dev/sdb2 --metadata=1.0 
cat /proc/mdstat
mdadm -D /dev/md0
mdadm -D /dev/md1
```

迁移/boot/
```
mkfs.xfs /dev/md0
mkdir /mnt/md0
mount /dev/md0 /mnt/md0
rsync -a /boot/  /mnt/md0/   #或者 cp -dpRx /boot/* /mnt/md0
ls /mnt/md0
umount /dev/md0
umount /boot/
mount /dev/md0  /boot/
lsblk 确认
mdadm /dev/md0 -a /dev/sda1
rm -rf /mnt/md0
lsblk
```

更新/etc/fstab
```
blkid |grep md0 | awk '{print $2}'
#查出uuid
#替换/boot 的uuid
vim /etc/fstab  
## grep "/boot" /etc/fstab | sed 's/^/#/'

```

迁移根分区
```
vgs
#查出vg组的名
#-$vg = "实际组名"
vgextend  $vg  /dev/md1
pvs
pvmove /dev/sda2 /dev/md1
pvs
vgreduce $vg /dev/sda2
pvremove /dev/sda2
mdadm /dev/md1 -a /dev/sda2
```

配置文件
```
lvm的bug
vim /etc/lvm/lvm.conf
#注释掉,新增
use_lvmetad = 0
保存
systemctl stop lvm2-lvmetad
systemctl stop lvm2-lvmetad.socke
systemctl disable lvm2-lvmetad.socke
systemctl disable lvm2-lvmetad.socke
mdadm --examine --scan  > /etc/mdadm.conf
cat /etc/mdadm.conf

配置grub
blkid |grep md0
blkid |grep md1
vim /etc/default/grub
#在GRUB_CMDLINE_LINUX="   。。。 "
#在里面添加 rd.md.uuid="md0的uuid"   rd.md.uuid="md1的uuid"
保存
grub2-mkconfig -o /boot/grub2/grub.cfg
vim /boot/grub2/device.map
#新增(hd1)  /dev/sdb
保存
grub2-install /dev/sda
grub2-install /dev/sdb
```

#配置内核
```
cp /boot/initramfs-$(uname -r).img  initramfs-$(uname -r).img.bak
dracut -f --mdadmconf
```

准备重启
```
#确保已经2块盘同步完成
mdadm -D  /dev/md1

#重启系统,重新生成grub
init 6
登录
grub2-mkconfig -o /boot/grub2/grub.cfg
init 6
```
================================


### Ubuntu单盘改Raid

#### 默认第一块盘是sda,要加入raid1的是sdb

分区表克隆
```
sfdisk -d /dev/sda | sfdisk -f /dev/sdb
-d 读取分区表
-f 强制写入分区表
```

设置2块磁盘为raid模式
```
 查看sda有几个分区。默认是2个
 有几个分区设置 几个raid

parted /dev/sda set 1 raid on
parted /dev/sda set 2 raid on
parted /dev/sdb set 1 raid on
parted /dev/sdb set 2 raid on
```

创建raid
```
mdadm --create  /dev/md0 --level=1 --raid-disks=2 missing  /dev/sdb1 --metadata=1.0 
mdadm --create  /dev/md1 --level=1 --raid-disks=2 missing  /dev/sdb2 --metadata=1.0 
cat /proc/mdstat
mdadm -D /dev/md0
mdadm -D /dev/md1
```

迁移/boot/
```
mkfs.xfs /dev/md0
mkdir /mnt/md0
mount /dev/md0 /mnt/md0
rsync -a /boot/  /mnt/md0/
ls /mnt/md0
umount /dev/md0
umount /boot/
mount /dev/md0  /boot/
mdadm /dev/md0 -a /dev/sda1
rm -rf /mnt/md0
lsblk
```

更新/etc/fstab
```
blkid |grep md0
#查出uuid
#替换/boot 的uuid
vim /etc/fstab
```

迁移根分区
```
vgs
#查出vg组的名
#-$vg = "实际组名"
vgextend  $vg  /dev/md1
pvs
pvmove /dev/sda2 /dev/md1
pvs
vgreduce $vg /dev/sda2
pvremove /dev/sda2
mdadm /dev/md1 -a /dev/sda2
```

配置文件
```
mdadm --examine --scan  > /etc/mdadm.conf
cat /etc/mdadm.conf
```

配置内核
```
cp /boot/initamfs-3.10.0-514.el7.x86_64.img  initramfs-3.10.0-514.el7.x86_64.img.bak
dracut -f --mdadmconf
update-initramfs -u
配置grub
update-grub
```

准备重启
```
#确保已经2块盘同步完成
mdadm -D  /dev/md1
#重启系统
init 6
登录
```

==================================

  

硬盘dd克隆

==========
填充文件系统剩余空间为0.提高压缩比
dd if=/dev/zero bs=1M of=/balloon; sync; rm /balloon

方法二:
mkdir /mnt/hdb
mount /dev/hdb /mnt/hdb
dd if=/dev/zero of=/mnt/hdb/zero
rm /mnt/hdb/zero

======================
排除坏块
conv=sync,noerror


===================================================================================
全部汇总
生成镜像再部署
通过U盘启动 linux系统

优化母盘空间
mkdir /mnt/hdb
mount /dev/hdb /mnt/hdb
dd if=/dev/zero of=/mnt/hdb/zero
rm /mnt/hdb/zero

开始生成镜像
dd if=/dev/sdb bs=4096 conv=sync,noerror  status=progress  | gzip -9 > /sdb.img.gz  

恢复硬盘
gunzip -c /sdb.img.gz | dd of=/dev/sdc status=progress



直接对拷

dd if=/dev/sdb  of=/dev/sdc bs=4096 conv=sync,noerror  status=progress


==========================