Linux 磁盘阵列mdadm

简介: Linux 磁盘阵列mdadm

一、必要的准备


如果之前磁盘有做过阵列,需要先清理掉配置。要查看当前机器上是否具有磁盘阵列的配置(在 /proc/mdstat 文件内),我们可以打以下的指令:


cat /proc/mdstat


>Output

>Personalities : [raid0] [linear] [multipath] [raid1] [raid6] [raid5] [raid4] [raid10]

>md0 : active raid0 sdc[1] sdd[0]

>       209584128 blocks super 1.2 512k chunks

>

>       unused devices:


二、如果有配置,需要从文件系统中卸载磁盘阵列:


sudo umount /dev/md0


三、暂停并移除此磁盘阵列:


sudo mdadm --stop /dev/md0
sudo mdadm --remove /dev/md0


四、查出磁盘的结构的指令:


lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT


>Output

>NAME     SIZE FSTYPE            TYPE MOUNTPOINT

sda      00G                   disk

sdb      00G                   disk

sdc      00G linux_raid_member disk

sdd      00G linux_raid_member disk

vda       0G                   disk

├─vda1    0G ext4              part /

└─vda15    M                   part


如果发现我们的磁盘已经做过阵列,我们需要重置它们的超级块(Superblock),使其正常化:


sudo mdadm --zero-superblock /dev/sdc
sudo mdadm --zero-superblock /dev/sdd


你应该删除所有的阵列相关的引用设置,例如在 /etc/fstab 文件内自动挂载设置


sudo nano /etc/fstab

#/etc/fstab

. . .

# 将这行注释,否则会引至启动失败

# /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0


当然,你还需要在阵列定义文件 /etc/mdadm/mdadm.conf 内移除原有的阵列设置

sudo nano /etc/mdadm/mdadm.conf

# /etc/mdadm/mdadm.conf

. . .

注释阵列设置

# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=7261fb9c:976d0d97:30bc63ce:85e76e91


最后更新 initramfs 系统:

sudo update-initramfs -u


OK,此时一切回到没有阵列的普通磁盘状态了,我们就可以开始以下的尝试了。


Initramfs 初始 ram 文件系统基于 'tmpfs ' (大小灵活、 内存中的轻量级文件系统),但是他并不是一个单独的块设备 (所以没有缓存和所有额外的开销)。就像 initrd,它包含的工具和脚本在被称为真正的根文件系统上的二进制文件 init启动之前被挂载 。这些工具可以解密抽象层 (用于加密的文件系统),逻辑卷管理器,软件 raid,蓝牙驱动程序基于文件系统的装载机等。


五、格式化


在格式化过程中有一个点大家要注意的是,由于现在的硬盘容量越来越大,fdisk 只能硬式化2T以内的硬盘,如果你想用两个3T的硬盘做阵列那么还是用Parted GPT吧:


sudo parted /dev/sdb


这个指令按照向导来做就好了,过程极其简单。将格式做成 ext4 就可以了。


六、磁盘阵列


1、RAID 0


RAID 0 即Data Stripping(数据分条技术)。整个逻辑盘的数据是被分条(stripped)分布在多个物理磁盘上,可以并行读/写,提供最快的速度,但没有冗余能力。要求至少两个磁盘。我们通过RAID 0可以获得更大的单个逻辑盘的容量,且通过对多个磁盘的同时读取获得更高的存取速度。RAID 0首先考虑的是磁盘的速度和容量,忽略了安全,只要其中一个磁盘出了问题,那么整个阵列的数据都会不保了。


在开始之前我们还是先用 lsblk 查看一下磁盘的状态:


lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT


>Output

NAME     SIZE FSTYPE TYPE MOUNTPOINT

sda      00G        disksdb      00G        disk

vda       0G        disk

├─vda1    0G ext4   part /

└─vda15    M        part


创建阵列:


sudo mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sda /dev/sdb


检查磁盘阵列的状态:


cat /proc/mdstat


Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md0 : active raid0 sdb[1] sda[0]      

209584128 blocks super 1.2 512k chunks

unused devices: <none>


2、其余的RAID 1、5、6方式同0,就不一一说了,但是需要注意的是,磁盘容量问题

Raid 0:至少1块磁盘,不损失磁盘容量

Raid 1:至少2磁盘,损失50%磁盘容量

Raid 5:至少3块磁盘,损失(n-1)容量(n为磁盘数量)

Raid 6:至少4块磁盘,损失(n-2)容量(n为磁盘数量)

性能区别:10>0>6>5


3、RAID 10 单独说一下

RAID 10其实就是Raid 1+0,是先镜像再分区数据,再将所有硬盘分为两组,视为是RAID 0的最低组合,然后将这两组各自视为RAID 1运作。


RAID 10(又叫RAID 1+0)特点:

最少需要4块磁盘

先按RAID 0分成两组,再分别对两组按RAID 1方式镜像

兼顾冗余(提供镜像存储)和性能(数据条带形分布)


创建阵列


sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd


七、挂载文件系统


下一步,在阵列上创建文件系统:

sudo mkfs.ext4 -F /dev/md0


在文件系统上创建挂载点的文件夹

sudo mkdir -p /mnt/md0


挂载阵列至挂载点文件夹上

sudo mount /dev/md0 /mnt/md0


为了确保阵列开机时被载入,我们应该调整一下 /etc/mdadm/mdadm.conf 的配置文件,我可以加以下的指令使系统在启动自检时扫描磁盘阵列的详细信息:

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf


另外,你可以更新 initfamfs 或者初始化RAM文件系统,这样一来阵列会在启动前就可以生效:

sudo update-initramfs -u


最重要的一点是一定要在 /etc/fstab 配置文件内加入自动挂载的设置:

echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab


这样 ubuntu 启动后就会自动将磁盘阵列挂入了。


另外,如果没有设置自动挂载,在系统重启后或磁盘名称更改(插入其它硬盘会导致盘名变更的)例如 /dev/md0 变成了 /dev/md127 就可能会出现磁盘不能被挂载的问题,此时切记重新创建阵列,因这将会毁掉你的一切!重新手工挂载一下就OK了:


sudo mount /dev/md127 /mnt/md0

相关文章
|
4月前
|
Ubuntu Linux Shell
Linux系统中如何查看磁盘情况
【9月更文挑战第3天】在Linux系统中,有多种方式查看磁盘情况。可通过命令行工具`df`查看文件系统磁盘使用情况,选项`-h`以人类可读格式显示,`-T`显示文件系统类型;`du`命令显示目录或文件磁盘使用情况,`-h`以人类可读格式显示,`-s`仅显示总计;`fdisk -l`列出磁盘和分区信息。此外,图形界面的磁盘管理工具和文件管理器也可用于查看磁盘使用情况。这些方法有助于更好地管理磁盘空间。
754 4
|
5月前
|
存储 监控 安全
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
在Linux中,⼀个EXT3的文件分区,当使用touch test.file命令创建⼀个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况?
|
4月前
|
存储 Linux 5G
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
这篇文章介绍了LVM(逻辑卷管理)如何提供灵活的磁盘管理方式,允许动态调整逻辑卷的大小而不会丢失数据。
Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】
|
3月前
|
Unix Linux 对象存储
Linux 磁盘管理
Linux 磁盘管理
48 1
|
3月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
75 0
|
3月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
49 0
|
5月前
|
存储 监控 Linux
|
5月前
|
监控 Linux
在Linux中,如何监控磁盘I/O性能?
在Linux中,如何监控磁盘I/O性能?
|
5月前
|
Prometheus 监控 Ubuntu
在Linux中,如何进行磁盘性能监控?
在Linux中,如何进行磁盘性能监控?
|
5月前
|
存储 监控 Linux
在Linux中,如何管理磁盘配额?
在Linux中,如何管理磁盘配额?