帆软如何集成在linux
2018-10-15 12:07:09 belialxing 阅读数 493

问题描述:

将帆软工程传输到 linux上,发现帆软中,很多文件和目录是中文命名的。(如:帆软报表模板名称,地图等等)。

 

解决方法:(注意:先看看linux系统 是否已经是中文字符集了。 指令: echo $LANG     显示:zh_CN.UTF-8  )

1、安装字体包和转换包

yum install convmv –y
yum install fontconfig-devel –y
yum groupinstall fonts –y

2、转换字符集
convmv -f gbk -t utf-8 -r --notest /home/xxxx/tomcat8.5.33/webapps/WebReport/WEB-INF/assets/map/image
convmv -f gbk -t utf-8 -r --notest /home/xxxx/tomcat8.5.33/webapps/WebReport/WEB-INF/assets/map/geographic
convmv -f gbk -t utf-8 -r --notest /home/xxxx/tomcat8.5.33/webapps/WebReport/WEB-INF/reportlets/demo
3、重启服务就OK了.

 

总结:

     最开始,本人参考的帆软官网解决方法。但是不起作用。之后查询了linux中文乱码的问题。

通过上面的操作,解决了乱码问题。

   每个人可能遇到的情况都不同,所以要变通的考虑问题。上面写的,不一定就可以解决你所遇到的,但是可以参考下。

 

 

 

 

2017-01-08 19:01:05 Young4Dream 阅读数 2426

本机测试正常,上传到服务器就报错,信息如下:

Exception in thread "http-bio-8080-exec-2" java.lang.InternalError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
        at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
        at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:65)
        at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:110)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:74)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:186)
        at java.awt.GraphicsEnvironment.createGE(GraphicsEnvironment.java:102)
        at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:81)
        at sun.awt.X11.XToolkit.<clinit>(XToolkit.java:119)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:186)
        at java.awt.Toolkit$2.run(Toolkit.java:870)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:862)
        at com.fr.base.xml.BaseXMLUtils.deprecatedDecodeImage(Unknown Source)
        at com.fr.base.xml.BaseXMLUtils.deprecatedReadImage(Unknown Source)
        at com.fr.base.Icon$1.readXML(Unknown Source)
        at com.fr.base.xml.XMLableReader.readXMLObject(Unknown Source)
        at com.fr.base.Icon.readXML(Unknown Source)
        at com.fr.base.xml.XMLableReader.readXMLObject(Unknown Source)
        at com.fr.base.IconManager.readXML(Unknown Source)
        at com.fr.base.xml.XMLableReader.readXMLObject(Unknown Source)
        at com.fr.form.ui.WidgetManager.readXML(Unknown Source)
        at com.fr.base.xml.XMLableReader.readXMLObject(Unknown Source)
        at com.fr.base.XMLTools.readInputStreamXML(Unknown Source)
        at com.fr.base.XMLFileManager.readXMLFile(Unknown Source)
        at com.fr.form.ui.WidgetManager.getInstance(Unknown Source)
        at com.fr.form.ui.Button.createJSONConfig(Unknown Source)
        at com.fr.form.ui.ToolBar.createJSONComponents(Unknown Source)
        at com.fr.form.ui.ToolBar.createJSONConfig(Unknown Source)
        at com.fr.form.ui.ToolBar.createJSONConfig(Unknown Source)
        at com.fr.report.web.ToolBarManager.toJSONConfig(Unknown Source)
        at com.fr.web.core.ReportWebUtils.policyMap4Tpl(Unknown Source)
        at com.fr.web.core.ReportWebUtils.context4PolicyPaneTpl(Unknown Source)
        at com.fr.web.core.ReportWebUtils.context4PageTpl(Unknown Source)
        at com.fr.web.core.service.ReportletDealWith.dealWithPageHtml(Unknown Source)
        at com.fr.web.core.service.ReportletDealWith.dealWithReportlet(Unknown Source)
        at com.fr.web.Reportlet.dealWeblet(Unknown Source)
        at com.fr.web.core.ReportDispatcher.dealWithRequest(Unknown Source)
        at com.fr.web.BaseServlet.doGet(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at com.tsd.service.util.CharsetFilter.doFilter(CharsetFilter.java:30)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:722)

