4.磁盘管理和bash的编程思想以及逻辑判断,参数传递和条件测试

讲一讲磁盘相关的东西
GPT是GUID磁碟分割表(GUID Partition Table)的缩写

含义“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准

GPT磁盘模式,自纠错能力强,一块磁盘上主分区数量不受(4个的)限制,支持大于2T的总容量及大于2T的分区(几乎没有上限,最大支持到128个分区,分区大小支持到256TB)。XP系统无法识别GPT磁盘,Win7、Win8可以任意读写,但无法安装操作系统。GPT磁盘只有(也必须是)在使用支持FEI的主板后才可以安装Win8。

GPT磁盘的保留分区(隐藏分区)又称为FEI保留分区,可以防止将该磁盘挂接到XP系统中被误认为是未格式化的磁盘而格式化,导致数据丢失。该保留分区在将硬盘初始化(或转化)为GPT模式时自动创建,大小随硬盘总容量而定。
扩展资料:

在分区数量上,GPT会为每一个分区分配一个全局唯一的标识符,理论上GPT支持无限个磁盘分区,不过在Windows系统上由于系统的限制,最多只能支持128个磁盘分区,基本可以满足所有用户的存储需求。

在每一个分区上,这个标识符是一个随机生成的字符串,可以保证为地球上的每一个GPT分区都分配完全唯一的标识符。

而在安全性方面,GPT分区表也进行了全方位改进。在早期的MBR磁盘上,分区和启动信息是保存在一起的。如果这部分数据被覆盖或破坏,事情就麻烦了。

相对的,GPT在整个磁盘上保存多个这部分信息的副本,因此它更为健壮,并可以恢复被破坏的这部分信息。GPT还为这些信息保存了循环冗余校验码(CRC)以保证其完整和正确——如果数据被破坏,GPT会发觉这些破坏,并从磁盘上的其他地方进行恢复。
与普遍使用的主引导记录(MBR)分区方案相比

GPT分区方案的优点如下:

1、支持2TB以上的大硬盘。

2、每个磁盘的分区个数几乎没有限制(Windows系统最多只允许划分128个分区)。

3、分区大小几乎没有限制,因为它用64位的整数表示扇区号。

4、分区表自带备份,在磁盘的首尾部分分别保存了一份相同的分区表,其中一份被破坏后,可以通过另一份恢复。

5、每个分区可以有一个名称(不同于卷标)。
磁盘和文件系统管理

文件系统管理工具:
创建文件系统的工具
mkfs
mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat, ...
检测及修复文件系统的工具
fsck
fsck.ext2, fsck.ext3, ...
查看其属性的工具
dumpe2fs, tune2fs
调整文件系统特性:
tune2fs

内核级文件系统的组成部分:
    文件系统驱动:由内核提供
    文件系统箮理工具:由用户空间的应用程序提供

ext系列文件系统的管理工具:
    mkfs.ext2, mkfs.ext3, mkfs.ext4
  mkfs -t ext2 = mkfs.ext2

    ext系列文件系统专用管理工具:mke2fs
        mke2fs [OPTIONS]  device
            -t {ext2|ext3|ext4}:指明要创建的文件系统类型
                mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4
            -b {1024|2048|4096}:指明文件系统的块大小;
            -L LABEL:指明卷标;
            -j:创建有日志功能的文件系统ext3;
                mke2fs -j = mke2fs -t ext3 = mkfs -t ext3 = mkfs.ext3
            -i #:bytes-per-inode,指明inode与字节的比率;即每多少字节创建一个Indode;
            -N #:直接指明要给此文件系统创建的inode的数量;
            -m #:指定预留的空间,百分比;

            -O [^]FEATURE:以指定的特性创建目标文件系统;

        e2label命令:卷标的查看与设定
            查看:e2label device
            设定:e2label device LABEL
    tune2fs命令:查看或修改ext系列文件系统的某些属性
            adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems;
            注意:块大小创建后不可修改;

            tune2fs [OPTIONS] device
                -l:查看超级块的内容;

                修改指定文件系统的属性:
                    -j:ext2 --> ext3;
                    -L LABEL:修改卷标;
                    -m #:调整预留空间百分比;
                    -O [^]FEATHER:开启或关闭某种特性;

                    -o [^]mount_options:开启或关闭某种默认挂载选项
                        acl
                        ^acl

        dumpe2fs命令:显示ext系列文件系统的属性信息
            dumpe2fs  [-h] device

        用于实现文件系统检测的工具

            因进程意外中止或系统崩溃等 原因导致定稿操作非正常终止时,可能会造成文件损坏;此时,应该检测并修复文件系统; 建议,离线进行;

            ext系列文件系统的专用工具:
                e2fsck : check a Linux ext2/ext3/ext4 file system
                    e2fsck [OPTIONS]  device
                        -y:对所有问题自动回答为yes;
                        -f:即使文件系统处于clean状态,也要强制进行检测;

                fsck:check and repair a Linux file system
                    -t fstype:指明文件系统类型;
                        fsck -t ext4 = fsck.ext4
                    -a:无须交互而自动修复所有错误;
                    -r:交互式修复;        

