6、raid、lvm、while、until 学习笔记

Raid:

Level仅用于标识磁盘组合方式的不同

raid0, raid1, raid5, raid10, raid50, jbod

raid0:至少需要两块磁盘,不允许任何盘出错,没有容错能力,读写性能都提升,硬盘利用率100%

raid1: 至少需要两块磁盘,允许一块盘出错,镜像,硬件容错能力,读性能提升,写性能下降,硬盘利用率50%

raid5: 至少需要三块磁盘,允许一块盘出错,校验盘分布在各盘上,读写性能都提升,硬盘利用率(n-1)/n%

raid10: 至少需要四块磁盘,允许不同组内各坏一块盘,读写性能都提升,硬盘利用率50%(先做raid1,再做raid0)

jbod:在逻辑上把几个物理磁盘一个接一个串联到一起,从而提供一个大的逻辑磁盘。jbod上的数据简单的从第一个磁盘开始存储, 当第一个磁盘的存储空间用完后, 再依次从后面的磁盘开始存储数据。 

mdadm: 模式化的工具

-A:装配模式

-C:创建模式

-F:监控模式

管理模式

-f模拟硬盘损坏

-r移除硬盘

-a添加硬盘

-C:创建模式

-a yes自动为创建的raid设备创建设备文件;

-l 级别 指定Raid级别

-n # 用于创建RAID设备的设备个数;

-x #用于创建RAID热备磁盘的个数;

-c #指定分块大小,默认为512,单位为KB

-D: 显示阵列的详细信息

--detail:

-S /path/to/raid_device停止指定的RAID设备

-A /path/to/raid_device DEVICES使用指定的设备装配并启动指定的RAID设备

watch -n # ‘COMMAND‘每隔#执行一次指定的命令;单位为秒钟

wathc -n 1 ‘cat /proc/mdstat‘每秒钟查看一次RAID的同步状态

练习:创建一个大小为4G的RAID5;

给其添加一个空闲盘,模拟损坏等;

停止raid;

mdadm -C /dev/md5 -a yes -l 5 -n 3 -x 1 /dev/sdb{1,2,3,4}

mdadm -D /dev/md5

cat /proc/mdstat

mke2fs -t ext4 /dev/md5

mount /dev/md5 /mnt/

ls /mnt

mdadm -f /dev/md5 /dev/sdb1

mdadm -r /dev/md5 /dev/sdb1

mdadm -a /dev/md5 /dev/sdb1

umount /mnt

mdadm -S /dev/md5

mdadm -A /dev/md5 /dev/sdb{1,2,3,4}

bash知识点:while循环和until循环

for varName in 列表; do

循环体

done

条件测试:

执行命令: 命令成功,条件测试成功;否则为失败;

根据$?, 状态返回值; 0表示命令执行成功,非0表示命令执行失败;

表达式:

[ expression ]

[[ expression ]]

test expression

while 条件测试; do

循环体

done

while循环:条件测试成功,则循环;失败,则退出;

如何让while循环退出:在循环体中改变测试条件中用于控制循环次数的变量的值;

练习:求100以内所有正整数的和;

declare -i sum=0

declare -i i=1

while [ $i -le 100 ]; do

let sum+=$i

let i++

done

echo $sum

练习:通过键盘提示用户输入字符,将用户输入的小写字母转换为大写,转换一次之后,再次提醒,再输再转换;但输入quit表示退出;

#!/bin/bash

read -p "Enter a word: " word

while [[ "$word" != "quit" ]]; do

echo $word | tr ‘a-z‘ ‘A-Z‘

read -p "Enter a word again: " word

done

练习:显示如下菜单给用户

cpu) print cpu information;

mem) print memory information;

disk) print disk infomation;

quit) quit

Enter your option:

根据用户的选择输出相应信息;

每次执行后,不退出,而由用户再次指定新的选项;

#!/bin/bash

#

cat << EOF

cpu) print cpu information;

mem) print memory information;

disk) print disk infomation;

