我有一块 4TB 硬盘。我将这块硬盘安装在 中/var
,以便能够存储和备份生产服务器,然后我想到创建 RAID 1 的想法。为此,我请求了另一块 4TB 硬盘,虽然不是同一品牌和型号,但我认为它可以工作...
我想创建一个 RAID 1 而不丢失已存储的数据。但我找到的信息并不像人们希望的那样完整……
答案1
快速查看我们将要做的事情:
- 如果新磁盘尚未创建分区,则创建分区
- 停止所有正在使用的进程
/var
- 删除
/var
,/etc/fstab
以在启动服务器时停止挂载 - 重启服务器
md0
在新磁盘/分区( )中创建 RAID 1( ),并使用 ext4/dev/sdc1
格式化新分区( )/dev/md0
- 将信息从旧分区(
/dev/sdb1
)克隆到新分区(/dev/md0
) - 然后将旧分区(
/dev/sdb1
)添加到 RAID 1(md0
) - 添加 RAID 1(
md0
)以/etc/fstab
在启动服务器时安装 - 重新开始
一步步
笔记:原版光碟:
/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/sdc1
mkfs.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 -f
或blkid
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 中挂载驱动器并设置在启动时自动挂载