项目有一个需要 批量克隆系统盘。给多台服务器使用。但是单盘的安全性不好。要使用软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 ==========================