写一个脚本:

1) 显示一个菜单给用户:

d|D) show disk usages.

m|M) show memory usages.

s|S) show swap usages.

*) quit.

[root@Smoke ~]# vim showdisk.sh
#!/bin/bash
#
cat << EOF
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
EOF
[root@Smoke ~]# chmod +x showdisk.sh
[root@Smoke ~]# ./showdisk.sh
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
[root@Smoke ~]# vim showdisk.sh
#!/bin/bash
#
cat << EOF
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
EOF
read -p "Your choice:" CHOICE
case $CHOICE in
d|D)
 echo "Disk usage:"
 df -Ph
 ;;
m|M)
 echo "Memory usage;"
 free -m | grep "Mem"
 ;;
s|S)
 echo "Swap usage;"
 free -m | grep "Swap"
 ;;
*)
 echo "Unknown."
 exit 9
 ;;
esac

2) 当用户给定选项后显示相应的内容;

扩展:

当用户选择完成,显示相应信息后,不退出;而让用户再一次选择,再次显示相应内容;除了用户使用quit;

#!/bin/bash
#
cat << EOF
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
EOF
read -p "Your choice: " CHOICE
while [ $CHOICE != 'quit' ];do
 case $CHOICE in
 d|D)
   echo "Disk usage: "
   df -Ph ;;
 m|M)
   echo "Memory usage: "
   free -m | grep "Mem" ;;
 s|S)
   echo "Swap usage: "
   free -m | grep "Swap" ;;
 *)
   echo "Unknown.." ;;
 esac
read -p "Again, your choice: " CHOICE
done        
[root@Smoke ~]# vim showdisk2.sh
#!/bin/bash
#
cat << EOF
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
EOF
read -p "Your choice:" CHOICE
while [ $CHOICE != 'quit' ];do
case $CHOICE in
d|D)
 echo "Disk usage:"
 df -Ph
 ;;
m|M)
 echo "Memory usage;"
 free -m | grep "Mem"
 ;;
s|S)
 echo "Swap usage;"
 free -m | grep "Swap"
 ;;
*)
 echo "Unknown."
 ;;
esac
read -p "Again, Your choice:" CHOICE
done

扩展:显示任何有意义的信息能够给用户醒目的提示,在echo的时候加上颜色;

echo默认动作,不管输入什么文本都会打印并进行换行

-n:不换行.

-e:开启反斜杠转义

\n:换行

\\:显示反斜杠自身

\b:退格键

\t:横向制表符

\v:纵向制表符

CTRL+KEY:CTRL表示法\033,直接使用原有的意思来表示;

#m:控制字体本身表现,粗体、斜体、加下划线、加删除线等,#代表数字1-7;

3#m:前景色,#代表数字1-7,7种颜色

4#m:背景色,#代表数字1-7,7种颜色

如果同时要改变字体表现、前景色、背景色使用"\033[4;32;44m STRING \033[0m"表示

[root@Smoke ~]# echo -e "\033[31mHello\033[0m,world."(\033代表CTRL键,左边第一个[31m表示颜色,右边\033[0m代表颜色结束符)
Hello,world.
[root@Smoke ~]# echo -e "\033[31;44mHello\033[0m,world"(通知控制前景色和背景色使用分号隔开)
Hello,world
[root@Smoke ~]# vim showdisk2.sh
#!/bin/bash
#
cat << EOF
d|D) show disk usages.
m|M) show memory usages.
s|S) show swap usages.
*) quit.
EOF
echo -n -e "\033[31mYour choice:\033[0m"
read  CHOICE
while [ $CHOICE != 'quit' ];do
case $CHOICE in
d|D)
 echo "Disk usage:"
 df -Ph
 ;;  
m|M)
 echo "Memory usage;"
 free -m | grep "Mem"
 ;;  
s|S)
 echo "Swap usage;"
 free -m | grep "Swap"
 ;;  
*)
 echo "Unknown."
 ;;
esac
echo -n -e "\033[31mAgain, Your choice:\033[0m"
read CHOICE
done

ext2: 文件系统块组组成:

超级块、GDT、block bitmap、inode bitmap、data blocks

文件系统挂载时的注意事项:

1、挂载点事先存在;

2、目录是否已经被其它进程使用;

3、目录中的原有文件会被暂时隐藏;

mount DEVICE MOUNT_POINT

1、设备文件;

2、LABEL

3、UUID

/etc/fstab文件格式:

设备    挂载点    文件系统类型    挂载选项    转储频率    检测次序

tune2fs:调整文件系统的相关属性

-l:显示超级块中的信息;

-L LABEL:设定或修改卷标

-o:设定默认挂载选项;

dumpe2fs -h:显示超级块中的信息;

安装RHEL6.3 x86_64的方法(前提:请确保你的CPU支持硬件虚拟化技术):

1、创建虚拟机;

2、下载isos目录中的rhci-rhel-6.3-1.iso,并导入虚拟机的虚拟光驱;

3、在boot提示符输入:linux ip=172.16.x.1 netmask=255.255.0.0 gateway=172.16.0.1 dns=172.16.0.1 ks=http://172.16.0.1/rhel6.cfg

64, 32:64位系统向后兼容32位系统,在64位上装32位软件是可以使用的,但是这种32位的软件依赖的库也是32位的,所以在64位系统上有两个库的目录,其他在软件管理上区别并不是很大;

/lib:32位库文件存储位置;

/lib64:64位库文件存储位置;

对于计算机来说核心部件有CPU、内存;CPU需要运算数据就需要在内存中取数据,只不过内存是易失性存储器,但是内存跟CPU比起来速度仍然差别很大,CPU底下还有缓存;一级缓存、二级缓存、三级缓存;还有寄存器,任何一个寄存器或缓存造价都很高昂,内存仍然是这样,而且不是永久性存储器;所以就借助于I/O设备连接磁盘进来,因此整个数据运算过程,开机以后假如操作系统已经运行起来了,某个进程需要用到某个数据的话,在主机上可能有N个进程,但是CPU只有一个,于是运行方式是轮流的,把CPU划分成时间片,第一个进程在上面运行5毫秒,退下来,不管运行是否完成;然后再运行第二个,到底应该运行第几个是有排队方式的;但是在CPU上是有优先级原则的;当一个进程在CPU上运行的时候,这个进程本身应该是一个程序,这个程序整个应该被内核调度完以后就分配到CPU上来了,所有的程序都应该由内核来管理,问题是这个程序事先在那里放着,应该在硬盘上,因此这个硬盘的数据应该首先被读进内存里面,内核也在内存当中放着,因此执行过程是这样,内核一会跑到CPU上运行一下,它发现该去运行某个进程了,于是内核就退出来,并且尝试把这个进程给它装载进CPU,让CPU开始运行了,当这个进程运行完了,内核又上去把这个进程踢下来,于是内核又选择一个进程拉进CPU,内核再退出来,于是第二个进程运行,内核一直监视着,比如分给一个进程运行5毫秒,一旦5毫秒时间到了内核就上去了把当前进程踢下来,于是再啦一个进来,内核再退出来,于是真正运行的核心不是就是CPU和内存,假如某一时刻一个进程到达CPU运行的时候,这个进程发现它需要去加载一个文件,比如cat /etc/fstab /etc/inittab,刚运行的时候显示/etc/fstab文件,过一会又需要/etc/inittab文件,这个进程发现它需要一个文件中的数据,文件在磁盘上放着,它要能够访问这个文件中的数据,这个进程就必须要能够打开这个文件,文件在文件系统上,就意味着要对这个文件系统发起open请求,然后再发起read请求,读出来这个文件的内容,于是就需要跟文件系统打交道,让文件系统把这个数据装载到内存当中,并且让这个进程能够访问,进程是用户的程序,进程是没有办法直接跟硬件打交道的,一旦发生这种情况,我们这个进程就发起了系统调用,一发起系统调用,工作该转给内核,内核也是个程序,要在CPU上运行,所以这时候内核就上去了,让进程先下来歇会,于是内核在CPU上指挥着,通过控制总线发出指令,开始让内存去加载数据文件,把数据文件装载进内存,装载进来就准备好了,内核把这个进程再啦进来,内核再退下来,于是这个进程就可以访问这个文件了,文件已经在内存当中了,它把这个文件地址已经赋予给这个进程了,进程知道这个文件在内存当中那段空间中放着,于是就可以显示这个文件内容了,这个过程需要跟外部设备不断的交互,这个设备就是硬盘,内存是电气设备,磁盘如果是机械式,意味着要产生寻道,要定位磁头,要等待数据转过来,把数据取过来,CPU控制着去读取这个数据,它怎么去控制的,CPU怎么知道这个数据在硬盘的什么位置存放,通过文件系统调用的,文件系统也是个程序,还是内核,内核怎么知道这个数据在磁盘什么位置存放,它要转换成文件系统请求,文件系统知道它在那个文件那个块上,块是个逻辑结构,它跟磁盘本身,这个块本身还要转换成对应的扇区号,意味着一个磁盘块可能包含了三个扇区,于是找到三号块,就要找到三号块对应的是那几个扇区,要找到某个特定的扇区,接下来要驱动,硬盘要转驱动那个磁头找到磁道上那个扇区,这个过程由谁控制完成,在windows上,要装一个操作系统,装完以后,如果没有某个驱动,这个硬件用起来是很不好的,驱动程序是干什么的,就是将我们的逻辑指令,CPU所发过来的逻辑指令转换成那个对应设备自身控制机制,硬盘是有自己的控制芯片的,可以认为硬盘主板上有个小CPU,这个小CPU能够指挥着磁头马达的旋转,能够指挥那个磁头往那挪,CPU的指令和硬盘小CPU上的控制指令彼此之间需要转换,而驱动程序就是干这事情的,驱动程序能够实现将你的CPU指令转换成对应机械设备所能够完成的操作,为什么CPU不自己指挥,还要靠驱动程序,你的是机械式硬盘,又的是7200转,又得是5400转,这里用的是机械式磁盘,要用的是U盘怎么办,这有各种可能性,而且不同硬件厂商它们所能生成的硬件设备的各种指标可能都不一样,所以事实上驱动程序是由硬件厂商提供的,如果不是由硬件厂商提供的,那就是所谓的公版驱动,公版驱动可能驱动能力没有硬件厂商自己所提供的能够更大化的更优的发挥硬件性能,驱动程序是什么,也是一段代码,也是一段程序,这段程序其实也是在内核当中工作的,无论如何我们把一个硬盘连接到主板总线上它才能够使用,它们是怎么连接的,我们要使用一根线连接到主板上,在我们主板上会有个接口会让那根线的头插进去,那个接口是什么,这个接口其实也是一个控制芯片,这个接口有什么意义,在我们的CPU内部有所谓的三种总线,控制总线、地址总线、数据总线、数据总线在主板上的线路和你这根连接主板和硬盘的线是不一样的,需要进行转换,这就是主板上这个接口的意义,这个看上去是个接口,其实他还是一个Controller控制器,这个控制器芯片它也其实就是个转换器,他能够将CPU说的话,转换成这个硬盘可以理解的话,就意味着将CPU发来的数据信号,转换成这个线传输的信号,线不一样走法是不一样的,如果这个控制器芯片直接做到主板上我们把它称作叫控制器,但是有些不是直接做到主板的,比如所谓的网卡;CPU跟网卡联系仍然靠的是数据总线、控制总线、甚至还靠I/O;但是如果真正要跟外部的设备相联系,比如交换机路由器就换成了网线,这个网线和CPU里面的总线结构也不一样,那怎么办,网卡有集成的,它也有独立的,独立的该怎么用,主板上有个插槽,我们插到那个插槽里面,插槽本身并不是一个控制器,把网卡插到插槽里面,网卡就可以起到转换作用了,这时候这个网卡就是一个控制器,但是对于独立的设备来讲,它通常不叫做控制器,而叫做Adapter适配器,直接集成的通常叫控制器,非集成的通常叫做适配器,要想使用U盘,主板上有U盘接口,这就是USB的控制器,能够将CPU所发来的各种指令通过驱动程序转变成U盘可以识别的控制信号,进而能够在U盘上发起读写操作,当我们CPU需要到硬盘上读数据的时候,那就意味着这个CPU要通过驱动,所谓CPU读数据,就是内核到CPU,内核通过执行驱动程序控制着控制器告诉它可以读数据了,控制器发过来的指令硬盘怎么理解,事实上计算机上传递的都是01电气信号,硬盘怎么知道它要读的是数据,而且读的是那个磁道上那个扇区的数据,芯片之间彼此要通信,控制芯片说给硬盘一种言语,硬盘必须要能够理解,因此他俩之间要通信要对话,这种通信和对话,如果对方说的是英语,硬盘理解的是法语,那硬盘就混乱了,就乱套了,那因此,要想交流需要同一种语言,我发过来01信号,这家伙马上就能够知道,它能理解对方需要需求什么,问题是我们发过来信号都是01代码,硬盘怎么知道那些是控制的,事先有约定,这里发过来信号以后,这个信号当中,它必须要有一定的格式,前两位告诉信号来了,中间二十位告诉你我要读那个数据,再往后二十位标识读那个地方多长的数据等等,于是硬盘就可以理解了,把从多长开始的数据就回复给它,而像这些双方约定好的,我发给你,你能理解的这种信号格式,这种语言组织规范,称作协议,双方都遵循的理解某种信号的法则,不同的线路它所传输的方式也不一样,使用网线和使用无线信号传输,它们传输介质不一样,但信号的传输方式最终都是能够被编码、解码的,那就需要特殊的设备来完成了,这就是所谓的特殊控制芯片来完成,控制器负责把CPU说的话翻译成对方可以理解说的话,并且这个话还能通过这种线路来传输,所以它们彼此之间缺一不可,比如这里是个SATA口的,你要拿个USB线,让他俩连起来,就算他俩说的话一样,这个话到达不了对方,也不可以,我们USB格式的硬盘,SATA、IDE、SCSI硬盘都不一样,在主板上可能有多种口,如果是IDE口硬盘就往IDE口总线连接,IDE是并行的,SATA是串行的,按道理并行的快,并行要没有传输顺序,未必就有串行的块;

硬盘接口格式:

IDE:133Mbps

SATA: 300Mbps

SATA2:600Mbps

SATA3: 6Gbps

USB 3.0:480Mbps

SCSI:Small Computer System Interface(小型计算机系统接口)

