欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

第五周-磁盘分区GPT、shell脚本练习、lvm详解

程序员文章站 2022-07-21 17:52:21
1、 描述GPT是什么,应该怎么使用 Linux中磁盘分区分为MBR和GPT。 MBR全称为Master Boot Record,为主引导记录,是传统的分区机制,应用于绝大多数使用的BIOS的PC设备。 MBR分区的特点: 1、MBR支持32位和64位的系统 2、MBR支持分区数量有限 3、MBR只 ......

1、 描述gpt是什么,应该怎么使用

linux中磁盘分区分为mbr和gpt。

mbr全称为master boot record,为主引导记录,是传统的分区机制,应用于绝大多数使用的bios的pc设备。

mbr分区的特点:

1、mbr支持32位和64位的系统

     2、mbr支持分区数量有限

     3、mbr只支持不超过2t的硬盘,超过2t的硬盘将只能用2t空间。

gpt(全称为guid partition table)分区为全局唯一分区表,是一个较新的分区机制,解决了mbr很多缺点

gpt分区的特点:

1、支持超过2t的磁盘(64位寻址)。fdisk最大只能建立2tb大小的分区

     2、向后兼容mbr

     3、必须在支持uefi的硬件上才能使用(intel提出,用于取代bios)

4、 必须使用64位系统

5、 mac、linux、windows7/8 64bit、windows server2008 64bits系统都能支持gpt分区格式

gpt磁盘分区是使用parted工具实现的:

parted用法个常用选项:

用法:parted [选项]… [设备 [ 命令 [参数]… ]… ]

     将带有参数的命令用于设备。如果没有出现命令,则以交互模式运行。

帮助选项:

    -h,--help 显示此帮助信息

    -l , --list 列出所有设备的分区信息

    -i , --interactive 在必要是,提示用户

    -s, --script 从不提示用户

    -v , --version 显示版本

     操作命令:

        minot # 对文件系统进行一个简单的检查

        cp [from-device] from-minor to-minor   #将文件系统复制到另一个分区

        help [command]    #打印通用求助信息,或关于command信息

        mklable 标签类型    #创建新的磁盘标签(分区表)

        mkfs minor 文件系统类型  #在minor创建类型为“文件系统类型”的文件系统

        mkpart 分区类型 [文件系统类型] 起始点 终止点  #创建一个分区

        mkpartfs 分区类型 文件系统类型 起始点 终止点  #创建一个带有文件系统的分区

        move minor 起始点 终止点    #移动编号为minor的分区

        name minor 名称      #将编号为minor的分区命名为“名称”

        print [minor]     #打印分区表,或者分区 

quit          #退出程序 

rescue 起始点 终止点    #挽救临近“起始点”、“终止点”的遗失的分区 

resize minor 起始点 终止点  #改变位于编号为 minor 的分区中文件系统的大小 

rm minor         #删除编号为 minor 的分区 

select 设备       #选择要编辑的设备 

set minor 标志 状态     #改变编号为 minor 的分区的标志

示例:

步骤1、使用parted 工具在设备/dev/sdb上创建磁盘分区

 1 [root@localhost ~]# parted /dev/sdb
 2 
 3 gnu parted 3.1
 4 
 5 using /dev/sdb
 6 
 7 welcome to gnu parted! type 'help' to view a list of commands.
 8 
 9 (parted)
10 
11  

 

步骤2、接下来需要创建一个分区表(在parted中可以使用help命令打印帮助信息):

 (parted) mklabel  

new disk label type? gpt        #我们要正确分区大于2tb的磁盘,应该使用gpt方式的分区表,输入gpt后回车)                                           

(parted) mkpart

partition name?  []? mynewgpt         #输入创建新区的名字

file system type?  [ext2]? ext4           #输入创建信息的文件系统的类型,如果为ext2类型可直接按回车键             

start? 0                              #输入分区的起始点

end? 5g                              #输入分区的终止点;gpt分区和mbr分区不同,这里可直接输入起始点如从0开始到5g大小

warning: the resulting partition is not properly aligned for best performance.         #这里警告新建分区会格式化分区内容

ignore/cancel? i                                                          #忽略/取消                                                      

(parted)   

 

 

步骤3、我们已经创建好了一个分区,下面使用print命令打印出来看                                                    

(parted) print                                                            

model: vmware, vmware virtual s (scsi)

disk /dev/sdb: 21.5gb

sector size (logical/physical): 512b/512b

partition table: gpt

disk flags:

number  start   end     size    file system  name      flags

 1      17.4kb  5000mb  5000mb               mynewgpt

 

