本文旨在复习磁盘分区、创建文件系统、挂载以及链接文件的基本概念
知识储备
硬盘出厂其实不能写入数据的,是"盲盘",需要处理后使用,格式化分为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 2345678910111213 | Usage: mke2fs [OPTION]... DEVICEOPTIONS: -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 2345678910 | Usage: tune2fs [OPTIONS]... DEVICE 显示ext系列文件系统的属性,或调整其属性;OPTIONS: -l 显示超级块中的信息;显示整个文件的属性及布局等相关信息; -L 'LABEL' 修改卷标; -m # 调整预留空间百分比,前例已说明默认是5% -j 调整ext2 --> ext3, 无损转换 -O 文件系统属性开关 -o 文件系统默认挂载选项开关 |
例:修改/dev/sdb1分区的卷标LABEL为NewLance
● Fsck和e2fsck
1 2345678 | Usage: fsck -t type [OPTIONS]... DEVICEOPTIONS: -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如何使用指定的设备呢?通过这么几种主要的引用机制
mount/umount命令
mount及常用选项
1 2345678910 | Usage: Mount [OPTIONS]... [-o options] DEVICE mount_pointOPTIONS: -t type 文件系统类型 -r/w 以只读/读写挂载文件系统 -n: 每个文件系统挂载时都会自动更新/etc/mtab文件,-n用于禁止此功能; -a 自动挂载所有支持自动挂载的设备; -B 绑定目录至另一个目录上; -L 通过卷标来挂载文件系统,默认情况是指定设备名 -U 通过UUID来挂载,同上 |
mount挂载选项
1 2345678910111213 | -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 2345678 | 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 2345678910111213141516 | 首先使用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;对文件创建符号链接不会增加其引用计数;删除原文件,符号链接文件不会被删除,但失效了;
ln创建链接命令
1 23456 | Usage: ln [-s] SRC DEST 不带参数创建的是硬链接 -s:symbolic link创建软链接 -v:verbose请注意对目录是不可以创建硬链接的,会失败 |