解决办法:

在catalina.sh中所有的

-Djava.io.tmpdir="$CATALINA_TMPDIR" \
下添加一行:
-Djava.awt.headless=true \
总共有六七处需要修改,重启异常消失。

参考:

Caused by: java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment



2011-07-31 15:34:18 myredhatlinuxunix 阅读数 3613

RAID的实现:
RAID:廉价冗余磁盘阵列,是将几块硬盘变成一个整体使用
后来因为它失去了原有的廉价目的,变得很昂贵,就更名为
独立冗余磁盘阵列
虽然我们无法实现硬件上得RAID因为实力有限,没有买那些设备,但是我们还是能实现RAID的
下面我们就来看一下如何实现软RAID:

第一:软RAID 0的实现:
首先介绍一下RAID 0 的原理,RAID 0是将一股数据流分成两份分别存在两个盘上,以实现提高一倍性能的
现象,不仅如此,它还提供了很大的吞吐量,下面我们就实现一下软RAID 0
第一首先要创建两个分区【当然大于两个也是可以实现raid 0的】,在创建一个大小为2G的RAID时需要
两个大小各为1G的分区,分区创建完之后记得让内核重读一下分区表,

partprobe /dev/sda

[root@server56 raid10]# fdisk /dev/sda
Command (m for help): n
First cylinder (7011-15665, default 7011):      
Using default value 7011
Last cylinder or +size or +sizeM or +sizeK (7011-15665, default 15665): +1G

Command (m for help): t
Partition number (1-6): 5
Hex code (type L to list codes): fd
Changed system type of partition 5 to fd (Linux raid autodetect)

Command (m for help): t
Partition number (1-6): 6
Hex code (type L to list codes): fd
Changed system type of partition 6 to fd (Linux raid autodetect)

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        5235    41945715   8e  Linux LVM
/dev/sda3            5236        5300      522112+  82  Linux swap / Solaris
/dev/sda4            5301       15665    83256862+   5  Extended
/dev/sda5            5301        5423      987966   fd  Linux raid autodetect
/dev/sda6            5424        5546      987966   fd  Linux raid autodetect


Linux raid autodetect是建立软RAID 是需要的系统类型一定记得在分区的时候给需要划分的那两个
分区指定成这样的类型,以下是所有可以为其指定的系统类型与系统类型的编号,在指定系统类型的时候
只需要输入前面的编号即可

0  Empty           1e  Hidden W95 FAT1 80  Old Minix       bf  Solaris        
 1  FAT12           24  NEC DOS         81  Minix / old Lin c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          82  Linux swap / So c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  83  Linux           c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     84  OS/2 hidden C:  c7  Syrinx         
 5  Extended        41  PPC PReP Boot   85  Linux extended  da  Non-FS data    
 6  FAT16           42  SFS             86  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4d  QNX4.x          87  NTFS volume set de  Dell Utility   
 8  AIX             4e  QNX4.x 2nd part 88  Linux plaintext df  BootIt         
 9  AIX bootable    4f  QNX4.x 3rd part 8e  Linux LVM       e1  DOS access     
 a  OS/2 Boot Manag 50  OnTrack DM      93  Amoeba          e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 94  Amoeba BBT      e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi ee  EFI GPT        
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a5  FreeBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a6  OpenBSD         f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a7  NeXTSTEP        f1  SpeedStor      
12  Compaq diagnost 5c  Priam Edisk     a8  Darwin UFS      f4  SpeedStor      
14  Hidden FAT16 <3 61  SpeedStor       a9  NetBSD          f2  DOS secondary  
16  Hidden FAT16    63  GNU HURD or Sys ab  Darwin boot     fb  VMware VMFS    
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT  


分区创建完之后记得输入w   保存退出,若以q退出则以上分区均没有了

分区创建完之后记得格式化,为其创建文件系统ext2或ext3,无论你指定怎样的文件系统类型,但是两个
分区的文件系统类型必须一样,这样才能保持一致与同步工作

mkfs.ext2 /dev/sda5
mkfs.ext2 /dev/sda6


格式化完成之后就可以进行下一步了,建立软RAID 0

mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sda5 /dev/sda6


【此命令的意思是创建/dev/md0,如果没有就直接创建/dev/md0,RAID等级为0,由/dev/sda5和
/dev/sd6组成】

