Linux 磁盘管理
1. 实验介绍
1.1 实验内容
在本节内容中,我们将会介绍一些查看设备信息的命令,以及 ubuntu 中对磁盘进行分区的一些相关知识。
注意:在本节内容中,限于实验环境的限制,对于很多的内容无法在实验楼的环境中进行完整的操作和演示,希望大家能够在本地的 Linux 中进行磁盘和 LVM 卷的实验测试。
1.2 实验知识点
- 查看设备信息
- 磁盘分区
- 建立文件系统
- 逻辑卷
- 交换分区
- Raid
2. 查看设备的信息
2.1 系统信息
Linux uname 命令可以打印正在运行的操作系统的一些信息。
常见的参数有:
- -a or —all:显示全部的信息
- -m:显示硬件类型
- -n:显示网络节点的主机名
- -o:显示操作系统的名称
- -s:默认选项,打印内核名称
- -r:打印内核版本
简单示例,查看全部信息:
$ uname -a
Linux 017103e87a5a 3.13.0-30-generic #55-Ubuntu SMP Fri Jul 4 21:40:53 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
2.1 设备信息
lspci 命令可以查看可以 pci 设备信息
首先,我们需要安装 pciutils 工具
$ sudo apt-get install pciutils
然后再通过它来查看一些硬件的信息:
$ lspci
2.2 系统模块
Linux lsmod 命令用于显示已载入系统的模块的信息,即 list modules。
吐下为使用 lsmod 命令得到的部分内容:
3. 分区
通过之前的学习我们可以知道,Linux 中一切都是文件,对于在本节内容中将会学习到的磁盘设备也是如此。
3.1 df
对 Linux 系统有过一些了解的同学可能会使用过 df 命令。在 GNU 的官方文档中对于 df 命令的定义是 报告文件系统磁盘空间的使用情况。首先我们先来使用一下 df 命令:
$ df
文件系统 1K-块 已用 可用 已用% 挂载点
udev 1011464 4 1011460 1% /dev
tmpfs 204840 356 204484 1% /run
/dev/vda1 41151808 3388000 35650380 9% /
none 4 0 4 0% /sys/fs/cgroup
none 5120 0 5120 0% /run/lock
none 1024196 72 1024124 1% /run/shm
none 102400 8 102392 1% /run/user
上述信息显示的是当前被挂载的文件系统的使用情况,常用的有 -h 参数,使用我们熟悉的 GB 和 MB 单位显示使用情况,而不是多少 块。
这里我们看到了一些其他的信息,下面进行简单描述。
首先是如下所示的 udev,我们可以看到该挂载点是 /dev。即我们存放设备文件的目录,这里只需要知道 udev 是 Linux 提供的一种用来管理设备的机制。
文件系统 1K-块 已用 可用 已用% 挂载点
udev 1011464 4 1011460 1% /dev
其次是下面列出的挂载点为 /run 的内容,tmpfs 的意思代表的是 临时文件系统。而这里的 /run,其实与 /var/run 目录下的文件是一致的,我们可以查看对应目录下的文件来确认,而 /var/run 目录下则是系统运行时的一些变量数据。
文件系统 1K-块 已用 可用 已用% 挂载点
tmpfs 204840 356 204484 1% /run
none 5120 0 5120 0% /run/lock
none 1024196 72 1024124 1% /run/shm
none 102400 8 102392 1% /run/user
最后是这里我们会这种描述的 /dev/vda1。这里的 v 代表的是设备类型,例如我们使用的 sda,hda,s 代表 SATA 硬盘设备,h 代表 IDE 设备等。d 代表的是 disk 磁盘或者说硬盘。vda 则代表的是第一块硬盘,类似的还有 vdb,vdc 等。
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/vda1 41151808 3388000 35650380 9% /
而对于完整的 /dev/vda1,这里的 1 代表的是一个分区。而分区则是将一个硬盘划分为已知大小的独立的块。
3.2 分区
硬盘分区的类型一般分为主分区,扩展分区,逻辑分区。这里属于 MBR 的分区方式。因为 MBR 最多只支持 4 个主分区,而对于想创建更多的分区,则必须创建一个扩展分区,再在扩展分区中创建逻辑分区。而扩展分区和主分区的数目加起来不能超过四个。
还有一种 GPT 的分区方式,可以创建多个分区,没有分区限制,解决了传统分区方式 MBR 的很多缺点。但是使用该方式会有很多限制,所以这里我们依旧学习 MBR 分区机制,这对于熟悉分区的流程来说已经足够。
因为在实验环境中,只有一个硬盘,在下面的演示过程中,我们新挂载了一个磁盘,将使用 MBR 方式对这一块磁盘进行操作演示。
下列实验操作因环境限制,建议大家在本地使用虚拟机操作
此时,在我们的实验环境中,已经有一块新添加的磁盘 vdb。
在下面的内容中,我们将介绍,Linux 中使用 fdisk 工具对磁盘进行分区。
使用如下命令,进入 /dev/vdb 的设备操作界面
$ sudo fdisk /dev/vdb
接着我们输入 m,如下所示,我们可以查看各个命令的作用。如下所示:
例如,此时,我们使用 p 命令打印分区表,但是在 /dev/vdb 中并未创建分区,所以为空。
接着,我们使用 n 命令创建分区时,会提示选择创建主分区还是扩展分区,默认为 p 即,创建主分区,并且还需选择分区号:
最终,我们可以通过 p 命令查看分区表
3.3 创建文件系统
在进行分区操作之后,此时,我们只是创建了一个分区,即在 /dev 目录下,会有一个 /dev/vdb1 的文件。接下来我们需要给分区创建对应的文件系统。
Linux mkfs 命令用于在特定的分区上建立 Linux 文件系统。
例如,我们在终端里输入 mkfs,然后使用 tab 自动补全,会有对应的提示信息,如下图:
如下图所示,我们除了可以通过 -t 参数指定文件系统类型,还可以通过点号(.)的扩展命令方式来达到对应的效果。我们将 /dev/vdb1 的分区格式化为 ext4 文件系统。
$ sudo mkfs.ext4 /dev/vdb1
3.4 挂载
在上面的内容我们讲到过,对于 df 命令而言,查看的是已挂载的文件系统的使用情况。所以,在创建分区,并格式化为 ext4 文件系统后,我们还需要将其挂载起来。
而对于 Linux mount 命令来说,也可以列出已经挂载的文件系统,直接使用 mount 命令:
$ mount
除此之外,对于 mount 命令来说,mount 更多的还是用于挂载设备,即挂载设备上的文件系统。mount 挂载的格式如下
$ mount [-t 文件系统位置] 待挂载项 挂载位置
这里,我们将在 /home/shiyanlou 目录下创建一个 test1 目录,作为 /dev/vdb1 的挂载位置。
$ mkdir test1
$ sudo mount /dev/vdb1 test1
此时,对 test1 的数据,都会被放进 /dev/vdb1 的分区里了。
但是对于当前挂载的 /dev/vdb1 而言,在下一次重新启动系统后,分区不会消失,但是并不会默认的将其挂载到 test1 中,即 mount 命令只是临时挂载。而对于希望能够在重启系统之后,能够自动挂载,这里我们需要配置 /etc/fstab 文件。
鉴于实验环境中并没有需要自动挂载的内容,所以当前的 /etc/fstab 文件中并没有相关的信息。这里贴出一个本地环境下的 /etc/fstab 文件的内容,为了更加直观,调整了一下格式。
- filesystem:即对应设备
- mount point:挂载点
- options:配置
- dump:备份,在下一节内容中将会讲述
- pass num:一般根目录对应的设为 0
对应上图中,这里的 /dev/vdb1 在 /etc/fstab 的配置信息我们可以写为:
/dev/vdb1 /home/shiyanlou/test1 ext4 defaults 0 2
关于详细的 /etc/fstab 的介绍可以参考 ubuntu 的官方界面
4. lvm
逻辑卷管理(logical volume manager),缩写为(lvm)。lvm 是 Linux 环境下对磁盘分区进行管理的一种机制。
4.1 概述
引用自百度百科的定义。
Linux 用户安装 Linux 操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决方法,没有从根本上解决问题。随着 Linux 的逻辑卷管理功能的出现,这些问题都能迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。
下面我们简单描述 lvm 的一些概念:
- PV 物理卷(Physical Volume),物理卷处于 lvm 的最底层,是 lvm 的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与 LVM 相关的管理参数。
- VG 卷组(Volume Group),卷组一般由一个或多个物理卷组成,在卷组创建之后,可以扩展卷组空间
- LV 逻辑卷,逻辑卷建立在卷组之上。在逻辑卷上可以建立文件系统。逻辑卷也可以动态地调整空间。
- PE 物理区域,对于物理卷来说,由 PE 组成。PE 的大小还可以在创建物理卷的时候指定。默认的大小为 4MB
- LE 逻辑区域,不同于 PE,逻辑区域是给逻辑卷中可用于分配的最小单元,与 PE 对应,一般 LE 的大小为 LE 的倍数,默认为(1 : 1)
最后,我们需要在实验环境中安装 lvm,使用如下命令:
$ sudo apt-get install lvm2
4.2 物理卷
在下面的内容中,我们将简单演示 lvm 的使用过程。
首先是物理卷,在上面的描述中,我们提到过物理卷类似于磁盘分区,但却包含有 lvm 相关的管理参数。这里我们使用刚刚添加的新磁盘进行操作。卸载刚刚挂载的文件系统,并且删除 /dev/vdb 中的分区,即 /dev/vdb1。接着创建四个主分区。
$ sudo umount test1
$ fdisk /dev/vdb
如上图所示,此时,我们已经建立了四个分区,但是此时只是普通的分区,我们需要将其修改为 lvm 类型,在使用 sudo fdisk /dev/vdb 后,键入大写的 I 命令,可以查看如下图所示的系统 id 对应的分区的类型:
对于此时的四个分区,id 为 83,我们需要将其修改为 8e,即对应 Linux LVM,通过 fdisk 中的 t 命令实现修改
此时,再次查看分区表,就可以看到 ID 一栏的数据已经修改为 8e:
接下来我们需要在已经创建好的分区上传建物理卷,通过 pvcreate 命令
$ sudo pvcreate /dev/vdb1
$ sudo pvcreate /dev/vdb2
$ sudo pvcreate /dev/vdb3
$ sudo pvcreate /dev/vdb4
查看一个物理卷的信息,使用 pvdisplay 命令:
$ sudo pvdisplay /dev/vdb1
如果是需要对物理卷进行修改,则可以使用 pvchange 命令。
4.3 卷组
卷组需要在物理卷的基础上进行创建,使用 vgcreate 命令,例如我们使用物理卷 /dev/vdb1 和 /dev/vdb2 创建名为 vg1 的卷组。
$ sudo vgcreate vg1 /dev/vdb1 /dev/vdb2
同物理卷相关的命令类似,查看卷组信息的命令为 vgdisplay,修改卷组的命令为 vgchange。
如下所示,我们查看卷组 vg1 的信息,并将默认的 PE 大小为 4MB 修改为 8MB:
$ sudo vgdisplay vg1
$ sudo vgchange -s 8MB vg1
$ sudo vgdisplay vg1
此时,创建 vg1 卷组我们使用了物理卷 /dev/vdb1 和 /dev/vdb2,接下来我们使用 vgextend 扩展卷组 vg1。将剩余的两个物理卷添加到卷组中。
$ sudo vgextend vg1 /dev/vdb3 /dev/vdb4
4.4 逻辑卷
在创建卷组后,就可以从卷组中创建逻辑卷了,使用 lvcreate 命令。下面介绍一些相关的参数。
- -n:指定逻辑卷的名称
- -l:通过指定 PE 的数量指定逻辑卷的大小
- -L:直接指定逻辑卷的大小,单位有 bBsSkKmMgGtTpPeE 等
- -p:设置权限,可以设为 r 只读,或者 rw 读写
如下所示,创建两个卷组,一个使用 -l 参数,指定 100 个 PE,即 100*8=800MB 的容量,另一个通过 -L 参数,也制定为 800MB 大小,分别为 lv1 和 lv2。
$ sudo lvcreate -l 100 -n lv1 vg1
$ sudo lvcreate -L 800M -n lv2 vg1
查看逻辑卷则通过 lvdisplay 命令来实现,不同的是,这里查看的是卷组中的逻辑卷,所以需要制定卷组:
$ sudo lvdispaly vg1
创建了一个逻辑卷之后,接着就可以通过 mkfs 建立文件系统,像使用普通的磁盘分区一样使用逻辑卷。此处需要说明的是,对于 lv1 和 lv2 而言,设备文件在 /dev 目录下的对应的卷组的子目录中,即 /dev/vg1/,如下图:
最后我们给创建的逻辑卷建立操作系统,创建对应的目录并挂载:
建立 ext4 文件系统
$ sudo mkfs.ext4 /dev/vg1/lv1
建立逻辑卷 lv1 的挂载目录
$ sudo mkdir /home/shiyanlou/lv1
挂载 lv1
$ sudo mount /dev/vg1/lv1 /home/shiyanlou/lv1
5. 交换分区
交换分区(swap),SWAP 就是 LINUX 下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是 SWAP 分区)虚拟成内存来使用。
本部分内容,我们将继续使用 /dev/vdb 来演示。
首先,我们需要将刚刚挂载的逻辑卷删除,并且通过 fdisk 命令将 /dev/vdb 分区表的内容删除。
$ sudo lvremove /dev/vg1/lv1
$ sudo lvremove /dev/vg1/lv2
$ sudo vgremove vg1
上述内容不再给出截图,假设此处我们有一块新挂载的磁盘:
$ sudo fdisk /dev/vdb
通过之前的 I 命令,我们可以知道 Linux 交换分区 的 ID 为 82
因此,我们创建了一个 4G 大小的分区,并将其对应的 Id 改为 82,如下所示
接着使用 mkswap 设置交换分区:
$ sudo mkswap /dev/sda5
最后我们还需要使用 swapon 命令启动交换分区,对应的关闭命令为 swapoff。跟 mount 一样,swapon 也只是临时启动交换分区,如果需要在下一次重启之后,swap 会自动启用,需要配置 /etc/fstab 文件。
$ sudo swapon /dev/vdb1
如下,我们使用 top 命令查看启动的 swap 分区,关于具体的 top 命令所展示的信息在后面的内容中会涉及到。
$ top
6. 总结
在本节内容中,限于实验环境和篇幅的限制,对于很多内容都只是简单的描述,希望大家能够多花时间去学习更多的知识。