Liunx软Raid实现

                                                    作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

  在配置软Raid之前,我们首先要了解一下什么是Raid,Raid又分哪几个系列?哪个又是最靠谱的组合?我们生产环境中有必要用Raid吗?各个级别的Raid适合什么样的生产场景等等,带着这一些列的问题,让我们一起先了解一下Raid.

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com '''
仅用于标识磁盘组合方式的不同 Raid0:
工作原理:
Raid0是所有raid中存储性能最强的阵列形式。其工作原理就是在多个磁盘上分散存取连续的数据,这样,当需要存取数据是多个磁盘可以并排执行,每个磁盘执行属于它自己的那部分数据请求,显著提高磁盘整体存取性能。
适用场景:
至少需要两块磁盘,没有容错能力,读写性能都提示, 磁盘空间利用率提升了100%,两块磁盘型号最好要一样,一般存放swap,或者/tmp目录的,适用于低成本、低可靠性的台式系统。 Raid1:
工作原理:
又称镜像盘,把一个磁盘的数据镜像到另一个磁盘上,采用镜像容错来提高可靠性,具有raid中最高的数据冗余能力。存数据时会将数据同时写入镜像盘内,读取数据则只从工作盘读出。发生故障时,系统将从镜像盘读取数据,然后再恢复工作盘正确数据。这种阵列方式可靠性极高,但是其容量会减去一半。
适用场景:
至少需要两块磁盘,镜像,具有硬件容错能力,读性能提升,写性能下降,磁盘空间利用率只有50%。广泛用于数据要求极严的应用场合,如商业金融、档案管理等领域。只允许一颗硬盘出故障。要注意的是,具有硬件容错能力 != 你可以对数据不进行备份。
因此对重要数据的备份一定要做好。 Raid4:
工作原理:
至少需要三块磁盘,两块盘存数据,一块盘单独用来存另外两块磁盘的校验值。读写性能有所提升,读写性能(n-1)/n。而Raid5是缺吧数据和校验值打乱,分别存到3快磁盘上去。详情可以参考Raid5介绍。Raid生产环境很少人用。 Raid5:
工作原理:
Raid5可以看成是Raid0+1的低成本方案。采用循环偶校验独立存取的阵列方式。将数据和相对应的奇偶校验信息分布存储到组成RAID5的各个磁盘上。当其中一个磁盘数据发生损坏后,利用剩下的磁盘和相应的奇偶校验信息 重新恢复/生成丢失的数据而不影响数据的可用性。
适用场景:
至少需要3个或以上的硬盘。适用于大数据量的操作。成本稍高、储存新强、可靠性强的阵列方式。适合用来安装操作系统。 Raid6:
工作原理:
其实他就是在Raid5上做的一个优化,存储机制和Raid5类似,只不过多了一块磁盘做热备,当其中一块磁盘坏掉时,另外一块磁盘立即补位,完成存储功能。
适用场景:
至少需要四块磁盘,允许两块盘出错,读写性能提升,磁盘利用率(n-2)/n Raid10:
工作原理:
其实就是Raid1+Raid0的组合,至少需要四块磁盘,允许不同组内各坏一块磁盘,读写性能提升,磁盘使用率50%。
使用场景:
如果有重要数据的话,建议用这种模式,该模式是就有冗余能力的。不建议用Raid5或者Raid01来存取重要的数据,因为Raid5不靠谱,当一块磁盘坏掉的话,工作性能变得特别差!如果在坏一块的话就彻底不能工作了。 Raid01:
将Raid0和Raid1技术结合在一起,兼顾两者的优势。在数据得到保障的同时,还能提供较强的存储性能。不过至少要求4个或以上的硬盘,也只运行一个磁盘出错。是一种高成本、高可靠性、高存储性能的三高阵列技术。 后记:
软Raid没有硬Raid性能好,不建议使用,因为软Raid是操作系统提供的一个MD模块来实现的,如果用软Raid去存取数据,对CPU消耗也是很大的,会降低服务器性能。虽然比不上硬Raid,但是有总比没有好,做了软Raid就是比不做Raid要强这是没话说的。
软Raid只能识别的文件系统表示是:FD,因此我们在配置的时候一定要注意。 '''

  通过以上的知识点,我们了解到了Raid比较常见的几个级别,我以上还没有介绍完呢,还有很多类型。但是这不是重点,即使有我告诉你我也不会配置,我就会配置常见的几款Raid级别,一会我会一一揭晓的,在配置之前,我们需要做一个准备工作,比如,我们配置一个创建一个大小为6G的RAID0,根据其原理,我们可以创建2个分区,而且2个分区空间大小一样。好,让我们一起来做一下准备工作。

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com '''
[root@yinzhengjie ~]# fdisk /dev/sdb #对sdb这块新硬盘进行分区
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xc9f2a383.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u'). Command (m for help): p #查看分区信息 Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc9f2a383 Device Boot Start End Blocks Id System Command (m for help): n #创建一个新的分区
Command action
e extended
p primary partition (1-4)
p #指定分区类型为主分区
Partition number (1-4): 1 #定义编号
First cylinder (1-2610, default 1): #指定其实位置,如果不指定,默认从1开始分配。
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +3G #指定结束位置为3G,因此这里是创建一个3G大小的分区 Command (m for help): N #新建一个分区
Command action
e extended
p primary partition (1-4)
P #配置其模式为主分区
Partition number (1-4): 2 #设置编号为2
First cylinder (394-2610, default 394):
Using default value 394
Last cylinder, +cylinders or +size{K,M,G} (394-2610, default 2610): +3G Command (m for help): w #保存以上的配置
The partition table has been altered! Calling ioctl() to re-read partition table.
Syncing disks.
[root@yinzhengjie ~]# cat /proc/partitions #查看分区信息,由于我这是款新硬盘,可以不用重读分区表系统就能自动识别出来。
major minor #blocks name 8 16 20971520 sdb
8 17 3156741 sdb1
8 18 3156772 sdb2
8 0 20971520 sda
8 1 307200 sda1
8 2 18631680 sda2
8 3 2031616 sda3
8 32 20971520 sdc
[root@yinzhengjie ~]# fdisk /dev/sdb #由于我们需要做Raid,因此我们需要对分区做修改,即修改分区的类型 WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u'). Command (m for help): p #查看当前分区情况,请注意其ID信息 Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc9f2a383 Device Boot Start End Blocks Id System
/dev/sdb1 1 393 3156741 83 Linux
/dev/sdb2 394 786 3156772+ 83 Linux Command (m for help): t #修改ID
Partition number (1-4): 1 #选择分区标号
Hex code (type L to list codes): fd #指定RAID可以识别的分区类型
Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): t #原理同上
Partition number (1-4): 2
Hex code (type L to list codes): fd
Changed system type of partition 2 to fd (Linux raid autodetect) Command (m for help): p #注意观察IP情况和System的变化 Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc9f2a383 Device Boot Start End Blocks Id System
/dev/sdb1 1 393 3156741 fd Linux raid autodetect
/dev/sdb2 394 786 3156772+ fd Linux raid autodetect Command (m for help): w #保存当前配置
The partition table has been altered! Calling ioctl() to re-read partition table.
Syncing disks.
[root@yinzhengjie ~]# '''

  做好了准备环境之后,配置起来就简单的多了,其实只需要一条命令就搞定了,我们如果配置呢?请往下看:

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com '''
[root@yinzhengjie ~]# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2} #创建一个RAID0
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@yinzhengjie ~]# cat /proc/mdstat #查看RAID信息
Personalities : [raid0] #提示属性是RAID0
md0 : active raid0 sdb2[1] sdb1[0] #该状态为活跃状态,后面跟了2个设备名称,其实就是我们刚刚分的2个分区。
6308864 blocks super 1.2 512k chunks unused devices: <none>
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# mdadm -D /dev/md0 #从上面我们看到了有个"md0"的标记,我们可以看它的具体详细信息系,当然这个-D就等价于--detail参数,下面我也有演示
/dev/md0:
Version : 1.2
Creation Time : Mon May 15 05:56:32 2017
Raid Level : raid0 #显示RAID的级别
Array Size : 6308864 (6.02 GiB 6.46 GB) #显示RAID的磁盘大小
Raid Devices : 2 #表示当前RAID级别有几块设备
Total Devices : 2 #表示总数的设备
Persistence : Superblock is persistent Update Time : Mon May 15 05:56:32 2017 #更新时间
State : clean
Active Devices : 2 #活动状态的
Working Devices : 2 #处于工作状态的,如果这个数字不正常的话,那么你的RAID就真的出现问题了,因为我们知道RAID0是没有冗余效果的。
Failed Devices : 0
Spare Devices : 0 Chunk Size : 512K Name : yinzhengjie:0 (local to host yinzhengjie)
UUID : 0fe39292:6216e860:6f92259a:38b22186
Events : 0 Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2
[root@yinzhengjie ~]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Mon May 15 05:56:32 2017
Raid Level : raid0
Array Size : 6308864 (6.02 GiB 6.46 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent Update Time : Mon May 15 05:56:32 2017
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0 Chunk Size : 512K Name : yinzhengjie:0 (local to host yinzhengjie)
UUID : 0fe39292:6216e860:6f92259a:38b22186
Events : 0 Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 18 1 active sync /dev/sdb2
[root@yinzhengjie ~]# '''

  好了,上面是配置RAID0的全过程,那么配置RAID1又是如何做到的呢?其实so easy,用法几乎一致,首先你得配置好环境,假如我们创建一个18G的RAID1我们应该如何做呢?

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com ''' [root@yinzhengjie ~]# fdisk /dev/sdc #对新设备进行分区
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x7edec25e.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u'). Command (m for help): P #查看当前分区情况 Disk /dev/sdc: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x7edec25e Device Boot Start End Blocks Id System Command (m for help): N #创建一个新的分区
Command action
e extended
p primary partition (1-4)
P
Partition number (1-4): 1
First cylinder (1-2610, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +9G Command (m for help): N #在此创建一个新的分区
Command action
e extended
p primary partition (1-4)
P
Partition number (1-4): 2
First cylinder (1177-2610, default 1177):
Using default value 1177
Last cylinder, +cylinders or +size{K,M,G} (1177-2610, default 2610): +9G Command (m for help): P #创建完毕后,看一下您创建的是否正确 Disk /dev/sdc: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x7edec25e Device Boot Start End Blocks Id System
/dev/sdc1 1 1176 9446188+ 83 Linux
/dev/sdc2 1177 2352 9446220 83 Linux
Command (m for help): t #修改一下分区类型为FD
Partition number (1-4): 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): fd
Changed system type of partition 2 to fd (Linux raid autodetect) Command (m for help): p #修改完毕后请确认是否为FD,如果这里不是FD,做RAID会报错的。 Disk /dev/sdc: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x7edec25e Device Boot Start End Blocks Id System
/dev/sdc1 1 1176 9446188+ fd Linux raid autodetect
/dev/sdc2 1177 2352 9446220 fd Linux raid autodetect Command (m for help): w #保存当前配置。
The partition table has been altered! Calling ioctl() to re-read partition table.
Syncing disks.
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# cat /proc/partitions #验证一下系统是否识别分区,如果没有识别用partx -a参数进行一下重读分区表即可,这里我用的是新磁盘实验,就不必了。
major minor #blocks name 8 16 20971520 sdb
8 17 3156741 sdb1
8 18 3156772 sdb2
8 0 20971520 sda
8 1 307200 sda1
8 2 18631680 sda2
8 3 2031616 sda3
8 32 20971520 sdc
8 33 9446188 sdc1 #看到了自己的分区。
8 34 9446220 sdc2
9 0 6308864 md0
[root@yinzhengjie ~]# '''