每个设备要连进来要跟主板进行交互,跟CPU和内存总线进行交互的话,它要有一个I/O控制器,而SCSI的控制器有个强大的特点,它本身里面有小的功能强大的芯片,可以理解成是一个小CPU,这个小CPU功能强大到什么地步,每一个数据要想从硬盘载入到内存都实时需要CPU参与的,后期得到了改进使用DMA机制,而对SCSI而言,它的控制器芯片本来就有个CPU,所以当我们的大CPU,接下来要载入那些数据的时候,大CPU退出了该干什么事干别的事去了,下来来的过程就是由小CPU指挥着,数据从硬盘读进来放到内存,读进来放到内存,放完了告诉大CPU我这里指挥完了,因此大大解脱了大CPU的任务,它自己独立了,大部分90%的事情自己都可以干了,而对于其他的控制器来讲,有10%的事自己可以干,90%的由大CPU来完成,所以SCSI强大的多,更何况SCSI本身它的转速通常都比较快,早起是用在工业上的,用在生产环境中的,所以这种硬盘传输速率,整体性能比IDE、SATA、USB的要快一倍左右,每秒完成的事务,但是对一个非常繁忙的服务器来讲,这仍然是不可想象的,比如是一个文件服务器,可能有3000个用户同时都过来访问,每个用户都来下载文件,而且都是并行下载,下载的都还不一样,意味着每秒种传输的数据量非常非常大,仍然满足不了,因为整个存储的速度太慢了,所以应该提供一个更快的,有着更大I/O能力的设备,一个设备无论如何能够突破理论上限,将多个设备组合起来并行工作要快的多,于是我们就用同时组合多个设备来完成一个任务,该怎么实现,我们开始不再使用原来的接口,再换一种口,在主板上增加一个更强大的控制器,这个控制器本身它不是连接硬盘的,而是它连接另外一个设备,这个设备是一种特殊的接口,而这个设备接口里面,它能够将一个接口给它一分为多个接口,而这多个口每一个口都可以接一块SATA盘或接一块SCSI盘,也就意味着我们完全可以使用把5块SATA接口的盘接到5个SATA口上,而后使用一个控制器当作一个设备向计算机输出,对主板看来这只是一块盘,因为这是一个口,一个控制器设备,而这个控制块最终跟另外那个设备控制芯片通信,这个控制芯片本身在内部把它分解成了5个盘,所以对主机看它是看不到的,因此这个控制器就是特殊的控制器,它的通信法则跟此前所讲的通信法则不一样,而这种控制器叫做raid控制器。

RAID:廉价(独立)冗余磁盘阵列

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

0: 条带

性能提升: 读,写

冗余能力(容错能力): 无

空间利用率:nS

至少2块盘

1: 镜像

性能表现:写性能下降,读性能提升

冗余能力:有

空间利用率:1/2

至少2块盘

2

3

4:

5:
性能表现:读,写提升

冗余能力:有

空间利用率:(n-1)/n

至少需要3块

10:

性能表现:读、写提升

冗余能力:有

空间利用率:1/2

至少需要4块

01:

性能表现:读、写提升

冗余能力:有

空间利用率:1/2

至少需要4块

50:

性能表现:读、写提升

冗余能力:有

空间利用率:(n-2)/n

至少需要6块

jbod: 将多个小盘组合成大盘

性能表现:无提升

冗余能力:无

空间利用率:100%

至少需要2块

Raid Level(raid级别)

IDE(ATA):133Mbps,并行总线

SATA:6Gbps,串行总线

USB:串行总线

SCSI:UltaSCSI,320Mbps,并行总线

SAS:串行附加存储,2.5寸

RAID实现:

硬件RAID:

在服务器主板上有可能直接集成了raid控制器,有了这个控制器它需要一个外部存储设备,这个存储设备外部有一个接口,使用线缆将raid控制器和存储设备的接口连接起来,就能够在当前主机上访问外部的存储设备,也可以通过在主机上有一个raid控制芯片,这个raid控制芯片通过内部各种总线连接到主板上另外几个插槽上,这个控制芯片在主板内部就可以控制这几个插槽,这几个插槽是SATA口的槽,因为在机箱内部某个托架上放上4块硬盘,每个硬盘都连接到这几个插槽上,然后使用raid控制芯片来控制这几个插槽,怎么设置这个芯片,主板上硬件芯片设备都是通过BIOS设置,通过BIOS界面去配置启用这个芯片,并且将这几块片配置成你指定的raid级别,用那几块盘,在硬件级别上如果主板集成了raid控制芯片,甚至就算使用的是raid适配器,要去配置这些设备,需要在BIOS界面中进行,如果在BIOS界面中配置好了,在整个硬件上看来,这里没有4块硬盘,而是有几个配置好的raid,要想在操作系统级别使用raid,操作系统必须要驱动每个硬件才可以,这意味着,操作系统必须有这个对应raid芯片驱动程序,它才能发现raid阵列,虽然在BIOS中能发现,但是操作系统未必能发现,所以装操作系统的时候,这个操作系统本身必要要能够识别raid卡,如果识别不了,得先装驱动,在安装操作系统过程当中,它会提醒你,如果有了一个操作系统无法识别的设备,请在安装过程中先提供驱动程序,这时候找到raid卡驱动程序,插到主机上,安装过程程序它能够驱动我们的设备,而后将操作系统安装到raid上,安装完成以后,内核也能够识别这个raid并且驱动,这个时候在操作系统看来,这个设备到底是什么口的设备,装完操作系统以后,操作系统看来这其实就是一个串口设备,所以把raid都识别为/dev/sd#格式磁盘,所以操作系统并不能意识到这是两个raid硬件,它只知道这是一个存储设备;

软件RAID:

主板上即raid控制芯片,也没有适配器,上面也只接了5块SATA盘,要想使用raid,其中一块专门用来装操作系统,要想把其他四块组合成raid来用,能够操作硬件的只有内核,所以要保证内核支持软件raid,软件raid实现就是内核独有的模块叫multi disks(多设备),这个模块工作起来以后,可以读一个配置文件,这个配置文件明确标明了把那几块盘组成raid,所以用户在想往我们某个磁盘存数据的时候,首先要提醒内核,于是内核就能够往这几个盘上存数据了,内核识别这几个设备是各自独立的磁盘,要访问每一个个硬件设备要靠这个设备文件,要访问这每一个磁盘要靠设备文件,这设备文件对应的是独立磁盘,不是raid设备,首先要在内核中使用md模拟一个假的raid设备出来,当我们再次需要存储数据的时候,就往这个逻辑raid上存,既然是设备就有设备文件,因此每一个创建好的逻辑设备在/dev下一般都有一个对应的设备文件给它,通常以/dev/md#表示,#代表数字跟raid级别没有关系,只是标识不同raid设备,并不标识raid级别,这样以来在内核中就模拟一个设备,而在内核中这个设备给它创建对应的设备文件,以/dev/md命名,而再往上存数据,就不再提醒给/dev/sd#,而提醒给/dev/md#,当提醒给/dev/md#,内核发现这是一个逻辑设备,于是在内核内部这个模块,这个模块也是个程序,由这个程序负责完成将数据分散成你所需要的对应raid设备格式,在内部/dev/md#再分别提醒给各个/dev/sd#设备,再通过/devsd#存储在各自的磁盘设备上去,所以它就是在用户和硬件设备之间raid上又新增一个层次模拟一个假的raid设备,只不过这个raid设备对用户空间进程看来就是个raid,而对内核看来就是还是几块磁盘,只不过在内核内部把它模拟成一个raid设备;任何一个硬件设备都可以使用软件来模拟的,因此操作系统安装完以后,完全可以在内核当中使用软件方式模拟硬件,这个软件就是md模块,md模块可以通过用户指定的配置将指定的磁盘设备组合起来形成raid,本身磁盘并不是raid,只是两块硬盘而已,但是由于模块将它们完成了组合,因此透过这个模块来访问这几个硬盘设备就是raid,因此如何使用这个模块对应的设备文件来访问它就是raid设备,如果不通过它来访问那就是独立磁盘设备,这个软件要想工作起来,要依赖于CPU,软件raid的性能取决于CPU的性能,CPU分数据片的能力,还有CPU空闲与否,性能比较差,如果某一天操作系统坏了,这个操作系统内核没有了,首先配置的raid信息没有了,以raid方式存储的数据就不能访问到了,所以这个raid模块,在几个设备上,如果把它组织成了raid下面模拟的raid设备,要求这几个磁盘设备必须要标记为内核可识别的类型,这种类型叫fd(linux软raid),标识为fd类型以后,这个模块存数据的时候,它会在数据之外存一些元数据,将来哪怕重装操作系统,只要把这个模块装载进来,让这个模块自身去扫描这几个设备,才能把它重新组合起来,只不过需要额外的步骤,一般不建议在生产环境使用软raid设备;

逻辑RIAD:

/dev/md0

/dev/md1

fd:磁盘阵列所需分区类型

md:软raid内核模块

mdadm: 将任何块设备做成RAID

模式化的命令:

  创建模式

    -C /dev/md#:创建raid设备,#代表数字,区分不同raid设备

      专用选项:

        -l: 级别

        -n #: 设备个数

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

        -c: CHUNK大小, 2^n整次方倍,默认为64K

        -x #: 指定空闲盘个数

注意:一个CHUNK包含多少磁盘块,比如,默认CHUNK为64K,默认磁盘块是4096bytes(4K),一个CHUNK相当于16个磁盘块,软RAID每一次生成一个CHUNK的时候它都要计算以下相当于多少磁盘块,因此创建好RAID以后在格式化的时候可以指定块大小,比如默认为4K,指定块大小的同时为了能够提高RAID性能,还可以明确在mke2fs执行的时候使用-E选项:

mke2fs -E stride=stripe-size:条带是多大,CHUNK:BLOCK倍数,这个倍数就是CHUNK除以block大小的商是多少,64CHUNK,4K的BLOCK,stride=16;

CHUNK对于镜像raid 1意义不是特别大,但是对于条带raid 0 raid 5还是有作用的,应该给在格式化给它指定条带;

  管理模式

    -a,--add:添加磁盘设备到阵列

    -r,--remove:移除RAID设备中的磁盘设备

    -f,--fail,--set-faulty:模拟磁盘损坏

    mdadm /dev/md# --fail /dev/sda7:将RAID设备md#中的sda7设备模拟为损坏

  监控模式

    -F

  增长模式

    -G

  装配模式:将停止的阵列进行装配使用

    -A /dev/md# /dev/sda1 /dev/sda2...

查看RAID阵列的详细信息

mdadm -D /dev/md#

  --detail:查看RAID阵列详细信息,显示内容同-D一样;

 

停止阵列:

  mdadm -S /dev/md#

    --stop:停止阵列设备,与-S功能一样

创建一个空间大小为10G的RAID5设备;其chuck大小为32k;要求此设备开机时可以自动挂载至/backup目录;

RAID0

  2G:

    4: 512MB

    2: 1G

RAID1

  2G

    2:2G

创建RAID0设备大小为2G:

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

  -n #:指定周期长度,单位为秒,默认为2S

格式: watch -n # 'COMMAND'

将当前RAID信息保存至配置文件,以便以后进行装配:

mdamd -D --scan > /etc/mdadm.conf:显示当前主机上每个RAID设备,以及关联的设备本身,设备的UUID号等,保存到/etc/mdadm.conf主配置文件,以后再重新装配RAID设备就不需要再指设备,它会自动读取这个配置文件并装配;

RAID5:

2G: 3, 1G

mdadm -C /dev/md5 -l 5 -n 3 -a yes -c 128 /dev/sda{5,6,7} -x 1 /dev/sda8
[root@Smoke ~]# fdisk /dev/sda(管理/dev/sda磁盘设备,进入交互模式)
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(创建新分区)
First cylinder (2706-5221, default 2706):
Using default value 2706
Last cylinder, +cylinders or +size{K,M,G} (2706-5221, default 5221): +1G(创建1G逻辑分区)
Command (m for help): n(创建新分区)
First cylinder (2838-5221, default 2838):
Using default value 2838
Last cylinder, +cylinders or +size{K,M,G} (2838-5221, default 5221): +1G(创建1G逻辑分区)
Command (m for help): t(调整分区类型)
Partition number (1-6): 5(调整第5个分区类型)
Hex code (type L to list codes): L(显示Linux支持的分区类型)
0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx        
5  Extended        42  SFS             86  NTFS volume set da  Non-FS data    
6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility  
8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt        
9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access    
a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor      
c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            
f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1
Hex code (type L to list codes): fd(将分区更改为linux raid auto类型分区)
Changed system type of partition 5 to fd (Linux raid autodetect)
Command (m for help): t(更改分区类型)  
Partition number (1-6): 6(调整第6个分区类型)
Hex code (type L to list codes): fd(将分区更改为linux raid auto类型分区)
Changed system type of partition 6 to fd (Linux raid autodetect)
Command (m for help): p(查看/dev/sda设备上所有分区)
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 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: 0x00031216
  Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        2576    20480000   83  Linux
/dev/sda3            2576        2706     1048576   82  Linux swap / Solaris
/dev/sda4            2706        5221    20203282+   5  Extended
/dev/sda5            2706        2837     1053771   fd  Linux raid autodetect
/dev/sda6            2838        2969     1060258+  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: Device or resource busy.
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@Smoke ~]# partprobe /dev/sda(linux 5.x版本让内核重新扫描分区表)
[root@Smoke ~]# partx -a /dev/sda(linux 6.x版本让内核重新扫描分区表,-a添加指定分区或磁盘读取并添加所有分区)
# 1:      2048-   411647 (   409600 sectors,    209 MB)
# 2:    411648- 41371647 ( 40960000 sectors,  20971 MB)
# 3:  41371648- 43468799 (  2097152 sectors,   1073 MB)
# 4:  43468800- 83875364 ( 40406565 sectors,  20688 MB)
# 5:  43468863- 45576404 (  2107542 sectors,   1079 MB)
# 6:  45576468- 47696984 (  2120517 sectors,   1085 MB)
[root@Smoke ~]# cat /proc/partitions(查看内核识别的分区)
major minor  #blocks  name
  8        0   41943040 sda
  8        1     204800 sda1
  8        2   20480000 sda2
  8        3    1048576 sda3
  8        4          1 sda4
  8        5    1053771 sda5
  8        6    1060258 sda6
[root@Smoke ~]# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sda{5,6}(-C 创建raid设备md0,-a yes表示自动创建设备文件,-l级别为0,-n设备个数,设备为/dev/
sda5和/dev/sda6,花括号{}展开)
mdadm: /dev/sda5 appears to contain an ext2fs file system
   size=2097996K  mtime=Thu Jan  1 08:00:00 1970
Continue creating array? y(确认创建)
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.(已经启动)
[root@Smoke ~]# cat /proc/mdstat(查看系统上所有启动状态的raid设备)
Personalities : [raid0]
md0 : active raid0 sda6[1] sda5[0]
     2113536 blocks super 1.2 512k chunks(chunks大小为512k)
     
