资讯专栏INFORMATION COLUMN

mdadm模拟软raid、watch周期性执行命令

fevin / 2769人阅读

摘要:正在同步查看信息查看详细信息停止阵列或在以下版本可能稍微不同阵列停止后下次开机可能出现和,这个时候需要,,这样被占用的分区就可以使用了,否则被占用的分区不能使用资源繁忙。

【看本文需要的理论知识1.RAID是什么? 2.RAID有哪些级别? 3.为什么需要RAID技术? 4.硬RAID和软RAID?】

mdadm

mdadm:将任何块设备做成RAID,在实际的工作中几乎都是硬RAID,软RAID用的很少,因为它是靠CPU和软件模拟实现的【硬RAID是一个控制接口实现的】,把数据按照RAID的等级实现的不同的分配。现在要用软RAID拿来做练习,它和硬RAID的理论是一样的,真正的软RAID也应该是在多块磁盘操作的,比如数据存入到磁盘的时候同时分到两块磁盘,这样速度提升一倍,但是现在是两个分区做的RAID,一个分区相当于一个磁盘,因为是同一块磁盘速度肯定也是和不用RAID一样,仅仅是为了学习知识,没必要装多块磁盘。

首先创建两个分区

[root@localhost ~]# fdisk  /dev/sdb

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): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +1G

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (133-1305, default 133): 
Using default value 133
Last cylinder, +cylinders or +size{K,M,G} (133-1305, default 1305): +1G

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): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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: 0xd25c91c2

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  fd  Linux raid autodetect
/dev/sdb2             133         264     1060290   fd  Linux raid autodetect
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

[root@localhost ~]# cat /proc/partitions
major minor  #blocks  name

   8        0   10485760 sda
   8        1     204800 sda1
   8        2    4194304 sda2
   8        3    2097152 sda3
   8        4          1 sda4
   8        5    3987456 sda5
   8       16   10485760 sdb
   8       17    1606468 sdb1
   8       18    2104515 sdb2
   8       19    1060290 sdb3
[root@localhost ~]# partprobe /dev/sdb【让内核识别,设备被占用,上一讲没有卸载】
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sdb (设备或资源忙).  As a result, it may not reflect all of your changes until after reboot.
[root@localhost ~]# ls -l /mnt/test
总用量 16
drwx------. 2 root root 16384 4月  24 18:29 lost+found
[root@localhost ~]# umount /mnt/test 【卸载】
[root@localhost ~]# partprobe /dev/sdb【内核识别】
[root@localhost ~]# cat /proc/partitions【查看分区表,已经更改】
major minor  #blocks  name

   8        0   10485760 sda
   8        1     204800 sda1
   8        2    4194304 sda2
   8        3    2097152 sda3
   8        4          1 sda4
   8        5    3987456 sda5
   8       16   10485760 sdb
   8       17    1060258 sdb1
   8       18    1060290 sdb2
mdadm

将任何块设备做成RAID,mdadm有多个模式

模式化的命令:

创建模式

创建模式 -C,该模式下的选项

-l:RAID级别

-n #:设备个数

-a {yes|no}:是否自动为其创建设备文件

-c:CHUNK大小,2^n,默认64k;比如2块磁盘做RAID,当一个文件大于64k时才分配到第2个磁盘,否则一块磁盘就可以存放

-x #:指定空闲盘个数

创建raid0,2G每个盘1G,I/O提升2倍【也可以使用每个盘512M共4个盘I/O提升4倍】

创建md0:
[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2}【md0】
mdadm: /dev/sdb1 appears to contain an ext2fs file system
       size=1606468K  mtime=Wed Apr 26 18:23:41 2017
Continue creating array? y【原来的文件系统有数据是否覆盖掉】
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]# cat /proc/mdstat【该文件查看哪些raid设备启用】
Personalities : [raid0] 
md0 : active raid0 sdb2[1] sdb1[0]
      2117632 blocks super 1.2 512k chunks
      
unused devices: 