(parted)

 

 

步骤4、如果分区错了,可以使用rm命令删除分区,后面跟分区的编号,比如我们要删除上面的分区1,然后打印删除后的结果

(parted) rm 1

(parted) print                                                           

model: vmware, vmware virtual s (scsi)

disk /dev/sdb: 21.5gb

sector size (logical/physical): 512b/512b

partition table: gpt

disk flags:

number  start  end  size  file system  name  flags

(parted)  

 

 

步骤5、由于parted内建的mkfs还不够完善,所以完成以后我们可以使用quit命令退出parted并使用 系统的mkfs命令对分区进行格式化了,此时如果使用fdisk -l命令打印分区表会出现警告信息,这是正常的 

[root@localhost ~]# fdisk -l /dev/sdb                                    

warning: fdisk gpt support is currently new, and therefore in an experimental phase. use at your own discretion.

 

disk /dev/sdb: 21.5 gb, 21474836480 bytes, 41943040 sectors

units = sectors of 1 * 512 = 512 bytes

sector size (logical/physical): 512 bytes / 512 bytes

i/o size (minimum/optimal): 512 bytes / 512 bytes

disk label type: gpt

disk identifier: e53cf9cc-6556-41c1-b188-25735a0928f7

 

 

#         start          end    size  type            name

1                 34      9765625    4.7g  microsoft basic myfirstgpt

 

 

步骤6、格式化文件系统

[root@localhost ~]# mkfs.ext4 /dev/sdb

mke2fs 1.42.9 (28-dec-2013)

/dev/sdb is entire device, not just one partition!

proceed anyway? (y,n) y

filesystem label=

os type: linux

block size=4096 (log=2)

fragment size=4096 (log=2)

stride=0 blocks, stripe width=0 blocks

1310720 inodes, 5242880 blocks

262144 blocks (5.00%) reserved for the super user

first data block=0

maximum filesystem blocks=2153775104

160 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, 2654208,

         4096000

 

allocating group tables: done                           

writing inode tables: done                           

creating journal (32768 blocks): done

writing superblocks and filesystem accounting information: done  

 

[root@localhost ~]#

 

 

步骤7、挂载

[root@localhost ~]# mkdir /mnt/myfirstgpt

[root@localhost ~]# mount /dev/sdb /mnt/myfirstgpt/

 

 

2、 创建一个10g的分区,并格式化为etx4文件系统。要求:

[root@localhost ~]# fdisk /dev/sdb

welcome to fdisk (util-linux 2.23.2).

 

changes will remain in memory only, until you decide to write them.

be careful before using the write command.

 

device does not contain a recognized partition table

building a new dos disklabel with disk identifier 0x3a339f3a.

 

command (m for help): n

partition type:

   p   primary (0 primary, 0 extended, 4 free)

   e   extended

select (default p): p

partition number (1-4, default 1): 1

first sector (2048-41943039, default 2048):

using default value 2048

last sector, +sectors or +size{k,m,g} (2048-41943039, default 41943039): +10g

partition 1 of type linux and of size 10 gib is set

 

command (m for help): w

 

(1)     block大小为2048,预留空间20%,卷标为mydata

[root@localhost ~]# mkfs -t ext4 -b 2048 -m 20 -l mydata /dev/sdb1

mke2fs 1.42.9 (28-dec-2013)

filesystem label=mydata

os type: linux

block size=2048 (log=1)

fragment size=2048 (log=1)

stride=0 blocks, stripe width=0 blocks

655360 inodes, 5242880 blocks

1048576 blocks (20.00%) reserved for the super user

first data block=0

maximum filesystem blocks=273678336

320 block groups

16384 blocks per group, 16384 fragments per group

2048 inodes per group

superblock backups stored on blocks:

    16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104,

    2048000, 3981312

 

allocating group tables: done                           

writing inode tables: done                           

creating journal (32768 blocks): done

writing superblocks and filesystem accounting information: done  

 

[root@localhost ~]#

 

(2)     挂载/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳

[root@localhost ~]# mkdir /mydata

[root@localhost ~]# mount -o noatime,noexec /dev/sdb1 /mydata

 

(3)     可开机自动挂载

[root@localhost ~]# blkid /dev/sdb1

/dev/sdb1: label="mydata" uuid="af467f45-8b5c-426f-9aa6-6327e0a4e064" type="ext4"

[root@localhost ~]# vim /etc/fstab

uuid=af467f45-8b5c-426f-9aa6-6327e0a4e064 /mydata                 ext4    defaults        0 0

