经过短暂的修复服务器之后,没想到服务器又不能工作了,又要去折腾,经过前面的经验,发现服务器的硬盘损坏。而且不是独立的硬盘,而是阵列里的硬盘,幸好服务器里的文件有备份,于是就必须找出坏的硬盘并重新组阵列。
首先要理解阵列是什么,常见的阵列有几种。
RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失效时不会使对数据的访问受损 失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现。RAID可以充分发 挥出多块硬盘的优势,可以提升硬盘速度,增大容量,提供容错功能够确保数据安全性,易于管理的优点,在任何一块硬盘出现问题的情况下都可以继续工作,不会 受到损坏硬盘的影响。
RAID 为 Redundant Array of Indepent Disks (独立磁盘冗余阵列) 的缩写,其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。根据选择的版本不同,RAID比单颗硬盘有以下一个或多个方面的好处:增强数据集成度,增强容错功能,增加处理量或容量。另外,磁盘阵列对于电脑来说,看起来就像一个单独的硬盘或逻辑存储单元。最常用的四种RAID为 RAID 0、RAID 1、RAID 5、RAID 10。
我们将会使用 mdadm 这个Ubuntu上的工具创建和管理磁盘阵列。
前面已经介绍了服务器的raid 阵列是由8个硬盘组成的raid6, 那么现在剔除一个坏的硬盘,由7个硬盘重新组raid6.如果我们事先不知道服务器上是否有阵列和不知道阵列的配置是,我们需要看下配置文件:cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid6 sdh[6] sdg[5] sdf[4] sdb[0] sdd[2] sdc[1] sde[3]
9766917120 blocks super 1.2 level 6, 512k chunk, algorithm 2 [7/7] [UUUUUUU]
bitmap: 0/15 pages [0KB], 65536KB chunk
从这里可以看出是raid 6 。
第二步要卸载,移除挂载的阵列
df -h :
Filesystem Size Used Avail Use% Mounted on
udev 32G 0 32G 0% /dev
tmpfs 6.3G 45M 6.3G 1% /run
/dev/sda1 1.8T 1.7T 31G 99% /
tmpfs 32G 192K 32G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 32G 0 32G 0% /sys/fs/cgroup
/dev/sdi 5.5T 4.3T 879G 84% /backup
/dev/md0 9.1T 1.3T 7.4T 15% /raid/Global
tmpfs 6.3G 0 6.3G 0% /run/user/1002
tmpfs 6.3G 0 6.3G 0% /run/user/1012
tmpfs 6.3G 0 6.3G 0% /run/user/1001
tmpfs 6.3G 64K 6.3G 1% /run/user/1004
看到挂载的阵列是 /dev/md0,卸载阵列:sudo umount /dev/md0
然后移除此阵列:sudo mdadm --stop /dev/md0
sudo mdadm --remove /dev/md0
再查看一下挂载情况: df -h
Filesystem Size Used Avail Use% Mounted on
udev 32G 0 32G 0% /dev
tmpfs 6.3G 45M 6.3G 1% /run
/dev/sda1 1.8T 1.7T 31G 99% /
tmpfs 32G 192K 32G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 32G 0 32G 0% /sys/fs/cgroup
/dev/sdi 5.5T 4.3T 879G 84% /backup
tmpfs 6.3G 0 6.3G 0% /run/user/1002
tmpfs 6.3G 0 6.3G 0% /run/user/1012
tmpfs 6.3G 0 6.3G 0% /run/user/1001
tmpfs 6.3G 64K 6.3G 1% /run/user/1004
此时md0 已经没有挂载了。
之前的磁盘已经做过阵列,我们需要查看是否是超级快(SUPERBLOCK):lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
NAME SIZE FSTYPE TYPE MOUNTPOINT
sda 00G disk
sdb 00G disk
sdc 00G linux_raid_member disk
sdd 00G linux_raid_member disk
sde 00G disk
sdf 00G disk
sdg 00G disk
sdh 00G disk
sudo mdadm --zero-superblock /dev/sdc
sudo mdadm --zero-superblock /dev/sdd
由于阵列是在/etc/fstab 文件内知道挂载,在这里还需要注释之前的文件。
# /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0
同时需要移除之前原有的阵列设置:
# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=7261fb9c:976d0d97:30bc63ce:85e76e91
最后更新 initramfs 系统:
sudo update-initramfs -u
重新组建阵列
sudo mdadm --creat --verbose /dev/md0 --level=6 --raid-devices=7 /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg
提示成功说明已经创建成功了。
阵列创建成功了还需要挂载文件系统:
sudo mkfs.ext4 -F /dev/md0
在文件系统上创建挂载点文件夹:
sudo mkdir -p /mnt/raid/Global
挂载阵列至挂载点文件夹上
sudo mount /dev/md0 /mnt/raid/Global
检查是否已经具有新的磁盘空间:
df -h : /dev/md0 9.1T 1.3T 7.4T 15% /raid/Global
现在文件系统已经成载挂载将可以访问了。
如何设置开机自动挂载
为了确保阵列开机时被载入,我们应该调整一下 /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 启动后就会自动将磁盘阵列挂入了。
-----------------------------------------------------
更多科技生活消息,请关注安卓ROM定制。
领取专属 10元无门槛券
私享最新 技术干货