在/dev/sdb上配置好2个分区

  做好以上的配置环境之后,其实配置起来就很简单的,几乎和上面配置事一模一样的。

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com '''
[root@yinzhengjie ~]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdc{1,2} #创建RAID1
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? yes #这个消息忽略即可,输入yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# cat /proc/mdstat #在此查看RAID信息
Personalities : [raid0] [raid1]
md1 : active raid1 sdc2[1] sdc1[0]
9437952 blocks super 1.2 [2/2] [UU]
[====>................] resync = 23.3% (2200064/9437952) finish=0.5min speed=220006K/sec #我们发现RAID1正在把2个分区制作成镜像的过程,目前已经完成了23.3%,我们可以过段时间在来查看,也可以用watch命令实时查看进度情况。 md0 : active raid0 sdb2[1] sdb1[0]
6308864 blocks super 1.2 512k chunks unused devices: <none>
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# watch -n 1 'cat /proc/mdstat' #我们也可以通过监控命令实时查看进度
Every 1.0s: cat /proc/mdstat Mon May 15 06:23:40 2017 Personalities : [raid0] [raid1]
md1 : active raid1 sdc2[1] sdc1[0]
9437952 blocks super 1.2 [2/2] [UU] md0 : active raid0 sdb2[1] sdb1[0]
6308864 blocks super 1.2 512k chunks unused devices: <none>
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# mdadm -D /dev/md1 #查看RAID1的信息
/dev/md1:
Version : 1.2
Creation Time : Mon May 15 06:19:24 2017
Raid Level : raid1
Array Size : 9437952 (9.00 GiB 9.66 GB)
Used Dev Size : 9437952 (9.00 GiB 9.66 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent Update Time : Mon May 15 06:20:11 2017
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0 Name : yinzhengjie:1 (local to host yinzhengjie)
UUID : cc10bfb8:cef2b77a:6a72b4b6:8c58484b
Events : 17 Number Major Minor RaidDevice State
0 8 33 0 active sync /dev/sdc1
1 8 34 1 active sync /dev/sdc2
[root@yinzhengjie ~]#
'''

  我们已经配置好RAI0和RAID1啦,那么我们光创建不用不就白扯了么。所以我们来用一下这文件,在用之前,我们需要格式化,挂载,之后才能使用,

 [root@yinzhengjie ~]# mke2fs -t ext4 /dev/md0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