quit) quit

EOF

read -p "Enter your option: " option

option=`echo $option | tr ‘A-Z‘ ‘a-z‘`

while [[ "$option" != "quit" ]]; do

if [[ "$option" == "cpu" ]]; then

cat /proc/cpuinfo

elif [[ "$option" == "mem" ]]; then

free -m

elif [[ "$option" == "disk" ]]; then

df -h

else

echo "Wrong option..."

fi

read -p "Enter your option again: " option

option=`echo $option | tr ‘A-Z‘ ‘a-z‘`

done

练习:提示用户输入一个用户名,如果存在:显示用户UID和SHELL信息;否则,则显示无此用户;

显示完成之后,提示用户再次输入;如果是quit则退出;

#!/bin/bash

#

read -p "Enter a user name: " userName

while [[ "$userName" != "quit" ]]; do

if [ -z "$userName" ]; then

echo "User name null."

elif id $userName &> /dev/null; then

grep "^$userName\>" /etc/passwd | cut -d: -f3,7

else

echo "No such user."

fi

read -p "Enter a user name again(quit to exit): " userName

done

练习:提示用户输入一个用户名,判断用户是否登录了当前系统;

如果没有登录,则停止5秒钟之后,再次判断;直到用户登录系统,显示“用户来了”,而后退出;

#!/bin/bash

#

read -p "Enter a user name: " userName

while ! id $userName &> /dev/null; do

read -p "Enter a user name again: " userName

done

while ! who | grep "^$userName" &> /dev/null; do

echo "$userName is not here."

sleep 5

done

echo "$userName is on."

#!/bin/bash

#

read -p "Enter a user name: " userName

until [ -n "$userName" ] && id $userName &> /dev/null; do

read -p "Enter a user name again: " userName

done

until who | grep "^$userName" &> /dev/null; do

echo "$userName is not here."

sleep 5

done

echo "$userName is on."

bash编程之until循环:

until 测试条件; do

循环体

done

条件不满足,则循环;否则,退出;

练习:用until循环,求100以内所有正整数之和;

#!/bin/bash

declare -i sum=0

declare -i i=1

until [ $i -gt 100 ]; do

let sum+=$i

let i++

done

echo $sum

bash编程之组合测试条件深入探讨:

逻辑与:多个条件同时满足

[ CONDITION1 ]  &&  [ CONDITION2 ]

[ CONDITION1 -a CONDITION2 ]

[[ CONDITION1 && CONDITION2 ]]

注意:前两个使用单或双中括号都可,但,&&不允许用于单中括号中,所以第三种只能用于双中括号中;

逻辑或:多个条件中有一个满足即为真;

[ CONDITION1 ]  ||  [ CONDITION2 ]

[ CONDITION1 -o CONDITION2 ]

[[ CONDITION1 || CONDITION2 ]]

注意:||不允许用于单中括号中;

德 摩根 定律

!(条件1 或 条件2) = !条件1 并且 !条件2

!(条件1 并且 条件2) = !条件1 或 !条件2

使用while循环一次读取文件的一行,直到文件尾部:

while read line; do

循环体

done < /path/to/somefile

练习:取出当前系统上,默认shell为bash的用户

#!/bin/bash

#

while read line; do

[[ `echo $line | cut -d: -f7` == "/bin/bash" ]] && echo $line | cut -d: -f1

done < /etc/passwd

练习:显示所有其ID号为偶数的用户;

#!/bin/bash

#

while read line; do

userID=`echo $line | cut -d: -f3`

if [ $[$userID%2] -eq 0 ]; then

echo -n "$userID: "

echo $line | cut -d: -f1

fi

done < /etc/passwd

练习:显示/etc/rc.d/rc.sysinit文件中,其总字符个数大于30的行;

#!/bin/bash

#

while read line; do

charCounts=`echo $line | wc -c`

if [ $charCounts -gt 30 ]; then

echo -n "$charCounts: "

echo $line

fi

done < /etc/rc.d/rc.sysinit