创建完之后对整个格式化,因为此时这两个分区已经在逻辑上属于一个硬盘了,

mke2fs /dev/md0


此时你可以看一下/proc/mdstat

md0 : active raid0 sda6[1] sda5[0]
      1975680 blocks 64k chunks


这里的chunks 是磁盘读写的最小数据单位,单位是k,默认是64k
还有默认的数据块儿大小是4096k,所以,每次内核都需要计算读了多少个chunk
但是使用命令

mk2tfs -b 2048 -E stride=32 /dev/md0


可以直接把需要读多少个chunk告诉内核,这样可以大大的
节省CPU的空间,-b是制定一个数据块儿的大小

接下来需要给RAID 0指定一个挂在点挂上就可以了

mkdir /mnt/raid0
mount /dev/nd0 /mnt/raid0


就可以挂载使用了,
使用fdisk -l 可以查看

mdadm -D /dev/md0可以查看详细信息


此时,应该将RAID 0的配置信息保存,以备出现故障,下次可以恢复,

mdadm -D --scan /dev/md0 >> /etc/mdadm.conf


下次可以直接使用

mdadm -A --scan直接挂载
如何卸载RAID 0
应该先将RAID 0 的挂载点卸载,即
umount /mnt/raid0

然后使用命令

mdadm -S /dev/md0 

将其停止
此时再用 fdisk -l 就看不见了  就完成了完整的卸载
下次再使用时  直接

mdadm -A --scan


,内核会自动读取/etc/mdadm.conf实现挂载全部的软RAID

如果出现意外,RAID 0的一块儿盘坏了,那么将会丢失全部的数据,于是就出现了RAID 1
先介绍一下RAID 1的原理,RAID 1是将数据流同时存到两个盘上,就像镜子一样,两个盘上都有完整的
数据,即便其中之一不幸挂了,那么照样还是有完整的数据的,但是,两个盘上存有相同的数据那么
其中一块儿盘的空间就浪费了,但是它还是提供了强大的读取能力,虽然写入的速度会和原来一样
活着不如以前,但是还是有强大的吞吐量
那么要创建一个大小为2G的RAID 1 那么久需要两个大小同为2G的盘,也就是两个同为2G大小的分区来
实现软RAID 1
首先还是需要两个大小为2G的分区,系统类型还是
Linux raid autodetect
重读分区

partprobe /dev/sda


分完区后格式化

mkfs.ext3 /dev/sda7 
mkfs.ext3 /dev/sda8


然后就可以创建软RAID 1了

mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sda7 /dev/sda8


此时再将这个整体格式化
mkfs.ext3注意格式化是要保持一致
创建挂载点

mkdir /mnt/raid1


挂载RAID1

mount /dev/md1 /mnt/raid1


此时就可以使用了
可以cd /mnt/raid1检测 ls -l  会看到

drwx------ 2 root root 16384 07-30 17:00 lost+found


fdisk -l  也可以看到

此时记得保存其相关信息

mdadm -D --scan /dev/md1 >> /etc/mdadm.conf


卸载的步骤与卸载RAID 0 一样,
下次使用只需要

mdadm -A --scan 即可挂载全部的RAID设备


如果出现意外RAID虽然也可以正常工作,但是它是工作在跛脚的状态下的,此时很容易造成另一块盘的
损坏,那么就需要给它添加一个备用的盘,软raid也一样,需要一个备用的分区去做储备
那么再分一个与前两个相同的分区,系统类型依然是fd
分区完成后重读分区表,然后格式化成与RAID 1相同的文件系统然后
我们就模拟一个分区坏了,用命令

mdadm --fail /dev/md1 /dev/sda7 ,模拟md1下sda7坏掉了


此时就需要刚才那个分区来用了,
先将好的盘安装好之后再一处坏的盘,避免次生危害

mdadm --add /dev/md1 /dev/sda9【安装完成之后它会自动与另一块盘同步】



移除坏的盘:

mdadm --remove /dev/md1 /dev/sda7



由于RAID 0与RAID 1都有不足之处,所有都存在一定的风险,所以将两种方法组合起来将会减小一定的
风险,并能提供很优越的读写性能,与强大的吞吐量,实现的方法就是用RAID 0做中间层提高读写的
能力,用RAID 1做底层提供容错的能力,这样就降低了丢失全部数据的风险