394352 inodes, 1577216 blocks
78860 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1619001344
49 block groups
32768 blocks per group, 32768 fragments per group
8048 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736 Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@yinzhengjie ~]# mke2fs -t ext4 /dev/md1
mke2fs 1.41.12 (17-May-2010)
warning: 192 blocks unused. Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
590976 inodes, 2359296 blocks
117974 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2415919104
72 block groups
32768 blocks per group, 32768 fragments per group
8208 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@yinzhengjie ~]#

格式化一下RAID设备

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com '''
[root@yinzhengjie ~]# mkdir /yinzhengjie/md{0,1}
[root@yinzhengjie ~]# mount /dev/md0 /yinzhengjie/md0 #挂载一下RAID0
[root@yinzhengjie ~]# ll /yinzhengjie/md0 #查看该目录有“lost+found”文件,说明已经挂载成功了
total 16
drwx------. 2 root root 16384 May 15 06:29 lost+found
[root@yinzhengjie ~]# mount /dev/md1 /yinzhengjie/md1 #同理也挂载一下RAID1
[root@yinzhengjie ~]# ll /yinzhengjie/md1
total 16
drwx------. 2 root root 16384 May 15 06:29 lost+found
[root@yinzhengjie ~]#
'''

挂载RAID设备并验证是否成功

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com '''
[root@yinzhengjie ~]# cp /etc/shadow /yinzhengjie/md1 #我们将数据放在RAID1的设备里。
[root@yinzhengjie ~]# mdadm /dev/md1 -f /dev/sdc1 #我们模拟一下将RAI1的一个分区标记为坏掉
mdadm: set /dev/sdc1 faulty in /dev/md1
[root@yinzhengjie ~]# mdadm -D /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Mon May 15 06:19:24 2017
Raid Level : raid1
Array Size : 9437952 (9.00 GiB 9.66 GB)
Used Dev Size : 9437952 (9.00 GiB 9.66 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent Update Time : Mon May 15 06:40:34 2017
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
Spare Devices : 0 Name : yinzhengjie:1 (local to host yinzhengjie)
UUID : cc10bfb8:cef2b77a:6a72b4b6:8c58484b
Events : 19 Number Major Minor RaidDevice State
0 0 0 0 removed
1 8 34 1 active sync /dev/sdc2 #但是这里还有一个分区是活跃的状态,所以即使又快磁盘划掉也是还能工作的 0 8 33 - faulty /dev/sdc1 #这里就是状态是非活跃的,即faulty
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# cat /yinzhengjie/md1/shadow #发现这个数据我们仍然能访问到。尽管坏掉一块磁盘照样好使。
root:$1$/c6cpJcF$RGntN1yDg5LqBA8jlikx31:17144:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
shutdown:*:15980:0:99999:7:::
halt:*:15980:0:99999:7:::
mail:*:15980:0:99999:7:::
uucp:*:15980:0:99999:7:::
operator:*:15980:0:99999:7:::
games:*:15980:0:99999:7:::
gopher:*:15980:0:99999:7:::
ftp:*:15980:0:99999:7:::
nobody:*:15980:0:99999:7:::
dbus:!!:17137::::::
usbmuxd:!!:17137::::::
vcsa:!!:17137::::::
rtkit:!!:17137::::::
avahi-autoipd:!!:17137::::::
abrt:!!:17137::::::
haldaemon:!!:17137::::::
gdm:!!:17137::::::
ntp:!!:17137::::::
apache:!!:17137::::::
saslauth:!!:17137::::::
postfix:!!:17137::::::
pulse:!!:17137::::::
sshd:!!:17137::::::
tcpdump:!!:17137::::::
iptables:$1$wlgfZEy9$gxJIFTDNpFLrwVYOZAaIQ.:17137:0:99999:7:::
pegasus:!!:17149::::::
cimsrvr:!!:17149::::::
rpc:!!:17149:0:99999:7:::
rpcuser:!!:17149::::::
nfsnobody:!!:17149::::::
dhcpd:!!:17149::::::
zabbix:!!:17180::::::
bind:!!:17253:0:99999:7:::
[root@yinzhengjie ~]#
'''

