走进Linux_Linux磁盘与文件系统管理

引:系统管理员最重要的任务之一就是管理好自己的磁盘文件系统,所以本文的知识对于那些需要规划自己磁盘文件系统的人群特别重要,有些内容可能不太详细,所以日后自己亲身实践过后,希望能再开一篇详细的文章。

认识文件系统

Linux最传统的磁盘文件系统使用的是EXT2(索引式文件系统)。所以要了解文件系统就得要又认识EXT2开始。

在Linux中,需要记录文件权限与文件属性,所以文件系统通常会将这两部分的数据分别存放在不同的块,权限和属性放置到inode中,至于实际数据则放置到data block块中,另外还有一个超级块(superblock)会记录整体文件系统的整体信息。
每个inode,block都有编号,下面简略说明上面三个数据的意义:

  1. super block:记录此文件系统的整体信息,包括inode/block的总量、使用量、以及文件系统的格式与相关信息。
  2. inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码。
  3. block:实际记录文件的内容,若文件太大时,会占用多个block。

Linux的Ext2文件系统

  1. Ext2文件系统主要有boot sector,superblock,inode bitmap,block bitmap,inode table,data block六大部分。
  2. data block是用来放置文件内容数据的地方,在Ext2文件系统中所支持的block大小有1KB、2KB及4KB三种。
  3. inode记录文件的属性/权限等数据,每个inode大小均固定为128bytes;每个文件都仅占有一个inode而已;因此文件系统能够新建的文件数量,与inode数量有关。
  4. 文件的block记录文件的实际数据,目录的block则记录该目录下面文件名与其inode号码的对照表。
  5. 日志文件系统会多出一块记录区,随时记载文件系统的主要活动,可加快恢复时间。
  6. Linux文件系统为增加其性能,会让主存储器作为大量的磁盘高速缓存。

文件系统的简单操作

磁盘与目录的容量:df,du

  1. df:列出文件系统的整体磁盘使用量

    在执行df命令之后,会出现如下信息:

    1
    2
    3
    4
    5
    6
    7
    文件系统          1K-块    已用     可用 已用% 挂载点
    /dev/vda1 51474044 6759800 42092876 14% /
    devtmpfs 932632 0 932632 0% /dev
    tmpfs 941920 24 941896 1% /dev/shm
    tmpfs 941920 316 941604 1% /run
    tmpfs 941920 0 941920 0% /sys/fs/cgroup
    tmpfs 188388 0 188388 0% /run/user/0
  2. du:评估文件系统的磁盘使用量(常用于评估目录所占容量)

    可以看看下面的案例:

    1
    2
    3
    4
    5
    6
    // 1. 列出目前目录下的所有文件容量
    du
    // 2. 同范例一,但是将文件的容量也列出来
    du -a
    // 3. 检查根目录下面每个目录所占用的容量
    du -sm /*

连接文件

  1. hard link (硬连接或实际连接)

    hard link只是在某个目录下新建一条文件名连接到某inode号码的管理记录。它的命令如下:

    ln

    hard link是有如下限制的:

    • 不能跨文件系统
    • 不能连接到目录
  2. symbolic link (符号连接,也即是快捷方式)

    symbolic link就是在创建一个独立的文件,而这个文件会让数据的读取指向它连接的按个文件的文件名。它的命令如下:

    ls -s

    symbolic link与Windows的快捷方式可以画上等号,如果原文件被删除了,那symbolic link也就不能用了。

磁盘的分区、格式化、校验与挂载

对于一个系统管理者(root)而言,磁盘的管理是相对重要的一环,如果我们想要在系统里面新增一块硬盘,应该有哪些动作需要做?

  1. 对磁盘进行分区,以新建可用的分区
  2. 对该分区进行格式化,以创建系统可用的文件系统
  3. 若想要仔细一点,则可对刚才新建好的文件系统进行校验
  4. 在Linux系统上,需要创建挂载点(也即是目录),并将它挂载上来

磁盘分区:fdisk

输入如下命令,进入磁盘分区操作:

fdisk /dev/hdc(磁盘名)

接下来就是按照提示新增或者删除分区了。

磁盘格式化:mkfs

分区完毕之后就要进行格式化,格式化非常简单,使用mkfs(make file system)即可。命令如下:

mkfs [-t 文件系统格式] 磁盘设备的文件名

-t后的文件系统格式就是让你指定将文件系统格式化成哪种文件系统。如ext2、ext3、vfat等。

磁盘检验:fsck

当系统运行出现问题导致文件系统发生错乱,此时就需要磁盘的检验。命令如下:

fsck [-t 文件系统] [-ACay] 设备名称

通常只有root用户,而且在文件系统有问题的时候才能进行这个操作,因为在正常情况下使用这个命令会对系统伤害很大。 此外,fsck在扫描的时候,有问题的数据会被放在lost+found这个文件夹中。所以正常情况下这个文件夹中是不应该有数据的。

磁盘挂载与卸载:mount,umount

在挂载前需要确定下面几件事:

  1. 单一文件系统不应该被重复挂载在不同的挂载点(目录)中
  2. 单一目录不应该重复挂载多个文件系统
  3. 作为挂载带你的目录理论上应该都是空目录

具体命令如下

  • 挂载:

    mount [-t 文件系统] [-L 文件系统的卷标名称] [-o 额外选项] [-n] 设备文件名 挂载点

  • 卸载

    umount [-fn] 设备文件名或挂载点

参考

  1. 《鸟哥的Linux私房菜》