一、Linux文件系统类型
Linux 支持的文件系统有很多,包括 ext2, ext3, ext4, xfs, btrfs, reiserfs, jfs, vfat, swap(交换分区)等;
根据是否支持“journal”的功能:
- 日志类型文件系统: ext3, ext4, xfs ...
- 非日志类型文件系统:ext2, vfat
文件系统的组成部分:
- 内核中的模块:ext4, xfs, vfat
- 用户空间的管理工具:mkfs.ext4, mkfs.xfs, mkfs.vfat
VFS
所谓VFS就是Virtual File System虚拟文件系统,也称为虚拟文件系统开关(Virtual Filesystem Switch).
这是Linux文件系统对外的接口。任何要使用文件系统的程序都必须经由这层接口来使用它。
VFS是一个异构文件系统之上的软件粘合层(注:有时也把VFS称为可堆叠的文件系统(Stackable Filesystem),因为VFS可以无缝地使用多个不同类型的文件系统,就像把多个文件系统堆叠在一起一样,故而得名)。通过VFS,可以为访问文件系统的系统调用提供一个统一的抽象接口。
检测当前内核支持的文件系统类型
# cat /proc/filesystems
# lsmod
# 列出内核模块
二、文件系统创建
在磁盘分区完毕之后,需要为分区格式化,将其格式化为需要的文件系统,才可以对分区进行读写操作。
1. mkfs
mkfs [options] [-t type] [fs-options] device [size]
- mkfs -t FS_TYPE /dev/device
-L "Label" #为该设备设置卷标
# mkfs -t ext4 -L "MyLabel" /dev/sda3
- mkfs.FS_TYPE /dev/device
FS_TYPE 可以为 ext2, ext3, ext4, xfs, btrfs 等文件系统类型
# mkfs.ext4 /dev/sda3
2. mke2fs
ext 系列专用文件系统管理工具
mke2fs - create an ext2/ext3/ext4 filesystem
# mke2fs [options] device
[-b block-size] #块大小 {1024|2048|4096}
[-i bytes-per-inode] # 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
[-N number-of-inodes] #为数据空间创建个多少个inode
[-m reserved-blocks-percentage] #为管理人员预留的空间占据的百分比;默认 5%
[-L volume-label] #标签
[-O feature[,...]] #启用指定特性 -O ^FEATURE:关闭指定特性
[-t fs-type] #文件系统类型 {ext2|ext3|ext4}
3. mkswap
建立 swap 分区,前提:调整其分区的ID为82。
# mkswap [options] device [size]
4. blkid
块设备属性查看
blkid -L
5. e2label
管理 ext 系列文件系统的标签
# e2label device [ new-label ]
6. tune2fs
重新设定和调整 ext 系列文件系统可调整参数的值
基本参数和 mke2fs 类似,值得关注的是
[-o [^]mount_options[,...]] # 调整文件系统的默认挂载选项
7. dumpe2fs
打印当前设备上的文件系统的超级块和块设备信息
dumpe2fs [-bfhixV] [-o superblock=] [-o blocksize=] device
三、文件系统检测
1. fsck
检查和修复文件系统
fsck [-lrsAVRTMNP] [-C [fd]] [-t fstype] [filesystem...] [--] [fs-specific-options]
-a # 自动修复错误
-r # 交互式询问修复
等价于:# fsck.FS_TYPE
2. e2fsck
检查ext系列文件系统
# e2fsck [options] device
- -y # 非交互式,自动回答 yes
- -f # 强制修复
- -p # 自动修复
四、文件系统挂载与卸载
- 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为称之为挂载;
- 解除此关联关系的过程称之为卸载;
- 注意:挂载点下原有文件在挂载完成后会被临时隐藏
1. 挂载
- mount 挂载命令
查看文件显示当前系统已挂载的所有设备# /etc/mtab
查看内核追踪到的已挂载的所有设备:# cat /proc/mounts
mount [-fnrsvw] [-t vfstype] [-o options] device dir
-a, --all mount all filesystems mentioned in fstab # 挂载所有在 /etc/fstab 中定义的文件系统
-t, --types limit the set of filesystem types # 指定要挂在设备上的文件系统,必须与文件系统格式化的类型一致
-r, --read-only mount the filesystem read-only (same as -o ro) # 只读挂载
-w, --rw, --read-write mount the filesystem read-write (default) # 读写挂载
-n, --no-mtab don’t write to /etc/mtab # 不写 mtab 文件
-l, --show-labels lists all mounts with LABELs # 列出挂载信息时带上文件系统标签
-L, --label
# mount /dev/sda5 /python
2. 卸载
- umount 卸载命令
进程正在使用中的设备无法被卸载
umount [-dflnrv] {dir|device}...
-a, --all All of the file systems described in /etc/mtab are unmounted.
-f, --force Force unmount (in case of an unreachable NFS system). # 强制卸载 NFS
-n, --no-mtab Unmount without writing in /etc/mtab.
-r, --read-only In case unmounting fails, try to remount read-only.
# umount /dev/sda5
或
# umount /python
- 查看正在访问指定文件系统的进程
# fuser -v MOUNT_POINT
fuser [-fuv] [-a|-s] [-4|-6] [-c|-m|-n space] [ -k [-i] [-M] [-w] [-SIGNAL] ] name ...
fuser -l
- 终止所有在正访问指定的文件系统的进程
# fuser -km MOUNT_POINT
安装 fuser 工具 # yum install psmisc -y
3. 挂载和卸载交换分区
- swapon
swapon [-d] [-f] [-p priority] [-v] specialfile...
-a, --all All devices marked as ``swap'' in /etc/fstab are made available, except for those with the ``noauto'' option. # 激活所有在 /etc/fstab 中设置为自动激活的 swap 分区
-e, --ifexists Silently skip devices that do not exist. # 跳过不存在的设备
-s, --summary Display swap usage summary by device. Equivalent to "cat /proc/swaps". # 显示 swap 分区使用信息
-v, --verbose Be verbose.
-p, --priority priority Specify the priority of the swap device. priority is a value between -1 and 32767. Higher numbers indicate higher priority. # 指定优先级
# swapon -v /dev/sda6
# swapon -v
- swapoff
swapoff [-v] specialfile...
Usage:
swapoff [options] []
Options:
-a, --all disable all swaps from /proc/swaps
-v, --verbose verbose mode
# swapoff -v /dev/sda6
4. 自动挂载
- 配置文件:
/etc/fstab
系统开机时将根据 fstab 文件的配置来自动实现文件系统的挂载
每行定义一个需要挂载的文件系统
/dev/mapper/centos-root / xfs defaults 0 0
UUID=2d5d8e36-0d64-4d53-90ee-632136874187 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
每一行分别对应如下
要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项 转储频率 自检次序
/dev/mapper/centos-root / xfs defaults 0 0
- 要挂载的设备或伪文件系统:
设备文件、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称(proc, sysfs) - 挂载选项:
defaults
可自定义,用逗号分隔,如:default,acl - 转储频率:
0:不做备份
1:每天转储
2:每隔一天转储 - 自检次序:
0:不自检
1:首先自检;一般只有rootfs才用1;
...
五、空间使用情况检查
内存空间使用状态:
free [OPTION]
-m: 以MB为单位
-g: 以GB为单位
# free -g
文件系统空间占用等信息的查看工具:
df:
-h: human-readable
-i:inodes instead of blocks
-P: 以Posix兼容的格式输出;
# df -h
查看某目录总体空间占用状态:
du:
du [OPTION]... DIR
-h: human-readable
-s: summary
显示 /boot 目录的总体占用大小# du -sh /boot
显示 /boot 下每个文件占用空间大小# du -sh /boot/*
,仅显示 boot 目录下的一级目录和文件的总占用大小
显示 /boot 目录下每一个文件及文件夹分别占用的空间# du -ah /boot/
六、文件系统其他
1. Inode
Inode: Index Node, 索引节点
- 地址指针:
直接指针:
间接指针:
三级指针:
inode bitmap:对位标识每个inode空闲与否的状态信息
2.链接文件
硬链接:
不能够对目录进行;
不能跨分区进行;
指向同一个inode的多个不同路径;创建文件的硬链接即为为inode创建新的引用路径,因此会增加其引用计数;符号链接:
可以对目录进行;
可以跨分区;
指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数;创建链接
ln [-sv] SRC DEST
-s:symbolic link
-v: verbose
eg:在 /tmp (DEST)下创建一个名为 app 的符号链接,指向 /python (SRC)目录
# ln -sv /python /tmp/app
[root@centos-7 tmp]# ls -lh /tmp/app
lrwxrwxrwx. 1 root root 7 Oct 1 23:05 /tmp/app -> /python
[root@centos-7 tmp]#