unused devices: <none>
[root@Smoke ~]# mke2fs -j /dev/md0(将md0格式化为ext3的文件系统,-j带日志文件系统)
mke2fs 1.41.12 (17-May-2010)
Filesystem label=(文件系统卷标)
OS type: Linux(操作系统类型)
Block size=4096 (log=2)(块大小4096)
Fragment size=4096 (log=2)(偏移大小)
Stride=128 blocks, Stripe width=256 blocks
132192 inodes,(inode数量) 528384 blocks(块数量)
26419 blocks (5.00%) reserved for the super user(有26419个块,大约占用总块数528384的5%预留给超级管理员使用,一般情况下当我们在一个分区上穿件文件系统的时候,
它会把这个分区里面5%的磁盘块空间预留给超级管理,一旦当这个分区被填满之后,我们的管理员进来做一些修复工作的时候,还有对于空间可用,可以自己指定预留百分比)
First data block=0(第一个数据块)
Maximum filesystem blocks=541065216(最大文件系统块多少)
17 block groups(多少个块组)
32768 blocks per group,(每隔块组有多少块) 32768 fragments per group(每隔组有多少片,片可以理解成块)
7776 inodes per group(每个组有多少inode)
Superblock backups stored on blocks:(Superblock超级块备份在那些磁盘块)
       32768, 98304, 163840, 229376, 294912
Writing inode tables: done(正则写inode tables,done完成)                          
Creating journal (16384 blocks): done(正在创建日志数据区域,done完成)
Writing superblocks and filesystem accounting information: done(正在写superblocks和文件系统统计信息,done完成)
This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.(这个文件系统可以被挂载使用,每挂载24次或使用180天了,要做一次检测,可以使用tune2fs 
-c或-i修改)
[root@Smoke ~]# fdisk -l(查看系统上所有文件系统分区)
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 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: 0x00031216
  Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        2576    20480000   83  Linux
/dev/sda3            2576        2706     1048576   82  Linux swap / Solaris
/dev/sda4            2706        5221    20203282+   5  Extended
/dev/sda5            2706        2837     1053771   fd  Linux raid autodetect
/dev/sda6            2838        2969     1060258+  fd  Linux raid autodetect
Disk /dev/md0: 2164 MB, 2164260864 bytes(md0大小为2G)
2 heads, 4 sectors/track, 528384 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Disk identifier: 0x00000000
[root@Smoke ~]# mount /dev/md0 /mnt/(将/dev/md0设备挂载到/mnt目录下)
[root@Smoke ~]# ls /mnt/(查看挂载后的文件系统)
lost+found(查看当前目录文件及子目录,任何一个新建的文件系统,刚格式化完的里面有lost+found目录)
创建RAID1设备大小为2G:
[root@Smoke ~]# fdisk /dev/sda(管理/dev/sda磁盘设备,进入交互模式)
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(创建新分区)
First cylinder (2970-5221, default 2970):
Using default value 2970
Last cylinder, +cylinders or +size{K,M,G} (2970-5221, default 5221): +2G(创建2G逻辑分区)
Command (m for help): n(创建新分区)
First cylinder (3232-5221, default 3232):
Using default value 3232
Last cylinder, +cylinders or +size{K,M,G} (3232-5221, default 5221): +2G(创建2G逻辑分区)
Command (m for help): n(创建新分区)
First cylinder (3494-5221, default 3494):
Using default value 3494
Last cylinder, +cylinders or +size{K,M,G} (3494-5221, default 5221): +2G(创建2G逻辑分区)
Command (m for help): p(查看/dev/sda设备上所有分区)
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 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: 0x00031216
  Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        2576    20480000   83  Linux
/dev/sda3            2576        2706     1048576   82  Linux swap / Solaris
/dev/sda4            2706        5221    20203282+   5  Extended
/dev/sda5            2706        2837     1053771   fd  Linux raid autodetect
/dev/sda6            2838        2969     1060258+  fd  Linux raid autodetect
/dev/sda7            2970        3231     2104483+  83  Linux
/dev/sda8            3232        3493     2104483+  83  Linux
/dev/sda9            3494        3755     2104483+  83  Linux
Command (m for help): t(更改分区类型)
Partition number (1-9): 7(更改第7个分区类型)
Hex code (type L to list codes): fd(更改分区类型为linux raid auto)
Changed system type of partition 7 to fd (Linux raid autodetect)
Command (m for help): t(更改分区类型)
Partition number (1-9): 8(更改第8个分区类型)
Hex code (type L to list codes): fd(更改分区类型为linux raid auto)
Changed system type of partition 8 to fd (Linux raid autodetect)
Command (m for help): t(更改分区类型)
Partition number (1-9): 9(更改第9个分区类型)
Hex code (type L to list codes): fd(更改分区类型为linux raid auto)
Changed system type of partition 9 to 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: Device or resource busy.
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@Smoke ~]# partprobe /dev/sda(linux 5.x版本让内核重新扫描分区表)
[root@Smoke ~]# partx -a /dev/sda(linux 6.x版本让内核重新扫描分区表,-a添加指定分区或磁盘读取并添加所有分区)
# 1:      2048-   411647 (   409600 sectors,    209 MB)
# 2:    411648- 41371647 ( 40960000 sectors,  20971 MB)
# 3:  41371648- 43468799 (  2097152 sectors,   1073 MB)
# 4:  43468800- 83875364 ( 40406565 sectors,  20688 MB)
# 5:  43468863- 45576404 (  2107542 sectors,   1079 MB)
# 6:  45576468- 47696984 (  2120517 sectors,   1085 MB)
# 7:  47697048- 51906014 (  4208967 sectors,   2154 MB)
# 8:  51906078- 56115044 (  4208967 sectors,   2154 MB)
# 9:  56115108- 60324074 (  4208967 sectors,   2154 MB)
[root@Smoke ~]# cat /proc/partitions(查看内核识别的文件系统分区)
major minor  #blocks  name
  8        0   41943040 sda
  8        1     204800 sda1
  8        2   20480000 sda2
  8        3    1048576 sda3
  8        4          1 sda4
  8        5    1053771 sda5
  8        6    1060258 sda6
  8        7    2104483 sda7
  8        8    2104483 sda8
  8        9    2104483 sda9
  9        0    2113536 md0
[root@Smoke ~]# mdadm -C /dev/md1 -a yes -n 2 -l 1 /dev/sda7 /dev/sda8(-C 创建raid设备md1,-a yes标识自动创建设备文件,-l级别为1,-n设备个数,设备为
/dev/sda7和/dev/sda8)
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.(/dev/md1设备已经启动)
[root@Smoke ~]# cat /proc/mdstat(查看系统上所有启动状态的raid设备)
Personalities : [raid0] [raid1]
md1 : active raid1 sda8[1] sda7[0]
     2102400 blocks super 1.2 [2/2] [UU]
     [===>...............] resync = 17.2%(镜像磁盘必须要将两个磁盘的每一个数据位都要一一对应起来,两块磁盘一模一样,没有同步完可以挂载、格式化、使用)
md0 : active raid0 sda6[1] sda5[0]
     2113536 blocks super 1.2 512k chunks
     
unused devices: <none>
[root@Smoke ~]# fdisk -l(查看系统上所有文件系统分区)
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 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: 0x00031216
  Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        2576    20480000   83  Linux
/dev/sda3            2576        2706     1048576   82  Linux swap / Solaris
/dev/sda4            2706        5221    20203282+   5  Extended
/dev/sda5            2706        2837     1053771   fd  Linux raid autodetect
/dev/sda6            2838        2969     1060258+  fd  Linux raid autodetect
/dev/sda7            2970        3231     2104483+  fd  Linux raid autodetect
/dev/sda8            3232        3493     2104483+  fd  Linux raid autodetect
/dev/sda9            3494        3755     2104483+  fd  Linux raid autodetect
Disk /dev/md0: 2164 MB, 2164260864 bytes
2 heads, 4 sectors/track, 528384 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Disk identifier: 0x00000000
Disk /dev/md1: 2152 MB, 2152857600 bytes(/dev/md1大小为2G)
2 heads, 4 sectors/track, 525600 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
[root@Smoke ~]# mke2fs -j /dev/md1(将/dev/md1设备格式化为ext3文件系统,-j带日志的文件系统)
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
131648 inodes, 525600 blocks
26280 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=541065216
17 block groups
32768 blocks per group, 32768 fragments per group
7744 inodes per group
Superblock backups stored on blocks:
       32768, 98304, 163840, 229376, 294912
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@Smoke ~]# mount /dev/md1 /media/(挂载/dev/md1设备到/media目录)
[root@Smoke ~]# ls /media/(查看挂载的/dev/md1设备)
lost+found(查看当前目录文件及子目录,任何一个新建的文件系统,刚格式化完的里面有lost+found目录)
[root@Smoke ~]# cp /etc/inittab /media/(复制/etc/inittab文件到/media目录)
[root@Smoke ~]# cd /media/(切换到/media目录)
[root@Smoke media]# ls(查看当前目录下文件及子目录,复制过来的Inittab文件)
inittab  lost+found
[root@Smoke ~]# mdadm -D /dev/md1(-D 查看RAID阵列/dev/md1设备的详细信息)
/dev/md1:
       Version : 1.2(版本)
 Creation Time : Sat Aug  2 23:31:59 2014
    Raid Level : raid1
    Array Size : 2102400 (2.01 GiB 2.15 GB)(阵列的大小)
 Used Dev Size : 2102400 (2.01 GiB 2.15 GB)(所用设备大小)
  Raid Devices : 2(几个设备)
 Total Devices : 2(总共几个设备)
   Persistence : Superblock is persistent
   Update Time : Sat Aug  2 23:42:11 2014
         State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
 Spare Devices : 0
          Name : Smoke:1  (local to host Smoke)
          UUID : 4fc1b3a9:9b9e9f75:76f04ffd:21b2dc3e
        Events : 17
   Number   Major   Minor   RaidDevice State
      0       8        7        0      active sync   /dev/sda7
      1       8        8        1      active sync   /dev/sda8
[root@Smoke ~]# mdadm --detail /dev/md1(--detail 查看RAID阵列/dev/md1设备的详细信息)
/dev/md1:
       Version : 1.2
 Creation Time : Sat Aug  2 23:31:59 2014
    Raid Level : raid1
    Array Size : 2102400 (2.01 GiB 2.15 GB)
 Used Dev Size : 2102400 (2.01 GiB 2.15 GB)
  Raid Devices : 2
 Total Devices : 2
   Persistence : Superblock is persistent
   Update Time : Sat Aug  2 23:46:25 2014
         State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
 Spare Devices : 0
          Name : Smoke:1  (local to host Smoke)
          UUID : 4fc1b3a9:9b9e9f75:76f04ffd:21b2dc3e
        Events : 17
   Number   Major   Minor   RaidDevice State
      0       8        7        0      active sync   /dev/sda7
      1       8        8        1      active sync   /dev/sda8
[root@Smoke ~]# mdadm /dev/md1 -f /dev/sda8(-f 将RAID设备md1的sda8模拟为损坏)
mdadm: set /dev/sda8 faulty in /dev/md1
[root@Smoke ~]# mdadm --detail /dev/md1(--detail 查看RAID阵列/dev/md1设备的详细信息)
/dev/md1:
       Version : 1.2
 Creation Time : Sat Aug  2 23:31:59 2014
    Raid Level : raid1
    Array Size : 2102400 (2.01 GiB 2.15 GB)
 Used Dev Size : 2102400 (2.01 GiB 2.15 GB)
  Raid Devices : 2
 Total Devices : 2
   Persistence : Superblock is persistent
   Update Time : Sun Aug  3 00:13:06 2014
         State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
 Spare Devices : 0
          Name : Smoke:1  (local to host Smoke)
          UUID : 4fc1b3a9:9b9e9f75:76f04ffd:21b2dc3e
        Events : 19
   Number   Major   Minor   RaidDevice State
      0       8        7        0      active sync   /dev/sda7
      1       0        0        1      removed(移除)
      1       8        8        -      faulty   /dev/sda8(/dev/sda8磁盘损坏)
[root@Smoke ~]# cat /media/inittab(查看inittab文件让然可以访问)
id:3:initdefault:
[root@Smoke ~]# mdadm /dev/md1 -r /dev/sda8(-r 移除RAID设备md1中的sda8设备)
mdadm: hot removed /dev/sda8 from /dev/md1(热拔掉/dev/sda8设备)
[root@Smoke ~]# mdadm --detail /dev/md1(--detail 查看RAID阵列/dev/md1设备的详细信息)
/dev/md1:
       Version : 1.2
 Creation Time : Sat Aug  2 23:31:59 2014
    Raid Level : raid1
    Array Size : 2102400 (2.01 GiB 2.15 GB)
 Used Dev Size : 2102400 (2.01 GiB 2.15 GB)
  Raid Devices : 2
 Total Devices : 1
   Persistence : Superblock is persistent
   Update Time : Sun Aug  3 00:17:30 2014
         State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
 Spare Devices : 0
          Name : Smoke:1  (local to host Smoke)
          UUID : 4fc1b3a9:9b9e9f75:76f04ffd:21b2dc3e
        Events : 26
   Number   Major   Minor   RaidDevice State
      0       8        7        0      active sync   /dev/sda7(只有一块盘)
      1       0        0        1      removed
[root@Smoke ~]# mdadm /dev/md1 -a /dev/sda9(-a 添加sda9设备到RAID设备md1)
mdadm: added /dev/sda9
[root@Smoke ~]# mdadm --detail /dev/md1(--detail 查看RAID阵列/dev/md1设备详细信息)
/dev/md1:
       Version : 1.2
 Creation Time : Sat Aug  2 23:31:59 2014
    Raid Level : raid1
    Array Size : 2102400 (2.01 GiB 2.15 GB)
 Used Dev Size : 2102400 (2.01 GiB 2.15 GB)
  Raid Devices : 2
 Total Devices : 2
   Persistence : Superblock is persistent
   Update Time : Sun Aug  3 00:23:48 2014
         State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
 Spare Devices : 0
          Name : Smoke:1  (local to host Smoke)
          UUID : 4fc1b3a9:9b9e9f75:76f04ffd:21b2dc3e
        Events : 47
   Number   Major   Minor   RaidDevice State
      0       8        7        0      active sync   /dev/sda7
      2       8        9        1      active sync   /dev/sda9
[root@Smoke ~]# cat /media/inittab(查看inittab文件内容可以正常访问)
id:3:initdefault:
[root@Smoke ~]# mdadm /dev/md1 -f /dev/sda7(-f 将RAID设备md1中的sda7设备模拟为损坏)
mdadm: set /dev/sda7 faulty in /dev/md1(-D 查看RAID设备/dev/md1详细信息)
[root@Smoke ~]# mdadm -D /dev/md1
/dev/md1:
       Version : 1.2
 Creation Time : Sat Aug  2 23:31:59 2014
    Raid Level : raid1
    Array Size : 2102400 (2.01 GiB 2.15 GB)
 Used Dev Size : 2102400 (2.01 GiB 2.15 GB)
  Raid Devices : 2
 Total Devices : 2
   Persistence : Superblock is persistent
   Update Time : Sun Aug  3 00:27:32 2014
         State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
 Spare Devices : 0
          Name : Smoke:1  (local to host Smoke)
          UUID : 4fc1b3a9:9b9e9f75:76f04ffd:21b2dc3e
        Events : 49
   Number   Major   Minor   RaidDevice State
      0       0        0        0      removed
      2       8        9        1      active sync   /dev/sda9
      0       8        7        -      faulty   /dev/sda7
