写在前面
最近开始Linux的培训,强度很大。虽然个人认为对Linux比较熟悉,但是对于系统的培训来说,对很多的知识点掌握的还是不够,希望借写BLOG的机会,能把自己学到的东西好好整理一下。
本部分是第一个重点内容:Linux Logical Volume Manager
基本概念
个人认为LVM是建立在硬盘和分区之上的一个逻辑层,可以用下面的图来理解:
![LVM.png](http://static.oschina.net/uploads/img/201211/11234826_AkJ0.png)
![LVMCreateSteps.png](https://i-blog.csdnimg.cn/blog_migrate/da687b67a32a019498ae2b36d99f7464.png)
下面详细介绍每一步的操作。
![屏幕快照 2012-11-14 下午9.55.32.png](https://i-blog.csdnimg.cn/blog_migrate/267fd23741ed380df048250b4f2aea2f.png)
[root@localhost ~]# pvdisplay /dev/sda2
--- Physical volume ---
PV Name /dev/sda2
VG Name VolGroup
PV Size 19.51 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4994
Free PE 0
Allocated PE 4994
PV UUID W1MfcE-0e6m-NZ79-YPRq-ZnTE-3169-6Hre0T
[root@localhost ~]#
[root@localhost ~]# lvscan
ACTIVE '/dev/VolGroup/lv_root' [17.54 GiB] inherit
ACTIVE '/dev/VolGroup/lv_swap' [1.97 GiB] inherit
[root@localhost ~]#
![屏幕快照 2012-11-14 下午10.19.28.png](https://i-blog.csdnimg.cn/blog_migrate/5265c72116a720fb97f70e1f9e199fb4.png)
/boot 使用了UUID标识的一个东西(如果再追究会发现,这个UUID其实就是/dev/sda1这个分区了)
也就是说,现在系统中的 / 和 swap 都可以根据需要动态的调整大小,而 /boot 则不能。
部署实例1 -- 建立物理卷和卷组
需求:
最后一个属于卷组VolGroup_log.
解决方案:
# partx -a /dev/sdb
![屏幕快照 2012-11-14 下午10.43.28.png](https://i-blog.csdnimg.cn/blog_migrate/ce7893410d41fe5b566936b5f0f3745f.png)
2.物理卷的创建(pvcreate)
[root@localhost ~]# pvcreate /dev/sdb{1,2,3}
Writing physical volume data to disk "/dev/sdb1"
Physical volume "/dev/sdb1" successfully created
Writing physical volume data to disk "/dev/sdb2"
Physical volume "/dev/sdb2" successfully created
Writing physical volume data to disk "/dev/sdb3"
Physical volume "/dev/sdb3" successfully created
[root@localhost ~]#
[root@localhost ~]# pvscan
PV /dev/sda2 VG VolGroup lvm2 [19.51 GiB / 0 free]
PV /dev/sdb1 lvm2 [512.00 MiB]
PV /dev/sdb2 lvm2 [1.00 GiB]
PV /dev/sdb3 lvm2 [511.00 MiB]
Total: 4 [21.51 GiB] / in use: 1 [19.51 GiB] / in no VG: 3 [2.00 GiB]
[root@localhost ~]#
[root@localhost ~]# vgcreate VolGroup_data /dev/sdb1 /dev/sdb2
Volume group "VolGroup_data" successfully created
[root@localhost ~]# vgcreate VolGroup_log /dev/sdb3
Volume group "VolGroup_log" successfully created
[root@localhost ~]#
[root@localhost ~]# vgscan
Reading all physical volumes. This may take a while...
Found volume group "VolGroup_log" using metadata type lvm2
Found volume group "VolGroup_data" using metadata type lvm2
Found volume group "VolGroup" using metadata type lvm2
[root@localhost ~]#
[root@localhost ~]# pvscan
PV /dev/sdb3 VG VolGroup_log lvm2 [508.00 MiB / 508.00 MiB free]
PV /dev/sdb1 VG VolGroup_data lvm2 [508.00 MiB / 508.00 MiB free]
PV /dev/sdb2 VG VolGroup_data lvm2 [1020.00 MiB / 1020.00 MiB free]
PV /dev/sda2 VG VolGroup lvm2 [19.51 GiB / 0 free]
Total: 4 [21.50 GiB] / in use: 4 [21.50 GiB] / in no VG: 0 [0 ]
[root@localhost ~]#
需求:
在上面建立好的卷组
VolGroup_log 中建立一个逻辑分区lv_log,文件系统为Ext4,大小为300MB,挂载点为/da/log。
VolGroup_data中建立一个逻辑分区 lv_data,文件系统为Ext4,大小为1.2GB,挂载点为 /da/data。
解决方案:
1.建立逻辑分区(lvcreate -L 逻辑分区大小 -n 逻辑分区名 卷组名)
[root@localhost ~]# lvcreate -L 300M -n lv_log VolGroup_log
Logical volume "lv_log" created
[root@localhost ~]# lvcreate -L 1.2G -n lv_data VolGroup_data
Rounding up size to full physical extent 1.20 GiB
Logical volume "lv_data" created
[root@localhost ~]#
2.格式化分区(mkfs.ext4 /dev/卷组名/逻辑分区)
[root@localhost ~]# mkfs.ext4 /dev/VolGroup_log/lv_log
...
此处省略N个字...
...
[root@localhost ~]# mkfs.ext4 /dev/VolGroup_data/lv_data
...
此处省略M个字...
...
[root@localhost ~]#
3.挂载分区(mount /dev/卷组名/逻辑分区 挂载点)
[root@localhost ~]# mkdir -p /da/log /da/data
[root@localhost ~]# mount /dev/VolGroup_log/lv_log /da/log
[root@localhost ~]# mount /dev/VolGroup_data/lv_data /da/data
4.结果(mount)
用mount命令查看整个系统的挂载情况。[root@localhost ~]# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /media/psf type prl_fs (rw,nosuid,nodev,sync,_netdev,noatime,share,context="system_u:object_r:removable_t:s0")
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/mapper/VolGroup_log-lv_log on /da/log type ext4 (rw)
/dev/mapper/VolGroup_data-lv_data on /da/data type ext4 (rw)
[root@localhost ~]#
经过上面的步骤,整个系统磁盘存储结构如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/c993a20fae375a91f7a4d63815650b95.png)
部署实例3 -- 调整逻辑卷的容量
需求:经过一段时间的运行,发现 /da/log 的容量不足了,需要从原来的300MB扩充到500MB,
而 /da/data 的容量有浪费,需要从原来的1.2GB缩小到600MB。
并且,在分区容量调整的时候不能影响现在系统的运行。
解决方案:
1.增加逻辑卷的容量 -- 针对 /da / l o g (可以Online操作,不需要卸载逻辑卷)1.1 查看所属物理卷的总大小,确保卷组中有足够的空间(vgdisplay 卷组名)
[root@localhost ~]# vgdisplay VolGroup_log
--- Volume group ---
VG Name VolGroup_log
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
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 MiB PE Size 4.00 MiB
Total PE 127
Alloc PE / Size 75 / 300.00 MiB
Free PE / Size 52 / 208.00 MiB
VG UUID 4PCrgv-Xf2G-1lF3-g0Rc-aNHd-XmMw-8gtDRZ
[root@localhost ~]#
1.2 增加逻辑卷的大小(
lvextend -L 增加到的大小 逻辑卷)
[root@localhost ~]# lvextend -L 500M /dev/VolGroup_log/lv_log
Extending logical volume lv_log to 500.00 MiB
Logical volume lv_log successfully resized
[root@localhost ~]#
1.3 调整文件系统以启动新空间(
resize2fs 逻辑卷)
[root@localhost ~]# resize2fs /dev/mapper/VolGroup_log-lv_log
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/VolGroup_log-lv_log is mounted on /da/log;
on-line resizing requiredold desc_blocks = 2, new_desc_blocks = 2
Performing an on-line resize of /dev/mapper/VolGroup_log-lv_log to 512000 (1k) blocks.
The filesystem on /dev/mapper/VolGroup_log-lv_log is now 512000 blocks long.
[root@localhost ~]#
【注意】上面的命令中,使用了/dev/mapper下面的一个符号链接VolGroup_log-lv_log。 通过整个符号链接的名字,可以猜出其命名方式:卷组名-逻辑卷名。 当然,也可以使用真实的文件,在本例中,可以使用: /dev/VolGroup_log/lv_log
1.4 检查扩容结果(df -h 目录名)
[root@localhost ~]# df -h /da/log
文件系统 容量 已用 可用 已用%% 挂载点
/dev/mapper/VolGroup_log-lv_log 485M 11M 450M 3% /da/log
[root@localhost ~]#
2.减小逻辑卷的容量 -- 针对 /da/data (注意:此操作不能Online执行,必须先卸载逻辑卷)
2.1 查看已经使用的空间,以确保缩小后不会破坏现有的数据(df -h 目录名)
[root@localhost ~]# df -h /da/data
文件系统 容量 已用 可用 已用%% 挂载点
/dev/mapper/VolGroup_data-lv_data 1.2G 34M 1.1G 3% /da/data
[root@localhost ~]#
2.2 检查逻辑卷的状态(e2fsck -f 逻辑卷)
在检查之前,请确保逻辑卷不在挂载状态,或者卸载逻辑卷。否则,e2fsck会有如下的警告
[root@localhost ~]# e2fsck /dev/mapper/VolGroup_data-lv_data
e2fsck 1.41.12 (17-May-2010)/dev/mapper/VolGroup_data-lv_data 已挂载.
WARNING!!! The filesystem is mounted.
If you continue you ***WILL***cause ***SEVERE*** filesystem damage.
你真的想要要继续 (y/n)? n
检查被中止
[root@localhost ~]#
为了安全起见,建议先卸载逻辑卷:
[root@localhost ~]# umount /da/data
然后开始检查文件系统
[root@localhost ~]# e2fsck -f /dev/mapper/VolGroup_data-lv_data
e2fsck 1.41.12 (17-May-2010)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/mapper/VolGroup_data-lv_data: 11/78880 files (0.0% non-contiguous), 13616/315392 blocks[root@localhost ~]#
2.3 缩小文件系统以释放文件系统空间(resize2fs 逻辑卷 缩小后的大小)
[root@localhost ~]# resize2fs /dev/mapper/VolGroup_data-lv_data 600M
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/VolGroup_data-lv_data to 153600 (4k) blocks.
The filesystem on /dev/mapper/VolGroup_data-lv_data is now 153600 blocks long.
[root@localhost ~]#
2.4 缩小物理卷(lvreduce -L 缩小后的大小 逻辑卷)
[root@localhost ~]# lvreduce -L 600M /dev/mapper/VolGroup_data-lv_data
WARNING: Reducing active logical volume to 600.00 MiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_data? [y/n]: y
Reducing logical volume lv_data to 600.00 MiB
Logical volume lv_data successfully resized
[root@localhost ~]#
2.5 查看缩小后的结果
[root@localhost ~]# lvdisplay /dev/mapper/VolGroup_data-lv_data
--- Logical volume ---
LV Path /dev/VolGroup_data/lv_data
LV Name lv_data
VG Name VolGroup_data
LV UUID LZEvpU-ZrM7-Ynua-0fRx-GvVB-o6Fs-RhoKXK
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2012-11-18 22:19:55 +0800
LV Status available
# open 0
LV Size 600.00 MiB
Current LE 150
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:3
挂载缩小后的逻辑卷,开始使用:
[root@localhost ~]# mount /dev/mapper/VolGroup_data-lv_data /da/data
3.最终结果
结果上面的步骤之后,整个系统的磁盘存储结构如下:
![](https://i-blog.csdnimg.cn/blog_migrate/91bfc22dde264dc43b12e87f81b6e9fe.png)
(完)