模拟RAI1坏掉设备时服务照样是可以访问的。

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com '''
[root@yinzhengjie ~]# mdadm /dev/md1 -r /dev/sdc1 #刚刚我们看到这个设备(这个分区,我们是模拟的设备)已经了,因此我们将这个坏掉的设备下架。
mdadm: hot removed /dev/sdc1 from /dev/md1
[root@yinzhengjie ~]# mdadm -D /dev/md1 #查看信息,目前仅仅有一个分区(设备)在工作。
/dev/md1:
Version : 1.2
Creation Time : Mon May 15 06:19:24 2017
Raid Level : raid1
Array Size : 9437952 (9.00 GiB 9.66 GB)
Used Dev Size : 9437952 (9.00 GiB 9.66 GB)
Raid Devices : 2
Total Devices : 1
Persistence : Superblock is persistent Update Time : Mon May 15 06:45:26 2017
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
Spare Devices : 0 Name : yinzhengjie:1 (local to host yinzhengjie)
UUID : cc10bfb8:cef2b77a:6a72b4b6:8c58484b
Events : 34 Number Major Minor RaidDevice State
0 0 0 0 removed
1 8 34 1 active sync /dev/sdc2 #这个就是在正常工作的设备。
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# mdadm /dev/md1 -a /dev/sdc1 #这个时候作为运维的我们,需要更换新的设备来做生成环境种的镜像盘,“/dev/sdc1”这个其实就是一个新换掉的设备,大家别理解成我刚刚那个坏掉的设备就好,
mdadm: added /dev/sdc1
[root@yinzhengjie ~]# mdadm -D /dev/md1 #在此查看RAID配置信息
/dev/md1:
Version : 1.2
Creation Time : Mon May 15 06:19:24 2017
Raid Level : raid1
Array Size : 9437952 (9.00 GiB 9.66 GB)
Used Dev Size : 9437952 (9.00 GiB 9.66 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent Update Time : Mon May 15 06:48:44 2017
State : clean, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 1 Rebuild Status : 9% complete #由于我刚刚加载上,它在做镜像的时候,如果数据量过大的话是需要时间耐心等待多,当然您也可以用watch命令来监控一下进度的。 Name : yinzhengjie:1 (local to host yinzhengjie)
UUID : cc10bfb8:cef2b77a:6a72b4b6:8c58484b
Events : 37 Number Major Minor RaidDevice State
2 8 33 0 spare rebuilding /dev/sdc1
1 8 34 1 active sync /dev/sdc2
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sdc1[2] sdc2[1]
9437952 blocks super 1.2 [2/2] [UU] md0 : active raid0 sdb2[1] sdb1[0]
6308864 blocks super 1.2 512k chunks unused devices: <none>
[root@yinzhengjie ~]# mdadm
Usage: mdadm --help
for help
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# mdadm --detail /dev/md1 #等过段时间,再次查看设备信息就更新完毕了。
/dev/md1:
Version : 1.2
Creation Time : Mon May 15 06:19:24 2017
Raid Level : raid1
Array Size : 9437952 (9.00 GiB 9.66 GB)
Used Dev Size : 9437952 (9.00 GiB 9.66 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent Update Time : Mon May 15 06:49:28 2017
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0 Name : yinzhengjie:1 (local to host yinzhengjie)
UUID : cc10bfb8:cef2b77a:6a72b4b6:8c58484b
Events : 53 Number Major Minor RaidDevice State
2 8 33 0 active sync /dev/sdc1 #此时设备以及恢复成功了,在生产环境中又可以正常使用了
1 8 34 1 active sync /dev/sdc2
[root@yinzhengjie ~]# '''