CentOS 6如何使用xfs文件系统:
    # yum  -y  ×××tall  xfsprogs
  事先:
            # cd /etc/yum.repos.d/
            # wget  http://172.16.0.1/centos6.7.repo
            #mv CentOS-Base.repo CentOS-Base.repo.bak

    创建:mkfs.xfs
    检测:fsck.xfs         

blkid命令:
    blkid device
    blkid  -L LABEL:根据LABEL定位设备
    blkid  -U  UUID:根据UUID定位设备

swap文件系统:
    Linux上的交换分区必须使用独立的文件系统;
        且文件系统的System ID必须为82;

    创建swap设备:mkswap命令
        mkswap [OPTIONS]  device
            -L LABEL:指明卷标
            -f:强制

Windows无法识别Linux的文件系统; 因此,存储设备需要两种系统之间交叉使用时,应该使用windows和Linux同时支持的文件系统:fat32(vfat);
    根文件系统这外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”;此目录即为“挂载点”;

        挂载点:mount_point,用于作为另一个文件系统的访问入口;
            (1) 事先存在;
            (2) 应该使用未被或不会被其它进程使用到的目录;
            (3) 挂载点下原有的文件将会被隐藏;

    mount命令:
        mount  [-nrw]  [-t vfstype]  [-o options]  device  dir

            命令选项:
                -r:readonly,只读挂载;
                -w:read and write, 读写挂载;
                -n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性;

                -t vfstype:指明要挂载的设备上的文件系统的类型;多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型;

                -L LABEL:挂载时以卷标的方式指明设备;
                    mount -L LABEL dir

                -U UUID:挂载时以UUID的方式指明设备;
                    mount -U UUID dir

            -o options:挂载选项
                sync/async:同步/异步操作;
                atime/noatime:文件或目录在被访问时是否更新其访问时间戳;
                diratime/nodiratime:目录在被访问时是否更新其访问时间戳;
                remount:重新挂载;
                acl:支持使用facl功能;
                    # mount -o acl  device dir
                    # tune2fs  -o  acl  device

                ro:只读
                rw:读写
                dev/nodev:此设备上是否允许创建设备文件;
                exec/noexec:是否允许运行此设备上的程序文件;
                auto/noauto:
                user/nouser:是否允许普通用户挂载此文件系统;
                suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效;                    

                defaults:Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.
   一个使用技巧:
            可以实现将目录绑定至另一个目录上,作为其临时访问入口;
                mount --bind  源目录  目标目录

        查看当前系统所有已挂载的设备:
            # mount
            #cat  /etc/mtab
             #cat  /proc/mounts

        挂载光盘:
            mount  -r  /dev/cdrom  mount_point

            光盘设备文件:/dev/cdrom, /dev/dvd

        挂载U盘:
            事先识别U盘的设备文件;

        挂载本地的回环设备:
            # mount  -o  loop  /PATH/TO/SOME_LOOP_FILE   MOUNT_POINT

    umount命令:
        umount  device|dir

        注意:正在被进程访问到的挂载点无法被卸载;
            查看被哪个或哪些进程所占用:
                # lsof  MOUNT_POINT
                #fuser -v  MOUNT_POINT

                终止所有正在访问某挂载点的进程:
                 fuser  -km  MOUNT_POINT