[root@localhost ~]# mount –a

 

 

5、 创建一个大小为1g的swap分区,并启用

[root@localhost ~]# fdisk /dev/sdb

welcome to fdisk (util-linux 2.23.2).

 

changes will remain in memory only, until you decide to write them.

be careful before using the write command.

 

 

command (m for help): n

partition type:

   p   primary (1 primary, 0 extended, 3 free)

   e   extended

select (default p): p

partition number (2-4, default 2): 2

first sector (20973568-41943039, default 20973568):

using default value 20973568

last sector, +sectors or +size{k,m,g} (20973568-41943039, default 41943039): +1g

partition 2 of type linux and of size 1 gib is set

 

command (m for help): t

partition number (1,2, default 2): 2

hex code (type l to list all codes): 82

changed type of partition 'linux' to 'linux swap / solaris'

 

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@localhost ~]# fdisk -l /dev/sdb

 

disk /dev/sdb: 21.5 gb, 21474836480 bytes, 41943040 sectors

units = sectors of 1 * 512 = 512 bytes

sector size (logical/physical): 512 bytes / 512 bytes

i/o size (minimum/optimal): 512 bytes / 512 bytes

disk label type: dos

disk identifier: 0x3a339f3a

 

   device boot      start         end      blocks   id  system

/dev/sdb1            2048    20973567    10485760   83  linux

/dev/sdb2        20973568    23070719     1048576   82  linux swap / solaris

[root@localhost ~]# mkswap /dev/sdb2

[root@localhost ~]# swapon /dev/sdb3

 

 

6、 编写脚本计算/etc/passwd文件中第10个用户和第20个用户id之和

#!/bin/bash

#filename addid.sh

#author gongxu

#data 2019/12/9

id1=$(head -10  /etc/passwd | tail -1  | cut  -d:  -f3)
id2=$(head -20   /etc/passwd | tail -1  | cut  -d:  -f3)

id_sum=$[$id1+$id2]

echo “id_sum=$id_sum”

执行脚本:

 [root@localhost ~]# bash .addid.sh

“id_sum=1008”

 

 

7、 将当前主机名保存至hostname变量中,主机名如果为空,或者为localhost.localdomain则将设置为

hostname=$(hostname)

[ -z "$hostname" -o "$hostname" == "localhost.localdomain" -o "$hostname" == "localhost" ] && hostname www.magedu.com           

 

                                

                                           

 

8、 编写脚本,通过命令行参数传入一个用户名,判断id的偶数还是奇数

#!/bin/bash

