演示针对LVM分区的管理

演示针对LVM分区的管理

假设已经增加一块磁盘:/dev/sdb

一、将sdb配置成LVM分区
1)当前系统有sda和sdb2个物理磁盘,各有100G的大小。
[root@svr200-11 ~]# ls /dev/sd*
sda   sda1  sda2  sdb   

2)给sdb分区
最简单的方式是使用整个磁盘:
[root@svr200-11 ~]# pvcreate /dev/sdb

否则的话,请继续:
[root@svr200-11 ~]# fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
注1:使用“n”创建新分区
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
注2:使用“p”创建主分区
p

注3:使用“1”创建分区1(在1-4中选择,当前磁盘支持最多4个主分区,GPT格式的磁盘支持更多主分区)
Partition number (1-4): 1

注4:选择默认值
First cylinder (1-13054, default 1): 
Using default value 1

注5:选择一个分区大小,看提示,可以用"+|大小|单位"这样的格式,此处是增加20G的分区
Last cylinder, +cylinders or +size{K,M,G} (1-13054, default 13054): +20G

注6:更改分区格式为LVM,先输入“t”,然后输入“8e”(Linux LVM),不清楚请输入“l”去查看对应的代码
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): l

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx         
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data    
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            
 f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

注7:打印当前的分区状态
Command (m for help): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb07a7c89

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        2612    20980858+  8e  Linux LVM

注8:确认无误,写入磁盘
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


二、物理卷(Physical Volume)
1)创建PV
[root@svr200-11 ~]# pvcreate  /dev/sdb1
2)查看PV
[root@svr200-11 ~]# pvdisplay 

  
三、卷组(Volume Group)  
1)创建一个VG,定义组名,组员(PV)
[root@svr200-11 ~]# vgcreate vg_test01 /dev/sdb1  
2)查看VG
[root@svr200-11 ~]# vgdisplay 

  
四、逻辑卷(Logical Volume)
1)创建一个新LV(理解成常规的一个分区,需要mkfs格式化后挂载到文件系统使用),定义大小,逻辑卷名称,以及从哪个VG上创建。
[root@svr200-11 ~]# lvcreate -L 8G -n lv_test01 vg_test01
当然,也可以使用全部的磁盘空间:
[root@svr200-11 ~]# lvcreate -l 100%FREE lv_test01 vg_test01
这里要注意一下“-l”参数的用法。

2)查看逻辑卷
[root@svr200-11 ~]# lvdisplay 


五、格式化lv并挂载到文件系统使用
1)格式化
[root@svr200-11 ~]# mkfs -t ext4 /dev/vg_test01/lv_test01 

2)挂载
[root@svr200-11 ~]# mkdir /data/test01 
[root@svr200-11 ~]# mount /dev/vg_test01/lv_test01 /data/test01/
[root@svr200-11 ~]# df -h |grep data
/dev/mapper/vg_test01-lv_test01  7.9G  146M  7.4G   2% /data/test01  

注:当然了,要记得更新fstab文件
或者先查询uuid
# blkid /dev/vg_test01/lv_test01
然后写入fstab
# cat <<'_EOF' >>/etc/fstab
UUID=xxxx /data                   ext4    defaults        0 0
_EOF
接着挂载
# mount -a


六、当前状态
1)物理磁盘:sdb,100G
2)新建了一个LVM格式的分区:sdb1,20G
3)新建了一个vg(vg_test01),把sdb1加入了vg_test01中
4)在vg_test01上,创建了一个大小为8G的分区lv_test01(逻辑卷lv)
5)格式化和挂载分区lv_test01到/data/test01上使用


七、上述是常规的增加一个分区的步骤,接下来探讨如何给分区扩容。
假设已经删除了上面使用的/dev/sdb,这次的目的是,给卷组(vg_svr20011)扩容,最终是要给逻辑卷(lv_home)扩容
扫描和删除有如下命令:
pvscan
vgscan
lvscan
pvremove
vgremove
lvremove


1)创建/dev/sdb1,大小全部空间(100G),LVM分区

fdisk /dev/sdb <<_EOF
n
p
1


t
8e
p
w
_EOF


