Linux管理之lvm使用详解

wKioL1PFasPCWmoaAAaUQtAmJZk796.jpg


wKiom1PFcgOjoozZAAMFmfAn72w038.jpg


LVM相关常用命令

wKiom1PLNd6Bx3dFAADIrpc6gqw557.jpg


先来看下系统上所有的磁盘环境

[root@localhost ~]# fdisk -l /dev/sd[a-z]

Disk /dev/sda: 128.8 GB, 128849018880 bytes
255 heads, 63 sectors/track, 15665 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: 0x0004ead7

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        7859    62914560   8e  Linux LVM

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0xbb616a93

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         915     7349706   fd  Linux raid autodetect
/dev/sdb2             916        1308     3156772+  fd  Linux raid autodetect

Disk /dev/sdc: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x00000000


Disk /dev/sdd: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x00000000


我这里有/dev/sda b c d 4块磁盘,而且都没有分区。


一、首先我们把磁盘分区下。           


在/dev/sdb上分出3个主分区每个大小5G 

##首先来把sdb磁盘上的分区都删除掉
dd if=/dev/zero of=/dev/sdb count=1 bs=512 && sync
##上面命令的含义是 在sdb磁盘上1-512字节出全部填0 
##Linux系统上有两个很好玩的文件 一个是/dev/zero 一个是/dev/null
##前者是吐泡机,可以吐出无穷尽的0 后者是黑洞什么数据丢进去都消失贻尽,这里就不多说dd命令了

##来看下 sdb磁盘已经没了任何分区了。
[root@localhost ~]# cat /proc/partitions 
major minor  #blocks  name

   8        0  125829120 sda
   8        1     204800 sda1
   8        2   62914560 sda2
   8       16   20971520 sdb
   8       48   20971520 sdd
   8       32   20971520 sdc
 253        0   20971520 dm-0
 253        1    2097152 dm-1
 253        2   10485760 dm-2
 253        3   20971520 dm-3

##来新建分区
echo 'n
p
1

+5G
n
p
2

+5G
n
p
3

+5G
t
1
8e
t
2
8e
t
3
8e
w' | fdisk /dev/sdb &> /dev/null

##上面的看着篇幅很大 也可以使用echo -e 选项来写

echo -e 'n\np\n1\n\n+5G\nn\np\n2\n\n+5G\nn\np\n3\n\n+5G\nt\n1\n8e\nt\n2\n8e\nt\n3\n8e\nw' | fdisk /dev/sdb &> /dev/null

##这样用cheo+管道的方式分区是完全可以的。只要自己熟悉fdisk使用流程。
##可以看下面磁盘分区的详情

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

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x7db41824

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         654     5253223+  8e  Linux LVM
/dev/sdb2             655        1308     5253255   8e  Linux LVM
/dev/sdb3            1309        1962     5253255   8e  Linux LVM

二、建立物理卷                       

#将/dev/sdb1 2 3分区 建立物理卷
[root@localhost ~]# pvcreate /dev/sdb{1..3}
  dev_is_mpath: failed to get device for 8:17
  Physical volume "/dev/sdb1" successfully created
  dev_is_mpath: failed to get device for 8:18
  Physical volume "/dev/sdb2" successfully created
  dev_is_mpath: failed to get device for 8:19
  Physical volume "/dev/sdb3" successfully created
pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3 #这个命令其实和上面是一样的,上面只不过用了shell的通配


查看pv