交换分区的启用和禁用:
    创建交换分区的命令:mkswap

    启用:swapon
        swapon  [OPTION]  [DEVICE]
            -a:定义在/etc/fstab文件中的所有swap设备;

    禁用:swapoff
        swapoff DEVICE
 设定除根文件系统以外的其它文件系统能够开机时自动挂载:/etc/fstab文件
    每行定义一个要挂载的文件系统及相关属性:
        6个字段:
            (1) 要挂载的设备:
                设备文件;
                LABEL
                UUID
                伪文件系统:如sysfs, proc, tmpfs等
            (2) 挂载点
                swap类型的设备的挂载点为swap;
            (3) 文件系统类型;
            (4) 挂载选项
                defaults:使用默认挂载选项;
                如果要同时指明多个挂载选项,彼此间以事情分隔;
                    defaults,acl,noatime,noexec
            (5) 转储频率
                0:从不备份;
                1:每天备份;
                2:每隔一天备份;
            (6) 自检次序
                0:不自检;
                1:首先自检,通常只能是根文件系统可用1;
                2:次级自检
                ...

        mount  -a:可自动挂载定义在此文件中的所支持自动挂载的设备;

两个命令:df和du
    df命令:
        df [OPTION]... [FILE]...
            -l:仅显示本地文件的相关信息;
            -h:human-readable
            -i:显示inode的使用状态而非blocks

    du命令:
        du [OPTION]... [FILE]...
            -s: sumary
            -h: human-readable

练习1:
1、创建一个10G的分区,并格式化为ext4文件系统;
(1) block大小为2048;预留空间为2%,卷标为MYDATA;
(2) 挂载至/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳;
(3) 可开机自动挂载;
[root@localhost ~]# fdisk /dev/sdb
Select (default p): e
分区号 (1-4,默认 1):1

命令(输入 m 获取帮助):n

Select (default p): l
添加逻辑分区 5
起始 扇区 (4096-209715199,默认为 4096):
将使用默认值 4096
Last 扇区, +扇区 or +size{K,M,G} (4096-209715199,默认为 209715199):+10G
分区 5 已设置为 Linux 类型,大小设为 10 GiB
[root@localhost ~]# cat /proc/partitions,查看是否有分区显示,如果未显示
[root@localhost ~]# partx -a /dev/sdb 多刷新2次,就可以显示了
[root@localhost ~]# mke2fs -t ext4 -b 2048 -m 20 -L MYDATA /dev/sdb5
[root@localhost ~]# tune2fs -l /dev/sdb5 查看文件系统状态
tune2fs 1.42.9 (28-Dec-2013)
Setting reserved blocks percentage to 20% (1048576 blocks)
[root@localhost ~]# tune2fs -l /dev/sdb5
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: MYDATA (卷标)
Last mounted on: <not available>
Filesystem UUID: 6f185e68-e442-4981-8805-af0b79766ed1
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 655360
Block count: 5242880
Reserved block count: 1048576 (20%)
Free blocks: 5121266
Free inodes: 655349
First block: 0
Block size: 2048 (块大小)
Fragment size: 2048
Group descriptor size: 64
Reserved GDT blocks: 512
Blocks per group: 16384
Fragments per group: 16384
Inodes per group: 2048
Inode blocks per group: 256
Flex block group size: 16
Filesystem created: Fri Jun 14 04:03:58 2019
Last mount time: n/a
Last write time: Fri Jun 14 04:09:14 2019
Mount count: 0
Maximum mount count: -1
Last checked: Fri Jun 14 04:03:58 2019
Check interval: 0 (<none>)
Lifetime writes: 65 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 4737d9b8-439b-4e7f-bf38-b76f4a53ab25
Journal backup: inode blocks