[root@Smoke ~]# cat /media/inittab(查看inittab文件内容,仍然可以访问)
id:3:initdefault:
[root@Smoke ~]# umount /media/(卸载/dev/md1设备)
[root@Smoke ~]# cat /proc/mdstat(查看系统上所有启动状态的raid设备)
Personalities : [raid0] [raid1]
md1 : active raid1 sda9[2] sda7[0](F)
     2102400 blocks super 1.2 [2/1] [_U]
     
md0 : active raid0 sda6[1] sda5[0]
     2113536 blocks super 1.2 512k chunks
     
unused devices: <none>
[root@Smoke ~]# mdadm -S /dev/md1(-S 停止/dev/md1阵列)
mdadm: stopped /dev/md1
mdadm: stopped /dev/md1
[root@Smoke ~]# cat /proc/mdstat(查看系统上所有启动状态的raid设备)
Personalities : [raid0] [raid1]
md0 : active raid0 sda6[1] sda5[0]
     2113536 blocks super 1.2 512k chunks
     
unused devices: <none>
[root@Smoke ~]# rm /dev/md1(删除/dev/md1设备文件)
[root@Smoke ~]# mdadm -A /dev/md1 /dev/sda7 /dev/sda9(装配/dev/md1阵列)
mdadm: /dev/md1 has been started with 1 drive (out of 2).
[root@Smoke ~]# cat /proc/mdstat(查看系统上所有启动状态的raid设备,/dev/md1启动起来了)
Personalities : [raid0] [raid1]
md1 : active raid1 sda9[2]
     2102400 blocks super 1.2 [2/1] [_U]
     
md0 : active raid0 sda6[1] sda5[0]
     2113536 blocks super 1.2 512k chunks
     
unused devices: <none>
[root@Smoke ~]# mdadm -D /dev/md1(-D 查看/dev/md1阵列详细信息,没有/dev/sda7,因为/dev/sda7用不上,是损坏的)
/dev/md1:
       Version : 1.2
 Creation Time : Sat Aug  2 23:31:59 2014
    Raid Level : raid1
    Array Size : 2102400 (2.01 GiB 2.15 GB)
 Used Dev Size : 2102400 (2.01 GiB 2.15 GB)
  Raid Devices : 2
 Total Devices : 1
   Persistence : Superblock is persistent
   Update Time : Sun Aug  3 00:30:18 2014
         State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 0
 Spare Devices : 0
          Name : Smoke:1  (local to host Smoke)
          UUID : 4fc1b3a9:9b9e9f75:76f04ffd:21b2dc3e
        Events : 53
   Number   Major   Minor   RaidDevice State
      0       0        0        0      removed
      2       8        9        1      active sync   /dev/sda9
[root@Smoke ~]# mdadm /dev/md1 -a /dev/sda8(-a 添加/dev/sda8到/dev/md1阵列)
mdadm: added /dev/sda8
[root@Smoke ~]# mdadm -D /dev/md1(-D 查看/dev/md1阵列详细信息)
/dev/md1:
       Version : 1.2
 Creation Time : Sat Aug  2 23:31:59 2014
    Raid Level : raid1
    Array Size : 2102400 (2.01 GiB 2.15 GB)
 Used Dev Size : 2102400 (2.01 GiB 2.15 GB)
  Raid Devices : 2
 Total Devices : 2
   Persistence : Superblock is persistent
   Update Time : Sun Aug  3 00:42:57 2014
         State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
 Spare Devices : 0
          Name : Smoke:1  (local to host Smoke)
          UUID : 4fc1b3a9:9b9e9f75:76f04ffd:21b2dc3e
        Events : 74
   Number   Major   Minor   RaidDevice State
      3       8        8        0      active sync   /dev/sda8
      2       8        9        1      active sync   /dev/sda9
[root@Smoke ~]# mdadm /dev/md1 -a /dev/sda7(-a 添加/dev/sda7设备到/dev/md1阵列)
mdadm: added /dev/sda7
[root@Smoke ~]# mdadm -D /dev/md1(查看/dev/md1阵列详细信息)
/dev/md1:
       Version : 1.2
 Creation Time : Sat Aug  2 23:31:59 2014
    Raid Level : raid1
    Array Size : 2102400 (2.01 GiB 2.15 GB)
 Used Dev Size : 2102400 (2.01 GiB 2.15 GB)
  Raid Devices : 2
 Total Devices : 3
   Persistence : Superblock is persistent
   Update Time : Sun Aug  3 00:44:15 2014
         State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
 Spare Devices : 1
          Name : Smoke:1  (local to host Smoke)
          UUID : 4fc1b3a9:9b9e9f75:76f04ffd:21b2dc3e
        Events : 75
   Number   Major   Minor   RaidDevice State
      3       8        8        0      active sync   /dev/sda8
      2       8        9        1      active sync   /dev/sda9
      4       8        7        -      spare   /dev/sda7(/dev/sda7为备用磁盘)
[root@Smoke ~]# watch 'cat /proc/mdstat'(将'cat /proc/mdstat'当作参数送给watch周期性执行,并以全屏方式显示结果)
Every 2.0s: cat /proc/mdstat                                                                   Sun Aug  3 00:50:25 2014
Personalities : [raid0] [raid1]
md1 : active raid1 sda7[4](S) sda8[3] sda9[2]
     2102400 blocks super 1.2 [2/2] [UU]
md0 : active raid0 sda6[1] sda5[0]
     2113536 blocks super 1.2 512k chunks
unused devices: <none>
[root@Smoke ~]# mdadm /dev/md1 -f /dev/sda9(-f 将/dev/sda9设备模拟为损坏)
[root@Smoke ~]# mdadm -D /dev/md1(-D 查看/dev/md1设备详细信息,/dev/sda7备用磁盘自动顶上坏的/dev/sda9磁盘位置)
/dev/md1:
       Version : 1.2
 Creation Time : Sat Aug  2 23:31:59 2014
    Raid Level : raid1
    Array Size : 2102400 (2.01 GiB 2.15 GB)
 Used Dev Size : 2102400 (2.01 GiB 2.15 GB)
  Raid Devices : 2
 Total Devices : 3
   Persistence : Superblock is persistent
   Update Time : Sun Aug  3 00:51:54 2014
         State : clean, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 1
 Spare Devices : 1
Rebuild Status : 66% complete
          Name : Smoke:1  (local to host Smoke)
          UUID : 4fc1b3a9:9b9e9f75:76f04ffd:21b2dc3e
        Events : 87
   Number   Major   Minor   RaidDevice State
      3       8        8        0      active sync   /dev/sda8
      4       8        7        1      spare rebuilding   /dev/sda7(/dev/sda7备用磁盘自动顶上坏的/dev/sda9磁盘位置)
      2       8        9        -      faulty   /dev/sda9(/dev/sda9为坏的空闲盘)
[root@Smoke ~]# watch 'cat /proc/mdstat'(将'cat /proc/mdstat'当作参数送给watch周期性执行,并以全屏方式显示结果)
Every 2.0s: cat /proc/mdstat                                                                   Sun Aug  3 01:24:42 2014
Personalities : [raid0] [raid1]
md1 : active raid1 sda7[4] sda8[3] sda9[2](F)
     2102400 blocks super 1.2 [2/2] [UU]
md0 : active raid0 sda6[1] sda5[0]
     2113536 blocks super 1.2 512k chunks
unused devices: <none>
[root@Smoke ~]# mdadm -D -scan(显示当前主机上每个RAID设备,以及关联的设备本身,设备的UUID号等)
ARRAY /dev/md0 metadata=1.2 name=Smoke:0 UUID=1722073a:8e5316fb:f5830f5b:0bc83369
ARRAY /dev/md1 metadata=1.2 name=Smoke:1 UUID=4fc1b3a9:9b9e9f75:76f04ffd:21b2dc3e
[root@Smoke ~]# mdadm -D -scan > /etc/mdadm.conf(显示当前主机上每个RAID设备,以及关联的设备本身,设备的UUID号等,保存到/etc/mdadm.conf主配置文件,以后
再重新装配RAID设备就不需要再指设备,它会自动读取这个配置文件并装配;)
[root@Smoke ~]# mdadm -S /dev/md1(-S 停止/dev/md1阵列设备)
mdadm: stopped /dev/md1
[root@Smoke ~]# mdadm -A /dev/md1(-A 装配/dev/md1阵列设备,不用指定设备)
mdadm: /dev/md1 has been started with 2 drives.
[root@Smoke ~]# umount /mnt/(卸载/dev/md0设备)
[root@Smoke ~]# mke2fs -j -E stride=16 -b 4096 /dev/md0(将/dev/md0设备格式化为ext3类型文件系统,-j带日志文件系统,-E stride=16指定条带大小,-b 指定
block大小为4096)
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=16 blocks, Stripe width=256 blocks
132192 inodes, 528384 blocks
26419 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=541065216
17 block groups
32768 blocks per group, 32768 fragments per group
7776 inodes per group
Superblock backups stored on blocks:
       32768, 98304, 163840, 229376, 294912
Writing inode tables: done                            
Creating journal (16384 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@Smoke ~]# lsmod(查看内核载入的系统模块)
Module                  Size  Used by
raid456                76573  1
async_raid6_recov       6555  1 raid456
async_pq                4775  2 raid456,async_raid6_recov
raid6_pq               90821  2 async_raid6_recov,async_pq
async_xor               3691  3 raid456,async_raid6_recov,async_pq
xor                     8738  1 async_xor
async_memcpy            2236  2 raid456,async_raid6_recov
async_tx                3027  5 raid456,async_raid6_recov,async_pq,async_xor,async_memcpy
lp                      9242  0
rfcomm                 74119  4
sco                    18005  2
bridge                 83273  0
bnep                   16690  2
l2cap                  55714  16 rfcomm,bnep
nfsd                  309196  13
nfs_acl                 2647  1 nfsd
auth_rpcgss            44949  1 nfsd
exportfs                4236  1 nfsd
autofs4                26513  3
8021q                  25349  0
garp                    7152  1 8021q
stp                     2218  2 bridge,garp
llc                     5546  3 bridge,garp,stp
lockd                  73662  1 nfsd
sunrpc                262864  17 nfsd,nfs_acl,auth_rpcgss,lockd
iptable_filter          2793  0
iptable_nat             6158  0
nf_nat                 22759  1 iptable_nat
nf_conntrack_ipv4       9506  3 iptable_nat,nf_nat
nf_defrag_ipv4          1483  1 nf_conntrack_ipv4
ip_tables              17831  2 iptable_filter,iptable_nat
ip6t_REJECT             4628  2
nf_conntrack_ipv6       8337  2
nf_defrag_ipv6         11156  1 nf_conntrack_ipv6
xt_state                1492  2
nf_conntrack           79758  5 iptable_nat,nf_nat,nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state
ip6table_filter         2889  1
ip6_tables             18732  1 ip6table_filter
ipv6                  317829  171 ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
fuse                   73530  2
uinput                  7992  0
microcode             112685  0
ppdev                   8537  0
vmware_balloon          7199  0
btusb                  16851  2
bluetooth              99271  9 rfcomm,sco,bnep,l2cap,btusb
rfkill                 19255  2 bluetooth
snd_ens1371            21587  0
snd_rawmidi            23017  1 snd_ens1371
snd_ac97_codec        124967  1 snd_ens1371
ac97_bus                1452  1 snd_ac97_codec
snd_seq                55727  0
snd_seq_device          6500  2 snd_rawmidi,snd_seq
raid0                  12417  0(raid模块)
snd_pcm                87409  2 snd_ens1371,snd_ac97_codec
snd_timer              22443  2 snd_seq,snd_pcm
snd                    70569  7 snd_ens1371,snd_rawmidi,snd_ac97_codec,snd_seq,snd_seq_device,snd_pcm,snd_timer
soundcore               7958  1 snd
snd_page_alloc          8856  1 snd_pcm
parport_pc             22690  1
parport                36209  3 lp,ppdev,parport_pc
e1000                 170678  0
sg                     29350  0
i2c_piix4              12608  0
i2c_core               31084  1 i2c_piix4
shpchp                 32778  0
ext4                  374902  2
jbd2                   93427  1 ext4
mbcache                 8193  1 ext4
sd_mod                 39069  8
crc_t10dif              1541  1 sd_mod
sr_mod                 15177  0
cdrom                  39085  1 sr_mod
mptspi                 16603  7
mptscsih               36700  1 mptspi
mptbase                93647  2 mptspi,mptscsih
scsi_transport_spi     25863  1 mptspi
pata_acpi               3701  0
ata_generic             3837  0
ata_piix               24601  0
dm_mirror              14384  0
dm_region_hash         12085  1 dm_mirror
dm_log                  9930  2 dm_mirror,dm_region_hash
dm_mod                 84209  2 dm_mirror,dm_log

文件系统类型:

  ext2

  ext3

 

cat /proc/filesystems : 查看当前内核所支持文件系统类型

RAID: 独立冗余磁盘阵列

Linux:硬件,软件

  /dev/md#

MD: Multi Device, 多设备

mdadm:用户空间工具,管理工具

  创建

    -C

      专用选项:

        -l: 级别

        -n #: 设备个数

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

        -c: CHUNK大小, 2^n,默认为64K

        -x #: 指定空闲盘个数

  管理

    --add, --remove, --fail

    -a, -r, -f

  监控

    -F

  增长

    -G

  装配

    -A

  停止

    -S

  查看

    -D

 

RAID0, RAID1

RAID01, RAID10

RAID0+1:

MD, DM

  /dev/md#

  meta device元设备

DM: Device Mapper设备映射

  逻辑设备

    RAID, LVM2

 

DM: LVM2

  快照

  多路径

存储设备很可能在机箱外面,通过一根线连接到存储设备,如果这根线不同了,所有的数据都无从访问了,对于一个可用性环境非常严格的场所来讲是不允许的,因此通过两根线连接,但是有两根线发送数据通过那根线发送,这样就比较麻烦,一个数据发两次过去,硬盘要接受几次,是不是要存两份,存储之后数据会不会交叉起来,有没有错乱,这都有可能发生,必须要有一种线路管理策略,比如,发数据的时候可以两根线一块来用,只要两根线都通可以负载均衡方式使用它们,一共要发四个数据块,一根线发两个,这样速度还能增强,还能提升效率,再不行,平时用一个,另一个是备份,万一那个不通了直接启用另一个,纯粹作为冗余使用,这就是所谓多路径,多路径就需要DM模块来配置,让我们实现数据存储设备的寻路,能够通过多根不同线完成;

