如何在不丢失数据的情况下创建 mdadm RAID1?

如何在不丢失数据的情况下创建 mdadm RAID1?

我有一块 4TB 硬盘。我将这块硬盘安装在 中/var,以便能够存储和备份生产服务器,然后我想到创建 RAID 1 的想法。为此,我请求了另一块 4TB 硬盘,虽然不是同一品牌和型号,但我认为它可以工作...

我想创建一个 RAID 1 而不丢失已存储的数据。但我找到的信息并不像人们希望的那样完整……

答案1

快速查看我们将要做的事情:

  1. 如果新磁盘尚未创建分区,则创建分区
  2. 停止所有正在使用的进程/var
  3. 删除/var/etc/fstab以在启动服务器时停止挂载
  4. 重启服务器
  5. md0在新磁盘/分区( )中创建 RAID 1( ),并使用 ext4/dev/sdc1格式化新分区( )/dev/md0
  6. 将信息从旧分区(/dev/sdb1)克隆到新分区(/dev/md0
  7. 然后将旧分区(/dev/sdb1)添加到 RAID 1(md0
  8. 添加 RAID 1(md0)以/etc/fstab在启动服务器时安装
  9. 重新开始

一步步

笔记原版光碟: /dev/sdb 分割 /dev/sdb1新磁盘: /dev/sdc

在新磁盘中创建新分区:
如果你还没有在新磁盘中创建分区,gdisk由于fdisk无法创建大于 2TB 的分区,在创建新分区(/dev/sdc1)后,你可以使用以下命令进行检查lsblk

gdisk /dev/sdc
# Type letter n
# Then enter
# Then enter
# Then enter
# Then enter
# Type letter w to write GPT data...

使用以下方法格式化(ext4)新分区(/dev/sdc1mkfs.ext4
我们需要格式化新分区,以便在其中挂载 RAID 1,您可以使用以下命令在分区(/dev/sdc1)中检查新格式lsblk

mkfs.ext4 /dev/sdc1

/dev/sdb1在启动服务器时从挂载中删除以停止使用文件
我们要将所有文件从旧磁盘/分区(/dev/sdb1)复制到新磁盘/分区(/dev/md0位于sdc1)下,因此首先,我们需要从进程中释放文件,我们需要/dev/sdb1从安装处删除/var,但您不能这样做,umount /dev/sdb1因为 Linux 和其他进程使用了​​中的某些文件/var

nano /etc/fstab
# comment the line with # at start of the line like this:
# #UUID=24f081e2-fe9d-4ec1-81a6-c5c2d71d6c9b      /var    ext4    defaults        0       2
# to prevent /dev/sdb1 mount at /var

重启服务器
我们需要重新启动才能生效...

reboot now

向 RAID 1 添加新磁盘/分区
我们需要将新分区(/dev/sdc1)添加到 mdadm 以创建 RAID 1,并使用ext4

mdadm --create --verbose /dev/md0 --force --level=1 --raid-devices=1 /dev/sdc1
# type y to continue

# after create md0, we need to format with ext4
mkfs.ext4 /dev/md0

# use lsblk -f to check partitions and FSTYPE

将数据从旧磁盘/分区复制到新磁盘/分区
我们需要将旧数据从旧分区复制/dev/sdb1到新分区/dev/md0,首先创建两个文件夹来挂载这两个分区,然后使用rsync或克隆数据cp...

cd /mnt
# go to path /mnt, I prefer this path because we are going to mount(mnt), you can create it wherever you want, and mount it

mkdir md0 var
# create two folder md0 for /dev/sdc1
# And var for /dev/sdb1

mount /dev/md0 md0
# mount /dev/sdc1 in md0

mount /dev/sdb1 var
# mount /dev/sdb1 in var


# Before this command check very well before, because it has attribute -delete, it deletes files in the destination(md0) that are not found in the source(var/)
# check "Copy entire file system hierarchy from one drive to another" and "rsync how to do a checksum on rsync" links

rsync -axcHAWXS -delete --numeric-ids --info=progress2 var/ md0/

# Copy data from old to new partition
# I added 2 attributes here `c` and `-delete`
# c: for checksum
# -delete: to delete files in new disk/partition that not exist in source or old disk/partition

# NOTE IF DATA IS LARGE AND YOU WANT TO SLEEP OR SOMETHING USE nohup & exit TO RUN IN BACKGROUND, AND CHECK "nohup.out" FOR CHANGES, LIKE "tail -f nohup.out" OR "htop" SEARCH FOR "rsync"
nohup rsync -axcHAWXS -delete --numeric-ids --info=progress2 var/ md0/ & exit

卸载分区
我们需要卸载分区

umount /dev/sdb1
umount /dev/md0

将旧磁盘/分区添加到 RAID 1
我们需要将旧磁盘/分区(/dev/sdb1)添加到 RAID 1(md0),使用cat /proc/mdstat或检查状态mdadm --detail /dev/md0

sudo mdadm --grow /dev/md0 --raid-devices=2 --add /dev/sdb1
# check progress with cat /proc/mdstat
# or sudo mdadm --detail /dev/md0 
# For progress 
# Number   Major   Minor   RaidDevice State
#    0       8       33        0      active sync   /dev/sdc1
#    1       8       17        1      spare rebuilding   /dev/sdb1
# Check "spare rebuilding" and "Rebuild Status"

安装 RAID 1( md0) 至/var
我们需要做一些更改mdadm.conf,我们需要/var文件夹

mount /dev/md0 /var
# mounting md0 to /var, check that exist /var forlder if not, create it with mkdir /var

添加 RAID 1 至/etc/mdadm/mdadm.conf
我们需要将新阵列 RAID 1( md0) 添加到/etc/mdadm/mdadm.conf

mdadm --detail --scan >> /etc/mdadm/mdadm.conf
# Add output of  mdadm --detail --scan
# To /etc/mdadm/mdadm.conf
# You can edit it manually

update-initramfs -u
# To take effect the new configuration

添加 RAID 1 以/etc/fstab在服务器启动时挂载
我们需要添加到/dev/md0/etc/fstab我们想在服务器启动时挂载它,首先我们需要UUID,我们可以使用lsblk -fblkid

blkid
# get /dev/md0 UUID

nano /etc/fstab
# At the end add this with you UUID
# UUID=0518f527-4019-4a51-b321-7ad266e1df64  /var  ext4  defaults  0  2
# Change the UUID with your UUID
# check errors with 
# findmnt --verify

重启服务器并检查结果

reboot now

对您有帮助的链接:

如何在 Linux 中创建新的 Ext4 文件系统(分区)
将整个文件系统层次结构从一个驱动器复制到另一个驱动器
rsync 如何对 rsync 进行校验
删除 mdadm raid1,但不丢失数据
如何在 Linux 中创建分区 使用现有驱动器在 14.04 上设置 RAID 1 使用 mdadm --examine 编写 mdadm.conf 我的 RAID 1 在重启后总是重命名为 /dev/md127 | DEBIAN 10 在 Linux 中挂载驱动器并设置在启动时自动挂载

相关内容