[root@localhost ~]# blkid /dev/sdb5 查看文件系统类型
/dev/sdb5: LABEL="MYDATA" UUID="6f185e68-e442-4981-8805-af0b79766ed1" TYPE="ext4"
[root@localhost ~]# mkdir /mydata
[root@localhost ~]# mount /dev/sdb5 -o noexec,noatime /mydata
[root@localhost ~]# mount
/dev/sdb5 on /mydata type ext4 (rw,noexec,noatime,seclabel,data=ordered)
[root@localhost ~]# vim /etc/fstab 修改开机启动挂载
加入一行:
/dev/sdb5 /mydata ext4 defaults,noexec,noatime 0 0
:wq
保存,umount /mydata现在,然后mount -a 重新挂载,mount查看挂载状态

2.创建一个大小为1G的swap分区,并启动。
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 1 extended, 3 free)
l logical (numbered from 5)
Select (default p): l
添加逻辑分区 6
起始 扇区 (20977664-209715199,默认为 20977664):
将使用默认值 20977664
Last 扇区, +扇区 or +size{K,M,G} (20977664-209715199,默认为 209715199):+1G
分区 6 已设置为 Linux 类型,大小设为 1 GiB

命令(输入 m 获取帮助):t
分区号 (1,5,6,默认 6):6
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”

命令(输入 m 获取帮助):w
[root@localhost ~]# cat /proc/partitions 查看是否读出新分区,如果未读出,partx -a /dev/sdb 多执行几次读取磁盘信息
[root@localhost ~]# mkswap /dev/sdb6
正在设置交换空间版本 1,大小 = 1048572 KiB
无标签,UUID=17e846d5-6e86-45f8-bbfc-0293275bd9c2
[root@localhost ~]# swapon /dev/sdb6
[root@localhost ~]# swapon -s 查看是否启用
文件名 类型 大小 已用 权限
/dev/dm-1 partition 4063228 0 -2
/dev/sdb6 partition 1048572 0 -3
bash脚本编程

脚本文件格式:
    第一行,顶格:#!/bin/bash
    注释信息:#
    代码注释:
    缩进,适度添加空白行;

语言:编程语法格式,库,算法和数据结构
编程思想:
    问题空间 --> 解空间

变量:
    局部变量
    本地变量
    环境变量

    位置参数变量
    特殊变量

数据类型:字符型、数值型
    弱类型:字符型

算术运算:
    +, -, *, /, %, **

    let  VAR=expression
    VAR=$[expression]
    VAR=$((expression))
    VAR=$(expr argu1 argu2 argu3)

    注意:有些时候乘法符号需要转义;

    增强型赋值:
        变量做某种算术运算后回存至此变量中;
            let i=$i+#
            let i+=#

        +=,-=,*=, /=, %=

        自增:
            VAR=$[$VAR+1]
            let  VAR+=1
            let  VAR++

        自减:
            VAR=$[$VAR-1]
            let  VAR-=1
            let  VAR--

        文件测试:
            存在性测试
                -a  FILE
                -e  FILE
                    文件的存在性测试,存在则为真,否则则为假;
            存在性及类型测试
                -b  FILE:是否存在并且为 块设备 文件;
                -c  FILE:是否存在并且为 字符设备 文件;
                -d  FILE:是否存在并且为 目录文件;
                -f  FILE:是否存在并且为 普通文件;
                -h  FILE或 -L  FILE:是否存在并且为 符号链接文件;
                -p FILE:是否存在且为 命名管道文件;
                -S  FILE:是否存在且为 套接字文件;
            文件权限测试:
                -r  FILE:是否存在并且 对当前用户可读;
                -w  FILE:是否存在并且 对当前用户可写;
                -x  FILE:是否存在并且 对当前用户可执行;
            特殊权限测试:
                -u  FILE:是否存在并且 拥有suid权限;
                -g  FILE:是否存在并且 拥有sgid权限;
                -k  FILE:是否存在并且 拥有sticky权限;
            文件是否有内容:
                -s  FILE:是否有内容;
            时间戳:
                -N FILE:文件自从上一次读操作后是否被修改过;
            从属关系测试:
                -O  FILE:当前用户是否为文件的属主;
                -G  FILE:当前用户是否属于文件的属组;
            双目测试:
                FILE1  -ef  FILE2:FILE1与FILE2是否指向同一个文件系统的相同inode的硬链接;
                FILE1  -nt  FILE2:FILE1是否新于FILE2;
                FILE1  -ot  FILE2:FILE1是否旧于FILE2;

        组合测试条件:
            逻辑运算:
                第一种方式:
                    COMMAND1 && COMMAND2
                    COMMAND1 || COMMAND2
                    ! COMMAND

                    [ -O FILE ] && [ -r FILE ]

                第二种方式:
                    EXPRESSION1  -a  EXPRESSION2
                    EXPRESSION1  -o  EXPRESSION2
                    ! EXPRESSION

                    [ -O FILE -a -x FILE ]

    脚本的状态返回值:
        默认是脚本中执行的最后一条件命令的状态返回值;
        自定义状态退出状态码:
            exit  [n]:n为自己指定的状态码;
                注意:shell进程遇到exit时,即会终止,因此,整个脚本执行即为结束;

