Linux 磁盘管理

内容来自实验楼

查看设备信息
系统信息

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
设备信息

lspci 命令可以查看可以 pci 设备信息。

首先,我们需要安装 pciutils 工具。

$ sudo apt-get install pciutils
系统模块

Linux lsmod 命令用于显示已载入系统的模块的信息,即 list modules

分区
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 参数,使用我们熟悉的 GBMB 单位显示使用情况,而不是多少

这里我们看到了一些其它的信息,下面进行简单描述。

首先是如下所示的 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 代表的是设备类型,例如我们使用的 sdahdas 代表 SATA 硬盘设备,h 代表 IDE 设备等。d 代表的是 disk 磁盘或者说硬盘。vda 则代表的是第一块硬盘,类似的还有 vdbvdc 等。

文件系统        1K-块      已用     可用   已用% 挂载点
/dev/vda1      41151808 3388000 35650380    9% /

而对于完整的 /dev/vda1,这里的 1 代表的是一个分区。而分区则是将一个硬盘划分为已知大小的独立的块。

分区

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

还有一种 GPT 的分区方式,可以创建多个分区,没有分区限制,解决了传统分区方式 MBR 的很多缺点。但是使用该方式会有很多限制,所以这里我们依旧学习 MBR 分区机制,这对于熟悉分区的流程来说已经足够。

Linux 中使用 fdisk 工具对磁盘进行分区。

实验环境中,已经有一块新添加的磁盘 vdb.

使用如下命令,进入 /dev/vdb 的设备操作页面

$ sudo fdisk /dev/vdb
  • 输入 m ,我们可以查看各个命令的作用。
  • p 命令打印分区表
  • 使用 n 命令创建分区时,会提示选择创建主分区还是扩展分区,默认为 p 即,创建主分区,并且还需选择分区号
创建文件系统

在进行分区操作之后,此时,我们只是创建了一个分区,即在 /dev 目录下,会有一个 /dev/vdb1 的文件。接下来我们需要给分区创建对应的文件系统。

Linux mkfs 命令用于在特定的分区上建立 Linux 文件系统。

例如,我们在终端里输入 mkfs ,然后使用 tab 自动补全,会有对应的提示信息,如下图:

除了可以通过 -t 参数指定文件系统类型,还可以通过点号(.)的扩展命令方式来达到对应的效果。我们将 /dev/vdb1 的分区格式化为 ext4 文件系统。

$ sudo mkfs.ext4 /dev/vdb1
挂载

在上面的内容我们讲到过, df 命令查看的是已挂载的文件系统的使用情况,所以在创建分区,并格式化为 ext4 文件系统后,我们还需要将其挂载起来。

mount 命令也可以列出已经挂载的文件系统

除此之外,对于 mount 命令来说,mount 更多的还是用于挂载设备,即挂载设备上的文件系统。mount 挂载的格式如下

$ mount [-t 文件系统类型]  待挂载项  挂载位置

-t 文件系统类型:加入文件系统类型来指定挂载的文件系统类型。

这里,我们将在 /home/shiyanlou 目录下创建一个 test1 目录,作为 /dev/vdb1 的挂载位置。

$ mkdir test1

$ sudo mount /dev/vdb1 test1

此时,对 test1 的数据,都会被放进 /dev/vdb1 的分区里了。

但是对于当前挂载的 /dev/vdb1 而言,在下一次重新启动系统后,分区不会消失,但是并不会默认的将其挂载到 test1 中,即 mount 命令只是临时挂载。而对于希望能够在重启系统之后,能够自动挂载,这里我们需要配置 /etc/fstab 文件。

这里贴出一个本地环境下的 /etc/fstab 文件的内容,为了更加直观,调整了一下格式。

1 # /etc/fstab: static file system information.                                     2 #                                                                                 3 # Use 'blkid' to print the universally unique identifier for a                   4 # device; this may be used with UUID= as a more robust way to name devices       5 # that works even if disks are added and removed. See fstab(5).                   6 #                                                                                 7 # <file system> <mount point>   <type>  <options>       <dump>  <pass>           8 UUID=5ba34c3d-bd14-451d-a7d8-09a64009e3f1       /               ext4    errors=remount-ro 0       1  
  • filesystem :即对应设备
  • mount point :挂载点
  • options :配置
  • dump :备份,在下一节内容中将会讲述
  • pass num :一般根目录对应的设为 0

对应上图中,这里的 /dev/vdb1/etc/fstab 的配置信息我们可以写为:

/dev/vdb1    /home/shiyanlou/test1    ext4    defaults    0    2

关于详细的/etc/fstab 的介绍可以参考 ubuntu 的官方页面

lvm

逻辑卷管理(logical volume manager),缩写为 (lvm)。lvm 是 Linux 环境下对磁盘分区进行管理的一种机制。

概述

引用自百度百科的定义。

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

下面我们简单描述 lvm 的一些概念:

  • PV 物理卷(Physical Volume),物理卷处于 lvm 的最底层,是 lvm 的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与 LVM 相关的管理参数。
  • VG 卷组(Volume Group),卷组一般由一个或多个物理卷组成,在卷组创建之后,可以扩展卷组空间
  • LV 逻辑卷,逻辑卷建立在卷组之上。在逻辑卷上可以建立文件系统。逻辑卷也可以动态地调整空间。
  • PE 物理区域,对于物理卷来说,由 PE 组成。PE 的大小还可以在创建物理卷的时候指定。默认的大小为 4MB
  • LE 逻辑区域,不同于 PE,逻辑区域是给逻辑卷中可用于分配的最小单元,与 PE 对应,一般 LE 的大小为 PE 的倍数,默认为 (1 : 1)

最后,我们需要在实验环境中安装 lvm ,使用如下命令:

$ sudo apt-get install lvm2
交换分区

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