a616652325 发表于 2018-5-22 07:04:28

Linux LVM 总结

  LVM全称是Logical Volume Manager. 它主要是实现硬盘容量的动态扩展. 一般用于存储数据量无法预估的场景, 例如Linux的根目录用lvm存储.
  

  LVM创建过程一般是这样的

  1. 硬盘先分区: 一般是一个硬盘一个分区, 或者是多个分区在一个硬盘
  命令: fdisk
  2. PV(Physcial Volumes)划分, 可以把几个硬盘分区化成PV
  命令: pvcreate, pvs, pvdisplay, pvremove, pvmove, pvscan

  3. VG(Volume Group), 把几个或所有PV划分成可用空间, 有就是一定大小的块, 块的大小可以自己定义, 默认是4M
  命令:vgcreate, vgs, vgdisplay, vgreduce, vgextend, vgscan

  4. LV(Logical Volumes), 逻辑卷划分, 将vg划分成大小不超过vg总量的lv
  命令: lvcreate, lvs, lvdisplay, lvremove, lvreduce, lvextend, lvscan

  5. 格式化磁盘
  命令: mke2fs

  6. 挂载
  命令: mount


  实例分别为2G, 3G, 4G的硬盘, 全部划分成pv, 其中的5G划分成lv, 并格式化成ext4.

  1. 三块硬盘分别分成3个区
# 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').
Command (m for help): p
Disk /dev/sdb: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 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: 0x289452a0
   Device Boot      Start         End      Blocks   IdSystem
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-6527, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-6527, default 6527): +2G
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (263-6527, default 263):
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (263-6527, default 6527): +3G
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (656-6527, default 656):
Using default value 656
Last cylinder, +cylinders or +size{K,M,G} (656-6527, default 6527): +4G
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# fdisk -l /dev/sdb
Disk /dev/sdb: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 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: 0x289452a0
   Device Boot      Start         End      Blocks   IdSystem
/dev/sdb1               1         262   2104483+83Linux
/dev/sdb2             263         655   3156772+83Linux
/dev/sdb3             656      1178   4200997+83Linux  

  2. 三个分区全部转换成pv
# pvcreate /dev/sdb{1,2,3}
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdb2" successfully created
Physical volume "/dev/sdb3" successfully created
# pvs
PV         VG      FmtAttr PSizePFree
/dev/sda2vg_centos lvm2 a--49.51g    0
/dev/sdb1            lvm2 ---   2.01g 2.01g
/dev/sdb2            lvm2 ---   3.01g 3.01g
/dev/sdb3            lvm2 ---   4.01g 4.01g  3. pv转换成vg并且取名testvg
# vg testvg /dev/sdb{1,2,3}
-bash: vg: command not found
# vgcreate testvg /dev/sdb{1,2,3}
Volume group "testvg" successfully created
# vgs
VG      #PV #LV #SN Attr   VSizeVFree
testvg      3   0   0 wz--n-9.02g 9.02g
vg_centos   1   2   0 wz--n- 49.51g    0  4. 划分成5G lv并且取名testlv
# lvcreate testvg -L 5G -n testlv
Logical volume "testlv" created
# lvs
LV      VG      Attr       LSizePool Origin Data%Meta%Move Log Cpy%Sync Convert
testlvtestvg    -wi-a-----5.00g                                                   
lv_root vg_centos -wi-ao---- 47.57g                                                   
lv_swap vg_centos -wi-ao----1.94g  

  5. 格式化新建的testlv为ext4
# 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
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 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
Writing inode tables: done                           
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first.Use tune2fs -c or -i to override.  

  6. 加载新建的lv并确定4G
# mount /dev/testvg/testlv /data
# df -lh
Filesystem            SizeUsed Avail Use% Mounted on
/dev/mapper/vg_centos-lv_root
                     47G4.7G   40G11% /
tmpfs               495M   72K495M   1% /dev/shm
/dev/sda1             477M   29M424M   7% /boot
/dev/mapper/testvg-testlv
                      4.8G   10M4.6G   1% /data  

  需要几点
  1. 扩展物理边界可以直接加硬盘,pvcreate, vgextend, lvextend