#
if ![ $# -eq 1 ] ;then

  echo “please input at lessest one username”

  exit 2

fi

$uid = grep “^$1\>” /etc/passwd | cut –d: -f3

$uid_yu = $uid % 2

if $uid_yu –eq 0 ; then

  echo “$1的id号为偶数”

else

  echo “$1的id号为奇数”

fi         

 

 

 

lvm基本应用以及扩展缩减实现(转载自:http://blog.csdn.net/ikikik2002/article/details/5187276)

一、 前言
lvm是逻辑卷管理(logical volume manager)的简称,他是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,和直接使用物理存储在管理上相比,提供了更好灵活性。
lvm将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,和硬件相关的存储设置被其隐藏,你能不用停止应用或卸载文件系统来调整卷大小或数据迁移.这样能减少操作成本.
lvm和直接使用物理存储相比,有以下好处:
1. 灵活的容量.
当使用逻辑卷时,文件系统能扩展到多个磁盘上,你能聚合多个磁盘或磁盘分区成单一的逻辑卷.

2.可伸缩的存储池.
你能使用简单的命令来扩大或缩小逻辑卷大小,不用重新格式化或分区磁盘设备.

3.在线的数据再分配.
你能在线移动数据,数据能在磁盘在线的情况下重新分配.比如,你能在线更换可热插拔的磁盘.

4. 方便的设备命名
逻辑卷能按你觉得方便的方式来起所有名称.

5.磁盘条块化.
你能生成一个逻辑盘,他的数据能被条块化存储在2个或更多的磁盘上.这样能明显提升数据吞吐量.

6.映像卷
逻辑卷提供方便的方法来映像你的数据.

7.卷快照
使用逻辑卷,你能获得设备快照用来一致性备份或测试数据更新效果而不影响真实数据.

二、 lvm基本术语
前面谈到,lvm是在物理存储上添加的一个逻辑层,来为文件系统屏蔽下面的硬件存储设备,提供了一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个lvm术语:

* 物理存储介质(the physical media)
这里指系统的存储设备,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。

* 物理卷(pv, physical volume)
物理卷就是指磁盘,磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如raid),是lvm的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有和lvm相关的管理参数。当前lvm允许你在每个物理卷上保存这个物理卷的0至2份元数据拷贝.默认为1,保存在设备的开始处.为2时,在设备结束处保存第二份备份.

* 卷组(vg, volume group)
lvm卷组类似于非lvm系统中的物理硬盘,其由物理卷组成。能在卷组上创建一个或多个“lvm分区”(逻辑卷),lvm卷组由一个或多个物理卷组成。

* 逻辑卷(lv, logical volume)
lvm的逻辑卷类似于非lvm系统中的硬盘分区,在逻辑卷之上能建立文件系统(比如/home或/usr等)。

*线性逻辑卷 (linear volumes)
一个线性逻辑卷聚合多个物理卷成为一个逻辑卷.比如,如果你有两个60gb硬盘,你能生成120gb的逻辑卷.

*条块化的逻辑卷(striped logical volumes)
当你写数据到此逻辑卷中时,文件系统能将数据放置到多个物理卷中.对于大量连接读写操作,他能改善数据i/o效率.

*映像的逻辑卷(mirrored logical volumes)
映像在不同的设备上保存一致的数据.数据同时被写入原设备及映像设备.他提供设备之间的容错。

*快照卷(snapshot volumes)
快照卷提供在特定瞬间的一个设备虚拟映像,当快照开始时,他复制一份对当前数据区域的改动,由于他优先执行这些改动,所以他能重构当前设备的状态。

* pe(physical extent)
每一个物理卷被划分为称为pe(physical extents)的基本单元,具有唯一编号的pe是能被lvm寻址的最小单元。pe的大小是可设置的,默认为4mb。

* le(logical extent)
逻辑卷也被划分为被称为le(logical extents) 的可被寻址的基本单位。在同一个卷组中,le的大小和pe是相同的,并且一一对应。

和非lvm系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中相同,逻辑卷及卷组相关的元数据也是保存在位于物理卷起始处的vgda(卷组描述符区域)中。vgda包括以下内容: pv描述符、vg描述符、lv描述符、和一些pe描述符 。系统启动lvm时激活vg,并将vgda加载至内存,来识别lv的实际物理存储位置。当系统进行i/o操作时,就会根据vgda建立的映射机制来访问实际的物理位置。

三、 安装lvm
首先确定系统中是否安装了lvm工具:
[root@test2 root]# rpm ?qa|grep lvm
lvm-x-x-x
如果命令结果输入类似于上例,那么说明系统已安装了lvm管理工具;如果命令没有输出则说明没有安装lvm管理工具,则需要从网络下载或从光盘装lvm rpm工具包。

安装了lvm的rpm软件包以后,要使用lvm还需要设置内核支持lvm。redhat默认内核是支持lvm的,如果需要重新编译内核,则需要在设置内核时,进入multi-device support (raid and lvm)子菜单,选中以选项:

  • multiple devices driver support (raid and lvm)
       device mapper support 
         snapshot target (experimental) 
         mirror target (experimental)                                                           
    然后重新编译内核,即可将lvm的支持添加到新内核中。

    为了使用lvm,要确保在系统启动时激活lvm,在redha的版本中,系统启动脚本已具有对激活lvm的支持,在/etc/rc.d/rc.sysinit中有以下内容:
     
    if [ -x /sbin/lvm.static ]; then
              action $"setting up logical volume management:" /sbin/lvm.static vgchange -a y --ignorelockingfailure
    fi
    vgchange -a y命令激活系统所有卷组。

    四、 创建和管理lvm
    要创建一个lvm系统,一般需要经过以下步骤:
    1、 创建分区
    使用分区工具(如:fdisk等)创建lvm分区,方法和创建其他一般分区的方式是相同的,差别仅仅是lvm的分区类型为8e。
    # fdisk -l /dev/sdb /dev/sdc
    disk /dev/sdb: 18.2 gb, 18200739840 bytes
    255 heads, 63 sectors/track, 2212 cylinders
    units = cylinders of 16065 * 512 = 8225280 bytes
    disk /dev/sdb doesn’t contain a valid partition table
    disk /dev/sdc: 18.2 gb, 18200739840 bytes
    255 heads, 63 sectors/track, 2212 cylinders
    units = cylinders of 16065 * 512 = 8225280 bytes
    device boot      start         end      blocks   id  system
    /dev/sdc1               1         200     1606468+  8e  linux lvm
    如果要将使用整块盘,能通过下面的命令来覆盖磁盘上的原有分区信息:
    #dd if=/dev/zero of=/dev/sdc bs=512 count=1
      
    2、 创建物理卷
    创建物理卷的命令为pvcreate,利用该命令将希望添加到卷组的所有分区或磁盘创建为物理卷。将整个磁盘创建为物理卷的命令为:
    # pvcreate /dev/sdb
    physical volume "/dev/sdb" successfully created
      
    将单个分区创建为物理卷的命令为:
    # pvcreate /dev/sdc1
    physical volume "/dev/sdc1" successfully created
    也能同时生成多个卷:
    #pvcreate /dev/sdb /dev/sdc1

    3、扫描块设备
    通过lvmdiskscan能看到那些设备成为了物理卷.
    #lvmdiskscan
      /dev/ramdisk             [       16.00 mb] 
      /dev/sda                 [        4.00 gb] 
      /dev/root                [        2.88 gb] 
      /dev/ram                 [       16.00 mb] 
      /dev/sda1                [      101.94 mb] 
      /dev/volgroup00/logvol01 [        1.00 gb] 
      /dev/ram2                [       16.00 mb] 
      /dev/sda2                [        3.90 gb] lvm physical volume
      /dev/lvm_test/test       [      508.00 mb] 
      /dev/ram3                [       16.00 mb] 
      /dev/ram4                [       16.00 mb] 
      /dev/ram5                [       16.00 mb] 
      /dev/ram6                [       16.00 mb] 
      /dev/ram7                [       16.00 mb] 
      /dev/ram8                [       16.00 mb] 
      /dev/ram9                [       16.00 mb] 
      /dev/ram10               [       16.00 mb] 
      /dev/ram11               [       16.00 mb] 
      /dev/ram12               [       16.00 mb] 
      /dev/ram13               [       16.00 mb] 
      /dev/ram14               [       16.00 mb] 
      /dev/ram15               [       16.00 mb] 
      /dev/sdb                 [      512.00 mb] lvm physical volume
      /dev/sdc                 [      512.00 mb] lvm physical volume
      5 disks
      16 partitions
      2 lvm physical volume whole disks
      1 lvm physical volume

    4、显示物理卷
    能使用pvs,pvscan,pvdisplay来显示当前系统中的物理卷.
    #pvs
      pv         vg         fmt  attr psize   pfree  
      /dev/sda2  volgroup00 lvm2 a-     3.88g      0 
      /dev/sdb   lvm_test   lvm2 a-   508.00m      0 
      /dev/sdc              lvm2 --   512.00m 512.00m
    #pvscan 
      pv /dev/sdb    vg lvm_test     lvm2 [508.00 mb / 0    free]
      pv /dev/sda2   vg volgroup00   lvm2 [3.88 gb / 0    free]
      pv /dev/sdc                    lvm2 [512.00 mb]
      total: 3 [4.87 gb] / in use: 2 [4.37 gb] / in no vg: 1 [512.00 mb]
    #pvdisplay
      --- physical volume ---
      pv name               /dev/sdb
      vg name               lvm_test
      pv size               512.00 mb / not usable 4.00 mb
      allocatable           yes (but full)
      pe size (kbyte)       4096
      total pe              127
      free pe               0
      allocated pe          127
      pv uuid               pkp5cq-sd1w-anw2-cdde-bgtw-nmfs-jtxxfd
       
      --- new physical volume ---
      pv name               /dev/sdc
      vg name               
      pv size               512.00 mb
      allocatable           no
      pe size (kbyte)       0
      total pe              0
      free pe               0
      allocated pe          0
      pv uuid               bncvee-ywlk-0mrv-locf-0tcy-wwnw-deysk0

    5、移除物理卷
    #pvremove /dev/sdc
    labels on physical volume "/dev/sdc" successfully wiped

    6、 创建卷组
    创建卷组的命令为vgcreate,将使用pvcreate建立的物理卷创建为一个完整的卷组:
    # vgcreate lvm_test /dev/sdc1 /dev/sdb
    volume group "lvm_test" successfully created
    vgcreate命令第一个参数是指定该卷组的逻辑名:lvm_test。后面参数是指定希望添加到该卷组的所有分区和磁盘。vgcreate在创建卷组 lvm_test 以外,还设置使用大小为4 mb的pe(默认为4mb),这表示卷组上创建的所有逻辑卷都以 4 mb 为增量单位来进行扩充或缩减。pe最小为1kb  ,并且必须总是1kb的 2^n 的倍数(使用-s指定,具体请参考man vgcreate)。

    7、 激活卷组
    卷组在创建时默认激活,也能使用vgchange来激活卷组:
    # vgchange -a y lvm_test

    8、 添加新的物理卷到卷组中
    当系统安装了新的磁盘或新建分区并创建了新的物理卷,而要将其添加到已有卷组时,就需要使用vgextend命令:
    #fdisk -l /dev/sdc
    disk /dev/sdc: 18.2 gb, 18200739840 bytes
    255 heads, 63 sectors/track, 2212 cylinders
    units = cylinders of 16065 * 512 = 8225280 bytes
    device boot      start         end      blocks   id  system
    /dev/sdc1               1         200     1606468+  8e  linux lvm
    /dev/sdc2             201         400     1606500   8e  linux lvm
             
    #pvcreate /dev/sdc2
    physical volume "/dev/sdc2" successfully created
            
    # vgextend lvm_test /dev/sdc2
    volume group "lvm_test" successfully extended
    这里/dev/sdc2是新的物理卷。

    9、显示卷组
    显示卷组能使用vgs和vgdisplay.
    # vgs
      vg         #pv #lv #sn attr   vsize   vfree
      volgroup00   1   2   0 wz--n-   3.88g    0 
      lvm_test     1   1   0 wz--n- 508.00m    0 

    # vgdisplay 
      --- volume group ---
      vg name               lvm_test
      system id             
      format                lvm2
      metadata areas        1
      metadata sequence no  10
      vg access             read/write
      vg status             resizable
      max lv                0
      cur lv                1
      open lv               1
      max pv                0
      cur pv                1
      act pv                1
      vg size               508.00 mb
      pe size               4.00 mb
      total pe              127
      alloc pe / size       127 / 508.00 mb
      free  pe / size       0 / 0   
      vg uuid               ujx24t-wwdy-vffu-97of-mgfb-feov-erwzaf

    10、扫描磁盘生成缓存文件
    #vgscan
      reading all physical volumes.  this may take a while...
      found volume group "lvm_test" using metadata type lvm2
      found volume group "volgroup00" using metadata type lvm2
       
    11、 从卷组中删除一个物理卷
    要从一个卷组中删除一个物理卷,首先要确认要删除的物理卷没有被所有逻辑卷正在使用,就要使用pvdisplay命令察看一个该物理卷信息:
    #pvdisplay /dev/sdc2
    --- physical volume ---
    pv name               /dev/sdc2
    vg name               lvm_test
    pv size               1.53 gb / not usable 868.00 kb
    allocatable           yes 
    pe size (kbyte)       4096
    total pe              392
    free pe               392
    allocated pe          0 (表示未被使用)
    pv uuid               jaiils-1vrz-td9k-1aid-kijs-191z-ymz09h
      
    如果某个物理卷正在被逻辑卷所使用,就需要将该物理卷的数据备份到其他地方,然后再删除。删除物理卷的命令为vgreduce:
    # vgreduce lvm_test /dev/sdc2
    removed "/dev/sdc2" from volume group "lvm_test"

    12、 创建逻辑卷
    创建逻辑卷的命令为lvcreate:
    # lvcreate -l 1500 ?n test lvm_test
    logical volume "test" created
    该命令就在卷组lvm_test上创建名字为test,大小为1500m的逻辑卷,并且设备入口为/dev/lvm_test/test (lvm_test为卷组名,test为逻辑卷名)。如果希望创建一个使用全部卷组的逻辑卷,则需要首先察看该卷组的pe数,然后在创建逻辑卷时指定:
    # vgdisplay lvm_test| grep "total pe"
    total pe 4731
    # lvcreate -l 4731 lvm_test -n test
    logical volume "test" created

    13、创建条块化的逻辑卷
    # lvcreate -l 500m -i2  -n test lvm_test
      using default stripesize 64.00 kb
      rounding size (125 extents) up to stripe boundary size (126 extents)
      logical volume "test" created
    -i2指此逻辑卷在两个物理卷中条块化存放数据,默认一块大小为64kb.

    14、创建映像的逻辑卷。
    #lvcreate -l 52m  -m1  -n test lvm_test /dev/sdb1 /dev/sdc1 /dev/sdb2 
      logical volume "test" created
    -m1表示只生成一个单一映像,映像分别放在/dev/sdb1和/dev/sdc1上,映像日志放在/dev/sdb2上.

    15、创建快照卷。
    #lvcreate --size 10 --snapshot --name snaptest /dev/lvm_test/test 
    16、 创建文件系统
    如使用ext3文件系统:
    #mkfs.ext3 /dev/lvm_test/test
    mke2fs 1.35 (28-feb-2004)
    max_blocks 4294967295, rsv_groups = 0, rsv_gdb = 1024
    filesystem label=
    os type: linux
    block size=4096 (log=2)
    fragment size=4096 (log=2)
    2424832 inodes, 4844544 blocks
    242227 blocks (5.00%) reserved for the super user
    first data block=0
    maximum filesystem blocks=8388608
    148 block groups
    32768 blocks per group, 32768 fragments per group
    16384 inodes per group
    superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000
    writing inode tables: done                            
    inode.i_blocks = 90120, i_size = 4243456
    creating journal (8192 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.
    创建了文件系统以后,就能加载并使用他:
    # mkdir /mnt/test
    # mount /dev/lvm_test/test /mnt/test
    如果希望系统启动时自动加载文件系统,则还需要在/etc/fstab中添加内容:
    /dev/lvm_test/test /mnt/test ext3 defaults 1 2

    17、 删除一个逻辑卷
    删除逻辑卷以前首先需要将其卸载,然后删除:
    # umount /dev/lvm_test/test
    # lvremove /dev/lvm_test/test
    do you really want to remove active logical volume "test"? [y/n]: y
    logical volume "test" successfully removed
     
    18、 扩展逻辑卷大小
    lvm提供了方便调整逻辑卷大小的能力,扩展逻辑卷大小的命令是lvextend:
    # lvextend -l12g /dev/lvm_test/test
    extending logical volume test to 12.00 gb
    logical volume test successfully resized
      上面的命令就实现将逻辑卷test的大小扩大为12g。
    # lvextend -l+1g /dev/lvm_test/test
    extending logical volume test to 13.00 gb
    logical volume test successfully resized
    上面的命令就实现将逻辑卷test的大小增加1g。
    增加了逻辑卷的容量以后,就需要修改文件系统大小以实现利用扩充的空间。
    对于希望调整被加载的文件系统大小,使用ext2online(ext2resize) 或 resize2fs.
    #df -h
    # ext2online /dev/lvm_test/test
    ext2online /dev/lvm_test/test
    ext2online v1.1.18 - 2001/03/18 for ext2fs 0.5b

    #df -h
    filesystem            容量  已用 可用 已用% 挂载点
    /dev/mapper/volgroup00-logvol01
             16g   11g  3.6g  76% /
    /dev/sda1             494m   18m  451m   4% /boot
    none                      506m     0  506m   0% /dev/shm
    /dev/mapper/lvm_test-test
             13g   63m   13g   1% /mnt/test
      
    一般建议最佳将文件系统卸载,调整大小,然后再加载:
    # umount /dev/lvm_test/test
    #resize2fs /dev/lvm_test/test
    # mount  /dev/lvm_test/test /mnt/test

    19、 减少逻辑卷大小
    使用lvreduce即可实现对逻辑卷的容量,同样需要首先将文件系统卸载:
    # umount /mnt/test
    #e2fsck -f /dev/lvm_test/test
    # resize2fs /dev/lvm_test/test  11g
    # lvreduce -l -1.992g /dev/lvm_test/test (少2个pe的大小)
    # resize2fs /dev/lvm_test/test  (通过此命令确认是否文件系统大小和收缩后的逻辑卷大小匹配)
    # mount /dev/lvm_test/test /mnt/test

    20、显示逻辑卷
    通过lvscan,lvs及lvdisplay能察看当前系统中存在的逻辑卷。
    # lvdisplay 
      --- logical volume ---
      lv name                /dev/volgroup00/logvol00
      vg name                volgroup00
      lv uuid                spmlmd-6xq4-wstb-usap-jlqc-yktm-3bt8pc
      lv write access        read/write
      lv status              available
      # open                 1
      lv size                2.88 gb
      current le             92
      segments               1
      allocation             inherit
      read ahead sectors     0
      block device           253:0
      
    #lvscan 
    lvscan
      active            ’/dev/volgroup00/logvol00’ [2.88 gb] inherit
      active            ’/dev/volgroup00/logvol01’ [1.00 gb] inherit

    #lvs -o +devices
      lv       vg         attr   lsize origin snap%  move log copy%  devices      
      logvol00 volgroup00 -wi-ao 2.88g                               /dev/sda2(0) 
      logvol01 volgroup00 -wi-ao 1.00g                               /dev/sda2(92)  

    21、使用过滤控制lvm的设备扫描
    通过编辑/etc/lvm/lvm.conf 中的filter段,来定义过滤那些设备要扫描。
    filter =[ "a|/dev/sd.*|", "a|/dev/hd.*|", "r|.*|" ] 
    上面对scsi及ide设备扫描,对其他设备均不扫描。

    22、在线数据迁移
    通过pvmove能将一个pv上的数据迁移到新的pv上,也能将pv上的某个lv迁移到另一个pv上。
    #lvs -o +devices
      lv       vg         attr   lsize  origin snap%  move log copy%  devices      
      logvol00 volgroup00 -wi-ao  2.88g                               /dev/sda2(0) 
      logvol01 volgroup00 -wi-ao  1.00g                               /dev/sda2(92)
      test     lvm_test   -wi-ao 52.00m                               /dev/sdb1(0) 

    #pvmove -n test /dev/sdb1 /dev/sdc1

    #lvs -o +devices
      lv       vg         attr   lsize  origin snap%  move log copy%  devices      
      logvol00 volgroup00 -wi-ao  2.88g                               /dev/sda2(0) 
      logvol01 volgroup00 -wi-ao  1.00g                               /dev/sda2(92)
      test     lvm_test   -wi-ao 52.00m                               /dev/sdc1(0) 

    23、删除卷组
    按照顺序卸载文件系统,删除逻辑卷,然后删除卷组。
    #umount /mnt/test
    # lvremove /dev/lvm_test/test
    do you really want to remove active logical volume "test"? [y/n]: y
      logical volume "test" successfully removed
    #vgremove lvm_test
      volume group "lvm_test" successfully removed
    24、故障排查
    通过在命令后加 -v,-vv,-vvv或-vvvv来获得更周详的命令输出。
    通过在lvs,vgs后加-p能更好的查看失败设备.
    #vgs -a -o +devices -p
      partial mode. incomplete volume groups will be activated read-only.
      vg         #pv #lv #sn attr   vsize    vfree   devices                
      volgroup00   1   2   0 wz--n-    3.88g      0  /dev/sda2(0)           
      volgroup00   1   2   0 wz--n-    3.88g      0  /dev/sda2(92)          
      lvm_test     2   2   0 wz--n- 1016.00m 896.00m pvmove0(0)             
      lvm_test     2   2   0 wz--n- 1016.00m 896.00m /dev/sdb(0),/dev/sdc(0)
    #lvs -a -o +devices -p
      partial mode. incomplete volume groups will be activated read-only.
      failure parsing mirror status fraction: 1 core
      failure parsing mirror status fraction: 1 core
      lv        vg         attr   lsize  origin snap%  move     log copy%  devices                
      logvol00  volgroup00 -wi-ao  2.88g                                   /dev/sda2(0)           
      logvol01  volgroup00 -wi-ao  1.00g                                   /dev/sda2(92)          
      [pvmove0] lvm_test   p-c-ao 60.00m               /dev/sdb            /dev/sdb(0),/dev/sdc(0)
      test      lvm_test   -wi-a- 60.00m                                   pvmove0(0)             

    五、 总结
    根据上面的讨论能看到,lvm具有非常好的可伸缩性,使用起来非常方便。能方便地对卷组、逻辑卷的大小进行调整,更进一步调整文件系统的大小,还能方便的进行数据迁移,数据完整性保护。如果希望了解更多信息,请参考lvm-howto。


    此文件使用内核为2.6.22.1,在做pvmove时出现错误,如上.补丁如下:
    index: linux-2.6.21/drivers/md/dm-raid1.c
    ===================================================================
    --- linux-2.6.21.orig/drivers/md/dm-raid1.c        2007-05-13 18:56:09.000000000 +0100
    +++ linux-2.6.21/drivers/md/dm-raid1.c        2007-05-13 19:09:54.000000000 +0100
    @@ -1288,12 +1288,12 @@ static int mirror_status(struct dm_targe
                    for (m = 0; m nr_mirrors; m++)
                            dmemit("%s ", ms->mirror[m].dev->name);

    -                dmemit("%llu/%llu",
    +                dmemit("%llu/%llu ",
                            (unsigned long long)ms->rh.log->type->
                                    get_sync_count(ms->rh.log),
                            (unsigned long long)ms->nr_regions);

    -                sz = ms->rh.log->type->status(ms->rh.log, type, result, maxlen);
    +                sz += ms->rh.log->type->status(ms->rh.log, type, result+sz, maxlen-sz);

                    break;