linux笔记 第九天

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,磁盘损坏,添加新磁盘等!

spacer.gif              创建一个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循环实现;提示:此题目可以使用管道。

spacer.gif

四、Logical volume manager 逻辑卷管理

Dm:device mapper 设备映射

将一个或多个底层设备(块设备、raid)组织成一个逻辑设备的工具

wKiom1Z1WZeDAWDfAAA67-pKUao044.png

概念:PE(Pysical Extent):固定大小4M 8M

PV physical volumepvcreate,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,而后sumageedu用户,复制/etc/fstab文件至自己的家目录;

     #useradd -d /users/mageedu mageedu

     #su - mageedu 3、cp /etc/fstab 

       3、扩展mylv17G,确保/users/mageedu的数据不受影响;而后sumageedu用户,验正数据可正常访问;

     #lvextend -L +2G /dev/myvg/mylv

     #resize2fs /dev/myvg/mylv

       4、缩减mylv14G,确保/users/mageedu的数据不受影响;而后sumageedu用户,验正数据可正常访问;

    #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 0var下填充一个swap.file文件,大小为256M

       #ls �Cl /var/swap.file �Ch 查看varswap文件大小

       #mkswap /var/swap.file 创建swap文件

       #swapon  #free -m启用swap并查看此时swap空间信息。

 

 

四、linux压缩、解压缩和归档工具

       压缩是根据一定的算法将一些文件用某个文件替换的过程,一般压缩的对象为文本文件。

       Compress/uncompress  .Z 基本不用了,压缩后很后赘

       gzip/bzip2/xz linux通用对文件压缩,gzip是最早的压缩工具,没有bzip2压缩比例大,xz压缩比例最大contos6以上支持。

       zip 通用linuxWindows,支持目录压缩

 

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等。

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(linux,接口,软件,如何,成本)