快照主要作用就是保留数据在你做快照那一刻状态,快照一般小于原数据,快照并不是镜像,快照是访问同一个数据的另外一条路径,类似于文件的软链接,默认情况下我们访问一个文件的时候只有一个路径,给磁盘或对应的文件系统文件做一个快照以后,意味着在它之上又给它提供另外一个访问路径,但这个访问路径不仅仅是路径问题,它也可以作为用户去访问对应它所映射磁盘数据的通路,而且看到的数据可能是一模一样的,所谓快照就是把数据被照下那一刻的状态保留起来,并作为文件的访问通道,如果说在文件系统上某一个文件万一有可能被修改的时候,这个文件被修改之前先把原来的保存一份,在快照存储空间里面,当以后访问的时候,通过原来的路径访问的是修改以后的结果,通过快照访问则是原来快照那一刻的结果,所以快照中是有数据的,只有那些通过原来路径会被修改的数据,它在修改之前,先复制一份存储到快照空间,通过快照访问文件,如果文件没修改,通过快照进来,真正访问的文件还在原来的分区上,则访问的是原来分区的数据,如果改变了就访问快照里面数据,快照里面保存的就是那一点发生修改的数据,所以快照都比较小,快照可以让数据停留在过去的某一个时刻,可以回到过去某一时刻,快照主要作用是实现数据备份;

动态增减:

买一台主机分区后,过几天发现D盘太小,不够用了,想扩大一点,磁盘还有空间,能不能将空间扯大一点,借助额外的工具可以实现,但是有巨大的风险,对于这种文件系统,一但分区大小定下来以后是不能改变的,但是对于DM来讲,由于它是一个逻辑设备,这种逻辑设备的边界却可以根据我们的大小随意缩减,或者增加都可以,过两天觉得分区不够用,给它扯大一点,只要磁盘有空间,没有任何问题,而且不影响里面原来的数据,更不用删除这个分区重新建立,更有意思是原来分了50G,发现两年过去才用了10G,空间浪费了,可以对分区进行压缩,也可以,只要压缩的空间不要让数据放不下,在整个文件系统使用上能够提供这样能力,本来有多块物理磁盘,它能够实现将这多块物理磁盘,给它组织成一个逻辑设备,这个逻辑设备对用户看来,就是一个大的设备,而且这是所有可用空间,将来发现三块磁盘都满了,还不够用,再添一块硬盘过来,把这个布扯大一点就可以了,把它包含进来,于是边界就增加到四个磁盘大小,如果发现硬盘用不完了,撤掉一个硬盘,将边界随之降到三块硬盘大小,上面逻辑层次它有点类似于扩展分区,扩展分区不能够直接使用,要划分成逻辑分区才能使用,它这里边界虽然可以快速的扩展和减小,但是它本身并不能实现文件系统,最多只是一个底层的真正意义物理存储空间的融合器,并且能够向上提供一个统一界面,因此要真正在这里面使用存储数据,再上面再创建类似于逻辑分区,这个逻辑分区,才是可以真正动态扩大和减小的,能扩大到只要底下中间层边界不超出就可以,所以就把整个系统分成了三个层次,最底层层次叫做物理设备,有个名字叫Physical Volume物理卷,中间叫Volume Group(卷组),是底下物理卷的组合,有了卷组以后相当于扩展分区不能够直接使用的,因为它只是个组合而已,在这个组合上要真实使用组合后的空间,就要创建Logical Volume(逻辑卷),在一个卷组当中,可以包含多个物理卷进来,因为卷组的边界大小到底是多大,取决于底层物理卷加起来有多大,PV组合起来的大小就是VG的大小,VG本身大小取决于物理卷,因此不能简单作为上层使用存储文件系统来使用,而必须要在上面创建逻辑卷,逻辑卷可以是卷组所有可用空间,虽然有PV组成的VG,提供了众多的空间,但是真正要使用还可以划分成逻辑卷,在一个VG当中可以划分多个逻辑卷出来,这多个逻辑卷加起来之和是不能超过VG边界的,如果发现VG不够用了,就要增加新的PV进来,只要VG边界扩展了,就意味着逻辑卷可以增加,逻辑卷才是真正意义上可以动态扩展或者缩减的设备,他是个逻辑设备,而这个设备本身有两种边界,物理边界和逻辑边界,所谓逻辑边界是文件系统边界,每一个逻辑卷就是一个独立的文件系统,就相当于一个独立的分区一样来使用,如果一个卷组中只有一个逻辑卷,这样也完全是可以的,这样这个逻辑卷的大小可以扩展到整个卷组的大小,也可以对卷创建快照,事实上指的是对逻辑卷创建快照,而快照卷必须跟他的逻辑卷在同一个卷组当中,也就意味着将来我们打算在这里面给某一个逻辑卷创建快照的话,一定给它预留出来足够空间创建快照,在同一个卷组当中必须要预留出来空间给其中某个逻辑卷创建快照,而后通过这个快照作为访问这个逻辑卷另外一个入口,如何实现简单扩展逻辑卷边界和缩减边界,它是怎么实现的,其实在PV上,我们把一个物理设备做成PV以后,那就意味着我们要把它加进某一个卷组里面,从而扩展某个卷组的空间,只要把PV放进卷组当中去,这样就意味着这个卷组,要把这个PV所提供的存储能力划分成一个一个的数据块,一个一个存储单元,类似域RAID的CHUNK,多大作为一个存储单元来存储,事实上逻辑卷也是同样的道理,只要把一个物理卷加到卷组中以后,这个物理卷所提供的存储空间事先就被直接划分好了一个一个的块,这个块不是文件系统的块,而是叫做PE(物理盘驱)的东西,逻辑存储单位,只要物理卷加进卷组以后,它一定跟这个卷组所定义的PE是相同的,也就是在创建卷组的时候要指定使用多大的PE,物理卷只有加入卷组中以后它才有PE,不加入卷组,虽然称为物理卷,它也不是PE,加进来以后,它的存储空间被统统分成一个一个的PE,这个PE大小取决于卷组,由此卷组当中就有一大堆的PE组成,创建逻辑卷如何创建,分给一个存储空间多少个PE,它就成为一个存储空间,所以我这里一共有十个PE,给存储空间五个,因此它整个存储空间就由这个五个PE组成,只不过到了逻辑卷的层面上它不再叫PE,而叫Logical Extend(逻辑盘区),当然LE还是PE,只不过占在谁的角度来说的,站在物理角度叫PE,站在逻辑卷角度叫LE,所以要创建逻辑卷就像创建分区一样,要指定起始柱面,指定多大空间,创建逻辑卷也是同样道理,可以指定这个逻辑卷为多大,这样它会自动找足够数的PE分配给你,但是,一个PE要么属于这个逻辑卷要么不属于,所以它的结果和指定结果可能不会完全一致,要么多一点要么少一点,完全一致可能性得碰巧才行,所谓扩展它的边界如何扩展,发现空间不够用了,新增两个PE进来,这样空间就扩展了,多了移掉就可以,一个逻辑卷的PE来自那个物理卷,逻辑卷的大小可以超出单个物理卷大小,因为在逻辑卷看它是看不见物理卷,它看到的就是卷组和卷组中一个一个的PE,因此两个PE很可能来自不同的物理卷,因此所存储的数据也可能是分别存储在多块硬盘上的,如果某个硬盘坏了,逻辑卷中的数据本身也会坏掉,因此在创建逻辑卷的时候,也可以把它创建成镜像的格式,创建具有镜像功能的逻辑卷,往逻辑卷存数据的时候,这个数据会存两份,存在不同的物理卷上,其中任何一个物理设备损坏,数据都还在,只不过对我们而言逻辑卷创建完就像一个独立的分区,可以格式化、挂载使用;

Physical Volume(PV):物理卷

Volume Group(VG):卷组

Logical Volume(LV):逻辑卷

物理边界:

逻辑边界:文件系统边界

Physical Extend(PE):盘区

Logical Extend(LE):逻辑盘区

管理物理卷:

  pv

    pvcreate /dev/sda1 /dev/sda2 ...:创建PV物理卷

      -f:强制创建

    pvremove /dev/sda#:删除PV

    pvscan:扫描PV

    pvdisplay /dev/sda#(详细信息),pvs /dev/sda#(基本信息):查看PV信息

    pvmove:将一个PV数据移动到其他PV

管理卷组:

  vg

    vgcerate VGNAME PV1 PV2 ...:创建VG卷组

      -s #:指定PE大小,单位B、K、S、M、G、T、P、E等等,默认为4M,如果将来文件系统当中文件都比较大,将来分配的时候希望一次分配多点空间,可以将PE指定大一点,红帽系统安装默认使用32M的PE;

    vgremove VGNAME:删除VG卷组,如果VG上已经创建过LV,而且存了数据,不能随便删除;

    vgextend VGNAME PV#:VG扩展,把PV物理卷添加到VG卷组当中,扩展VG卷组大小

    vgreduce VGNAME PV#:VG缩减,缩减意味着将一个PV从里面拿掉;如果PV有数据就坏掉了,所以在指定vgreduce之前,一定要将这个PV上面数据挪走,通过命令pvmove执行;

    vgdisplay VGNAME...(详细信息),vgs VGNAME...(基本信息):查看VG信息

    vgscan:扫描VG

    vgrename:重命名

管理逻辑卷:

  lv

    lvcreate: 创建LV逻辑卷

      -n LV_NAME:指定LV逻辑卷名字

      -L:指定LV空间大小,单位M、G、P、T、E等等

      -l: 指定LV空间大小,使用PE盘区个数指定;

    lvcreate -n LV_NAME -L #G VG_NAME:VG_NAME指定在那个VG卷组中创建

    lvremove /dev/VG_NAME/LV_NAME或/dev/mapper/VG_NAME-LV_NAME: 移除LV逻辑卷

    lvextend:扩展LV逻辑卷

    lvreduce:缩减LV逻辑卷

    lvresize:

    lvdisplay(详细信息),lvs(基本信息):查看LV逻辑信息,查看LV路径为/dev/VG_NAME/LV_NAME路径;

8e:逻辑卷的分区类型

10G, VG

注意:fdisk最多只能支持15个分区;

[root@Smoke ~]# fdisk /dev/sda(管理/dev/dsa磁盘设备,进入交互式)
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(创建新逻辑分区)
First cylinder (2706-5221, default 2706):
Using default value 2706
Last cylinder, +cylinders or +size{K,M,G} (2706-5221, default 5221): +7G(创建7G逻辑分区)
Command (m for help): n(创建新逻辑分区)
First cylinder (3621-5221, default 3621):
Using default value 3621
Last cylinder, +cylinders or +size{K,M,G} (3621-5221, default 5221): +3G(创建3G逻辑分区)
Command (m for help): n(创建新逻辑分区)
First cylinder (4014-5221, default 4014):
Using default value 4014
Last cylinder, +cylinders or +size{K,M,G} (4014-5221, default 5221): +5G(创建5G逻辑分区)
Command (m for help): p(查看当前磁盘所有分区)
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 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: 0x00031216
  Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        2576    20480000   83  Linux
/dev/sda3            2576        2706     1048576   82  Linux swap / Solaris
/dev/sda4            2706        5221    20203282+   5  Extended
/dev/sda5            2706        3620     7343218+  83  Linux
/dev/sda6            3621        4013     3156741   83  Linux
/dev/sda7            4014        4667     5253223+  83  Linux
Command (m for help): t(更改分区类型)
Partition number (1-7): 5(更改第5个分区类型)
Hex code (type L to list codes): L(查看当前系统支持所有分区类型)
0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx        
5  Extended        42  SFS             86  NTFS volume set da  Non-FS data    
6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility  
8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt        
9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access    
a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor      
c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            
f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1
Hex code (type L to list codes): 8e(更改分区类型为Linux LVM)    
Changed system type of partition 5 to 8e (Linux LVM)
Command (m for help): t(调整分区类型)
Partition number (1-7): 6(调整第6个分区类型)
Hex code (type L to list codes): 8e(更改分区类型为Linux LVM)
Changed system type of partition 6 to 8e (Linux LVM)
Command (m for help): t(调整分区类型)
Partition number (1-7): 7(调整第7个分区类型)
Hex code (type L to list codes): 8e(更改分区类型为Linux LVM)
Changed system type of partition 7 to 8e (Linux LVM)
Command (m for help): p(查看当前磁盘上所有分区情况)
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 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: 0x00031216
  Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        2576    20480000   83  Linux
/dev/sda3            2576        2706     1048576   82  Linux swap / Solaris
/dev/sda4            2706        5221    20203282+   5  Extended
/dev/sda5            2706        3620     7343218+  8e  Linux LVM
/dev/sda6            3621        4013     3156741   8e  Linux LVM
/dev/sda7            4014        4667     5253223+  8e  Linux LVM
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: Device or resource busy.
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@Smoke ~]# partprobe /dev/sda(linux 5.x版本让内核重新扫描分区表)
[root@Smoke ~]# partx -a /dev/sda(linux 6.x版本让内核重新扫描分区表)
[root@Smoke ~]# cat /proc/partitions(查看内核识别的分区)
major minor  #blocks  name
  8        0   41943040 sda
  8        1     204800 sda1
  8        2   20480000 sda2
  8        3    1048576 sda3
  8        4          1 sda4
  8        5    7343218 sda5
  8        6    3156741 sda6
  8        7    5253223 sda7
[root@Smoke ~]# pvcreate /dev/sda{5,6}(将/dev/sda5和/dev/sda6创建为PV物理卷)
 Wiping software RAID md superblock on /dev/sda5.
 Physical volume "/dev/sda5" successfully created
 Physical volume "/dev/sda6" successfully created
[root@Smoke ~]# pvs(查看当前系统的PV物理卷)
 PV         VG   Fmt  Attr PSize PFree
 /dev/sda5       lvm2 a--  7.00g 7.00g
 /dev/sda6       lvm2 a--  3.01g 3.01g
提示:大小20%的误差都是可以接受的;
[root@Smoke ~]# pvdisplay(查看当前系统PV物理卷详细信息)
 "/dev/sda5" is a new physical volume of "7.00 GiB"
 --- NEW Physical volume ---
 PV Name               /dev/sda5
 VG Name              
 PV Size               7.00 GiB
 Allocatable           NO
 PE Size               0  
 Total PE              0
 Free PE               0
 Allocated PE          0
 PV UUID               icc3U8-eXSY-RMHa-Qznz-zJq5-HIlB-04ZMUK
 
 "/dev/sda6" is a new physical volume of "3.01 GiB"
 --- NEW Physical volume ---
 PV Name               /dev/sda6
 VG Name              
 PV Size               3.01 GiB
 Allocatable           NO
 PE Size               0  
 Total PE              0
 Free PE               0
 Allocated PE          0
 PV UUID               x1DNP6-kPw6-wnY5-cNcN-KZ3U-QC8U-Yug8ot