实现软RAID 10是要保证RAID 0 与RAID 1没有挂载就是出去卸载状态的

mdadm -C /dev/md10 -a yes -l 10 -n 2 /dev/md0 /dev/md1


这样既可实现软RAID 10了
此时不需要格式化了
直接挂载就可以了
先建立挂载点

mkdir /mnt/raid10


挂载

mount/dev/md10 /mnt/raid10


即实现了软RAID 10

此时应先保存配置信息至

mdadm -D /dev/md10 >> /etc/mdadm.conf


卸载的方法与前两种一样
重新装载也于前面相同

mdadm -A --scan既可


如此就实现以上三种软RAID

RAID是面试时的人们话题,所以需要熟记!!!
下面就尝试一下实现RAID 5吧
方法基本类似

2015-09-13 12:50:04 weixin_34116110 阅读数 2

一、RAID简介

独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同的地方(因此,冗余地)的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。因为多个硬盘增加了平均故障间隔时间(MTBF),储存冗余数据也增加了容错。


二、条带化存储技术

条带化技术就是一种自动的将 I/O 的负载均衡到多个物理磁盘上的技术,条带化技术就是将一块连续的数据分成很多小部分并把他们分别存储到不同磁盘上去。这就能使多个进程同时访问数据的多个 不同部分而不会造成磁盘冲突,而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的 I/O 并行能力,从而获得非常好的性能。很多操作系统、磁盘设备供应商、各种第三方软件都能做到条带化。

spacer.gif

三、RAID级别和机制

 


条带机制

RAID 0                  (读速度提高了,写的数据慢了)

spacer.gif


磁盘镜像机制

RAID 1

spacer.gif


效验码机制

RAID 4                 (读写都提高了,效验码盘存储压力大成为性能瓶颈)  

spacer.gif


RAID 0+1(先做条带,然后再把各个条带组成RAID1)

spacer.gif


RAID 1+0(先两两镜像,然后RAID0)

spacer.gif


RAID 5       RAID 6   两块效验盘)

spacer.gif


JBOD  (磁盘堆叠,多块盘组成一个容量大的盘,hadoop建议使用JBOD ,hadoop 机制HDFS可以实现JBOD冗余,JBOD本身没有冗余功能)

spacer.gif





RAID实现的方式:

外接式磁盘阵列,通过扩展卡通过适配能力

内核式RAID:主板集成RAID控制器

software RAID


RAID配置命令和查看命令

centos6上的软件RAID的实现结合了内核中的md(multi devices)
命令的语法格式:mdadm [mode] <raiddevice> [options] <component-devices>
支持的RAID级别:LINEAR,RAID0,RAID1,RAID4,RAID5,RAID6,RAID10;

[mode]

创建模式:
    -C
        -n #使用#个块设备来创建此RAID
        -l #指明要创建的RAID的级别
        -a {yes|on}自动创建目标RAID设备的设备文件
        -c CHUNK_SIZE:指明CHUNK大小
        -x #指明空闲盘的个数


装配模式(装配能扫描RAID上的元数据,常用于装系统后,重新装配使用)
    -A
管理模式
    -f标记指定磁盘为损坏
    -a添加磁盘
    -r移除磁盘


<raiddevice>:/dev/md#

<component-devices>:任意块设备,可以是磁盘,可以是分区。


显示RAID的详细信息
mdadm -D /dev/md5\

查看MD的状态
 cat /proc/mdstat 


实例创建RAID5:

1,分区设置分区ID fd

[root@localhost /]# fdisk -l |grep "^/dev/sd[a-g]"
/dev/sda1   *           1          26      204800   83  Linux
/dev/sda2              26        7859    62914560   8e  Linux LVM
/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
/dev/sdc1               1         654     5253223+  fd  Linux raid autodetect
[root@localhost /]# 


2,创建RAID5