创建PV:
[root@svr200-11 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created

查看PV状态:
[root@svr200-11 ~]# pvscan 
  PV /dev/sda2   VG vg_svr20011     lvm2 [99.51 GiB / 0    free]
  PV /dev/sdb1                      lvm2 [100.00 GiB]
  Total: 2 [199.51 GiB] / in use: 1 [99.51 GiB] / in no VG: 1 [100.00 GiB]

给现有的VG扩容:
[root@svr200-11 ~]# vgextend vg_svr20011 /dev/sdb1
  Volume group "vg_svr20011" successfully extended

再次查看PV的状态:  
[root@svr200-11 ~]# pvscan
  PV /dev/sda2   VG vg_svr20011   lvm2 [99.51 GiB / 0    free]
  PV /dev/sdb1   VG vg_svr20011   lvm2 [100.00 GiB / 100.00 GiB free]
  Total: 2 [199.50 GiB] / in use: 2 [199.50 GiB] / in no VG: 0 [0   ]

sdb1已经和sda2已经属于同一个卷组。


2)给逻辑卷(LV)扩容
查看LV的状态:
[root@svr200-11 ~]# lvscan
  ACTIVE            '/dev/vg_svr20011/lv_root' [50.00 GiB] inherit
  ACTIVE            '/dev/vg_svr20011/lv_home' [47.54 GiB] inherit
  ACTIVE            '/dev/vg_svr20011/lv_swap' [1.97 GiB] inherit

目前lv_home 使用了50G,先扩容到80G看看
[root@svr200-11 ~]# lvextend -L 80G /dev/vg_svr20011/lv_home 
  Extending logical volume lv_home to 80.00 GiB
  Logical volume lv_home successfully resized
[root@svr200-11 ~]# lvscan
  ACTIVE            '/dev/vg_svr20011/lv_root' [50.00 GiB] inherit
  ACTIVE            '/dev/vg_svr20011/lv_home' [80.00 GiB] inherit
  ACTIVE            '/dev/vg_svr20011/lv_swap' [1.97 GiB] inherit

用df查看分区信息:
[root@svr200-11 ~]# df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/vg_svr20011-lv_root   50G  3.1G   44G   7% /
tmpfs                            499M     0  499M   0% /dev/shm
/dev/sda1                        485M   34M  426M   8% /boot
/dev/mapper/vg_svr20011-lv_home   47G   38G  7.2G  84% /home
此时用df命令查看分区,会发现分区大小尚未更新,因为我们还需要on-line resize一下分区:
  
[root@svr200-11 ~]# resize2fs /dev/vg_svr20011/lv_home 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg_svr20011/lv_home is mounted on /home; on-line resizing required
old desc_blocks = 3, new_desc_blocks = 5
Performing an on-line resize of /dev/vg_svr20011/lv_home to 20971520 (4k) blocks.
The filesystem on /dev/vg_svr20011/lv_home is now 20971520 blocks long.

再看:
[root@svr200-11 ~]# df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/vg_svr20011-lv_root   50G  3.1G   44G   7% /
tmpfs                            499M     0  499M   0% /dev/shm
/dev/sda1                        485M   34M  426M   8% /boot
/dev/mapper/vg_svr20011-lv_home   79G   38G   38G  50% /home

符合预期



八、附上一个可有可无的小脚本,用于快速的删除和建立lvm分区来熟悉命令
[root@svr200-11 ~]# cat lvm_fdisk.sh 
#!/bin/bash
#
# 2015/4/30
# 创建和删除lvm分区的一个示例

function part_lvm() {
  echo -e "\033[1;40;31m[+] 使用fdisk创建分区\033[0m"
  echo -e "\033[40;32m开始操作:\033[40;37m"
  fdisk $1 <<_EOF
n
p
1


t
8e
p
w
_EOF
  echo
  echo -e "\033[40;32m完成!\033[40;37m"
  echo -e "\033[1;40;31m[-] 已经创建分区:${1}1\033[0m"
}

function part_rm() {
  echo -e "\033[1;40;31m[+] 使用fdisk删除分区\033[0m"
  echo -e "\033[40;32m开始操作:\033[40;37m"
  count=$(fdisk -l /dev/sdb |grep dev |grep -v Disk |wc -l)
  if [ $count -lt 2 ]; then
    fdisk $1 <<_EOF
d
p
w
_EOF
    echo
    echo -e "\033[40;32m完成!\033[40;37m"
    echo -e "\033[1;40;31m[-] 已经删除分区:${1}1\033[0m"
    echo
  else
    echo -e "\033[1;40;31m[-] 这个磁盘有多个分区,请先检查确认!\033[0m"
  fi
}

function usage() {
  cat <<_EOF

usage: $0 type device

$0 lvm /dev/sdb
$0 rm /dev/sdb

_EOF
}

case $1 in
  lvm|rm)
    part_$1 $2
    ;;
  *)
    usage
    ;;
esac


你可能感兴趣的:(fdisk,lvm,磁盘)