创建文件系统:
[root@localhost ~]# mke2fs -j /dev/md0
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
132464 inodes, 529408 blocks
26470 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=545259520
17 block groups
32768 blocks per group, 32768 fragments per group
7792 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912

正在写入inode表: 完成                            
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

挂载:
[root@localhost ~]# mount /dev/md0 /mnt/test
[root@localhost ~]# ls -l /mnt/test
总用量 16
drwx------. 2 root root 16384 4月  29 14:58 lost+found

再创建一个raid1,两块磁盘,每个都是1G,一个是备份一个是存储,这样由于数据要读入两份所以输入速度减半,输出速度提升一倍

创建分区,然后指定分区类型,略!【看上面】
内核读取新分区遇到的问题:
[root@localhost ~]# partprobe /dev/sdb
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sdb (设备或资源忙).  As a result, it may not reflect all of your changes until after reboot.
[root@localhost ~]# cat /proc/partitions
major minor  #blocks  name

   8        0   10485760 sda
   8        1     204800 sda1
   8        2    4194304 sda2
   8        3    2097152 sda3
   8        4          1 sda4
   8        5    3987456 sda5
   8       16   10485760 sdb
   8       17    1060258 sdb1
   8       18    1060290 sdb2
   9        0    2117632 md0

解决,redhat6会遇到:
[root@localhost ~]# partx -a /dev/sdb3 /dev/sdb
[root@localhost ~]# partx -a /dev/sdb5 /dev/sdb      
[root@localhost ~]# partx -a /dev/sdb6 /dev/sdb
[root@localhost ~]# cat /proc/partitions
major minor  #blocks  name

   8        0   10485760 sda
   8        1     204800 sda1
   8        2    4194304 sda2
   8        3    2097152 sda3
   8        4          1 sda4
   8        5    3987456 sda5
   8       16   10485760 sdb
   8       17    1060258 sdb1
   8       18    1060290 sdb2
   8       19    1060290 sdb3
   8       20         31 sdb4
   8       21    1060258 sdb5
   8       22    1060258 sdb6
   9        0    2117632 md0

创建raid1:
[root@localhost ~]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdb3 /dev/sdb5
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? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid0] [raid1] 
md1 : active raid1 sdb5[1] sdb3[0]
      1059200 blocks super 1.2 [2/2] [UU]【发现这是1G】
      
md0 : active raid0 sdb2[1] sdb1[0]
      2117632 blocks super 1.2 512k chunks【发现是2G】
      
unused devices: 
[root@localhost ~]# mke2fs -j /dev/md1【创建文件系统】
[root@localhost mnt]# mount /dev/md1 /mnt/test1【挂载】
[root@localhost mnt]# ls -l /mnt/test1
总用量 16
drwx------. 2 root root 16384 4月  29 15:57 lost+found【挂载成功】

另外,上面-c指定了一个CHUNK大小,默认是64k,而我们的磁盘块大小默认是4k。在实际中每生成一个CHUNK就会计算一下它有多少个磁盘块,但是如果都是用默认值的话64/4是个定值16,不需要让它计算了,我们可以手动指定了这个值来减少计算量,提升性能。

-E选项代表指定带宽的stride = THUNK/磁盘块大小,现在我们手动指定了stride后就不会每次计算了

[root@localhost etc]# mke2fs -j -E stride=16 -b 4096 /dev/md0
管理模式

--add:短选项-a,添加一块磁盘

--remove:短选项-r,移除某块磁盘

--fail:短选项-f,模拟损坏某块磁盘【如:mdadm /dev/md# --fail /dev/sdb3】