向脚本传递参数:
    位置参数变量

    myscript.sh  argu1 argu2
        引用方式:
            $1,  $2, ..., ${10}, ${11}, ...

        轮替:
            shift  [n]:位置参数轮替;

特殊变量:
    $0:脚本文件路径本身;
    $#:脚本参数的个数;
    $*:所有参数
    $@:所有参数

过程式编程语言的代码执行顺序:
    顺序执行:逐条运行;
    选择执行:
        代码有一个分支:条件满足时才会执行;
        两个或以上的分支:只会执行其中一个满足条件的分支;
    循环执行:
        代码片断(循环体)要执行0、1或多个来回;

    选择执行:
        单分支的if语句:
            if  测试条件
            then
                代码分支
            fi

        双分支的if语句:
            if  测试条件; then
                条件为真时执行的分支
            else
                条件为假时执行的分支
            fi    

练习1:
编写脚本计算/etc/passwd文件中第十个用户和第二十个用户id号 之和
#!/bin/bash
#
id1=$(cat /etc/passwd | head -10 | tail -1 | cut -d: -f3)
echo "第十个用户的uid为:$id1"
id2=$(cat /etc/passwd | head -20 | tail -1 | cut -d: -f3)
echo "第二十个用户的uid为:$id2"
idsum=$[$id1+$id2]
echo "两个用户的uid号之和为:$idsum"
练习2:
将当前主机名保存至hostName变量中,主机名如果为空,或者未localhost.localdomain,则将设置为www.magedu.com
#!/bin/bash
#
hostName=$(hostname)
echo "现在的主机名为$hostName"
if [ -z "$hostName" -o "$hostName" == "localhost.localdomain" ];then
hostname www.magedu.com
echo "主机名变动为:$(hostname)"
else
echo "主机名无变动"
exit 2
fi
注意事项:-z判断值是否为空,空则真,$命令需要括号引用,例$(hostname),$自定义变量引用不需要+括号。判断时需要用空格隔开。
练习3:编写脚本,通过命令参数传输一个用户名,判断id号是偶数还是奇数。
#!/bin/bash
#
if [ $# -lt 1 ];then
echo "请输入用户名"
exit 2;
fi
id1=$(id -u $1)
echo "$1的uid为$id1"
if [ $[$id1%2] -eq 1 ];then
echo "$1的uid是奇数"
else
echo "$1的uid是偶数"
fi
注意事项:做算法需要用[ ]括起来引用其中的值 ,-eq是数值之间判断是否等于,==是判断字符是否相同
什么是LVM

LVM是Logical Volume Manager的简写。其是Linux环境下对磁盘分区进行管理的一种机制。LVM由Heinz Mauelshagen在Linux 2.4内核上实现。其主要作用是在不损坏磁盘数据的情况下对磁盘空间进行增加,缩减。LVM的做法是将几块物理硬盘通过软件的方式组合成一块空间相对大的Volume Group,简称VG,然后将这块大磁盘通过Physical Extend组成可以使用的分区Logical Volume,简称LV。将LV格式化之后挂载既能使用

LVM的几个名词介绍
PV:Physical Volume,物理卷
PE:Physical Extend,物理块
VG:Volume Group,卷组
LV:Logical Volume,逻辑卷

LVM常用命令介绍

PV常用命令:
    pvcreate [device]:创建PV
    pvs:显示pv的简要信息
    pvdisplay /dev/sd[abcd]#:显示PV的详细信息。如果不指定设备,则显示所有PV详细信息
    pvremove /dev/sd[abcd]#:删除PV

VG常用命令:
    vgcreate [–s #[mMgGtT]] VG_NAME PhysicalDevicePath…:创建VG
         -s:指定PE的大小,PE默认大小是4MB
    vgs [VG_NAME]:显示简要VG信息
    vgdisplay [VG_NAME]:显示指定VG的详细信息,不指定VG则默认显示全部VG的详细信息

LV常用命令
    lvcreate –L [+]#[mMgGtT] –n LV_NAME VG_NAME:创建LV
        -L:指定LV的大小
        -n:指定LV的名字
    lvs [LV_NAME]:显示制指定v的简要信息,不指定lv默认显示全部lv的简要信息
    lvdisplay [LV_NAME]:显示指定lv的详细信息,不指定lv默认显示全部lv的详细信息
    lvextend -L [+]#[mMgGtT] LV_NAME:扩展LV到指定大小
    lvreduce -L [+]#[mMgGtT] LV_NAME:缩减LV到指定大小
    lvremove /dev/VG_NAME/LV_NAME::删除LV

LV的抽象表示

示例:LV的创建,扩展和缩减。此处以一块120G的硬盘为例,其设备文件是/dev/sda

LV的创建

1. 使用fdisk内建命令创建分区。注意,分区完毕后要将分区文件的System ID 改为8e: Linux LVM。此处以/dev/sda5, /dev/sda6,/dev/sda7作为LVM示例

[root@localhost ~]# fdisk -l /dev/sda
Disk /dev/sda: 128.8 GB, 128849018880 bytes, 251658240 sectorsUnits = sectors of 1 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk label type: dosDisk identifier: 0x000c744bDevice Boot Start End Blocks Id System/dev/sda1 2048 1026047 512000 83 Linux/dev/sda2 1026048 89120767 44047360 8e Linux LVM/dev/sda3 89120768 110092287 10485760 83 Linux/dev/sda4 110092288 251658239 70782976 5 Extended/dev/sda5 110094336 120580095 5242880 8e Linux LVM/dev/sda6 120582144 141553663 10485760 8e Linux LVM/dev/sda7 141555712 173012991 15728640 8e Linux LVM

2.  创建pv

[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 42.00g 4.00m
[root@localhost ~]# pvcreate /dev/{sda5,sda6,sda7}
Physical volume "/dev/sda5" successfully created
Physical volume "/dev/sda6" successfully created
Physical volume "/dev/sda7" successfully created
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 42.00g 4.00m
/dev/sda5 lvm2 --- 10.00g 10.00g
/dev/sda6 lvm2 --- 10.00g 10.00g
/dev/sda7 lvm2 --- 5.00g 5.00g

  1. 创建VG,指定PE大小为16MB

[root@localhost ~]# vgcreate -s 16M myvg /dev/sda5 /dev/sda6 /dev/sda7
Volume group "myvg" successfully created
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 3 0 wz--n- 42.00g 4.00m
myvg 3 0 0 wz--n- 24.95g 24.95g
[root@localhost ~]# vgdisplay myvg
--- Volume group ---
VG Name myvg
System ID
Format lvm2
Metadata Areas 3
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 3
Act PV 3
VG Size 24.95 GiB
PE Size 16.00 MiB
Total PE 1597
Alloc PE / Size 0 / 0
Free PE / Size 1597 / 24.95 GiB
VG UUID b2OW0g-eCXR-0oxI-Z8Ft-Jemk-zXON-fnpSb1

4. 创建LV

[root@localhost ~]# lvcreate -L 10G -n mylv myvg
WARNING: ext4 signature detected on /dev/myvg/mylv at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/myvg/mylv.
Logical volume "mylv" created.
[root@localhost ~]# lvdisplay /dev/myvg/mylv
--- Logical volume ---
LV Path /dev/myvg/mylv
LV Name mylv
VG Name myvg
LV UUID 669CDR-JifV-bCou-1QfU-q7VH-0b07-orShqW
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2016-09-07 14:33:17 +0800
LV Status available
open 0
LV Size 10.00 GiB
Current LE 640
Segments 2
Allocation inherit
Read ahead sectors auto

  • currently set to 8192
    Block device 253:2

    1. 格式化LV文件系统

[root@localhost ~]# mke2fs -t ext3 /dev/myvg/mylv
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# blkid /dev/myvg/mylv
/dev/myvg/mylv: UUID="4eb1b6ce-3777-4c69-9be1-522ca486d936" SEC_TYPE="ext2" TYPE="ext3"

  1. Mount LV并测试

[root@localhost ~]# mount /dev/myvg/mylv /test_lv/
[root@localhost ~]# cp /var/log/*.log /test_lv/
[root@localhost ~]# ls /test_lv
boot.log lost+found wpa_supplicant.log Xorg.0.log
[root@localhost ~]# umount /testlv
umount: /testlv: mountpoint not found
[root@localhost ~]# umount /dev/myvg/mylv
[root@localhost ~]# mount /dev/myvg//mylv /users
[root@localhost ~]# ls /users
boot.log lost+found wpa_supplicant.log Xorg.0.log
LVM的扩展

1. 扩展LV

[root@localhost ~]# lvextend -L 15G /dev/myvg/mylv
Size of logical volume myvg/mylv changed from 10.00 GiB (640 extents) to 15.00 GiB (960 extents).
Logical volume mylv successfully resized.

2. 扩展文件系统,填充LV的空间

[root@localhost ~]# resize2fs /dev/myvg/mylv 15G
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/myvg/mylv is mounted on /users; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/myvg/mylv is now 3932160 blocks long.

[root@localhost ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 20G 3.7G 17G 19% /
devtmpfs 480M 0 480M 0% /dev
tmpfs 495M 152K 495M 1% /dev/shm
tmpfs 495M 7.2M 488M 2% /run
tmpfs 495M 0 495M 0% /sys/fs/cgroup
/dev/mapper/centos-home 20G 36M 20G 1% /home
/dev/sda1 497M 159M 339M 32% /boot
tmpfs 99M 12K 99M 1% /run/user/1000
/dev/sr0 4.1G 4.1G 0 100% /run/media/max/CentOS 7 x86_64
/dev/mapper/myvg-mylv 15G 26M 14G 1% /users

Lvm的缩减:先缩减文件空间,再缩减物理空间

1. 卸载LV

[root@localhost ~]# umount /dev/myvg/mylv

2. 强制检测文件系统

[root@localhost ~]# e2fsck -f /dev/myvg/mylv
e2fsck 1.42.9 (28-Dec-2013)
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/mylv: 14/983040 files (7.1% non-contiguous), 100917/3932160 blocks

3. 缩减文件系统空间到7G

[root@localhost ~]# resize2fs /dev/myvg/mylv 7G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv to 1835008 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 1835008 blocks long.

4. 缩减LV空间至7G

[root@localhost ~]# lvs /dev/myvg/mylv
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 15.00g
[root@localhost ~]# lvreduce -L 7G mylv
Path required for Logical Volume "mylv".
Please provide a volume group name
Run `lvreduce --help' for more information.
[root@localhost ~]# lvreduce -L 7G /dev/myvg/mylv
WARNING: Reducing active logical volume to 7.00 GiB
[root@localhost ~]# lvs /dev/myvg/mylv
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 7.00g

5. 挂载并测试

[root@localhost ~]# mount /dev/myvg/mylv /users
[root@localhost ~]# ls /users
boot.log lost+found wpa_supplicant.log Xorg.0.log
[root@localhost ~]# cat /users/Xorg.0.log
[ 30.065]
X.Org X Server 1.17.2

注意事项:增加空间可以直接在挂载的情况下直接增加,缩减需要先卸载,再e2fsck -f强制检测文件系统文件,然后resize2fs缩减文件系统,再缩减磁盘空间。然后挂载,方可使用。

转载于:https://blog.51cto.com/14211189/2409011

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值