[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda2  vg0  lvm2 a--  59.99g 7.99g
  /dev/sdb1       lvm2 a--   5.01g 5.01g
  /dev/sdb2       lvm2 a--   5.01g 5.01g
  /dev/sdb3       lvm2 a--   5.01g 5.01g
  
 ## sdb1 2 3分区都进去了 每个分区5G

也可以使用pvdisplay /dev/sdb1来看更详细的信息

wKiom1PLnQPjzXQGAAGd-sfta1o196.jpg(注:Allocatable:显示NO是因为我们都还没分卷组所以,PE大小一般有4M 8M 16M等而PE的大小取决于卷组而不是取决于物理卷)


下面说说pv的移除和添加

[root@localhost ~]# pvremove /dev/sdb3 #pv移除命令
  Labels on physical volume "/dev/sdb3" successfully wiped
[root@localhost ~]# pvcreate /dev/sdb3  #pv添加命令
  Physical volume "/dev/sdb3" successfully created

下图是效果

wKiom1PLn-mR_-eVAAGkqkKQwBg229.jpg

三、创建VG                            

[root@localhost ~]# vgcreate testvg /dev/sdb1  #vgcreate 创建vg的名称 加入vg的pv
  Volume group "testvg" successfully created

可以用vgs vgdisplay命令来查看vg

[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  testvg   1   0   0 wz--n-  5.01g 5.01g
  vg0      1   4   0 wz--n- 59.99g 7.99g
[root@localhost ~]# vgdisplay testvg
  --- Volume group ---
  VG Name               testvg
  System ID             
  Format                lvm2
  Metadata Areas        1
  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                1
  Act PV                1
  VG Size               5.01 GiB
  PE Size               4.00 MiB
  Total PE              1282
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1282 / 5.01 GiB
  VG UUID               4CNQKs-Qw0I-G3tu-TeNV-tyqW-gf9o-2bMLNi

这时候我们就可以使用pvdisplay命令来查看/dev/sdb1 就能看到PE大小了

wKioL1PLow6C8AXaAAE00TXtAeY885.jpg


加入这个VG不够用还是可以添加的,这时候我们就可以来测试添加VG了

[root@localhost ~]# vgextend testvg /dev/sdb2 
  Volume group "testvg" successfully extended
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   2   0   0 wz--n- 10.02g 10.02g

这时候我们的VG就加上了 testvg已经显示是10G大小了


同样有添加就有移除

[root@localhost ~]# pvmove /dev/sdb1 #这里我们必须先移除pv后才能移除VG
  No data to move for testvg
[root@localhost ~]# vgreduce testvg /dev/sdb2
  Removed "/dev/sdb2" from volume group "testvg"

wKiom1PLpEbBLKC0AAD9RrFWDy4224.jpg

wKioL1PLpgHCffFyAAGnKxBgBqg718.jpg

四、开始说创建LV                     

[root@localhost ~]# lvcreate -L 3G -n testlv testvg #在testvg上创建一个大小为3GB名称为testlv的逻辑卷
  Logical volume "testlv" created

wKiom1PLqQ7SxOYFAAC2J83w9tM322.jpg

这时候我就可以看到相对于的设备文件了 

wKioL1PLq5qQP6oxAAFFrxhfNtE238.jpg


这时候我们对待/dev/testvg/testlv逻辑分区就如同对待普通分区一样了 首先去格式化它

[root@localhost ~]# mke2fs -t ext4 /dev/testvg/testlv
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
196608 inodes, 786432 blocks
39321 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=805306368
24 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

格式化完了 肯定是挂载了  我们来试试

wKiom1PLq7fRQrQgAAFRZe2cyxA915.jpg


五、LV扩展                            

wKioL1PLsFGQ3IC9AAOIq_bxlxQ004.jpg


wKioL1PLs5PAtBREAAX3EX-YE_I850.jpg


wKioL1PLtX2TTnN9AAOzbRuSYzA616.jpg

六、lv分区的缩减(此操作需要慎重考虑)

wKioL1PLu7CTAQdeAAS9gIW7Zfk152.jpg


wKiom1PLux2ThJMHAAGR6BYnfKY582.jpg


七、lv快照创建(个人感觉用于备份超级好)

创建快照之前需要保证当前lv没有写操作,如果有需要结束进程或等待进程结束

lvcreate -L 1G -n testlv_snap -p r -s /dev/testvg/testlv
#命令解释:创建一个名称为testlv_snap 对testlv镜像做快照的卷 其大小为1G
#(注:这里的快照卷大小必须大于lv卷已用空间大小)




lv逻辑分区大致流程


wKioL1PLtv-ii8wCAAJgmRNC2Kc195.jpg


你可能感兴趣的:(linux,lvm)