RAID详解[RAID0/RAID1/RAID10/RAID5]
raid10 RHEL5中mdadm配置raid5磁盘阵列 Linux 分区类型 一步步做raid5+lvm实验
什么是硬盘缓存Cache 硬盘缓存的作用
缓存英文名为Cache,它也是内存的一种,其数据交换速度快且运算频率高。硬盘的缓存是硬盘与外部总线交换数据的场所。...
什么是硬盘缓存?硬盘缓存有什么用? 硬盘缓存 缓存英文名为Cache,它也是内存的一种,其数据交换速度快且运算频率高。 硬盘的缓存是硬盘与外部总线交换数据的场所。硬盘的读数据的过程是将磁信号转化为电信号后,通过缓存一次次地填充与清空,再填充,再清空,一步步按照PCI总线的周期送出,可见,缓存的作用是相当重要的。 什么是硬盘缓存 根据写入方式的不同,有写通式和回写式两种。写通式在读硬盘数据时,系统先检查请求指令,看看所要的数据是否在缓存中,如果在的话就由缓存送出响应的数据,这个过程称为命中。这样系统就不必访问硬盘中的数据,由于SDRAM的速度比磁介质快很多,因此也就加快了数据传输的速度。回写式就是在写入硬盘数据时也在缓存中找,如果找到就由缓存将数据写入盘中,现在的多数硬盘都是采用回写式的硬盘,这样就大大提高了性能。 硬盘在控制器上的一块内存芯片,其类型一般以SDRAM为主,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部数据传输速度和外界介面传输速度不同,缓存在其中起到一个缓冲的作用。缓存的大小与速度是直接关系到硬盘的传输速度的重要因素,能够大幅度地提高硬盘整体性能。当硬盘存取零碎数据时需要不断地在硬盘与内存之间交换数据,如果有大缓存,则可以将那些零碎数据暂存在缓存中,减小外系统的负荷,也提高了数据的传输速度。在接口技术已经发展到一个相对成熟的阶段的时候,缓存的大小与速度是直接关系到硬盘的传输速度的重要因素。目前主流硬盘的缓存主要有8MB和16MB等几种,最大的台式机缓存容量如已经提升到64M。 硬盘缓存的主要作用 硬盘的缓存主要起三种作用: 预读取 一是预读取。当硬盘受到CPU指令控制开始读取数据时,硬盘上的控制芯片会控制磁头把正在读取的簇的下一个或者几个簇中的数据读到缓存中(由于硬盘上数据存储时是比较连续的,所以读取命中率较高),当需要读取下一个或者几个簇中的数据的时候,硬盘则不需要再次读取数据,直接把缓存中的数据传输到内存中就可以了,由于缓存的速度远远高于磁头读写的速度,所以能够达到明显改善性能的目的。 对写入动作进行缓存 二是对写入动作进行缓存。当硬盘接到写入数据的指令之后,并不会马上将数据写入到盘片上,而是先暂时存储在缓存里,然后发送一个“数据已写入”的信号给系统,这时系统就会认为数据已经写入,并继续执行下面的工作,而硬盘则在空闲(不进行读取或写入的时候)时再将缓存中的数据写入到盘片上。虽然对于写入数据的性能有一定提升,但也不可避免地带来了安全隐患——如果数据还在缓存里的时候突然掉电,那么这些数据就会丢失。对于这个问题,硬盘厂商们自然也有解决办法:掉电时,磁头会借助惯性将缓存中的数据写入零磁道以外的暂存区域,等到下次启动时再将这些数据写入目的地。 临时存储最近访问过的数据 三是临时存储最近访问过的数据。有时候,某些数据是会经常需要访问的,硬盘内部的缓存会将读取比较频繁的一些数据存储在缓存中,再次读取时就可以直接从缓存中直接传输。缓存就像是一台计算机的内存一样,在硬盘读写数据时,负责数据的存储、寄放等功能。这样一来,不仅可以大大减少数据读写的时间以提高硬盘的使用效率。同时利用缓存还可以让硬盘减少频繁的读写,让硬盘更加安静,更加省电。更大的硬盘缓存,你将读取游戏时更快,拷贝文件时候更快,在系统启动中更为领先。 |
先说说CPU的Cache,它中文名称是高速缓冲存储器,读写速度很快,几乎与CPU一样。由于CPU的运算速度太快,内存的数据存取速度无法跟上CPU的速度,所以在cpu与内存间设置了cache为cpu的数据快取区。
当计算机执行程序时,数据与地址管理部件会预测可能要用到的数据和指令,并将这些数据和指令预先从内存中读出送到Cache。一旦需要时,先检查Cache,若有就从Cache中读取,若无再访问内存。
简单来说,Cache就是用来解决CPU与内存之间速度不匹配的问题,避免内存与辅助内存频繁存取数据,这样就提高了系统的执行效率。
而硬盘的cache作用就类似于CPU的cache,它解决了总线接口的高速需求和读写硬盘的矛盾以及对某些扇区的反复读取。
最好看后面自己测试的教程
[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 5 -n 4 -x 1 /dev/sdb{5..9} ####-C:创建/dev/md0设备,-a:是否自动检测这里为yes,-l:raid的级别这里为raid5,-n:几块硬盘做为RUN,-x:几块硬盘作为备用
~~~~~~~~~~~~~~~~~~~~~~~~~
根据鸟哥 做raid5(最少需要三块硬盘) 虚拟机 添加一个6G硬盘 分6个6G raid5这里用5个 1个做sparedisk 其余四个做raid5 还有一个1g留着备用
1、分区
fdisk /dev/sdc
n
一共分6个1G sdc1 2 3 4 5 6 7 4开始是extend
w
partprobe
2、raid5
接下来做raid
[root@localhost zzx]# mdadm --create --auto=yes /dev/md0 --level=5 --raid-devices=4 --spare-devices=1 /dev/sdc{2,3,5,6,7} #23567五个 sdc1留着备用--raid-devices=4 #代表用于创建Raid的设备数目 --level=5 #代表Raid的级别,Linux支持Linux supports LINEAR md devices, RAID0 (striping), RAID1 (mirroring), RAID4, RAID5, RAID6, RAID10, MULTIPATH, and FAULTY
后面就是设备列表了。
[root@localhost zzx]# mdadm --detail /dev/md0 #构建需要一点时间 最好等待数分钟后再查询
Number Major Minor RaidDevice State
0 8 34 0 active sync /dev/sdc2
1 8 35 1 active sync /dev/sdc3
2 8 37 2 active sync /dev/sdc5
5 8 38 3 active sync /dev/sdc6
4 8 39 - spare /dev/sdc7 #备用磁盘 当前面四个有一个坏掉会马上替换损坏的磁盘
[root@localhost zzx]# cat /proc/mdstat #这个也可以查
接下来格式化raid
[root@localhost raidtest]# mkfs -t ext3 /dev/md0
接着挂载
[root@localhost raidtest]# mkdir raidtest
[root@localhost raidtest]# mount /dev/md0 /home/zzx/raidtest/ #到此raid就做好了 接下来测试硬盘损坏 救援模式
3、磁盘错误 救援模式还原
设置硬盘为错误
[root@localhost raidtest]# mdadm --manage /dev/md0 --fail /dev/sdc2 #sdc2设置模拟错误
[root@localhost raidtest]# cat /proc/mdstat #sdc7替换了死掉的sdc2
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdc6[5] sdc7[4] sdc5[2] sdc3[1] sdc2[0](F)
3130368 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
接下来替换坏的分区 用一个相同大小的新分区替换
[root@localhost raidtest]# mdadm --manage /dev/md0 --add /dev/sdc1 --remove /dev/sdc2 #刚好用sdc1替换 或者 mdadm /dev/md0 -a ** -r ** 就行
mdadm: added /dev/sdc1
mdadm: hot removed /dev/sdc2 from /dev/md0
[root@localhost raidtest]# cat /proc/mdstat #之前备用的sdc1现在变成了S
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdc1[6](S) sdc6[5] sdc7[4] sdc5[2] sdc3[1]
3130368 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
4、设置开机启动raid
[root@localhost raidtest]# mdadm --detail /dev/md0|grep UUID
UUID : 4129bbe7:c7e078cf:d417686d:d10fca1e
[root@localhost raidtest]# vi /etc/mdadm.conf #添加文件 进行设置
ARRAY /dev/md0 UUID=4129bbe7:c7e078cf:d417686d:d10fca1e[root@localhost raidtest]# vi /etc/fstab
关于mdadm.cof (在分区的时候应该把/dev/sdb1 /dev/sdc1 /dev/sdd1三个分区的格式转成fd,然后才能用mdadm命令来创建raid)
1、转为 FD 的时候 ,可以不用 mdadm.conf ,系统重启后 md 阵列能正常加载。
2、不转为 FD时候,如果 mdadm.conf 为空,重启后不加载 MD阵列。只有编辑了 mdadm.conf 才行。
[root@localhost raidtest]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 18348032 4156824 14191208 23% /
devtmpfs 496140 0 496140 0% /dev
tmpfs 505428 80 505348 1% /dev/shm
tmpfs 505428 7256 498172 2% /run
tmpfs 505428 0 505428 0% /sys/fs/cgroup
/dev/sda1 508588 162528 346060 32% /boot
/dev/md0 3015632 6016 2836716 1% /home/zzx/raidtest
[root@localhost raidtest]# umount /dev/md0
umount: /home/zzx/raidtest:目标忙。
(有些情况下通过 lsof(8) 或 fuser(1) 可以
找到有关使用该设备的进程的有用信息)
[root@localhost raidtest]# fuser -m -v -i -k /dev/md0
用户 进程号 权限 命令
/dev/md0: root kernel mount /home/zzx/raidtest
root 2883 ..c.. bash
杀死进程 2883 ? (y/N) y
已杀死 (core dumped)
[zzx@localhost ~]$ sudo su
[sudo] password for zzx:
[root@localhost zzx]# umount /dev/md0
[root@localhost zzx]# df /home/zzx/raidtest
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 18348032 4156844 14191188 23% /
[root@localhost zzx]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 18348032 4156824 14191208 23% /
devtmpfs 496140 0 496140 0% /dev
tmpfs 505428 80 505348 1% /dev/shm
tmpfs 505428 7256 498172 2% /run
tmpfs 505428 0 505428 0% /sys/fs/cgroup
/dev/sda1 508588 162528 346060 32% /boot
[root@localhost zzx]# mount -a
[root@localhost zzx]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 18348032 4156824 14191208 23% /
devtmpfs 496140 0 496140 0% /dev
tmpfs 505428 80 505348 1% /dev/shm
tmpfs 505428 7256 498172 2% /run
tmpfs 505428 0 505428 0% /sys/fs/cgroup
/dev/sda1 508588 162528 346060 32% /boot
/dev/md0 3015632 6016 2836716 1% /home/zzx/raidtest
5、关闭raid
umount /dev/md0
vi /etc/fstab 注释
mdadm --stop /dev/md0
cat /proc/mdstat
vi /etc/mdadm.conf
Linux 分区类型
查看全部分区类型:fdisk -l
修改分区类型:
1. 进入修改模式:fdisk /dev/hdb
2. 显示现有分区类型:p
3. 修改分区类型:t
4. 制定第几个分区:1~4
5. 查看所有可用分区类型:l
默认:83
LVM:8e
系统级raid(软raid):fd
6. 输入相应的分区类型
7. 保存修改:w
~~~~~~~~~~~~~~~~~~~~~~
测试
~~~~~~~~~~~~~~~~~~~~~~
添加4个1G硬盘 bcde 分区 格式化
[root@localhost ~]# fdisk /dev/sdb #结束前用p查看一下
n
默认回车
t
fd
w
[root@localhost ~]# mkfs.xfs /dev/sdb1 #cde一样的操作 在用fdisk -l查看
[root@localhost ~]# mdadm -C /dev/md0 -l5 -n3 /dev/sdb1 /dev/sdc1 /dev/sdd1 #这里没设置备用磁盘spare 成功提示 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
2093056 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
[root@localhost zzxtest]# mkfs.xfs /dev/md0
格式化完挂载 vim /etc/fstab /dev/md0 /home/zzxtest xfs defaults 0 0 因为磁盘为fd格式 所以不需要修改 vi /etc/mdadm.conf
mdadm.conf修改参考如下:
建立raid5的配置文件
[root@RHEL5-1 ~]# echo device /dev/sdb1 /dev/sdc1 /dev/sdd1 > /etc/mdadm.conf
[root@RHEL5-1 ~]# mdadm --detail --scan >> /etc/mdadm.conf
[root@RHEL5-1 ~]# cat /etc/mdadm.conf
device /dev/sdb1 /dev/sdc1 /dev/sdd1
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=36f261b7:4899a54c:9edf36d1:9eb86529
[root@RHEL5-1 ~]# mdadm -S /dev/md0 //停止阵列
mdadm: stopped /dev/md0
[root@RHEL5-1 ~]# mdadm -As /dev/md0 //启动阵列
mdadm: /dev/md0 has been started with 3 drives.
[root@localhost zzxtest]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 19G 1.3G 18G 8% /
devtmpfs devtmpfs 236M 0 236M 0% /dev
tmpfs tmpfs 242M 4.6M 238M 2% /run
tmpfs tmpfs 242M 16K 242M 1% /sys/fs/cgroup
/dev/sda1 xfs 497M 106M 392M 22% /boot
/dev/md0 xfs 2.0G 33M 2.0G 2% /home/zzxtest #容量是N-1个磁盘
接着上面的raid做LVM
[root@localhost ~]# pvcreate /dev/md0 #创建物理卷
Physical volume "/dev/md0" successfully created
如果pvcreate失败 用
dd if=/dev/urandom f=/dev/md0 bs=512 count=64
[root@localhost ~]# vgcreate raid5vg /dev/md0 #创建卷组
[root@localhost ~]# lvcreate -L +500M -n lv500 raid5vg #创建逻辑卷
[root@localhost ~]# mkfs.ext4 /dev/raid5vg/lv500 #格式化逻辑卷
[root@localhost ~]# mount /dev/raid5vg/lv500 /home/zzxtest/
[root@localhost ~]# df -hT # /dev/mapper/raid5vg-lv500 ext4 477M 2.3M 445M 1% /home/zzxtest
[root@localhost ~]# lvextend -L 1G -f -r /dev/raid5vg/lv500 #增减逻辑卷大小 原来500M 增加到1G 先回原先的大小会提示 The filesystem is already XXX blocks long. Nothing to do!
[root@localhost ~]# df -hT # /dev/mapper/raid5vg-lv500 ext4 984M 2.8M 932M 1% /home/zzxtest
接下来减小lvm
[root@localhost ~]# umount /home/zzxtest/ #先umount
[root@localhost ~]# resize2fs /dev/raid5vg/lv500 400M #会提示要先运行 ‘e2fsck -f /dev/raid5vg/lv500 ’
[root@localhost ~]# mount /dev/raid5vg/lv500 /home/zzxtest/ #重新挂载
[root@localhost ~]# df -hT #/dev/mapper/raid5vg-lv500 ext4 380M 2.3M 357M 1% /home/zzxtest
接下来测试raid复原
[root@localhost zzxtest]# mdadm /dev/md0 -f /dev/sdd1 #先把一个磁盘设置为错误
[root@localhost zzxtest]# mdadm --detail /dev/md0
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 0 0 2 removed
3 8 49 - faulty /dev/sdd1 #此时检查文件不会丢失
[root@localhost zzxtest]# mdadm /dev/md0 -r /dev/sdd1 #接着移除错误磁盘sdd1
[root@localhost zzxtest]# mdadm /dev/md0 -a /dev/sde1 #添加一个新的磁盘 或者把坏的磁盘重新格式化后重新添加进来
[root@localhost zzxtest]# mdadm --detail /dev/md0 #添加完马上进程检查会发现正在同步数据 同步完显示 3 8 65 2 active sync /dev/sde1
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
3 8 65 2 spare rebuilding /dev/sde1
到此就手动替换完了 由于没有设置spare所以不会自动替换
重新分区sdd1
~~~~~~~~~~~~~
lvm扩容
~~~~~~~~~~~~~~~
创建PV,扩容VG,LV
pvcreate /dev/hda6
vgdisplay #查看当前已经存在的VG信息,以存在VG:VolGroup00为例
vgextend VolGroup00 /dev/hda6 #扩展VolGroup00
lvdisplay #查看已经存在的LV信息,以存在LV:LogVol01为例
lvextend –L 1G /dev/VolGroup00/LogVol01 #扩展LV
resize2fs /dev/VolGroup00/LogVol01 #执行该重设大小,对于当前正在使用的LogVol01有效
df –h #查看挂载情况,已经扩容
~~~~~~
接着上面测试
~~~~~~~
重新格式化sdd为8e 准备pvcreate /dev/sdd1 提示 Physical volume /dev/sdd1 not found
WARNING: linux_raid_member signature detected on /dev/sdd1 at offset 4096. Wipe it? [y/n]
看来还是别动sdd为好 让sdd继续做raid盘 继续添加2G磁盘sdf 格式化8e
[root@localhost ~]# partx /dev/sdf #查看磁盘
[root@localhost ~]# pvcreate /dev/sdf1
[root@localhost ~]# vgextend raid5vg /dev/sdf1 #添加物理卷sdf1到raid5vg 此时pvdisplay
至此vg扩容完毕 接下来可以lv扩增 lvextend
[root@localhost home]# lvextend -L 3.5G -f -r -n /dev/raid5vg/lv500 #重新执行添加参数 -f -r 把大小扩增到3.5G了 df后查看就是3.5 不会像之前的lv变大后df后大小不变 -n不用也行
[root@localhost zzxtest]# lvextend -L +500M -f -r /dev/raid5vg/lv500 # 等于两步 1、lvextend -L +500M /dev/raid5vg/lv500 2、xfs_growfs /dev/mapper/raid5vg-lv500 (如果lvm格式是xfs时 前面raid5做的lv是ext4)
为了让文件系统识别增加后的卷大小,你需要“扩大”现有的文件系统本身。有不同的工具可用来扩大现有的文件系统,这取决于你使用哪种文件系统。比如说,有面向EXT2/EXT3/EXT4的resize2fs、面向XFS的xfs_growfs以及面向Btrfs的btrfs,不一而足。 resize2fs支持ext4可以扩大和缩小 resize2fs - ext2/ext3/ext4文件系统重定义大小工具 xfs_growfs支持xfs 只能扩大不能缩小所以xfs的lv无法缩小
原来之前用resize2fs是错误的 xfs要用xfs_growfs xfs_growfs还必须是挂载的文件系统才能调整
ext4文件的减小
[root@localhost ~]# e2fsck -f /dev/zzxvg/lv500
[root@localhost ~]# resize2fs /dev/zzxvg/lv500 1G
[root@localhost ~]# lvreduce -L 1G /dev/zzxvg/lv500