[root@localhost testmd5]# mdadm -C /dev/md5 -a yes -n 3 -l 5 -x 1 /dev/sd[b,c][1-3]
mdadm: /dev/sdb1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Wed Aug 26 17:28:15 2015
mdadm: /dev/sdb2 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Wed Aug 26 17:28:15 2015
mdadm: /dev/sdb3 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Wed Aug 26 17:28:15 2015
mdadm: /dev/sdc1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Wed Aug 26 17:28:15 2015
Continue creating array?             
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.

3,查看md的状态

[root@localhost testmd5]# cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md5 : active raid5 sdb3[4] sdc1[3](S) sdb2[1] sdb1[0]
      10498048 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
      [============>........]  recovery = 61.8% (3246400/5249024) finish=1.0min speed=30693K/sec
      
unused devices: <none>

4,查看RAID信息

[root@localhost testmd5]# mdadm -D /dev/md5
/dev/md5:
        Version : 1.2
  Creation Time : Wed Aug 26 18:42:00 2015
     Raid Level : raid5
     Array Size : 10498048 (10.01 GiB 10.75 GB)
  Used Dev Size : 5249024 (5.01 GiB 5.38 GB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Wed Aug 26 18:43:27 2015
          State : clean
 Active Devices : 2
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 2

         Layout : left-symmetric
     Chunk Size : 512K

 Rebuild Status : 43% complete

           Name : localhost.localdomain:5  (local to host localhost.localdomain)
           UUID : 7c6efc4f:5f6e0b0d:f6e56836:3556ec3f
         Events : 7

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       18        1      active sync   /dev/sdb2
       4       8       19        2      spare rebuilding   /dev/sdb3

       3       8       33        -      spare   /dev/sdc1
5,格式化挂载。

[root@localhost testmd5]# mkfs.ext4 /dev/md5 
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
657072 inodes, 2624512 blocks
131225 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2688548864
81 block groups
32768 blocks per group, 32768 fragments per group
8112 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@localhost testmd5]# mkdir -pv /testmd5
[root@localhost testmd5]# mount -t ext4 /dev/md5 /testmd5/
[root@localhost testmd5]# mount |tail -1
/dev/md5 on /testmd5 type ext4 (rw)
[root@localhost /]# cd testmd5/
[root@localhost testmd5]# ls
lost+found
[root@localhost testmd5]# 

6,测试RAID冗余

[root@localhost testmd5]# /bin/cp -fr /etc /testmd5/
[root@localhost testmd5]# du -sh /testmd5/
38M /testmd5/