模拟将坏掉的磁盘换掉,添加新的磁盘上去的过程。

  以上就是生产环境中比较老式的方式去干货,当磁盘坏掉的时候,需要我们监控到,监控到了之后还需要我们手动去更换,这个操作流程看起来是很麻烦的,那么如何让这个过程变得简单呢?这个时候又有人提出热备的功能,这个方法很靠谱啊,就是用3块磁盘做RAID1,让其中2块磁盘做镜像盘,其中一块磁盘休息,当其中任何一块正在工作的磁盘坏掉的时候,这个时候就是替补队员大显身手的时候,他会主动的去替换坏道的磁盘,自己主动去变为镜像磁盘去工作,这给运维人员也得到了缓解,当磁盘坏掉的时候,运维人员不用提心吊胆的担心什么时候去换它!好了,那么要如何实现呢?我这里还是用3个分区来代替三块磁盘,具体操作流程如下:

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com '''
[root@yinzhengjie ~]# fdisk /dev/sdb #对新磁盘进行分区
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x5101d254.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u'). Command (m for help): P Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5101d254 Device Boot Start End Blocks Id System Command (m for help): N
Command action
e extended
p primary partition (1-4)
P
Partition number (1-4): 1
First cylinder (1-2610, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +5G Command (m for help): N
Command action
e extended
p primary partition (1-4)
P
Partition number (1-4): 2
First cylinder (655-2610, default 655):
Using default value 655
Last cylinder, +cylinders or +size{K,M,G} (655-2610, default 2610): +5G Command (m for help): N
Command action
e extended
p primary partition (1-4)
P
Partition number (1-4): 3
First cylinder (1309-2610, default 1309):
Using default value 1309
Last cylinder, +cylinders or +size{K,M,G} (1309-2610, default 2610): +5G Command (m for help): P Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5101d254 Device Boot Start End Blocks Id System
/dev/sdb1 1 654 5253223+ 83 Linux
/dev/sdb2 655 1308 5253255 83 Linux
/dev/sdb3 1309 1962 5253255 83 Linux Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): fd
Changed system type of partition 2 to fd (Linux raid autodetect) Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): fd
Changed system type of partition 3 to fd (Linux raid autodetect) Command (m for help): p #最终创建3快ID=fd的分区即可。 Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5101d254 Device Boot Start End Blocks Id System
/dev/sdb1 1 654 5253223+ fd Linux raid autodetect
/dev/sdb2 655 1308 5253255 fd Linux raid autodetect
/dev/sdb3 1309 1962 5253255 fd Linux raid autodetect Command (m for help): w
The partition table has been altered! Calling ioctl() to re-read partition table.
Syncing disks.
[root@yinzhengjie ~]# '''