练习:显示所有其UID和GID均为偶数的用户;

#!/bin/bash

#

while read line; do

userID=`echo $line | cut -d: -f3`

groupID=`echo $line | cut -d: -f4`

if [ $[$userID%2] -eq 0 ] && [ $[$groupID%2] -eq 0 ]; then

echo -n "$userID, $groupID: "

echo $line | cut -d: -f1

fi

done < /etc/passwd

练习:显示/etc/rc.d/rc.sysinit文件中,其总字符个数大于30且非以“#”开头的行;

#!/bin/bash

#

while read line; do

charCounts=`echo $line | wc -c`

if [ $charCounts -gt 30 ] && [[ "$line" =~ ^[^#] ]] ; then

echo -n "$charCounts: "

echo $line

fi

done < /etc/rc.d/rc.sysinit

练习:写一个脚本,完成如下任务

1、提示用户输入一个磁盘设备文件路径;

如果用户给定的路径文件不存在或不是一个块设备文件,则提示用户重新输入,直到输入正确为止,或者输入quit以9为退出码结束脚本;

2、提示用户“下面的操作会清空磁盘中的数据,并提问是否继续”

如果用户给出字符y或单词yes,则继续,否则,则提供以8为退出码结束脚本;

3、将用户指定的磁盘上的分区清空,而后创建两个主分,大小分别为100M和512M;

4、格式化此两个分区;

5、将第一个分区挂载至/mnt/boot目录;第二个分区挂载至/mnt/sysroot目录;

#!/bin/bash

echo -n -e "\033[31mEnter a disk path: \033[0m"

read diskPath

while [ $diskPath != "quit" ];do

if ! [ -b $diskPath ];then

echo -n -e "\033[31mEnter a disk path again: \033[0m"

read diskPath

else

echo -n -e "\033[31mFlow action clear disk data y | n:\033[0m"

read option

if [[ $option == "n" ]];then

exit 8

elif [[ $option == "y" ]];then

dd if=/dev/zero of=$diskPath bs=512 count=1 &> /dev/null

echo "n

p

1

+100M

n

p

2

+512M

w" | fdisk $diskPath &> /dev/null

if  mount | grep /mnt/boot &> /dev/null;then

umount /mnt/boot

fi

if  mount | grep /mnt/sysroot &> /dev/null;then

umount /mnt/sysroot

fi

mke2fs -t ext4 ${diskPath}1 &> /dev/null

mke2fs -t ext4 ${diskPath}2 &> /dev/null

if ! [  -e /mnt/boot ];then

mkdir /mnt/boot

fi

if ! [  -e /mnt/sysroot ];then

mkdir /mnt/sysroot

fi

mount ${diskPath}1 /mnt/boot

mount ${diskPath}2 /mnt/sysroot

echo -e "\033[32mFinished !\033[0m"

exit 0

else

echo "Unkown option!"

fi

fi

done

exit 9

LVM: Logical Volume Manager

设备文件:/dev/卷组名/逻辑卷名

/dev/mapper/卷组名-逻辑卷名

物理卷管理命令:pv

pvcreate创建

pvremove移除

pvscan, pvs, pvdisplay查看

pvmove 块迁移

卷组的管理命令:vg

vgcreate创建

vgremove移除

vgscan, vgs, vgdisplay查看

vgextend, vgreduce扩展、缩减

vgcreate,

-s: PE大小, 默认4M

#vgcreate -s 4M vg_name

逻辑卷的管理命令:lv

lvcreate创建

lvremove移除

lvscan, lvdisplay, lvs查看

lvextend, lvreduce 扩展、缩减

lvcreate

-L :空间大小

-n : lv名称

# lvcreate -L Size -n Name vg_name

扩展卷组:

1、准备要添加的物理卷;

2、扩展卷组:

添加物理卷至卷组中;

# vgextend vg_name /path/to/pv_device

缩减卷组:

1、确定要移除的物理卷的总空间大小,要小于VG当前的可用空间大小;

2、将要移除的物理卷上的所有PE移动至其它PV

# pvmove /path/to/pv_device

3、缩减vg

# vgreduce vg_name /path/to/pv_device

逻辑卷扩展的步骤:

1、先确定扩展的大小;并确保所属的卷组有足够的剩余空间;

2、扩展物理边界:

# lvextend -L [+]Size /path/to/lv_device

3、扩展逻辑边界:

# resize2fs /path/to/lv_device

缩减逻辑卷的步骤:

1、卸载卷,并执行强制检测

# e2fsck -f /path/to/lv_device

2、缩减逻辑边界:

# resize2fs /path/to/lv_device SIZE

3、缩减物理边界:

# lvreduce -L [-]Size /path/to/lv_device

快照卷:逻辑卷的一种,通常为只读(通常用于数据备份)

# lvcreate -s -L Size -n Name -p r /path/to/original_lv_device

练习:

1、创建一个由两个物理卷组成大小为20G的卷组myvg,要求PE大小16M;而后新建 大小为7G逻辑卷mylv1,要求其文件系统为ext4,块大小为2048,且开机能自动挂载至/users;

2、新建用户openstack,其家目录为/users/openstack,而后切换至openstack用户,复制一些文件至其家目录中;

3、缩减mylv1至5G大小;而后切换至openstack用户,确保其数据没有丢失;

4、对mylv1创建快照卷snap-mylv1,并通过其备份数据至/tmp/user.tar.bz2;

pvcreate /dev/sdb{1,2}

vgcreate -s 16M myvg /dev/sdb{1,2}

lvcreate -L 7G -n mylv1 myvg

mke2fs -t ext4 -b 2048 /dev/myvg/mylv1

mkdir /users

blkid /dev/myvg/mylv1

echo UUID=c457275b-5aa6-42d7-b770-5d40f44a17f4 /users ext4 defaults 0 0 >> /etc/fstab

mount -a

useradd -d /users/openstack openstack

su - openstack

cp /etc/fstab ./

umount /users

e2fsck -f /dev/myvg/mylv1

resize2fs /dev/myvg/mylv1 5G

lvreduce -L 5G /dev/myvg/mylv1

mount -a

su - openstack

cat fstab

lvcreate -s -p r -L 1M -n snap-mylv1 /dev/myvg/mylv1

mount /dev/myvg/snap-mylv1 /mnt

tar jcf /tmp/user.tar.bz2 /mnt

umount /mnt

lvremove /dev/myvg/snap-mylv1

时间: 2024-11-06 10:08:52

6、raid、lvm、while、until 学习笔记的相关文章

Linux LVM逻辑卷学习笔记

在生产环境上经常遇到诸如/dev/mapper/VolGroup-lv_root./dev/mapper/VolGroup-lv_home等字样的磁盘卷标,这实际上是逻辑卷(虚拟磁盘) 今天刚好学习了这块,总结了一下分享给大家,以免日后遇到这种逻辑卷管理起来遇到问题. 先说几个名词: LVM(Logical Volume Manager),逻辑卷管理器 PV(Physical Volume),物理卷 VG(Volume Group),卷组 PE(Physical Extend),逻辑卷,默认大小

CentOS 6.5 LVM磁盘管理学习笔记

在系统运维和服务器管理过程中,经常遇到服务器磁盘容量不足,需要在线扩容的情况.普通磁盘分区的管理方式在逻辑分区划好之后就无法改变其大小.而LVM可以实现Linux服务器下面磁盘空间的在线扩容和动态管理,相对于普通的磁盘分区有很大的灵活性. 一.LVM简介 LVM是 Logical VolumeManager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现.LVM将一个或多个硬盘的分区在逻辑上进行组合,做为

Linux软RAID操作与实现学习笔记

定义:RAID(Redundant Array of Inexpensive Disks)称为廉价磁盘冗余阵列.RAID 的基本想法是把多个便宜的小磁盘组合到一起,成为一个磁盘组,使性能达到或超过一个容量巨大.价格昂贵的磁盘. 目前RAID技术大致分为两种:基于硬件的RAID技术和基于软件的RAID技术.其中在Linux下通过自带的软件就能实现RAID功能. RAID的级别: 随着RAID技术经过不断的发展,现已有RAID 0 到 RAID 6 七种基本的RAID 级别,同时还有RAID 0和R

LVM逻辑卷_学习笔记

LVM学习笔记: MD(Multi Device) DM(Device Mapper) 逻辑设备 RAID.LVM2 架构: 由DM主模块和多个子模块构成: 子模块: linear:线性设备,类似于jbod:可将多个磁盘上的存储空间装载到一起当作一个存储块来使用 mirror:类似于镜像 snapshot:快照,是访问同一个数据的另一条路径,类似于软连接 作用: 保留数据在做快照那一刻的状态 multipath:多路径:可实现数据多路径的寻路,可以实现多根线传输. LVM: 作用:能够动态增加或

Raid及Mdadm命令_学习笔记

关于Raid及Mdadm命令的学习笔记: 课前小知识: 关于case的小脚本笔记: cat  << EOF d|D) show disk Information m|M) show Mem Information s|S) show swap Information EOF read -p "Please input Your Choice: " Choice while [ $Choice != "quit" ] do case $Choice in

