1、 raid基本概念及mdadm实现软raid
2、mdadm命令及bash循环进阶
3、linux管理之lvm详解
4、压缩解压及归档工具的使用
一、RAID:Redundant Array Inexpensive Disks 廉价冗余磁盘阵列。
1.1 硬盘通过IDE接口和线缆连接至主板,用户或者系统如何才能把多个磁盘看成是一个整体,我们需要用软件来模拟成一个磁盘(RAID)或者将线缆接入一个板卡上,板卡插在主板上(硬RAID).后随scsi硬盘的使用,磁盘成本较高,不再廉价,故名Redundant Array Independent Disks独立磁盘冗余阵列。
RAID level:
RAID Level | 读性能 | 写性能 |
容错 | 磁盘利用率 | 至少磁盘数 | 备注 |
raid0 | 提升 | 提升 | 无 | n*disk | 2块 | |
raid1 | 提升 | 略下降 |
有 | 1*disk | 2块 | |
raid4 | 提升 | 提升 | 有(固定盘) | (n-1)disk | 3块 | 异或运算 |
raid5 | 提升 | 提升 | 有(轮流) | (n-1)disk | 3块 | raid5+0 |
raid10 | 提升 | 提升 | 有 | n/2disk | 4块 | 用的多 |
raid0+1 | 提升 | 提升 | 有 | n/2disk | 4块 | |
raid6 | 提升 | 提升 | 有 | (n-2)disk | 4块 | 2块校验盘 |
注:由于raid4 固定的校验盘,校验盘压力大,性能差,故产生raid5;raid5几块磁盘轮流校验,容错,性能好;raid4、raid5都只能坏一块盘。
1.2 linux 2.6推出mdadm,md做软raid,dm(device mappen)用于LVM.
mdadm工具的使用:md支持将任何设备组织成raid,如磁盘和分区,如果sda1 sda2 sda3 三个分区做成raid5,其中一个分区损坏整个磁盘损坏,所以同一块磁盘不同分区做raid没有意义。
mdadm:模式化命令
-A:装配模式,用于重新识别此前实现的Raid
-C:创建模式,用于创建Raid
-F:监控模式,邮件监控
管理模式:-f,-r ,-a
-C 创建模式中专用的选项:
-n #:用于创建RAID设备的磁盘个数
-l #:raid级别
-a yes:自动为创建的raid生成设备文件
-c Chunk_Size:软raid自己制定的块大小
md设备的设备文件,一般在/dev目录下以md开头,后面跟一个数字;
cat /proc/mdstat 查看当前系统以启用的raid信息 mdadm -D /dev/md# 查看md#的详细信息
例如:创建一个10G的raid0.
1、创建2个分区,并分别改ID为fd 2、mdadm -C /dev/md0 -a yes -n 2 -l 0 /dev/sd{b,c}1
3、格式化e2fs -t ext4 /dev/md0
4、挂载试用,如果想开机挂载/dev/fstab,mount -a查看,df -lh 查看raid空间
例如:创建一个10G的raid5 mdadm -C /dev/md1 -a yes -n 3 -l 5 /dev/sda /dev/sdb /dev/sdc
二、RAID:组织多块硬盘当一个设备来使用
1.1 硬件raid:创建raid通过bios进行,在os中看到的仅是一个单独的设备
软件raid:无需任何硬件的raid设备,仅需多个块设备,在os中看到的是多个基本的磁盘设备。磁盘分区等,而后这多个设备可以组织成一个设备使用。
mdadm 命令行工具:
mdadm -D /dev/md# 显示指定的软Raid的详细信息
mdadm /dev/md# -f /dev/some_device 将/dev/md#中的/dev/some_device手动设置损坏
mdadm /dev/md# -r /dev/some_device 将/dev/md#中损坏状态的/dev/some_device删除
mdadm /dev/md# -a /dev/some_device 新增设备
watch -n1'cat /proc/mdstat' 新增设备后,数据校验,显示同步raid信息,如果raid上没有磁盘损坏而又新增磁盘,此磁盘会显示为空闲磁盘;一旦有一块磁盘损坏,这个空闲磁盘会顶替工作。
1.2 练习:实验模拟raid5,磁盘损坏,添加新磁盘等!
创建一个10G的RAID10
创建一个可用空间为10G的RAID5设备,要求其chunk大小为256K,文件系统为ext4,开机可自动挂载至/backup目录,支持acl功能;有一个空闲盘;
创建一个可用空间为10G的RAID1设备,chunk大小为1024k,有一个空闲盘,开机自动挂载至/users目录,不支持dev设备文件;
停止软件RAID:
mdadm -S /dev/md#
重新启用RAID:
mdadm -A /dev/md# /dev/DEVICE...
mdadm的配置文件/etc/mdadm.conf
watch: watch -n # <command> 阶段性执行制定的命令
如:watch -n 1 'ifconfig' ###1秒的频率全屏显示
三、 bash编程之循环
循环:
循环次数已知:遍历
for
循环次数未知:
while
until
for格式:
for 变量名 in 列表; do
循环体
done
循环体:依赖于调用变量来实现其变化;
循环可以嵌套;
退出条件:遍历列表完成
while格式:
while 测试条件; do
循环体
done
测试条件为真,进入循环;测试条件为假,退出循环;
测试条件一般通过变量来描述,需要在循环体不变量地改变变量的值,以确保某一时刻测试条件为假,进而结束循环;
until格式:
until 测试条件; do
循环体
done
测试条件为假,进入循环;测试条件为真,退出循环;
测试条件一般通过变量来描述,需要在循环体不变量地改变变量的值,以确保某一时刻测试条件为真,进而结束循环;
for的第二种使用格式 :
for ((初始条件;测试条件;修改表达式)); do
循环体
done
求100以内所有正整数之和:
while的实现:
#!/bin/bash
declare -i counter=1
declare -i sum=0
while [ $counter -le 100 ]; do
let sum+=$counter
let counter++
done
echo $sum
for的实现:
#!/bin/bash
#
declare -i sum=0
for ((counter=1;$counter <= 100; counter++)); do
let sum+=$counter
done
echo $sum
练习:求100以内所有偶数之和;
declare -i evensum=0
for ((counter=2; $counter <=100; counter+=2)); do
let evensum+=$counter
done
while循环:遍历文本文件
格式:
while read 变量名; do
循环体
done < /path/to/somefile
变量名,每循环一次,记忆了文件中一行文本
练习:显示其ID号为偶数的用户的用户名、ID号和SHELL
#!/bin/bash
#
while read line; do
userID=`echo $line | cut -d: -f3`
if [ $[$userID%2] -eq 0 ];then
echo $line | cut -d: -f1,3,7
fi
done < /etc/passwd
练习:显示ID号为偶数,且ID号同GID的用户的用户名、ID和SHELL;
while read line; do
userID=`echo $line | cut -d: -f3`
groupID=`echo $line | cut -d: -f4`
if [ $[$userID%2] -eq 0 -a $userID -eq $groupID ]; then
echo $line | cut -d: -f1,3,7
fi
done < /etc/passwd
练习:显示当前系统上所有挂载的文件系统中空间使用百分比大于10的设备和空间使用百分比;使用while循环实现;提示:此题目可以使用管道。
四、Logical volume manager 逻辑卷管理
Dm:device mapper 设备映射
将一个或多个底层设备(块设备、raid)组织成一个逻辑设备的工具
概念:PE(Pysical Extent):固定大小如4M 8M
PV physical volume,pvcreate,pvs,pvdisplay,pvremove,pvmove
VG volume group卷组
LV logical volume逻辑卷
存储空间边界分物理边界和逻辑边界;扩展时先扩展物理边界再扩展逻辑边界,缩小时先缩小逻辑边界再缩小物理边界。缩减不能少于已经存储的所有数据空间的大小。
快照:snapshot, 快照卷也能挂载,它是访问原数据卷的另一个路劲,访问快照卷时实际是访问了原数据卷的数据;如果原数据卷发生数据更改,那么在数据更改前会复制一份到快照卷,使得快照某一时刻为快照前的数据。
pv:pvcreate, pvs, pvdisplay, pvremove, pvmove, pvscan
vg:vgcreate, vgs, vgdisplay, vgremove, vgextend, vgreduce, vgscan
lv: lvcreate, lvs, lvdisplay, lvremove, lvextend, lvreduce, lvscan
创建逻辑卷过程:物理磁盘disk-->物理卷pv-->卷组vg-->逻辑卷lv
1、创建pv(pvcreate /dev/sdb{1,2,3}),可以通过pvs或pvdisplay显示pv, pvremove /dev/sdb1 删除pv上的分区,pvreate还可以把新分区添加到pv中
2、创建vg(vgcreate myvg /dev/sdb{1,2}), 添加新分区到myvg卷组(vgextend myvg /dev/sdb3),vg缩减卷组层(vgreduce myvg /dev/sdb1)在缩减时要确保分区上无数据(pvmove /dev/sdb1) -s指定pe大小默认4m当指定大小后将不能修改。
3、创建lv(lvcreate -n名称、-L指定大小、指定在那个vg上创建举例:lvcreate -L 2G -n mylv myvg),创建lv之后就相当于一个独立的物理设备,它有对应的设备文件在/dev/mapper/myvg-mylv或/dev/myvg/mylv下,格式化后挂载到节点上就可以使用了mke2fs -j -b 1024 -m 2 /dev/mapper/myvg-mylv,mount /dev/myvg/mylv /mnt/text。扩展物理边界lvextend -L +4g /dev/myvg/mylv扩展后需要扩展逻辑边界resize2fs /dev/myvg/mylv ,缩减lv(缩减很危险需要慎重必须要先卸载文件系统)umount /mnt/text,并强制检测e2fsck -f /dev/myvg/mylv之后缩减逻辑边界resize2fs /dev/myvg/mylv 5g在缩减物理边界lvreduce -L 5g /dev/myvg/mylv,卸载lv(lvremove -f /dev/myvg/mylv.
4、 创建快照卷:
lvcreate -L -n -s -p r(只读)
注意:快照卷是对某逻辑卷进行的,因此必须跟目标逻辑卷在同一个卷组中;无须指明卷组;
创建快照卷时要保证卷组有足够创建快照卷的空间大小,创建完快照卷做数据备份,备份完后卸载lvremove移除快照卷。例如:
创建快照卷格式:lvcreate �CL 512M �Cn mylv-snap �Cp r �Cs /dev/myvg/mylv
#fuser /data 查看原数据卷是否有进程访问
#mount �Co remount,ro /dev/myvg/mylv /date 阻止进程访问原数据卷
# lvcreate �CL 512M �Cn mylv-snap �Cp r �Cs /dev/myvg/mylv 创建快照卷
#mount �Co remount,rw /dev/myvg/mylv /date 恢复数据访问
#mkdir /snap ,mount /dev/myvg/mylv-snap /snap 挂载
查看原卷和快照卷的数据变换,并做备份cp 操作
#umount /snap
#lvremove /dev/myvg/mylv-snap
练习:
1、创建一个由至少两个物理卷组成的大小为10G的卷组;要求,PE大小8M;而后在卷组中创建大小为5G的逻辑卷mylv1,格式化为ext4文件系统,开机自动挂载至/users目录;
#fdisk /dev/sdb,提示需要把分区格式设置为lvm逻辑卷格式
#pvcreate /dev/sdb{1,2,3}
#vgcreate -s 8m myvg /dev/sdb{1,2}
#lvcreate -L 5G -n mylv myv/
#/etc/fstab下添加UUID="b69b4b54-5c91-4fd8-bc36-757597b6eb14" /users ext3 defaults 0 0
2、新建用户mageedu,其家目录为/users/mageedu,而后su至mageedu用户,复制/etc/fstab文件至自己的家目录;
#useradd -d /users/mageedu mageedu
#su - mageedu 3、cp /etc/fstab
3、扩展mylv1至7G,确保/users/mageedu的数据不受影响;而后su至mageedu用户,验正数据可正常访问;
#lvextend -L +2G /dev/myvg/mylv
#resize2fs /dev/myvg/mylv
4、缩减mylv1至4G,确保/users/mageedu的数据不受影响;而后su至mageedu用户,验正数据可正常访问;
#resize2fs /dev/myvg/mylv 4G
5、对mylv1创建快照卷snap-mylv1,并通过其cp内部的数据至/backups/目录中,要求保留原有属主属组等信息;
#lvcreate -L 1G -n snap-mylv1 -p r -s /dev/myvg/mylv,
#mkdir /snap,3、mount /dev/myvg/snap-mylv1 /snap/
移除卷组和逻辑卷:umount -àlvremove myvgàvgremove myvgàpvremove /dev/sdb*
逻辑卷
dd
if=/path/to/src_file
of=/path/to/dest_file
bs=256K
count=#
100
例如 dd if=/dev/zero of=/dev/sdb bs=512 count=1
/dev/null: 吞进所有数据,直接丢弃
/dev/zero: 泡泡机,吐零
dd if=/dev/sdb of=/backup/mbr.backup bs=1 count=512
dd if=/backup/mbr.backup of=/dev/sdb bs=512 count=1
如:#dd if=/etc/fstab of=/tmp/fstab
#cat /tmp/fstab
#dd if= /etc/fstab of=/tmp/fstab.2 bs=4 count=20 复制80字节
如:swap空间吃紧,创建新的swap设备,不购买新磁盘的情况下,利用其它磁盘的空间来实现.
#free �Cm 查看当前swap空闲情况
#df �Clh 查看当前磁盘空闲情况
#dd if=/dev/zero of=/var/swap.file bs=1M count=256 将0在var下填充一个swap.file文件,大小为256M
#ls �Cl /var/swap.file �Ch 查看var下swap文件大小
#mkswap /var/swap.file 创建swap文件
#swapon #free -m启用swap并查看此时swap空间信息。
四、linux压缩、解压缩和归档工具
压缩是根据一定的算法将一些文件用某个文件替换的过程,一般压缩的对象为文本文件。
Compress/uncompress .Z 基本不用了,压缩后很后赘
gzip/bzip2/xz linux通用对文件压缩,gzip是最早的压缩工具,没有bzip2压缩比例大,xz压缩比例最大contos6以上支持。
zip 通用linux和Windows,支持目录压缩
gzip/gunzip:压缩后删除源文件,后缀.gz
-#: 压缩比,默认是6,范围1―9
-d: gunzip解压缩
-c: 将压缩后的结果输出至标准输出,压缩后保留源文件
gzip �Cc messages > messages.gz
zcat: zcat somefile.gz ,不解压查看gzip压缩的文件内容
bzip/bunzip2:压缩后删除原文件,后缀.bz2
-#:压缩比,默认6,范围1―9
-d:bunzip2
-k:压缩后,保留源文件
bzcat:不解压查看文件内容,bzcat somefile.bz2
xz/unxz:压缩后保留源文件,后缀.xz
-#:压缩比,默认6,范围0―9
-d:unxz
-k:压缩后,保留源文件
Xzcat:不解压,查看压缩文件内容。
Zip/unzip
格式:zip file.zip file 例如:zip haha.zip haha1 haha2
对目录压缩或者归档的时候,要对其目录下的文件进行归档,如下:#zip http.zip http/* 将http目录下的所有文件压缩成http.zip
归档工具:tar
能实现将多个文件打包成单个文件,即为归档文件
tar [options] …-f tarfile.tar src_file…
创建归档:tar ( -c:create,-f:file.tar 指定归档后的文件,-v:显示执行过程)
展开归档:tar(-x:extract,-v,显示过程-f:file.tar)
查看归档后的文件中包含了哪些原文件,tar �Ctf FILE.tar
Tar可直接通过选项调用压缩工具执行压缩或解压。
-z:gzip ,-j:bzip2,-J:xz ,-t 不解压查看归档文件内容
例如:tar �Czcf httpd.tar.gz httpd 既归档又压缩
Cpio:归档工具,特殊情况使用,以后讲解。
光盘挂载:mount /dev/cdrom /media/cdrom ,eject 弹出光盘。
光盘文件系统:ISO9660
U盘挂载:一般服务器系统不支持NTFS,U盘系统格式为vfat,可以fdisk �Cl查看一般为/dev/sdc等。