准备三块磁盘用于做RAID

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com '''
[root@yinzhengjie ~]# cat /proc/partitions #查看系统是否识别你的分区
major minor #blocks name 8 16 20971520 sdb
8 17 5253223 sdb1
8 18 5253255 sdb2
8 19 5253255 sdb3
8 0 20971520 sda
8 1 307200 sda1
8 2 18631680 sda2
8 3 2031616 sda3
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# mdadm -C /dev/md2 -a yes -l 1 -n 2 -x 1 /dev/sdb{1,2,3} #指定RAID级别(-l)为1,创建设备个数(-n)为2,并且指定人热备设备(-x)个数为1,注意:-a :=yes(自动为创建的RAID设备创建设备文件。
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? yes #输入yes即可,此消息可以忽略。
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started.
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# cat /proc/mdstat #查看RAID信息
Personalities : [raid1]
md2 : active raid1 sdb3[2](S) sdb2[1] sdb1[0]
5249088 blocks super 1.2 [2/2] [UU] unused devices: <none>
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# mdadm -D /dev/md2 #查看RAID1的详细信息。
/dev/md2:
Version : 1.2
Creation Time : Mon May 15 07:10:59 2017
Raid Level : raid1
Array Size : 5249088 (5.01 GiB 5.38 GB)
Used Dev Size : 5249088 (5.01 GiB 5.38 GB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent Update Time : Mon May 15 07:11:25 2017
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1 Name : yinzhengjie:2 (local to host yinzhengjie)
UUID : 6b4aff67:dbb66538:7276fa64:14137394
Events : 17 Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1 #正在工作的磁盘分区
1 8 18 1 active sync /dev/sdb2 #正在工作的磁盘分区 2 8 19 - spare /dev/sdb3 #磁盘就表示为热备份的磁盘分区
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# '''

配置3块磁盘为RAID级别。

 [root@yinzhengjie ~]# mke2fs -t ext4 /dev/md2
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
328656 inodes, 1312272 blocks
65613 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1346371584
41 block groups
32768 blocks per group, 32768 fragments per group
8016 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736 Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@yinzhengjie ~]# mkdir /yinzhengjie/md2
[root@yinzhengjie ~]# mount /dev/md2 /yinzhengjie/md2
[root@yinzhengjie ~]# ll /yinzhengjie/md2
total 16
drwx------. 2 root root 16384 May 15 07:19 lost+found
[root@yinzhengjie ~]# cp /etc/fstab /yinzhengjie/md2/
[root@yinzhengjie ~]#

