本文旨在复习磁盘分区、创建文件系统、挂载以及链接文件的基本概念

知识储备


  • 硬盘出厂其实不能写入数据的,是"盲盘",需要处理后使用,格式化分为2种

    • 低格:将空白磁盘划分出柱面、磁道及若干个扇区,每个扇区又划分出标识部分ID、间隔区GAP和数据区DATA等。现在大多出厂已经完成低格,只需要用户磁盘分区即可。

    • 高格:真正意义上的创建文件系统,明确存储设备或分区上的文件方法和数据结构,即在存储设备上组织文件的方法。

    • 文件系统是用户存取磁盘文件操作的"代理人"

  • 不同类型的操作系统支持的文件系统有差异,Linux支持众多文件系统

  • 硬盘分区实质上是对硬盘的一种格式化[通常在低格后,高格前],然后才能使用硬盘保存各种信息。创建分区时,设置硬盘的各项物理参数,指定MBR存放位置和备份位置等信息。

磁盘分区


Linux上磁盘分区工具大致有fdsik、parted、sfdisk等,此处以最常用的fdisk为例

fdisk -l 查看当前系统分区

请注意Boot下的 * 表示该分区为系统Linux的引导分区

ID是分区的类型标识符,用来指明磁盘的具体用途,可以通过fdisk /dev/sda后使用l列出已知的类型标识

