Merikanto

一簫一劍平生意,負盡狂名十五年

Linux Disk Management & LVM

今天来复习一下Linux的磁盘管理。注意此 Section 里, 所有命令都需要 sudo.

Linux中,一切皆文件



查看设备信息

uname 查看系统信息

  • -a: 全部Info

  • -m: 硬件类型

  • -n: 网络节点的主机名

  • -o: OS名称

  • -s: (Default) 内核名称

  • -r: 内核版本


lspci 查看设备信息(安装 pciutils


lsmod 查看系统模块 (list modules)



分区

硬盘分区:主分区,扩展分区,逻辑分区。这是属于 MBR (MasterBoot Record) 的分区方式。因为 MBR 最多只支持 4 个主分区,而对于想创建更多的分区,则必须创建一个扩展分区,再在扩展分区中创建逻辑分区。而扩展分区和主分区的数目加起来不能超过四个

还有一种 GPT 的分区方式,可以创建多个分区,没有分区限制,解决了传统分区方式 MBR 的很多缺点。但是使用该方式会有很多限制。


MBR 分区演示

假设新添加的磁盘是 vdb, 查看磁盘:

1
ls /dev | grep db

fdisk 对磁盘进行分区:

1
fdisk /dev/vdb			

输入 m获取帮助,使用 n 创建分区,用 mkfs 建立 Linux 文件系统。将此分区格式化为 ext4文件系统:

1
mkfs.ext4 /dev/vdb1

mount 临时挂载此文件系统,格式如下:

1
mount <-t 文件系统类型> <待挂载项>  <挂载位置>

在 Home 里创建 test 目录,作为挂载位置:

1
mount /dev/vdb1 test

对于当前挂载的 /dev/vdb1 而言,重启后分区不会消失,但并不会默认将其挂载到 test 中,即 mount 命令只是临时挂载。如果希望重启后能自动挂载,需要配置 /etc/fstab 文件,注意几个点:

  • Filesystem

  • Mount point

  • Options

  • Dump: 备份

  • Pass num:一般根目录设为 0

因此挂载的 /dev/vdb1fstab文件里可以写成:

1
/dev/vdb1    /home/test    ext4    defaults    0    2


LVM (Logical Volume Manager)

概述

LVM 是 Linux 管理磁盘分区的一种机制。


安装 Linux 操作系统时遇到的一个常见的难以决定的问题,就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。

随着 Linux 的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。下面介绍一下 LVM 相关概念:

  • PV(Physical Volume),物理卷处于 lvm 的最底层,是 lvm 的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与 LVM 相关的管理参数

  • VG(Volume Group),卷组一般由一个或多个物理卷组成,在卷组创建之后,可以扩展卷组空间

  • LV(Logical Volume) ,逻辑卷建立在卷组之上。在逻辑卷上可以建立文件系统,逻辑卷也可以动态地调整空间

  • PE(Physical Extent) 物理卷由物理区域组成。PE 的大小还可以在创建物理卷的时候指定。默认大小为 4MB

  • LE(Logical Extent) 逻辑区域是给逻辑卷中可用于分配的最小单元,一般 LE 的大小为 PE 的倍数,默认为 (1 : 1)

下面简单演示一下 LVM 的使用过程。


PV (Physical Volumn)

首先是 PVapt 安装 lvm2)。

物理卷类似于磁盘分区,但却包含有 lvm 相关的管理参数。这里我们使用刚刚添加的新磁盘进行操作。卸载刚刚挂载的文件系统,并且删除 /dev/vdb 中的分区,即 /dev/vdb1。

1
umount test

接着创建四个主分区:

1
fdisk /dev/vdb

此时,我们已经建立了四个分区,但是此时只是普通的分区,我们需要将其修改为 lvm 类型。 输入 I 查看系统 id 对应的分区类型。Linux LVM 对应的id是 8e,即把此四个分区 id 改为8e

接下来创建物理卷:

1
2
3
4
pvcreate /dev/vdb1
pvcreate /dev/vdb2
pvcreate /dev/vdb3
pvcreate /dev/vdb4

查看物理卷信息:

1
pvdisplay /dev/vdb1

如果要修改物理卷,则用 pvchange.


VG (Volume Group)

卷组需要在物理卷的基础上进行创建,使用 vgcreate 命令,例如我们使用物理卷 /dev/vdb1/dev/vdb2 创建 名为 vg1 的卷组:

1
vgcreate vg1 /dev/vdb1 /dev/vdb2

同物理卷相关的命令类似,查看卷组信息的命令为 vgdisplay,修改卷组的命令为 vgchange 。我们先查看卷组 vg1 的信息:

1
vgdisplay vg1

再将默认的 PE 大小 (4MB) 修改为 8MB:

1
vgchange -s 8MB vg1

接下来我们用 vgextend 扩展卷组 vg1 ,将剩余的两个物理卷添加到卷组中。

1
vgextend vg1 /dev/vdb3 /dev/vdb4

LV (Logical Volume)

在创建卷组后,就可以从卷组中创建逻辑卷了,使用 lvcreate 命令。相关参数如下:

  • -n : 指定逻辑卷的名称
  • -l : 通过指定 PE 的数量指定逻辑卷的大小
  • -L : 直接指定逻辑卷的大小,单位有 bBsSkKmMgGtTpPeE
  • -p : 设置权限,可以设为 r 只读,或者 rw 读写

创建两个卷组 lv1, lv2。 一个使用 -l 参数,指定 100 个 PE ,即 100*8=800MB 的容量 (前面修改 PE 大小为 8MB):

1
lvcreate -l 100 -n lv1 vg1

另一个通过 -L 参数,也指定为 800MB 大小:

1
lvcreate -L 800M -n lv2 vg1

查看逻辑卷则通过 lvdisplay 命令实现,不同的是,这里查看的是卷组中的逻辑卷,所以需要指定卷组:

1
lvdisplay vg1

创建 Lv 后,就可以通过 mkfs 建立文件系统,像使用普通的磁盘分区一样使用逻辑卷。此处需要说明的是,对于 lv1 和 lv2 而言,设备文件在 /dev 目录下的对应的卷组的子目录中,即 /dev/vg1/ 。可使用 ls查看:

1
ls /dev/vg1

最后给创建的逻辑卷建立操作系统,创建对应的目录并挂载


建立 ext4 文件系统:

1
mkfs.ext4 /dev/vg1/lv1

建立逻辑卷 lv1 的挂载目录:

1
mkdir /home/merikanto/lv1

挂载 lv1:

1
mount /dev/vg1/lv1 /home/merikanto/lv1 

SWAP

交换分区 SWAP 就是 Linux 下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间 (也就是 SWAP 分区) 虚拟成内存来使用

首先,我们需要将刚刚挂载的逻辑卷删除:

1
2
3
lvremove /dev/vg1/lv1
lvremove /dev/vg1/lv2
vgremove vg1

再通过 fdisk 命令将 /dev/vdb 分区表的内容删除:

1
fdisk /dev/vdb

通过下面指令创建 1G 的虚拟内存:

1
2
# if & of
dd if=/dev/zero of=/swap/swap bs=1024 count=1024000

创建交换文件:

1
mkswap /swap/swap

最后我们用 swapon 启动交换分区,对应的关闭命令为 swapoff:

1
swapon /swap/swap

之后用 top 命令查看启动的 swap 分区。

mount 一样,swapon 也只是临时启动交换分区,如果希望 swap 在下次重启后自动启动,需要配置 /etc/fstab 文件:

1
echo "/swap/swap swap swap defaults 0 0" >> /etc/fstab