格式化RAID磁盘并挂载

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com '''
[root@yinzhengjie ~]# mdadm /dev/md2 -f /dev/sdb1 #我们可以模拟将/dev/sdb1这个设备标记为坏掉的磁盘分区
mdadm: set /dev/sdb1 faulty in /dev/md2
[root@yinzhengjie ~]# mdadm -D /dev/md2 #查看RAID详细信息
/dev/md2:
Version : 1.2
Creation Time : Mon May 15 07:10:59 2017
Raid Level : raid1
Array Size : 5249088 (5.01 GiB 5.38 GB)
Used Dev Size : 5249088 (5.01 GiB 5.38 GB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent Update Time : Mon May 15 07:21:44 2017
State : clean, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 1
Spare Devices : 1 Rebuild Status : 49% complete #这个需要等待一些时间 Name : yinzhengjie:2 (local to host yinzhengjie)
UUID : 6b4aff67:dbb66538:7276fa64:14137394
Events : 26 Number Major Minor RaidDevice State
2 8 19 0 spare rebuilding /dev/sdb3 #之前备份的那块磁盘瞬间就上去了
1 8 18 1 active sync /dev/sdb2 0 8 17 - faulty /dev/sdb1 #发现RAD1过着坏道了
[root@yinzhengjie ~]# mdadm /dev/md2 -r /dev/sdb1 #我们可以将坏掉的设备从RAID1里面移除掉。
mdadm: hot removed /dev/sdb1 from /dev/md2
[root@yinzhengjie ~]# mdadm -D /dev/md2 #再次查看设备信息,发现工作的就只有2个设备了,因为坏掉的设备以及被我移除了。
/dev/md2:
Version : 1.2
Creation Time : Mon May 15 07:10:59 2017
Raid Level : raid1
Array Size : 5249088 (5.01 GiB 5.38 GB)
Used Dev Size : 5249088 (5.01 GiB 5.38 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent Update Time : Mon May 15 07:22:32 2017
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0 Name : yinzhengjie:2 (local to host yinzhengjie)
UUID : 6b4aff67:dbb66538:7276fa64:14137394
Events : 37 Number Major Minor RaidDevice State
2 8 19 0 active sync /dev/sdb3
1 8 18 1 active sync /dev/sdb2
[root@yinzhengjie ~]#
'''

模拟其中一个正在工作的磁盘坏掉,热备的磁盘会自动补位。

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com '''
[root@yinzhengjie ~]# umount /yinzhengjie/md2
[root@yinzhengjie ~]# mdadm -S /dev/md2 #停止使用阵列
mdadm: stopped /dev/md2
[root@yinzhengjie ~]#
[root@yinzhengjie ~]# cat /proc/mdstat #查看阵列使用情况
Personalities : [raid1]
unused devices: <none>
[root@yinzhengjie ~]# mdadm -A /dev/md2 /dev/sdb{1,2,3} #启用阵列
mdadm: /dev/md2 has been started with 2 drives.
[root@yinzhengjie ~]# cat /proc/mdstat #再次查看阵列使用情况
Personalities : [raid1]
md2 : active raid1 sdb3[2] sdb2[1]
5249088 blocks super 1.2 [2/2] [UU] unused devices: <none>
[root@yinzhengjie ~]#
'''

阵列的开启和关闭

  通过以上实验,我们可以总结一下mdadm命令的常用参数了:

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com '''
md,可以组合任何块设备 mdadm,/etc/mdadm.conf mdadm:模式化的工具 -A Assemble 装配模式 -C Create 创建模式
-C:专用选项
-n #:用于创建RAID设备的个数
-x #: 热备磁盘的个数
-l :指定RAID级别
-a :=yes(自动为创建的RAID设备创建设备文件) md mdp part p 如何创建设备文件
-c:指定块的大小,默认为512KB
-F FOLLOW 监控
-S 停止RAID
-D --detail: 显示阵列详细信息 Manage 管理模式专用项
-f:模拟损害
-r:模拟移除设备
-a:模拟添加新设备 /proc/mdstat
创建一个大小为12G的RAID0:2*6G,3*4G 4*3G 6*2G
mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2} watch ‘’
-n #:每个#执行一次指定的命令,单位为s
'''

补充:

 #!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:y1053419035@qq.com '''