[root@localhost media]# mdadm /dev/md1 -f /dev/sdb3【模拟损坏sdb3】
mdadm: set /dev/sdb3 faulty in /dev/md1
[root@localhost media]# mdadm -D /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Sat Apr 29 15:44:04 2017
     Raid Level : raid1
     Array Size : 1059200 (1034.55 MiB 1084.62 MB)
  Used Dev Size : 1059200 (1034.55 MiB 1084.62 MB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Sat Apr 29 17:37:57 2017
          State : clean, degraded 
 Active Devices : 1
Working Devices : 1
 Failed Devices : 1
  Spare Devices : 0

           Name : localhost.localdomain:1  (local to host localhost.localdomain)
           UUID : b19c3436:677585c7:9cf346ce:2dbc4908
         Events : 19

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       21        1      active sync   /dev/sdb5

       0       8       19        -      faulty   /dev/sdb3【sdb3损坏了】
       
[root@localhost media]# ls -l /mnt/test1【看看是否还能使用】
总用量 16
drwx------. 2 root root 16384 4月  29 15:57 lost+found

真实的情况是,磁盘坏了拆下来更换,但是现在是模拟的,所以应该用命令拆卸

[root@localhost media]# mdadm /dev/md1 -r /dev/sdb3 
mdadm: hot removed /dev/sdb3 from /dev/md1
[root@localhost media]# mdadm -D /dev/md1【再次查看一下】    
.....
....
           UUID : b19c3436:677585c7:9cf346ce:2dbc4908
         Events : 20

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       21        1      active sync   /dev/sdb5【只有一块盘了】

增加一块新盘,要求和原来的磁盘大小一样;只创建分区指定分区类型就行,不需要创建文件系统;还可以-a多加一块盘作为备用,当raid1中一块盘坏了自动就会顶上去,备份另一块盘的数据。

[root@localhost media]# mdadm /dev/md1 -a /dev/sdb6
mdadm: added /dev/sdb6
[root@localhost media]# cat /proc/mdstat           
Personalities : [raid0] [raid1] 
md1 : active raid1 sdb6[2] sdb5[1]
      1059200 blocks super 1.2 [2/1] [_U]
      [==============>......]  recovery = 73.9% (783168/1059200) finish=0.0min【正在同步】 speed=261056K/sec
      
md0 : active raid0 sdb2[1] sdb1[0]
      2117632 blocks super 1.2 512k chunks
      
unused devices: 
查看raid信息

查看详细信息:mdadm -D /dev/md#【-D == --detial】

--scan【mdadm -D --scan】

[root@localhost mnt]# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Apr 29 09:12:13 2017
     Raid Level : raid0
     Array Size : 2117632 (2.02 GiB 2.17 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Sat Apr 29 09:12:13 2017
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

     Chunk Size : 512K

           Name : localhost.localdomain:0  (local to host localhost.localdomain)
           UUID : 8c6017f2:898580a7:f170e4b1:3e15c461
         Events : 0

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       18        1      active sync   /dev/sdb2
停止阵列

mdadm -S 或--stop /dev/md#【在redhat6以下版本可能稍微不同】阵列停止后下次开机可能出现/dev/md126和/dev/md127,这个时候需要mdadm -S /dev/md126,mdadm -S /dev/md127,这样被占用的分区就可以使用了,否则被占用的分区不能使用【资源繁忙】。最后就可以像普通分区那样使用了

[root@localhost media]# umount /mnt/test1
[root@localhost media]# mdadm -S /dev/md1
mdadm: stopped /dev/md1
[root@localhost etc]# mdadm -D --scan【查看一下】
ARRAY /dev/md0 metadata=1.2 name=localhost.localdomain:0 UUID=8c6017f2:898580a7:f170e4b1:3e15c461
监控模式

-F 用的很少,略

增长模式

-G

装配模式

-A,一般使用情况是redhat6以下:mdamd -D --scan > /etc/mdadm.conf,然后mdadm -S /dev/md#停止该raid,下次直接mdamd -A /dev/mde#会自动读取配置文件装备上,如果没有mdamd.conf配置文件还要手动添加磁盘:mdadm /dev/md1 -a /dev/sdb6;在redhat6以上版本,mdamd -S 直接把设备就删除了,所以redhat6以上版本几乎不使用-A了

转:http://blog.csdn.net/lileizha...【 redhat6 创建raid,重启后md0变为md127 】

转:http://godben.blog.51cto.com/...【godben 的BLOG :linux RHEL6 中md0重启后变为 md127的解决办法】

补充

当停止阵列以后分区可能会自动就又被占用,如下面这种情况:Can"t open /dev/sdb6 exclusively. Mounted filesystem?,这个时候再次mdadm -S 停止就行,为了不让它以后自动又被占用,直接先-f 模拟损坏,再停止阵列

[root@localhost ~]# pvcreate /dev/sdb6
  Can"t open /dev/sdb6 exclusively.  Mounted filesystem?
[root@localhost ~]# cat /proc/mdstat【怎么自动被raid占用了???】
Personalities : [raid1] [raid0] 
md1 : inactive sdb6[2](S)
      1059234 blocks super 1.2
       
md0 : active raid0 sdb2[1] sdb1[0]
      2117632 blocks super 1.2 512k chunks
      
unused devices: 
[root@localhost ~]# mdadm -S /dev/md0【停止阵列】
mdadm: stopped /dev/md0
[root@localhost ~]# mdadm -S /dev/md1
mdadm: stopped /dev/md1
watch周期性执行命令

watch:周期性执行指定命令,并以全屏方式显示结果

-n #:指定每个#秒执行指定命令一次,默认是2s【watch -n # "COMMAND"】

欢迎来我的博客:http://www.51aixue.cn/2017/04...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/9952.html

相关文章

  • 文件系统&&磁盘管理(七)--RAID

    摘要:磁盘阵列,将对个较小的磁盘整合成一个较大的磁盘,这个较大的磁盘功能既能存储更多的数据,也具有保护数据的功能。 RAID 磁盘阵列: Redundant Arrays of Inexpensive Disks,将对个较小的磁盘整合成一个较大的磁盘,这个较大的磁盘功能既能存储更多的数据,也具有保护数据的功能。 RAID的级别 RAID0 条带 至少两个磁盘,将磁盘分成大小相同的...

    sydMobile 评论0 收藏0
  • LVM、物理卷、逻辑卷、卷组、快照

    摘要:是什么关于简单的理解百度百科很详细,现在开发的一个项目,涉及到拍高清照片,项目盘很快被占满了,目前我想到的解决方式可能有虚拟目录指定到其他盘符或分区,但是还要修改项目中图片存放路径,很麻烦找一个分区到图片目录用先删除原有分区,再重建分区,起 LVM是什么 showImg(https://segmentfault.com/img/bVMXAo?w=350&h=237); 关于LVM简单...

    jeffrey_up 评论0 收藏0
  • Gentoo 服务器安装手记

    摘要:可以通过下面的几条命令自行设置,也可以使用命令进行设置设置地址设置网关设置域名解析服务器实际过程中有可能遇到从启动后,系统无法找到网卡,使得安装无法进行下去。启动服务启动服务设置用户的密码现在可以使用或者远程登录到机器进行安装。Gentoo 安装方案 第一步:下载安装介质 Gentoo 的 Minimal Install CD 每周都会自动构建一个版本,服务器一般使用最新的 x86_64...

    twohappy 评论0 收藏0
  • Linux——最全面试题整理(仅此一篇)

    摘要:传输单位称为报文段,传输单位称为用户数据报。孤儿进程将被进程进程号为所收养,并由进程对它们完成状态收集工作。在实际应用中,可以依据自己的实际需求选择不同的方案等量模式,性能最佳,不安全。三个数值分别为分钟分钟分钟,确定平均负载趋势。 ...

    Achilles 评论0 收藏0
  • mysql优化

    摘要:显示处于不可中断的休眠的进程数量。在等待显示被交换到磁盘的数据块的数量。服务器硬件优化物理状态灯自带管理设备远程控制卡设备,开关机硬件监控。 数据库层面问题解决思路 一般应急调优的思路:针对突然的业务办理卡顿,无法进行正常的业务处理!需要立马解决的场景! 1、show processlist 2、explain select id ,name from stu where name=...

    yvonne 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<