[root@localhost testmd5]# mdadm /dev/md5 -f /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md5
[root@localhost testmd5]# mdadm -D /dev/md5
/dev/md5:
        Version : 1.2
  Creation Time : Wed Aug 26 18:42:00 2015
     Raid Level : raid5
     Array Size : 10498048 (10.01 GiB 10.75 GB)
  Used Dev Size : 5249024 (5.01 GiB 5.38 GB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Wed Aug 26 18:55:41 2015
          State : clean, degraded, recovering 
 Active Devices : 2
Working Devices : 3
 Failed Devices : 1
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 512K

 Rebuild Status : 23% complete

           Name : localhost.localdomain:5  (local to host localhost.localdomain)
           UUID : 7c6efc4f:5f6e0b0d:f6e56836:3556ec3f
         Events : 23

    Number   Major   Minor   RaidDevice State
       3       8       33        0      spare rebuilding   /dev/sdc1
       1       8       18        1      active sync   /dev/sdb2
       4       8       19        2      active sync   /dev/sdb3

       0       8       17        -      faulty   /dev/sdb1
[root@localhost testmd5]# 

7,观察md的状态

[root@localhost ~]# watch -n 3 "cat /proc/mdstat"

8,再指定一块损坏,让其工作在降级模式。

注意:级别仅代表磁盘组织方式不同,没有上下之分。


转载于:https://blog.51cto.com/tiantao/1694245

2012-03-02 12:03:22 weixin_33827965 阅读数 3
RAID 概述
RAID即廉价冗余磁盘阵列(Redundant Array of Inexpensive Disk)的简称,通过该技术可以
将多个磁盘组成一个阵列整体,而应用时可以作为单个磁盘使用。RAID 磁盘阵列根据其使用的技
术不同,可用于提高数据读写效率、提高数据冗余(备份),当阵列中的一个磁盘发生故障时,可
以通过校验数据从其他磁盘中进行恢复,大大增强了应用系统数据的读写性能及可靠性。
较常见的 RAID技术包括如下几个级别:
  RAID 0:最基本的一种阵列方式,通过简单的将多个磁盘(最少2 块)组成到一起,作为
一个大磁盘使用。存取数据时,通过将数据分段同时写入到不同的磁盘中,大大提高了效
率。但是这种方式没有数据冗余,其中任何一个磁盘坏了以后,都可能导致数据丢失。
  RAID 1:即磁盘镜像技术,需要最少 2 块磁盘(磁盘利用率:1/n)。这种方式将数据同时
写入到阵列中的多块磁盘中,不同磁盘中的数据互为镜像。因此,其中任何一个磁盘坏了
以后,数据不会丢失。
  RAID 5:通过引入数据校验技术来保证数据的安全,需要最少 3 块磁盘(磁盘利用率: n-1)。
这种方式并不使用固定的某块磁盘存放校验数据,而是分段存储在各个磁盘中。因此,其
中任何一个磁盘坏了以后,也可以根据其他磁盘中的校验数据进行恢复。
由于 RAID5 阵列技术既通过数据冗余增强了可靠性,又通过多块磁盘同时写入数据提高了效
率,一直以来受到广泛的应用。
未使用硬件磁盘卡方式实现的 RAID 技术,通常称为软 RAID 技术。本文将在 RHEL5 系统中,
使用不同磁盘中的多个分区,配置实现 RAID 5磁盘阵列。
 
9.2  构建使用软 RAID磁盘阵列
RHEL5 系统中,配置软 RAID 阵列可以通过安装 mdadm 软件包实现。该软件包一般为系
统默认安装,若检查没有安装的话,从 RHEL5 系统光盘中查找安装即可。
[root@localhost ~]# mount /dev/cdrom /media/cdrom/
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@localhost ~]# rpm -ivh /media/cdrom/Server/mdadm-2.5.4-3.el5.i386.rpm
Preparing...        ########################################### [100%]
   1:mdadm       ########################################### [100%]
[root@localhost ~]# rpm -qi mdadm | grep "Summary"
Summary     : mdadm 控制 Linux md 设备 (软件 RAID 阵列)
 
下面将以 RAID5磁盘阵列为例,讲解软磁盘阵列的配置使用方法。
 
 准备用于 RAID阵列的分区
用于组成 RAID阵列的各个分区应该位于不同的磁盘设备中,否则实用价值不大。各分区的容
量最好也相同,必要时可以将整个硬盘划分为一个分区。
Linux服务器添加 4 SCSI 硬盘,并使用 fdisk 工具各划分出一块 2GB 的分区,依次为:
/dev/sdb1/dev/sdc1/dev/sdd1/dev/sde1。分区前请注意确保没有别的程序正在使用对应的
磁盘。下一小节中将以这 4 个分区为例(RAID 5需要至少 3 块磁盘或分区)讲解 RAID5 磁盘阵列
的创建方法。
对于上述分区还应该将其类型 ID更改为“fd”,对应为“Linux raid autodetect”,表示支持用
RAID磁盘阵列。
[root@localhost ~]# fdisk /dev/sdb
……
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-522, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-522, default 522): +2048M
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): p
……
   Device Boot     Start      End      Blocks    Id   System
/dev/sdb1            1        250     2008093+  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@localhost ~]#
 
创建好三个分区以后,执行“partprobe”重新探测分区表(或重启系统),验证分区类型和容
量等信息。
[root@localhost ~]# partprobe
[root@localhost ~]# fdisk -l /dev/sd[b-e] | grep "^/dev/sd"
/dev/sdb1       1       250     2008093+  fd  Linux raid autodetect
/dev/sdc1       1       250      2008093+  fd  Linux raid autodetect
/dev/sdd1       1       250     2008093+  fd  Linux raid autodetect
/dev/sde1       1       250     2008093+  fd  Linux raid autodetect
 
  创建 RAID设备
使用 mdadm 工具可以组合多个 RAID 分区作为一个磁盘阵列,阵列设备文件名习惯上使用
/dev/md0”、“/dev/md1”等。
[root@localhost ~]# mdadm -Cv /dev/md0 -a yes -n4 -l5 /dev/sd[b-e]1
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 64K
mdadm: /dev/sdb1 appears to be part of a raid array:
    level=raid5 devices=4 ctime=Sat Jul 25 08:44:50 2009
