写在前面
最近开始Linux的培训,强度很大。虽然个人认为对Linux比较熟悉,但是对于系统的培训来说,对很多的知识点掌握的还是不够,希望借写BLOG的机会,能把自己学到的东西好好整理一下。
本部分是第一个重点内容:Linux Logical Volume Manager
基本概念
个人认为LVM是建立在硬盘和分区之上的一个逻辑层,可以用下面的图来理解:
下面详细介绍每一步的操作。
[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 ~]#
/boot 使用了UUID标识的一个东西(如果再追究会发现,这个UUID其实就是/dev/sda1这个分区了)
也就是说,现在系统中的 / 和 swap 都可以根据需要动态的调整大小,而 /boot 则不能。
部署实例1 -- 建立物理卷和卷组
需求:
最后一个属于卷组VolGroup_log.
解决方案:
# partx -a /dev/sdb
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 ~]#经过上面的步骤,整个系统磁盘存储结构如下图所示:
部署实例3 -- 调整逻辑卷的容量
需求:
解决方案:
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/data3.最终结果