# lvextend -L 6G testlv
Path required for Logical Volume "testlv"
Please provide a volume group name
Run `lvextend --help' for more information.
# lvextend -L 6G /dev/testvg/testlv
Size of logical volume testvg/testlv changed from 5.00 GiB (1280 extents) to 6.00 GiB (1536 extents).
Logical volume testlv successfully resized  2.缩减硬盘, 要先离线, 强制检测, 缩减逻辑空间, vgreduce
# e2fsck -f /dev/testvg/testlv
e2fsck 1.41.12 (17-May-2010)
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/testvg/testlv: 12/327680 files (0.0% non-contiguous), 55950/1310720 blocks
# resize2fs /dev/testvg/testlv 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/testvg/testlv to 786432 (4k) blocks.
The filesystem on /dev/testvg/testlv is now 786432 blocks long.
# lvreduce testlv -L 3G
Path required for Logical Volume "testlv"
Please provide a volume group name
Run `lvreduce --help' for more information.
# lvreduce -L 3G /dev/testvg/testlv
WARNING: Reducing active logical volume to 3.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce testlv? : y
Size of logical volume testvg/testlv changed from 6.00 GiB (1536 extents) to 3.00 GiB (768 extents).
Logical volume testlv successfully resized
# df -lh
Filesystem            SizeUsed Avail Use% Mounted on
/dev/mapper/vg_centos-lv_root
                     47G4.7G   40G11% /
tmpfs               495M   72K495M   1% /dev/shm
/dev/sda1             477M   29M424M   7% /boot
#用pedisplay查出内个硬盘的快是free的
# pvdisplay
--- Physical volume ---
PV Name               /dev/sdb1
VG Name               testvg
PV Size               2.01 GiB / not usable 3.16 MiB
Allocatable         yes
PE Size               4.00 MiB
Total PE            513
Free PE               513
Allocated PE          0
PV UUID               QsN7uK-DTsA-IVdF-2TFY-jjcs-dN4E-UPa9XP
--- Physical volume ---
PV Name               /dev/sdb3
VG Name               testvg
PV Size               4.01 GiB / not usable 2.54 MiB
Allocatable         yes
PE Size               4.00 MiB
Total PE            1025
Free PE               257
Allocated PE          768
PV UUID               2XqZ73-EBnb-yJF9-mIQQ-8VRg-46h3-T1fwLW
--- Physical volume ---
PV Name               /dev/sdb2
VG Name               testvg
PV Size               3.01 GiB / not usable 2.79 MiB
Allocatable         yes
PE Size               4.00 MiB
Total PE            770
Free PE               770
Allocated PE          0
PV UUID               BRUkrH-rSgS-a3VD-2KRC-yxHV-Cd76-eI6MX4
--- Physical volume ---
PV Name               /dev/sda2
VG Name               vg_centos
PV Size               49.51 GiB / not usable 3.00 MiB
Allocatable         yes (but full)
PE Size               4.00 MiB
Total PE            12674
Free PE               0
Allocated PE          12674
PV UUID               CbCr1K-jw10-L3fC-Bsxm-Owql-zxQd-60cNab
#从vg移除硬盘, 不能直接reduce vg先用用pe移除硬盘块数据
# vgreduce testvg /dev/sdb1
    Physical volume "/dev/sdb3" still in use
# pvmove /dev/sdb1
No data to move for testvg
# pvmove /dev/sdb2
/dev/sdb2: Moved: 0.5%
/dev/sdb2: Moved: 25.5%
/dev/sdb2: Moved: 51.0%
/dev/sdb2: Moved: 77.0%
/dev/sdb2: Moved: 100.0%
再reduce
# vgreduce testvg /dev/sdb1
Removed "/dev/sdb1" from volume group "testvg"
# vgreduce testvg /dev/sdb2
Removed "/dev/sdb2" from volume group "testvg"
# vgreduce testvg /dev/sdb3  

  3. lv的正式设备文件是在/dev/dm-*, 有两个符号连接文件指向这个文件/dev/vg名字/lv名字 和/dev/mapper/vg名字-lv名字
# ll /dev/testvg/testlv
lrwxrwxrwx. 1 root root 7 Sep 23 11:12 /dev/testvg/testlv -> ../dm-2
# ll /dev/mapper/testvg-testlv
lrwxrwxrwx. 1 root root 7 Sep 23 11:12 /dev/mapper/testvg-testlv -> ../dm-2  

  补充:snapshot
  snapshot就是快照的意思, 它是实现来相同逻辑卷上的"备份"功能, 需要注意的是, snapshot不能取代一般意义上的备份.
  快照的创建方式和创建lv一样, 只是要添加-s来指定快照卷.
  接着上面的立即来创建个128M快照卷, 并且挂载到/snap
# lvcreate -L 128M -s -n lvsnap /dev/testvg/testlv
Logical volume "lvsnap" created
# mount /dev/testvg/lvsnap /snap  注意: 创在快照卷的时候, 最好停止在lv上的所有操作, 以免数据混乱
  

  
页: [1]
查看完整版本: Linux LVM 总结