mdadm: /dev/sdc1 appears to be part of a raid array:
    level=raid5 devices=4 ctime=Sat Jul 25 08:44:50 2009
mdadm: /dev/sdd1 appears to be part of a raid array:
level=raid5 devices=4 ctime=Sat Jul 25 08:44:50 2009
mdadm: /dev/sde1 appears to be part of a raid array:
    level=raid5 devices=4 ctime=Sat Jul 25 08:44:50 2009
mdadm: size set to 2008000K
Continue creating array? y
mdadm: array /dev/md0 started.
[root@localhost ~]#
在上述命令操作中,“/dev/md0”为新建的 RAID阵列设备文件名,“/dev/sd[bcd]1”表示此阵
列将使用/dev/sdb1/dev/sdc1/dev/sdd1 这三个分区。其他各部分选项、参数的含义如下:
  -C,等同于 --create:创建一个新的阵列设备
  -v,等同于 --verbose:执行过程中输出细节信息
  -a,等同于 --auto=:指定参数为 yes 时,表示若对应的设备文件不存在则自动创建
  -n,等同于 --raid-devices=:用于组成阵列的分区设备个数,“-n3”表示为 3
  -l,等同于 --level=:使用的 RAID级别,“-l5”表示为 RAID 5
关于 mdadm 命令更多选项的使用,请参考“man mdadm”帮助信息。
创建好 md0阵列设备后,将自动被激活,执行“cat /proc/mdstat”可以观察阵列设备的
运行状态。
[root@localhost ~]# ls -l /dev/md0
brw------- 1 root root 9, 0 07-25 09:03 /dev/md0
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sde1[3] sdd1[2] sdc1[1] sdb1[0]
      6024000 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
其中,“[4/4]”部分中的第一个“4”表示成员设备个数,后边的“4”表示当前的活动设备个
数,“UUUU”对应为成员设备的状态。例如,若出现“[4/3][UUU_]”的信息时,则表示第 4 个成
员设备(/dev/sde1)出现故障了。
 
  RAID设备中建立文件系统
创建好磁盘阵列设备文件“/dev/md0”以后,就可以在该设备中建立文件系统了。在 RHEL5
系统中,可以使用 mkfs 命令格式化该设备,将其作为 ext3文件系统来使用。
[root@localhost ~]# mkfs -t ext3 /dev/md0
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
753664 inodes, 1506000 blocks
75300 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1543503872
46 block groups
32768 blocks per group, 32768 fragments per group
16384 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 33 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
  挂载并使用文件系统
创建挂载点目录“/mdata”,并将上一小节中建立好的文件系统挂载到该目录,即可正常使用。 
[root@localhost ~]# mkdir /mdata
[root@localhost ~]# mount /dev/md0 /mdata
[root@localhost ~]# df -T | grep "md0"    //验证挂载的“/mdata”文件系统
/dev/md0      ext3     5929360    142976   5485184   3% /mdata
除去一个成员设备作为校验盘以后,磁盘阵列的有效存储空间为 3个成员设备的容量之和(大
约为 2GB×36GB)。
如果希望在每次开机后自动挂载该阵列设备,可以在“/etc/fstab”文件中添加相应设置。
[root@localhost ~]# vi /etc/fstab
/dev/md0      /mdata        ext3   defaults   0  0
 
 
 阵列的管理及设备恢复
 
 基本管理操作
1.扫描或查看磁盘阵列信息
使用 mdadm 命令时,“-D”选项相当于“--detail”,表示显示扫描结果的详细内容;“-s
选项相当于“--scan”,用于扫描阵列设备。
未指定阵列设备文件时,可以显示出当前系统中的阵列配置信息、RAID设备列表。
[root@localhost ~]# mdadm -vDs
ARRAY /dev/md0 level=raid5 num-devices=4
UUID=35bcffa1:cdc5ba41:0c5b5702:e32a3259
   devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1