注意:创建为PV是没有PE大小的,只有加入到VG卷组才会决定PE的大小;
[root@Smoke ~]# pvdisplay /dev/sda5(查看/dev/sda5的PV物理卷详细信息)
 "/dev/sda5" is a new physical volume of "7.00 GiB"
 --- NEW Physical volume ---
 PV Name               /dev/sda5
 VG Name              
 PV Size               7.00 GiB
 Allocatable           NO
 PE Size               0  
 Total PE              0
 Free PE               0
 Allocated PE          0
 PV UUID               icc3U8-eXSY-RMHa-Qznz-zJq5-HIlB-04ZMUK
[root@Smoke ~]# pvscan(扫描当前系统上一共有多少个PV物理卷)
 PV /dev/sda5                      lvm2 [7.00 GiB]
 PV /dev/sda6                      lvm2 [3.01 GiB]
 Total: 2 [10.01 GiB] / in use: 0 [0   ] / in no VG: 2 [10.01 GiB]
提示:把当前主机的PV拆下来放到其他主机能够被其他主机识别,就要先扫描PV物理卷上的源数据,把它识别成PV物理卷类型的;
[root@Smoke ~]# vgcreate myvg /dev/sda{5,6}(将/dev/sda5和/dev/sda6创建为VG卷组名字叫myvg)
 Volume group "myvg" successfully created
[root@Smoke ~]# vgs(查看系统上的VG卷组)
 VG   #PV #LV #SN Attr   VSize  VFree
 myvg   2   0   0 wz--n- 10.01g 10.01g
[root@Smoke ~]# vgdisplay myvg(查看VG卷组myvg的详细信息)
 --- Volume group ---
 VG Name               myvg
 System ID            
 Format                lvm2
 Metadata Areas        2
 Metadata Sequence No  1
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                0
 Open LV               0
 Max PV                0
 Cur PV                2
 Act PV                2
 VG Size               10.01 GiB
 PE Size               4.00 MiB(PE大小)
 Total PE              2562
 Alloc PE / Size       0 / 0  
 Free  PE / Size       2562 / 10.01 GiB
 VG UUID               rWCEwK-cV6T-3yaD-h8mv-cI6E-4e11-5ksYUa
[root@Smoke ~]# pvdisplay /dev/sda5(查看PV物理卷/dev/sda5详细信息)
 --- Physical volume ---
 PV Name               /dev/sda5
 VG Name               myvg
 PV Size               7.00 GiB / not usable 3.11 MiB
 Allocatable           yes
 PE Size               4.00 MiB
 Total PE              1792(包含多少PE)
 Free PE               1792(空闲多少PE)
 Allocated PE          0
 PV UUID               icc3U8-eXSY-RMHa-Qznz-zJq5-HIlB-04ZMUK
提示:创建完VG卷组后,把PV加入VG,PV物理卷PE大小确定,查看PV信息显示出PE大小;
[root@Smoke ~]# vgremove myvg(移除VG卷组myvg)
 Volume group "myvg" successfully removed
提示:删除VG卷组,如果VG上已经创建过LV,而且存了数据,不能随便删除;
[root@Smoke ~]# vgcreate -s 8M myvg /dev/sda{5,6}(-s 创建VG卷组myvg,将/dev/sda5和/dev/sda6加入VG,并设置PE盘区大小为8M)
 Volume group "myvg" successfully created
[root@Smoke ~]# vgdisplay myvg(查看VG卷组myvg的详细信息)
 --- Volume group ---
 VG Name               myvg
 System ID            
 Format                lvm2
 Metadata Areas        2
 Metadata Sequence No  1
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                0
 Open LV               0
 Max PV                0
 Cur PV                2
 Act PV                2
 VG Size               10.01 GiB
 PE Size               8.00 MiB(PE大小为8M)
 Total PE              1281
 Alloc PE / Size       0 / 0  
 Free  PE / Size       1281 / 10.01 GiB
 VG UUID               3GTKNI-9glL-UK7M-rDrF-yj5V-W2ue-rfefzh
[root@Smoke ~]# pvmove /dev/sda6(将PV物理卷/dev/sda6的数据移到其他PV物理卷)
[root@Smoke ~]# vgreduce myvg /dev/sda6(从VG卷组myvg中挪走PV物理卷/dev/sda6)
 Removed "/dev/sda6" from volume group "myvg"
[root@Smoke ~]# vgs(查看系统上VG卷组信息)
 VG   #PV #LV #SN Attr   VSize VFree
 myvg   1   0   0 wz--n- 7.00g 7.00g
[root@Smoke ~]# pvs(查看系统上PV物理卷,/dev/sda6不在VG卷组myvg中)
 PV         VG   Fmt  Attr PSize PFree
 /dev/sda5  myvg lvm2 a--  7.00g 7.00g
 /dev/sda6       lvm2 a--  3.01g 3.01g
[root@Smoke ~]# pvremove /dev/sda6(移除PV物理卷/dev/sda6)
 Labels on physical volume "/dev/sda6" successfully wiped
[root@Smoke ~]# pvs(查看系统上PV物理卷,/dev/sda6已经被移除)
 PV         VG   Fmt  Attr PSize PFree
 /dev/sda5  myvg lvm2 a--  7.00g 7.00g
[root@Smoke ~]# pvcreate /dev/sda7(将分区/dev/sda7创建为PV物理卷)
 Physical volume "/dev/sda7" successfully created
[root@Smoke ~]# vgextend myvg /dev/sda7(将PV物理卷/dev/sda7加入到VG卷组myvg扩展VG卷组)
 Volume group "myvg" successfully extended
[root@Smoke ~]# vgs(查看系统上VG卷组)
 VG   #PV #LV #SN Attr   VSize  VFree
 myvg   2   0   0 wz--n- 12.01g 12.01g
[root@Smoke ~]# pvdisplay /dev/sda7(查看PV物理卷/dev/sda7详细信息)
 --- Physical volume ---
 PV Name               /dev/sda7
 VG Name               myvg
 PV Size               5.01 GiB / not usable 2.10 MiB
 Allocatable           yes
 PE Size               8.00 MiB(PE盘区大小8M)
 Total PE              641
 Free PE               641
 Allocated PE          0
 PV UUID               CRmhiH-xWRZ-1PW7-oTd8-pyN6-3dFX-D3XKug
提示:将PV物理卷加入到VG组卷,它的PE盘区就确定了;
[root@Smoke ~]# lvcreate -L 50M -n testlv myvg(创建LV逻辑卷,-L大小50M,-n名字testlv)
 Rounding up size to full physical extent 56.00 MiB
 Logical volume "testlv" created
[root@Smoke ~]# lvs(查看系统上LV逻辑卷信息)
 LV     VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
 testlv myvg -wi-a----- 56.00m    
[root@Smoke ~]# lvdisplay(查看系统上LV逻辑卷详细信息)
 --- Logical volume ---
 LV Path                /dev/myvg/testlv
 LV Name                testlv
 VG Name                myvg
 LV UUID                eKq9Zp-98br-Uupm-iXaO-GeE2-iGB3-wygTrU
 LV Write Access        read/write
 LV Creation host, time Smoke, 2014-08-05 23:49:26 +0800
 LV Status              available
 # open                 0
 LV Size                56.00 MiB
 Current LE             7
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           253:0
[root@Smoke ~]# lvdisplay /dev/myvg/testlv(查看LV逻辑卷/dev/myvg/testlv详细信息)
 --- Logical volume ---
 LV Path                /dev/myvg/testlv
 LV Name                testlv
 VG Name                myvg
 LV UUID                eKq9Zp-98br-Uupm-iXaO-GeE2-iGB3-wygTrU
 LV Write Access        read/write
 LV Creation host, time Smoke, 2014-08-05 23:49:26 +0800
 LV Status              available
 # open                 0
 LV Size                56.00 MiB
 Current LE             7
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           253:0
注意:查看LV路径为/dev/VG_NAME/LV_NAME路径;
[root@Smoke ~]# mke2fs -j /dev/myvg/testlv(将LV逻辑卷/dev/myvg/testlv格式化为ext3文件系统,-j带日志文件系统)
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
14336 inodes, 57344 blocks
2867 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=58720256
7 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
       8193, 24577, 40961
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@Smoke ~]# mount /dev/myvg/testlv /mnt/(将/dev/myvg/testlv挂载到/mnt目录)
[root@Smoke ~]# ls /mnt/(查看/mnt目录文件及子目录)
lost+found(查看当前目录文件及子目录,任何一个新建的文件系统,刚格式化完的里面有lost+found目录)
[root@Smoke ~]# mount(查看系统上所有挂载的文件系统)
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
/dev/mapper/myvg-testlv on /mnt type ext3 (rw)(挂载的/dev/myvg/testlv文件系统)
[root@Smoke ~]# ls /dev/mapper/(查看/dev/mapper目录下文件及子目录)
control  myvg-testlv
注意:这里面才是真正的设备文件,创建卷组名和逻辑卷不能使用"-"横线;
[root@Smoke ~]# ls -l /dev/myvg/(查看/dev/myvg目录下文件及子目录详细信息)
total 0
lrwxrwxrwx 1 root root 7 Aug  5 23:54 testlv -> ../dm-0
注意:这里面的文件是连接到/dev/mapper下的链接文件
[root@Smoke ~]# lvremove /dev/mapper/myvg-testlv(移除LV逻辑卷testlv文件系统)
 Logical volume myvg/testlv contains a filesystem in use.(正在使用)
注意:处于挂载中的LV逻辑卷,不能直接移除;
[root@Smoke ~]# umount /mnt/(卸载/dev/mapper/myvg-testlv文件系统)
[root@Smoke ~]# lvremove /dev/myvg/testlv(移除LV逻辑卷/dev/myvg/testlv)
Do you really want to remove active logical volume testlv? [y/n]: y(确定移除)
 Logical volume "testlv" successfully removed
[root@Smoke ~]# lvs(查看系统上LV逻辑卷,/dev/mapper/myvg-testlv不存在)

练习:创建一个由两个物理卷组成的大小为20G的卷组myvg,要求其PE大小为16M;而后在此卷组中创建一个大小为5G的逻辑卷lv1,此逻辑卷要能在开机后自动挂载至/users目录,且支持ACL功能;

缩减前面创建的逻辑卷lv1的大小至2G;

[root@Smoke ~]# pvcreate /dev/sda{5,6}
 Physical volume "/dev/sda5" successfully created
 Physical volume "/dev/sda6" successfully created
[root@Smoke ~]# vgcreate -s 16M smokevg /dev/sda{5,6}
 Volume group "smokevg" successfully created
[root@Smoke ~]# lvcreate -n lv1 -L 5G smokevg
 Logical volume "lv1" created
[root@Smoke ~]# mke2fs -j /dev/smokevg/lv1
[root@Smoke ~]# vim /etc/fstab
/dev/smokevg/lv1        /users                  ext3    defaults,acl    0 0
[root@Smoke ~]# ls /users/
lost+found
[root@Smoke ~]# umount /users/
[root@Smoke ~]# e2fsck -f /dev/smokevg/lv1
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/smokevg/lv1: 11/327680 files (0.0% non-contiguous), 55935/1310720 blocks
[root@Smoke ~]# resize2fs /dev/smokevg/lv1 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/smokevg/lv1 to 786432 (4k) blocks.
The filesystem on /dev/smokevg/lv1 is now 786432 blocks long.
[root@Smoke ~]# lvreduce -L -2G /dev/smokevg/lv1
 WARNING: Reducing active logical volume to 3.00 GiB
 THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv1? [y/n]: y
 Reducing logical volume lv1 to 3.00 GiB
 Logical volume lv1 successfully resized
[root@Smoke ~]# ls /users/
lost+found

要想实现使用一个文件系统,需要先划分分区,假如在一个磁盘创建两个分区,而后在这个分区上需要创建文件系统,而这个文件系统里边定义了文件系统本身借助于物理空间的边界,定义了我们一共在里面可以使用多大的空间来存储数据,创建分区的过程,是创建物理边界的过程,而后在这个物理边界内部又给它创建文件系统,文件是存在文件系统上的,因此文件系统是位于文件系统边界上的,文件系统边界称为逻辑边界,所以到底存储多少数据即取决于物理边界大小,还取决于逻辑边界大小,事实上逻辑边界是紧靠在物理边界的大小上创建的,它跟物理边界几乎是一样的,但是如果要扩展一个分区,就拿LVM(逻辑卷)为例,LVM也有逻辑边界和物理边界之分,要扩展一个LVM应该先扩展物理边界,再扩展逻辑边界,只扩展物理边界,文件系统仍然停留在过去那个时刻,所以它大小依然没变,所以扩展完物理边界以后,还要扩展逻辑边界,反之,要缩减一个LVM(逻辑卷),要先缩减文件系统的边界,再缩减物理边界,也就是逻辑卷本身边界;

一、扩展逻辑卷;

lvextend:扩展LV逻辑卷物理边界

  -L [+]# /PATH/TO/LV:指定LV空间大小,单位M、G、P、T、E等等,+加号代表扩展了加多少,不带+加号变为多少;

2G,:LV逻辑卷原大小

+3G:扩展了3G

5G:扩展到5G,把2G变为5G

 

resize2fs:调整文件系统边界

  resize2fs -p /PATH/TO/LV #:#修复逻辑卷边界为#,代表扩大到多大,最大不能超出LV逻辑卷物理边界,-p扩展到跟LV逻辑卷物理边界一样大,不需要指定大小;

注意:扩展LV逻辑卷需要先扩展在真正完成LV逻辑卷物理边界再扩展逻辑边界(文件系统边界),尤其逻辑边界扩展之前,还应该检查一下文件系统,扩展风险比较小,可以在线扩展,文件系统处于挂载中扩展;

二、缩减逻辑卷;

注意: 1、不能在线缩减,得先卸载;

       2、确保缩减后的空间大小依然能存储原有的所有数据;

     3、在缩减之前应该先强行检查文件,以确保文件系统处于一至性状态;

df -lh:查看文件系统大小及使用情况;-l本地文件系统,-h单位换算;

umount:卸载

e2fsck -f:专用于修复ext2/ext3文件系统,-f: 强制检查,没问题也检查

resize2fs:调整文件系统边界

  resize2fs /PATH/TO/PV 3G:缩减文件系统为3G;

lvreduce -L [-]# /PATH/TO/LV:缩减LV逻辑卷物理边界,单位M、G、P、T、E等等,-减号代表减多少,不带-减号变为多少;

注意:缩减LV逻辑卷需要先缩减逻辑边界(文件系统边界)再缩减LV逻辑卷物理边界;

重新挂载

三、快照卷

1、生命周期为整个数据时长;在这段时长内,数据的增长量不能超出快照卷大小;

2、快照卷应该是只读的;

3、跟原卷在同一卷组内;

lvcreate

  -s:创建快照卷

  -p r|w:指定快照卷权限,r只读,w写入;

 