软RAID磁盘阵列管理 1. RAID技术简介
廉价冗余磁盘阵列,Redundant Arrays of Inexpensive Disks
将多个较小/低速的磁盘整合成一个大磁盘,提供硬件容错、提高I/O性能 2. 常见的RAID阵列级别 RAID0,条带模式:
并行读写多块磁盘(最少需2块),提高读写效率
无冗余,磁盘利用率100% RAID1,镜像模式
并行读写多块磁盘(最少需2块),其中半数磁盘用来备份,提高读效率
有一倍冗余,磁盘利用率50% RAID10,条带+镜像模式
融合RAID0+RAID1的特点(最少需4块磁盘),提高读写效率
有一倍冗余,磁盘利用率50% RAID5,高性价比阵列
相当于RAID 0和RAID 1的折中方案(最少需3块磁盘)
校验盘:提供1块成员盘的容量存放校验信息,用于恢复数据,提高可靠性
冗余盘:可额外准备一块或多块冗余盘,以便当成员盘故障时实现自动替换(热备份)
冗余空间=校验盘+冗余盘
最大磁盘利用率=(N-1)/N 3. RAID阵列的实现方式
硬RAID:由RAID控制卡管理阵列
主板-->阵列卡-->磁盘-->操作系统-->数据
软RAID:由操作系统来管理阵列
主板-->磁盘-->操作系统-->RAID软件-->数据 '''

软RAID磁盘阵列管理

  

Liunx软Raid实现的更多相关文章

  1. Raid 介绍以及软raid的实现

    RAID: old Redundant Arrays of Inexpensive Disks (廉价磁盘冗余阵列) new Redundant Arrays of Independent Disks ...

  2. CentOS 6.3下配置软RAID(Software RAID)

    一.RAID 简介 RAID 是英文Redundant Array of Independent Disks 的缩写,翻译成中文意思是“独立磁盘冗余阵列”,有时也简称磁盘阵列(Disk Array). ...

  3. 网易视频云技术分享:linux软raid的bitmap分析

    网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅.低时延.高并发的视频直播.录制.存储.转码及点播等音视频的PAAS服务,在线教育.远程医疗.娱乐秀场.在线 ...

  4. RAID、软RAID和硬RAID

    RAID(redundant array of inexpensive disks):独立的硬盘冗余阵列,基本思想是把多个小硬盘组合在一起成为一个磁盘组,通过软件或硬件的管理达到性能提升或容量增大或增 ...

  5. ☆RHEL6创建软raid的使用☆——经典之作

    raid主要的种类 1.raid0  扩展卷   raid 0又称Stripee或Striping,中文译为集带工作方式, 有时也可以理解为拼凑. 它是将要存取的数据以条带状的形式尽量平均分配到多个硬 ...

  6. linux磁盘管理系列-软RAID的实现

    1 什么是RAID RAID全称是独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想是把多个磁盘组合起来,组合一个磁盘阵列组,使得性能大幅提高. R ...

  7. linux磁盘管理系列二:软RAID的实现

    磁盘管理系列 linux磁盘管理系列一:磁盘配额管理   http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...

  8. linux服务器系统盘坏且系统盘为软raid的修复方法

    1 需要换新盘的情况 1.1 一块盘grub损坏修复 一块盘grub损坏修复(可通过另一块盘进入系统的情况).更换硬盘的方式,可以热插拔,也可以服务器断电后更换,但如果是热插拔,可能会导致盘符变更.坏 ...

  9. 软RAID管理命令mdadm详解

    软RAID管理命令mdadm详解 mdadm是linux下用于创建和管理软件RAID的命令,是一个模式化命令.但由于现在服务器一般都带有RAID阵列卡,并且RAID阵列卡也很廉价,且由于软件RAID的 ...

随机推荐

  1. 第三个Sprint ------第六天

    分数计算界面代码 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:a ...

  2. 现代程序设计 homework-01

    搞了6个小时individual project...看看博客做一做第一次现代程序设计作业 1) 建立 GitHub 账户, 把课上做的 “最大子数组之和” 程序签入 我的github地址是https ...

  3. (Alpha)Let's-版本发布说明

    我们的Let’s APP发布了! (下载地址在“下载与安装”部分) Alpha版本功能 Alpha版本是我们发布的第一个版本,所以仅实现了活动实体和用户实体之间的基础联系功能. 基本功能 登录和注册 ...

  4. [转帖]JavaEE中Web服务器、Web容器、Application服务器区别及联系

    JavaEE中Web服务器.Web容器.Application服务器区别及联系 https://www.cnblogs.com/vipyoumay/p/5853694.html 在JavaEE 开发W ...

  5. PSP(4.20——4.26)以及周记录

    1.PSP 4.20 8:45 9:25 10 30 Cordova A Y min 13:00 17:00 65 175 Cordova A Y min 4.21 9:00 17:00 125 35 ...

  6. spring cloud实战与思考(四) JWT之Token主动失效

    需求: JWT泄露.密码重置等场景下,需要将未过期但是已经不安全的JWT主动失效. 本文不再复述JWT的基础知识,不了解的小伙伴可以自行Google一下.这里主要是针对以上需求聊一聊解决方案.如果服务 ...

  7. string.PadLeft & string.PadRight

    比如我想让他的长度是20个字符有很多字符串如string a = "123",只有3个字符怎么让他们在打印或显示在textBox上的时候不够的长度用空格补齐呢? string.Pa ...

  8. asp.net 后台<%@ Page%> page指令属性

    aspx文件有如下一行代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=" ...

  9. BZOJ3724 PA2014Final Krolestwo(欧拉回路+构造)

    如果没有长度为偶数的限制,新建一个点向所有奇点连边,跑欧拉回路即可,显然此时一定存在欧拉回路,因为所有点度数都为偶数. 考虑长度为偶数的限制,将每个点拆成两个点放进一个二分图里,那么每条原图中的边在二 ...

  10. 聪聪和可可 HYSBZ - 1415(概率 + spfa + 记忆化dp)

    Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行,每 ...