oracle学习笔记 存储及raid技术概述

oracle学习笔记 存储及raid技术概述 本课以oracle数据库所运行的环境,讲一下存储和raid技术. 一)oralce生产环境里的结构 先说一下oracle所在的环境. 有一种结构: 两个服务器.两个光纤存储交换机.两个存储, 它们通过网线相互连接在一起. 每个服务器接两个交换机, 每个交换机连两个服务器同时连两个存储, 每个存储和两个交换机有连接. 这是oracle数据库相对比较典型的正规的运行环境. 每个服务器上都装Linux和oracle数据库软件, oracle数据库建在存储上

Docker 学习笔记【1】Docker 相关概念,基本操作

计划:Docker 学习笔记[2] Docker 基础操作实操记录,Docker仓库.数据卷,网络基础学习---40 注:所有操作在root下执行 --1--概念: 1.Docker镜像: 镜像就是一个只读的模板,用于创建docker容器. Docker提供了简单的机制创建或者更新现有镜像,也可以从别处拿来现成镜像直接使用. 2.Docker容器: 可以认为是精简版的linux运行环境包含 [root权限,进程空间,用户空间,网络空间等]和应用程序 另外:镜像是只读的,容器基于镜像启动后创建一层

linux基础学习笔记——操作大全

作者:liaoyi 更新时间:2014-6-2 ****************基本操作***************** 关机 shutdown -h now    root用户               init 0              root用户halt      root+一般用户poweroff 重启shutdown -r now    root用户init6     root用户reboot            root+一般用户 注意:1.shutdown 比较灵活,可

ceph学习笔记之二RADOS

Ceph学习笔记之二RADOS 一.RADOS架构 在RADOS架构中主要包含2个部分组件: 1.MON(Monitor) 由少量的Monitor节点构成的强耦合,小规模集群:负责管理Cluster Map. 2.OSD(Object Storage Device) 由数量可变的 大规模磁盘设备组成的集群,负责存储所有Object数据. 二.Monitor详解 在前面已经简单对其MON进行描述,在这个地方我们再次对MON进行详细解读.正如其名Monitor是负责监视整个集群运行状态的,这些信息都

51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程(高俊峰)

51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程 第一课 Linux运维经验分享与思路 1.一般把主机名,写到hosts下    127.0.0.1    hostname,因为很多应用要解析到本地.oracle没有这个解析可能启动不了. 2.注释掉UUID以及MAC地址,需要绑定网卡的时候,这个可能会有影响. 3.磁盘满了无法启动,  var下木有空间,无法创创建PID等文件,导致文件无法启动,按e   进入single  然后b  重启进入单用户模式. 4.ssh登陆系