lvcreate -L # -n SLV_NAME -p r /PATH/TO/LV:-L指定快照卷大小,需要估计数据变化量大小,最安全大小跟原卷一样大,但不建议,可以跟数据大小一样大,-n指定快照卷名字,-p指定快照卷权限;
提示:快照卷需要跟原卷在同一卷组内,因此可以不指定在那个VG卷组中创建,不需要卸载文件系统,支持在线创建;

[root@Smoke ~]# lvcreate -L 2G -n testlv myvg(在VG逻辑卷myvg中创建LV逻辑卷,-L 大小2G,-n 逻辑卷名字)
 Logical volume "testlv" created
[root@Smoke ~]# mke2fs -j /dev/myvg/testlv(将LV逻辑卷/dev/myvg/testlv格式化为ext3文件系统,-j带日志文件系统)
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
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
       32768, 98304, 163840, 229376, 294912
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@Smoke ~]# mkdir /users(创建/users目录)
[root@Smoke ~]# vim /etc/fstab(设置LV逻辑卷/dev/myvg/testlv开机自动挂载并支持acl)
/dev/myvg/testlv        /users                  ext3    default,acl     0 0
[root@Smoke ~]# mount -a(挂载/etc/fatab文件中所有设备)
[root@Smoke ~]# mount(查看系统中所有挂载的文件系统)
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
/dev/mapper/myvg-testlv on /users type ext3 (rw,acl)
[root@Smoke ~]# cd /users/(切换到/users目录)
[root@Smoke users]# ls(查看目录文件及子目录)
lost+found(查看当前目录文件及子目录,任何一个新建的文件系统,刚格式化完的里面有lost+found目录)
[root@Smoke users]# cp /etc/inittab .(复制/etc/inittab文件到当前目录)
[root@Smoke users]# ls(查看当前目录下文件及子目录)
inittab  lost+found
[root@Smoke users]# cat inittab(查看inittab文件)
id:3:initdefault:
[root@Smoke users]# df -lh(查看系统磁盘及分区使用情况,-l或--local仅显示本地端文件系统,-h单位换算)
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              20G  7.7G   11G  43% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1             194M   53M  132M  29% /boot
/dev/mapper/myvg-testlv
                     2.0G   68M  1.9G   4% /users

扩展LV逻辑卷:

[root@Smoke ~]# vgs(查看系统上VG卷组信息)
 VG   #PV #LV #SN Attr   VSize  VFree
 myvg   2   1   0 wz--n- 12.01g 10.01g
注意:扩展之前要确定VG显示结果当中仍然有足够空间可用;
[root@Smoke users]# lvextend -L 5G /dev/myvg/testlv(-L 将LV逻辑卷/dev/myvg/testlv扩展为5G)
 Extending logical volume testlv to 5.00 GiB
 Logical volume testlv successfully resized
[root@Smoke users]# df -lh(查看系统磁盘及分区使用情况,-l或--local仅显示本地文件系统,-h单位换算)
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              20G  7.7G   11G  43% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1             194M   53M  132M  29% /boot
/dev/mapper/myvg-testlv
                     2.0G   68M  1.9G   4% /users(显示不是5G,因为还没有扩展文件系统大小,这里显示的是文件系统大小,而不是逻辑卷大小)
[root@Smoke users]# lvs(查看系统上LV逻辑卷信息)
 LV     VG   Attr       LSize Pool Origin Data%  Move Log Cpy%Sync Convert
 testlv myvg -wi-ao---- 5.00g(扩展的LV逻辑卷大小变为5G)
[root@Smoke users]# resize2fs -p /dev/myvg/testlv(-p 将LV逻辑卷/dev.myvg/testlv文件系统扩展到跟LV逻辑卷的物理边缘一样大)
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/testlv is mounted on /users; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/testlv to 1310720 (4k) blocks.
The filesystem on /dev/myvg/testlv is now 1310720 blocks long.  
[root@Smoke users]# df -lh(查看系统磁盘及分区使用情况,-l或--local仅显示本地文件系统,-h单位换算)
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              20G  7.7G   11G  43% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1             194M   53M  132M  29% /boot
/dev/mapper/myvg-testlv
                     5.0G   69M  4.7G   2% /users(文件系统大小扩展为5G)
[root@Smoke users]# cat inittab(查看inittab文件内容,扩展后可以正常访问)
id:3:initdefault:

缩减LV逻辑卷:

[root@Smoke users]# df -lh(查看当前系统文件系统大小及使用情况,-l或--local本地文件系统,-h单位换算)
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              20G  7.7G   11G  43% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1             194M   53M  132M  29% /boot
/dev/mapper/myvg-testlv
                     5.0G   69M  4.7G   2% /users
[root@Smoke /]# umount /users/(卸载LV逻辑卷/dev/myvg/testlv)
[root@Smoke /]# mount(查看当前系统上所有挂载的文件系统)
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
[root@Smoke /]# e2fsck -f /dev/myvg/testlv(-f 强制检查/dev/myvg/testlv文件系统)
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg/testlv: 12/327680 files (0.0% non-contiguous), 38000/1310720 blocks
[root@Smoke /]# resize2fs /dev/myvg/testlv 3G(将/dev/myvg/testlv文件系统逻辑边界缩减为3G)
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/testlv to 786432 (4k) blocks.
The filesystem on /dev/myvg/testlv is now 786432 blocks long.
[root@Smoke /]# lvreduce -L 3G /dev/myvg/testlv(将LV逻辑卷/dev/myvg/testlv物理边界缩减为3G)
 WARNING: Reducing active logical volume to 3.00 GiB(警告缩减有数据风险)
 THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce testlv? [y/n]: y
 Reducing logical volume testlv to 3.00 GiB
 Logical volume testlv successfully resized
[root@Smoke /]# mount -a(挂载/etc/fstab文件中所有文件系统)
[root@Smoke /]# mount(显示系统上所有挂载的文件系统)
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
/dev/mapper/myvg-testlv on /users type ext3 (rw,acl)
[root@Smoke /]# df -lh(查看系统上文件系统大小及使用情况,-l或--local本地文件系统,-h单位换算)
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              20G  7.7G   11G  43% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1             194M   53M  132M  29% /boot
/dev/mapper/myvg-testlv
                     3.0G   68M  2.8G   3% /users(LV逻辑卷缩减为3G)
[root@Smoke /]# cat /users/inittab(查看/users/inittab文件内容,可以正常访问)
id:3:initdefault:

创建快照卷:

[root@Smoke /]# lvcreate -L 50M -n testlv-snap -s -p r /dev//myvg/testlv(创建快照卷,-L大小为50M,-n快照卷名字,这里名字可以使用-横杠,-s快照卷,-p权限只读)
 Rounding up size to full physical extent 56.00 MiB
 Logical volume "testlv-snap" created
[root@Smoke /]# lvs(查看系统LV逻辑卷)
 LV          VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
 testlv      myvg owi-aos---  3.00g                                            
 testlv-snap myvg s(快照卷)r(只读)i-a-s--- 56.00m      testlv   0.02(创建的快照卷)
[root@Smoke /]# mount /dev/myvg/testlv-snap /mnt/(挂载快照卷/dev/myvg/testlv-snap到/mnt目录)
mount: block device /dev/mapper/myvg-testlv--snap is write-protected, mounting read-only
[root@Smoke /]# cd /mnt/(切换到/mnt目录)
[root@Smoke mnt]# ls(查看当前目录文件及子目录)
inittab  lost+found
[root@Smoke mnt]# cat inittab(访问快照卷中的inittab文件可以正常访问)
id:3:initdefault:
[root@Smoke mnt]# wc -l inittab(-l 统计inittab文件中的行数)
26 inittab
[root@Smoke ~]# cd /users/(切换到原文件系统/dev/myvg/testlv挂载点)
[root@Smoke users]# vim inittab(编辑inittab文件)
id:3:initdefault:
id:3:initdefault:
id:3:initdefault:
[root@Smoke users]# wc -l inittab(-l 统计原文件系统/dev/myvg/testlv中文件inittab行数为28行)
28 inittab
[root@Smoke mnt]# wc -l inittab(-l 统计快照卷/dev/myvg/testlv-snap中inittab文件行数还是26行没有变化)
26 inittab
[root@Smoke mnt]# tar -jcf /tmp/users.tar.bz2 /users/inittab(归档并调用bzip2压缩/users/inittab文件)
tar: Removing leading `/' from member names
[root@Smoke mnt]# ls /tmp(查看/tmp目录文件及子目录,规定压缩的快照卷文件)
users.tar.bz2
[root@Smoke /]# umount /mnt/(卸载快照卷/dev/myvg/lvtest-snap)
[root@Smoke /]# lvremove /dev/myvg/testlv-snap(移除快照卷/dev/myvg/testlv-snap)
Do you really want to remove active logical volume testlv-snap? [y/n]: y(确认移除)
 Logical volume "testlv-snap" successfully removed
提示:这种备份机制,最多只能作为备份基础,或者叫完全备份来使用,后来改变的数据需要结合增量备份来完成,后来的改变没有备份,还原不到出错那一刻的状态,只能还原到备份那一刻
状态,所以这里的备份策略是不完善的,数据恢复不到期望那一刻;
[root@Smoke /]# cd /users/(切换到/users目录)
[root@Smoke users]# rm inittab(删除inittab文件)
rm: remove regular file `inittab'? y(确认删除)
[root@Smoke users]# tar xf /tmp/users.tar.bz2 -C ./(解压展开归档文件,-C更改解压路径,默认解压到归档文件目录)
[root@Smoke users]# rm users/ -rf(删除users目录及目录下的文件,-r递归删除,-f强制删除,不会提示)
[root@Smoke users]# cp /etc/inittab ./(将/etc/inittab文件复制到当前目录)
[root@Smoke users]# cp /etc/issue ./(将/etc/issue复制到当前目录)
[root@Smoke users]# lvcreate -s -L 20M -p r -n testlv-snap /dev/myvg/testlv(创建快照卷,-s快照卷,-L大小为20M,-p权限只读,-n快照卷名字,这里名字可以使用-横杠)
 Rounding up size to full physical extent 24.00 MiB
 Logical volume "testlv-snap" created
[root@Smoke users]# cp /var/log/messages ./(复制/var/logmessages到当前目录)
[root@Smoke users]# vim issue(边界issue文件)
CentOS release 6.5 (Final)
Kernel \r on an \m
New line.(新增一行内容)
[root@Smoke ~]# mount /dev/myvg/testlv-snap /mnt/(将快照卷/dev/myvg/testlv-snap挂载到/mnt目录)
mount: block device /dev/mapper/myvg-testlv--snap is write-protected, mounting read-only
[root@Smoke mnt]# ls(查看当前目录文件及子目录,没有messages文件)
inittab  issue  lost+found
提示:因为messages文件是创建快照卷以后复制到LV逻辑卷的,所以快照卷没有messages文件;
[root@Smoke mnt]# cat issue(查看issue文件内容,没有新增的一行内容)
CentOS release 6.5 (Final)
Kernel \r on an \m
[root@Smoke mnt]# tar jcf /tmp/users.tar.bz2 inittab issue(归档并调用bzip2格式压缩inittab和issue文件)
[root@Smoke ~]# umount /mnt/(卸载快照卷/dev/myvg/testlv-snap)
[root@Smoke ~]# lvremove /dev/myvg/testlv-snap(删除快照卷/dev/myvg/testlv-snap)
Do you really want to remove active logical volume testlv-snap? [y/n]: y
 Logical volume "testlv-snap" successfully removed