使用VMware添加一块20GB的磁盘,创建一个主分区[在Linux上该块磁盘识别为/dev/sdb


使用fdisk /dev/sdb进入对磁盘分区的交互式接口

创建主分区,编号为1,并保存分区情况[可以在交互式界面使用m获得命令帮助]

请注意:一定要使用w写入保存,否则不会有记录,可以通过交互式接口输入p打印查看分区情况

当分区创建完毕以后,我们需要确定内核是否已经识别新分区cat /proc/partitions

极个别情况下新分区不会被Kernel识别,这通常是由于你所创建的分区在之前已经被内核所挂载识别,这种情况下通常使用以下2个命令来强制刷新,让Kernel重读磁盘的分区表

       <1>    partx -a -f M:N DEVICE

       <2>    kpartx -af DEVICE

文件系统


每个磁盘分区的文件系统可以是独立的,这意味着文件系统建立在磁盘分区之上。在划分好磁盘分区后,我们可以创建文件系统,常见的创建文件系统工具如下

mkfs

通杀版,通过指定参数-t type能够创建各种文件系统,本质上是调用对应的文件系统创建工具罢了

mkfs -t type DEVICE = mkfs.type DEVICE

mke2fs ext系列文件系统专用管理工具
blkid DEVICE、LABEL、UUID、TYPE查看工具,简洁

mke2fs命令

1

2
3
4
5
6
7
8
9
10
11
12
13

Usage:

    mke2fs [OPTION]... DEVICE
OPTIONS:
    -t {ext2|ext3|ext4} 设置文件系统类型,可以实现无损转换
    -b {1024|2048|4096} 设置块大小,即1k 2k 4k对齐
    -L 'LABEL'  设置分区卷标
    -j          相当于启用mke2fs -t ext3
    -i #        指明多大空间为一个Inode,任何文件的唯一标识
    -N #        为磁盘分区保留多少个Inode
    -m #        预留磁盘空间占据多大百分比的空间为后期管理使用;
    -O FEATURE. 启用指定特性
    -O ^FEATURE 关闭此特性
查看有哪些特性,可以使用man tune2fs

:使用mke2fs创建一个文件系统ext4, 4K对齐,卷标为Lance


图中的红框可以看到,mke2fs默认会保留5%的分区空间,给后期管理使用!切记哦!

文件系统属性查看、调整、检测修复


创建了文件系统之后,Linux提供有很多的查看工具,调整工具[微调工具,并不是意味着所有的选项都已调整的]和检测修复工具,常见的工具如下表

Blkid

查看DEVICE、LABEL、UUID、TYPE查看工具,简洁明了

e2label

主要用于管理卷标

Tune2fs

显示ext系列文件系统 的属性,或者调整其属性,并不是每个属性都可以调整,比如块大小只有格式化可以调整,tune2fs不可以调整

Dume2fs

整个ext文件系统的布局结构、块组信息等等

-h :仅显示超级块信息

每个文件系统都有对应的文件系统检测修复工具,当文件系统发生意外、有数据未完成时,可以使用该工具来进行文件系统地检测和修复!
fsck 通杀版,指定-t type参数能够检测修复各种文件系统,本质是调用对应的文件系统检测修复工具而已       fsck -t type DEVICE = fsck.type DEVICE

e2fsck

ext系列文件系统专用检测修复工具

blkid能够很简洁直观地显示磁盘分区、DEVICE、UUID、TYPE以及LABEL

● Tune2fs 

1

2
3
4
5
6
7
8
9
10

Usage:

    tune2fs [OPTIONS]... DEVICE
    显示ext系列文件系统的属性,或调整其属性;
OPTIONS:
    -l  显示超级块中的信息;显示整个文件的属性及布局等相关信息;
    -L 'LABEL'  修改卷标;
    -m #        调整预留空间百分比,前例已说明默认是5%
    -j          调整ext2 --> ext3, 无损转换
    -O          文件系统属性开关 
    -o          文件系统默认挂载选项开关

:修改/dev/sdb1分区的卷标LABEL为NewLance

Fsck和e2fsck

1

2
3
4
5
6
7
8

Usage:

    fsck -t type [OPTIONS]... DEVICE
OPTIONS:
    -a: 自动修复错误
    -r: 交互式修复错误
    -f: 强制检测

e2fsck功能用法同fsck, 参数-y自动修复错误, -f强制执行检测修复

挂载基本概念


Linux启动后首先加载roofs根文件系统 /,其他文件系统需要建立起与/的路径关系,才能够被访问

将一个目录作为另一个文件系统的访问入口,叫做挂载,也就是建立路径关系,目录叫挂载点

挂载后,挂载点mount point原目录中的文件等暂时被隐藏,当卸载后重现

理论上挂载点可以是任何位置,FHS给我们的建议是挂载在/mnt目录下,当然随你咯,请不要随意挂载

常用挂载命令mount,卸载命令umount

挂载相关的配置文件


/etc/fstab:系统启动从fstab读取需要开机挂载的信息,是静态的,只有编辑才会变,能实现开机自动挂载;

/etc/mtab显示在用户控件中已经挂载的文件系统,通常包含fstab+用户手工mount/umount的修改,用户操作会同步更新到这个文件中

/proc/mounts这个文件在虚拟文件系统/proc中,是解决Kernel所引入的mount space机制产生的问题。本质上是链接文件。

参考博文http://blog.csdn.net/taiyang1987912/article/details/42492741

设备引用3种方法


无论哪种分区上的文件系统,最终还不是要交付给用户空间来使用吗?那么Linux如何使用指定的设备呢?通过这么几种主要的引用机制

wKioL1X20NrwHB39AAle2I0PGDM702.bmp

mount/umount命令


mount及常用选项

1

2
3
4
5
6
7
8
9
10

Usage:

    Mount [OPTIONS]... [-o options] DEVICE mount_point
OPTIONS:
    -t type  文件系统类型
    -r/w     以只读/读写挂载文件系统
    -n:  每个文件系统挂载时都会自动更新/etc/mtab文件,-n用于禁止此功能;
    -a       自动挂载所有支持自动挂载的设备;
    -B       绑定目录至另一个目录上;
    -L       通过卷标来挂载文件系统,默认情况是指定设备名
    -U       通过UUID来挂载,同上

mount挂载选项 

1

2
3
4
5
6
7
8
9
10
11
12
13

-o 挂载选项

    Async           异步模式,数据先在内存写入,后同步到磁盘,默认
    Sync            同步模式,直接写到磁盘
    Atime/noatime   每次更新文件都会更新accesstime,如果WEB服务器的话,可以禁用
    Diratime/nodiratime是否更新目录的访问时间戳
    Auto/noauto     是否允许此设备被自动挂载
    Exec/noexec     是否允许执行此文件系统上的应用程序
    Dev/nodev       是否支持在此设备使用设备文件
    Suid/nosuid     是否支持Suid特性
    Remount         重新挂载
    Ro/rw           只读/读写方式挂载       
    User/nouser     是否允许普通用户挂载此设备
    Acl             是否支持此设备上使用facl 文件访问控制列表

:使用卷标挂载卷标Newlance的文件系统到/mnt/temp下    

umount卸载

1

2
3
4
5
6
7
8

Usage:

    mount DEVICE
    umount MOUNT_POINT
    
    查看正在访问指定挂载点的进程:
        # fuser -v MOUNT_POINT
    终止所有正在访问指定的挂载点的进程:
        # fuser -km MOUNT_POINT

交换分区swap


交换分区SWAP就是LINUX下的虚拟内存,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用.也可调度物理内存中不长使用的页面到swap分区中。

swap分区管理工具常有mkswap、swapon、swapoff、free[查看]

1

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

首先使用fdisk划分一块新分区用来作为swap分区

mkswap:创建交换分区
    mkswap [option] DEVICE      DEVICE可以使用3种机制引用
                
swapon:启用交换分区
    swapon [option] [DEVICE]
        -a: 激活所有交换分区
        -p PRIORITY: 设定其优先级;
swapoff:禁用交换分区
        swapoff [option] [DEVICE]
            
free命令:查看memory和swap的使用状态   
        -m: 以MB为单位
        -g: 以GB为单位

还可以创建swap文件来充当虚拟内存,见例2

:创建一个2GB的交换分区,原来是2GB的Swap分区

注意:这里我少了一步,可能是截图的原因,在swapon之前我使用了mkswap /dev/sdb3转换为swap分区

:当不能或不想再划分硬盘分区的时候,可以创建一个文件做Swap文件

请注意在激活swap分区之前,要将分区类型转换为swap,使用mkswap命令或者fdisk修改ID类型

文件系统空间查看工具


df:fisk free

-h: human-readable

-i: inode数量

-P: 以Posix兼容的格式输出

du: disk usage

-h: human-readable 

-s: summary

/etc/fstab文件细览


系统启动时从fstab中读取开机要加载的文件系统,必须首先加载根文件系统 /

用户空间mount挂载的重启后消失,要想开机自动挂载有2种简单的办法

    (1)在/etc/fstab中添加一条记录,实现开机挂载

    (2)将mount挂载命令写到/etc/rc.local作为开机自动运行的脚本实现开机挂载

/etc/fstab文件中有6列,分别定义如下

链接文件[硬软链接]


链接文件分为硬链接和软链接

文件包含2部分组成:元数据 + 文件数据,文件名其实是不包含在元数据里面的,文件唯一标识其实是Inode,inode对于一块磁盘分区是有限个数的

硬链接:

    (1)两个路径指向同一个inode

    (2)不能对目录进行

    (3)不能跨分区进行,每个分区inode是独立的

    (4)指向同一个inode的多个不同路径; 创建文件的硬链接会增加inode的引用计数;删除硬链接仅是删除其一个访问路径,只到最后一个路径被删除;

软链接:

    (1)链接文件的数据指向另一个文件路径,类似windows快捷方式

    (2)可以对目录进行

    (3)可以跨分区

    (4)指向的是另一个文件路径;而非inode;对文件创建符号链接不会增加其引用计数;删除原文件,符号链接文件不会被删除,但失效了;

  wKioL1X24SGRwu8qAABbxlJE2NM660.jpg    

ln创建链接命令 

1

2
3
4
5
6

Usage:

    ln [-s] SRC DEST
        不带参数创建的是硬链接 
        -s:symbolic link创建软链接
        -v:verbose
请注意对目录是不可以创建硬链接的,会失败