Linux 文件系统管理

一、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]#

你可能感兴趣的:(Linux 文件系统管理)