当指定阵列设备作为参数时,可以输出指定阵列设备的详细参数,包括活动设备个数、失
效设备个数、更新时间、列表成员设备位置等。
[root@localhost ~]# mdadm -vDs /dev/md0
/dev/md0:
        Version : 00.90.03
  Creation Time : Sat Jul 25 11:23:07 2009
     Raid Level : raid5
     Array Size : 6024000 (5.74 GiB 6.17 GB)
    Device Size : 2008000 (1961.27 MiB 2056.19 MB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent
    Update Time : Sat Jul 25 11:26:01 2009
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0
         Layout : left-symmetric
     Chunk Size : 64K
           UUID : 35bcffa1:cdc5ba41:0c5b5702:e32a3259
         Events : 0.6
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1
       3       8       18        3      active sync   /dev/sde1
 
2.创建配置文件 mdadm.conf
mdamd 的配置文件为“/etc/mdadm.conf”,该文件只是用来方便用户管理和使用,缺少
此文件并不会影响磁盘阵列的功能。在配置文件中可以保存多个磁盘阵列的配置信息。配置文
件中的基本信息可以通过前面讲过的“mdadm -vDs”命令获得。
[root@localhost ~]# vi /etc/mdadm.conf
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
ARRAY /dev/md0 level=raid5 num-devices=4
UUID=35bcffa1:cdc5ba41:0c5b5702:e32a3259 
devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1
CREATE owner=root group=root mode=0640
在上述文件中, ARRAY”、“UUID devices”部分是位于同一行中的内容,最后一
行中的“CREATE”用于设置自动创建阵列设备文件的属主、属组及默认权限。关于mdadm.conf
配置文件中更多配置项的使用,可以参考“man mdadm.conf”帮助信息。
3.启动/停止RAID阵列
在确保没有相关程序读写磁盘阵列设备的情况下,可以停止阵列设备。只需使用 mdadm
命令结合“-S”选项(等同于“--stop”选项)即可。执行该操作将会禁用对应的阵列设备,
释放相关资源。
[root@localhost ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
结合“-A”选项(等同于“--assemble”选项)可以重新组合对应的磁盘阵列设备。
[root@localhost ~]# mdadm -A /dev/md0
mdadm: /dev/md0 has been started with 4 drives.
[root@localhost ~]# mount /dev/md0 /mdata/
 
 设备恢复操作
1.模拟阵列设备故障
对于运行中的磁盘阵列,可以结合 mdadm 命令的“-f”选项(等同于“”选项)用于模
拟成员设备故障,例如可将阵列中的“/dev/sdb1”标记为故障设备。
[root@localhost ~]# mdadm /dev/md0 -f /dev/sde1
mdadm: set /dev/sde1 faulty in /dev/md0
当阵列中的某个成员设备出现故障时,阵列会将其标记为失活状态。此时通过“cat
/proc/mdstat”可以观察到丢失出现故障的设备(/dev/sde1)。
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sde1[3](F) sdd1[2] sdc1[1] sdb1[0]
      6024000 blocks level 5, 64k chunk, algorithm 2 [4/3] [UUU_]
 
2.更换故障设备,并恢复数据
对于出现故障的设备,可以结合“-r”选项将其移除,然后换上正常的设备,结合“-a
选项重新添加到阵列中即可。
[root@localhost ~]# mdadm /dev/md0 -r /dev/sde1
mdadm: hot removed /dev/sde1     //移除故障设备
[root@localhost ~]# mdadm /dev/md0 -a /dev/sde1
mdadm: re-added /dev/sde1      //重新加入正常设备
RAID5 磁盘阵列能够在较短时间内进行重构和数据恢复,当需要恢复的数据较多时,可
以在此期间观察到阵列状态的恢复进度。
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sde1[3] sdd1[2] sdc1[1] sdb1[0]
      6024000 blocks level 5, 64k chunk, algorithm 2 [4/3] [UUU_]
      [===>.................]  recovery =  16.3% (328192/2008000) finish=2.6min
speed=10586K/sec
unused devices: <none>
待数据恢复完成以后,再次查看阵列状态即显示为正常了。
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sde1[3] sdd1[2] sdc1[1] sdb1[0]
      6024000 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
unused devices: <none>
  

转载于:https://blog.51cto.com/gm100861/794271

linux 软raid

阅读数 8

Linux软RAID

阅读数 3

Linux软路由

阅读数 2

没有更多推荐了,返回首页