[root@Smoke ~]# cd /users/(切换到/users目录)
[root@Smoke users]# rm inittab issue messages(删除文件inittab、issue和messages文件)
rm: remove regular file `inittab'? y
rm: remove regular file `issue'? y
rm: remove regular file `messages'? y
[root@Smoke users]# tar xf /tmp/users.tar.bz2 -C ./(解压展开归档文件,-C更改解压路径,默认解压到归档文件目录)[root@Smoke users]# ls(查看当前目录文件及子目录)
inittab  issue  lost+found
结果:没有messages文件,因为快照卷备份时刻,没有备份修改后的数据;

脚本编程控制结构:

  顺序

  选择

    if

    case

  循环

    for

    while

    until

while CONDITION; do

  statment

done

进入循环:条件满足

退出循环:条件不满足

 

until CONDITION; do

  statement

  ...

done

进入循环:条件不满足

退出循环:条件满足

[root@Smoke ~]# vim while1.sh(编辑while1.sh文件)
#!/bin/bash
read -p "Input something:" STRING
while [ $STRING != 'quit' ];do
       echo $STRING | tr 'a-z' 'A-Z'
read -p "Again,Input something:" STRING
done
[root@Smoke ~]# chmod +x while1.sh(给while1.sh执行权限)
[root@Smoke ~]# ./while1.sh(当前目录执行while1.sh文件0
Input something:abc
ABC
Again,Input something:quit
[root@Smoke ~]# bash -x while1.sh 测试while1.sh文件单步执行过程)
+ read -p 'Input something:' STRING
Input something:abc
+ '[' abc '!=' quit ']'
+ tr a-z A-Z
+ echo abc
ABC
+ read -p 'Again,Input something:' STRING
Again,Input something:quit
+ '[' quit '!=' quit ']'
[root@Smoke ~]# vim until.sh(边界until.sh文件)
#!/bin/bash
#
read -p "Input someting:" STRING
until [ $STRING = 'quit' ];do($STRING变量不满足等于quit就执行循环)
       echo $STRING | tr 'a-z' 'A-Z'
read -p "Input someting:" STRING
done
[root@Smoke ~]# chmod +x until.sh(给until.sh执行权限)
[root@Smoke ~]# ./until.sh(当前目录执行until.sh文件)
Input someting:abc
ABC
Input someting:hello
HELLO
Input someting:quit
[root@Smoke ~]# vim hadoop.sh(编辑hadoop.sh文件)
#!/bin/bash
#
who | grep "hadoop" &> /dev/null
RETVAL=$?
until [ $RETVAL -eq 0 ];do
       echo "hadoop is not come."
       sleep 5
who | grep "hadoop" &> /dev/null
       RETVAL=$?
done
echo "hadoop is logged in."
[root@Smoke ~]# chmod +x hadoop.sh(给hadoop.sh执行权限)
[root@Smoke ~]# ./hadoop.sh(当前目录执行hadoop.sh文件)
hadoop is not come.
hadoop is not come.
hadoop is logged in.
#!/bin/bash
#
until who | grep "hadoop" &> /dev/null;do
       echo "hadoop is not come."
       sleep 5
done
echo "hadoop is logged in."
[root@Smoke ~]# ./hadoop.sh
hadoop is not come.
hadoop is not come.
hadoop is logged in.
提示:任何时候引用执行命令状态返回值,可以把命令当作条件放到语句里面;

常用for循环:

for 变量 in 列表; do

  循环体

done

C语言风格的for循环:

for (( expr1 ; expr2 ; expr3 )); do

  循环体

done

expr1:限定,指定初始条件,给控制变量一个初始值;

expr2:判定什么时候退出循环;

expr3:修正变量值;

[root@Smoke ~]# chmod +x 100.sh(给100.sh执行权限)
[root@Smoke ~]# vim 100.sh(当前目录执行100.sh文件)
#!/bin/bash
#
declare -i SUM=0
for I in {1..100};do
       let SUM+=$I            
done    
       
echo $SUM    
[root@Smoke ~]# vim 100.sh(编辑100.sh文件)
declare -i SUM2=0
for ((J=1;J<=100;J++));do(J初始值为1,J小于等于100,如果大于100就退出循环,每次循环J自加1)
       SUM2+=$J
done
echo $SUM2
[root@Smoke ~]# ./100.sh(当前目录执行100.sh文件)
5050
[root@Smoke ~]# vim 100.sh(编辑100.sh文件)
for ((J=2;J<=100;J+=2));do(计算100以内所有偶数之和)
       SUM2+=$J
done
echo $SUM2
[root@Smoke ~]# ./100.sh(当前目录执行100.sh文件)
2550

写一个脚本:

1、通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线,

  如果在线,就显示"ip is up.",其中的IP要换为真正的IP地址,且以绿色显示;

  如果不在线,就显示"ip is down.",其中的IP要换为真正的IP地址,且以红色显示;

要求:分别使用while,until和for(两种形式)循环实现。

ping

  -c:ping次数

  -W:超时时间,单位秒

[root@Smoke ~]# vim ping.sh
#!/bin/bash
#
for I in 192.168.0.{151..254};do
       ping -c 1 -W 1 $I &> /dev/null
if [ $? -eq 0 ];then
       echo -e "\033[32m$I\033[0m ip is up"
else
       echo -e "\033[31m$I\033[0m ip is down"
fi
done
[root@Smoke ~]# vim ping1.sh
#!/bin/bash
#
declare -i I=150
while [ $I -le 253 ];do
       let I++
       PING=192.168.0.$I
       ping -c 1 -W 1 $PING &> /dev/null
if [ $? -eq 0 ];then
       echo -e "\033[32m$PING\033[0m ip is up"
else
       echo -e "\033[31m$PING\033[0m ip is down"
fi
done
[root@Smoke ~]# vim ping2.sh
#!/bin/bash
#
declare -i I=150
until [ $I -gt 253 ];do
       let I++
       PING=192.168.0.$I
       ping -c 1 -W 1 $PING &> /dev/null
if [ $? -eq 0 ];then
       echo -e "\033[32m$PING\033[0m ip is up"
else
       echo -e "\033[31m$PING\033[0m ip is down"
fi
done
[root@Smoke ~]# ping -c 1 172.16.100.254(ping主机172.16.100.254是否在线,-c发1次)
PING 172.16.100.254 (172.16.100.254) 56(84) bytes of data.
64 bytes from 172.16.100.254: icmp_seq=1 ttl=64 time=0.572 ms
--- 172.16.100.254 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1ms
rtt min/avg/max/mdev = 0.572/0.572/0.572/0.000 ms
[root@Smoke ~]# echo $?(显示上个命令执行状态返回值)
0(ping通状态返回值为0)
[root@Smoke ~]# ping -c 1 172.16.100.10(ping主机172.16.100.10是否在线,-c发1次)
PING 172.16.100.10 (172.16.100.10) 56(84) bytes of data.
From 172.16.100.1 icmp_seq=1 Destination Host Unreachable
--- 172.16.100.10 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 3001ms
[root@Smoke ~]# echo $?(显示上个命令执行状态返回值)
1(ping不通状态返回值为1)
[root@Smoke ~]# ping -c 1 -W 1 172.16.100.10(ping主机172.16.100.10,-c发1次,-W超时1秒)
PING 172.16.100.10 (172.16.100.10) 56(84) bytes of data.
--- 172.16.100.10 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 1000ms
[root@Smoke ~]# ping -c 1 -W 1 172.16.100.254 &> /dev/null(ping主机172.16.100.254,-c发1次,-W超时1秒,将结果送到/dev/null)
[root@Smoke ~]# echo $?(显示上个命令执行状态返回值)
0
[root@Smoke ~]# ping -c 1 -W 1 172.16.100.10 &> /dev/null(ping主机172.16.100.10,-c发1次,-W超时1秒,将结果送到/dev/null)  
[root@Smoke ~]# echo $?(显示上个命令执行状态返回值)
1

awk 'PATTERN{ACTION}' file:PATTERN模式,{ACTION}动作,比如print显示动作,默认分割符为空格,输出时默认分隔符也为空格;

  print $1(显示第一段)

-F:指定分隔符,默认分割符是冒号

$0:显示所有字段;

$NF:内置变量,字段个数,表示最后一个字段;

awk文本处理工具工作机制:

当我们给它一个文件的时候,awk也是一次从中读一行,读来一行,就把这行按照你所指定的分隔符给它切开,在内部就切开了,无论你要不要切开,在内部都会切开,并且切开以后还会给每一个被切开的段一个标识符,第一段是$1,第二段是$2,想显示哪一段显示哪一段就可以了,或者想处理那一段也可以处理那一段,处理完以后还可以把处理的结果显示出来,不动原文件,每一次读一行,读过来一行就切割,切割以后,每一段都给它个位置变量,接着每一段都可以分开处理,处理完以后开始读下一行,再切割再处理,再读一行再切割再处理;

[root@Smoke ~]# df -Ph(显示系统磁盘分区大小及使用情况,-P不换行显示,-h单位换算)
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        20G  7.7G   11G  43% /
tmpfs           495M     0  495M   0% /dev/shm
/dev/sda1       194M   53M  132M  29% /boot
[root@Smoke ~]# df -Ph | cut -d' ' -f1(显示系统磁盘分区大小及使用情况,-P不换行显示,-h单位换算,将结果送给cut执行,-d以空格切开,-f1显示第一段)
Filesystem
/dev/sda2
tmpfs
/dev/sda1
[root@Smoke ~]# df -Ph | cut -d' ' -f2(显示系统磁盘分区大小及使用情况,-P不换行显示,-h单位换算,将结果送给cut执行,-d以空格切开,-f2显示第二段)
提示:cut有时候无法实现取的内容,这时候需要用awk报告生成工具,它能让指定分隔符,这个分隔符有几个都无所谓,指定分隔符以后能显示对应的段;
[root@Smoke ~]# df -Ph | awk '{print $1}'(显示系统磁盘分区大小及使用情况,-P不换行显示,-h单位换算,将结果送给awk显示第一段内容)
Filesystem
/dev/sda2
tmpfs
/dev/sda1
[root@Smoke ~]# df -Ph | awk '{print $2}'(显示系统磁盘分区大小及使用情况,-P不换行显示,-h单位换算,将结果送给awk显示第二段内容)
Size
20G
495M
194M
[root@Smoke ~]# df -Ph | awk '{print $1,$3}'(显示系统磁盘分区大小及使用情况,-P不换行显示,-h单位换算,将结果送给awk显示第一段和第三段内容,输出时使用默认的分隔符)
Filesystem Used
/dev/sda2 7.7G
tmpfs 0
/dev/sda1 53M
[root@Smoke ~]# df -Ph | awk '{print $0}'(显示系统磁盘分区大小及使用情况,-P不换行显示,-h单位换算,将结果送给awk显示每一行的所有字段)
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        20G  7.7G   11G  43% /
tmpfs           495M     0  495M   0% /dev/shm
/dev/sda1       194M   53M  132M  29% /boot
[root@Smoke ~]# df -Ph | awk '{print $NF}'(显示系统磁盘分区大小及使用情况,-P不换行显示,-h单位换算,将结果送给awk显示最后一个字段)
on
/
/dev/shm
/boot
[root@Smoke ~]# awk -F: '{print $1,$3}' /etc/passwd(对/etc/password文件处理,-F通过:冒号分割,显示第一段和第三段)
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
[root@Smoke ~]# fdisk -l(-l显示系统上所有分区)
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 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: 0x00031216
  Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        2576    20480000   83  Linux
/dev/sda3            2576        2706     1048576   82  Linux swap / Solaris
/dev/sda4            2706        5221    20203282+   5  Extended
/dev/sda5            2706        3359     5246736   8e  Linux LVM
/dev/sda6            3360        4013     5253223+  8e  Linux LVM
Disk /dev/mapper/smokevg-lv1: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 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: 0x00000000
[root@Smoke ~]# fdisk -l 2>/dev/null(-l显示系统上所有分区,2>将错误信息送给/dev/null)
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 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: 0x00031216
  Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        2576    20480000   83  Linux
/dev/sda3            2576        2706     1048576   82  Linux swap / Solaris
/dev/sda4            2706        5221    20203282+   5  Extended
/dev/sda5            2706        3359     5246736   8e  Linux LVM
/dev/sda6            3360        4013     5253223+  8e  Linux LVM
Disk /dev/mapper/smokevg-lv1: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 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: 0x00000000
[root@Smoke ~]# fdisk -l 2> /dev/null | grep "Disk /dev/[sh]d[a-z]"(-l显示系统上所有分区,2>将错误信息送给/dev/null,将结果送给grep处理显示Disk /dev/s或
h开中间d后面a-z任意字符的行)
Disk /dev/sda: 42.9 GB, 42949672960 bytes
[root@Smoke ~]# fdisk -l 2> /dev/null | grep "Disk /dev/[sh]d[a-z]" | awk -F: '{print $1}'(-l显示系统上所有分区,2>将错误信息送给/dev/null,将结果
送给grep处理显示Disk /dev/s或h开中间d后面a-z任意字符的行,将结果送给awk,-F通过:冒号分割,显示第一段)
Disk /dev/sda
[root@Smoke ~]# shutdown -h now(关机)

操作:通过编辑虚拟机配置向虚拟机添加两块硬盘分别为IDE和SCSI类型;

写一个脚本(前提:请为虚拟机新增一块硬盘,假设它为/dev/sdb),为指定的硬盘创建分区:

1、列出当前系统上所有的磁盘,让用户选择,如果选择quit则退出脚本;如果用户选择错误,就让用户重新选择;

2、当用户选择后,提醒用户确认接下来的操作可能会损坏数据,并请用户确认;如果用户选择y就继续,n就退出;否则,让用户重新选择;

3、抹除那块硬盘上的所有分区(提示,抹除所有分区后执行sync命令,并让脚本睡眠3秒钟后再分区);并为其创建三个主分区,第一个为20M,第二个为512M, 第三个为128M,且第三个为swap分区类型;(提示:将分区命令通过echo传送给fdisk即可实现)

fdisk -l |grep "
fdisk -d:删除分区
dd if=/dev/zero of=/dev/sdb bs=512 count=1(删除sdb上所有分区)
sync(手动把所有数据从内存同步到磁盘)
sleep 3
[root@Smoke ~]# fdisk -l(查看系统上所有分区及分区使用情况)
Disk /dev/sda: 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: 0x00000000
Disk /dev/sdb: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 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: 0x00031216
  Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sdb2              26        2576    20480000   83  Linux
/dev/sdb3            2576        2706     1048576   82  Linux swap / Solaris
/dev/sdb4            2706        5221    20203282+   5  Extended
/dev/sdb5            2706        3359     5246736   8e  Linux LVM
/dev/sdb6            3360        4013     5253223+  8e  Linux LVM
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: 0x00000000
Disk /dev/mapper/smokevg-lv1: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 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: 0x00000000
[root@Smoke ~]# fdisk -l 2> /dev/null | grep "^Disk /dev/[sh]d[a-z]" |awk -F: '{print $1}'(-l显示系统上所有分区,2>将错误信息送给/dev/null,
将结果送给grep处理显示Disk /dev/s或h开中间d后面a-z任意字符的行,将结果送给awk,-F通过:冒号分割,显示第一段)
Disk /dev/sda
Disk /dev/sdb
Disk /dev/sdc
[root@Smoke ~]# vim setpart.sh(编辑setpart.sh文件)
#!/bin/bash
#
echo 'n
p
1
+20M
n
p
2
+512M
n
p
3
+128M
t
3
82
w' | fdisk /dev/sda
[root@Smoke ~]# chmod +x setpart.sh
[root@Smoke ~]# ./setpart.sh
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x57ab92e5.
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): Command action
  e   extended
  p   primary partition (1-4)
Partition number (1-4): First cylinder (1-2610, default 1): Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610):
Command (m for help): Command action
  e   extended
  p   primary partition (1-4)
Partition number (1-4): First cylinder (5-2610, default 5): Using default value 5
Last cylinder, +cylinders or +size{K,M,G} (5-2610, default 2610):
Command (m for help): Command action
  e   extended
  p   primary partition (1-4)
Partition number (1-4): First cylinder (71-2610, default 71): Using default value 71
Last cylinder, +cylinders or +size{K,M,G} (71-2610, default 2610):
Command (m for help): Partition number (1-4): Hex code (type L to list codes): Changed system type of partition 3 to 82 (Linux swap / Solaris)
Command (m for help): The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@Smoke ~]# fdisk -l(查看系统上磁盘及分区使用情况)
Disk /dev/sda: 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: 0x57ab92e5
  Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1           4       32098+  83  Linux
/dev/sda2               5          70      530145   83  Linux
/dev/sda3              71          87      136552+  82  Linux swap / Solaris
Disk /dev/sdb: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 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: 0x00031216
  Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sdb2              26        2576    20480000   83  Linux
/dev/sdb3            2576        2706     1048576   82  Linux swap / Solaris
/dev/sdb4            2706        5221    20203282+   5  Extended
/dev/sdb5            2706        3359     5246736   8e  Linux LVM
/dev/sdb6            3360        4013     5253223+  8e  Linux LVM
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: 0x00000000
Disk /dev/mapper/smokevg-lv1: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 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: 0x00000000
[root@Smoke ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1(从/dev/zero最开始复制数据,bs以512bytes,count读1个bs,输出到/dev/sda的前512bytes,
用来抹除/dev/sda设备的MBR主引导记录)
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.00447882 s, 114 kB/s
[root@Smoke ~]# partprobe(linux版本5.x让内核重读分区表)
[root@Smoke ~]# partx -a /dev/sda(linux版本6.x让内核重读分区表)
[root@Smoke ~]# fdisk -l(显示系统上所有磁盘及分区使用情况)
Disk /dev/sda: 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: 0x00000000
Disk /dev/sdb: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 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: 0x00031216
  Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sdb2              26        2576    20480000   83  Linux
/dev/sdb3            2576        2706     1048576   82  Linux swap / Solaris
/dev/sdb4            2706        5221    20203282+   5  Extended
/dev/sdb5            2706        3359     5246736   8e  Linux LVM
/dev/sdb6            3360        4013     5253223+  8e  Linux LVM
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: 0x00000000
Disk /dev/mapper/smokevg-lv1: 3221 MB, 3221225472 bytes
255 heads, 63 sectors/track, 391 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: 0x00000000