10-1 磁盘存储和文件系统

好久不见. 提交于 2019-12-16 19:07:39

磁盘存储和文件系统

管理分区

列出块设备:

  • lsblk

创建分区使用:

  • fdisk 创建MBR分区
  • gdisk 创建GPT分区
  • parted 高级分区操作

重新设置内存中的内核分区表版本:

  • partprobe
  • partx -a(增加);partx -d(删除)(CentOS6)
  • kpartx

分区工具fdisk和gdisk

  • gdisk /dev/sdb 类fdisk 的GPT分区工具
  • fdisk -l [-u] [device...] 查看分区
  • fdisk /dev/sdb 管理分区
  • 子命令:
    • p 分区列表
    • t 更改分区类型
    • n 创建新分区
    • d 删除分区
    • v 校验分区
    • u 转换单位
    • w 保存并退出
    • q 不保存并退出

同步分区表:

  • 查看内核是否已经识别新的分区
    • cat /proc/partations
  • centos6通知内核重新读取硬盘分区表
    • 新增分区用:
      • partx -a /dev/DEVICE
      • kpartx -a /dev/DEVICE -f: force
    • 删除分区用:
      • partx -d --nr M-N /dev/DEVICE
  • CentOS 5,7: 使用partprobe
    • partprobe [/dev/DEVICE]

文件系统

  • 文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统
  • 从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
  • 支持的文件系统:/lib/modules/uname –r/kernel/fs
  • 各种文件系统:https://en.wikipedia.org/wiki/Comparison_of_file_systems
  • 帮助:man 5 fs

文件系统类型

  • Linux文件系统:
    • ext2(Extended file system):适用于那些分区容量不是太大,更新也不频繁的情况,
      • 例如 /boot 分区
    • ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复。它通常被用作通用的文件系统
    • ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升
    • xfs:SGI,支持最大8EB的文件系统
    • btrfs(Oracle), reiserfs, jfs(AIX), swap
  • 光盘:iso9660
  • Windows:FAT32, NTFS,exFAT
  • Unix:FFS(fast), UFS(unix), JFS2
  • 网络文件系统:NFS, CIFS
  • 集群文件系统:GFS2, OCFS2(oracle) * 分布式文件系统:fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
  • RAW:未经处理或者未经格式化产生的文件系统

文件系统的分类

  • 根据其是否支持"journal"功能:
    • 日志型文件系统: ext3, ext4, xfs, ...
    • 非日志型文件系统: ext2, vfat
  • 文件系统的组成部分:
    • 内核中的模块:ext4, xfs, vfat
    • 用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
  • Linux的虚拟文件系统:VFS
  • 查前支持的文件系统:cat /proc/filesystems

VFS虚拟文件系统

不同的命令对应的代码时一样的,这是系统抽象出来的虚拟文件系统
VFS

文件系统的选择

  • EXT3
    • 最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件
    • Ext3目前只支持32000个子目录
    • Ext3文件系统使用32位空间记录块数量和 inode数量
    • 当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块
  • EXT4:EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本
    • Ext4的文件系统容量达到1EB,而文件容量则达到16TB
    • 理论上支持无限数量的子目录
    • Ext4文件系统使用64位空间记录块数量和 inode数量
    • Ext4的多块分配器支持一次调用分配多个数据块
    • 修复速度更快
  • XFS
    • 根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
    • 采用优化算法,日志记录对整体文件操作影响非常小
    • 是一个全64-bit的文件系统,最大可以支持8EB的文件系统
    • 能以接近裸设备I/O的性能存储数据

创建文件系统

mkfs命令:

  1. mkfs.FS_TYPE /dev/DEVICE
    • ext4、xfs、btrfs、vfat
  2. mkfs -t FS_TYPE /dev/DEVICE
    • -L 'LABEL' 设定卷标

文件系统标签

  • 指向设备的另一种方法
  • 与设备无关
  • blkid:块设备属性信息查看
    • blkid [OPTION]... [DEVICE]
    • -U UUID 根据指定的UUID来查找对应的设备
    • -L LABEL 根据指定的LABEL来查找对应的设备
  • e2label:管理ext系列文件系统的LABEL
    • e2label DEVICE [LABEL]
  • findfs :查找分区
    • findfs [options] LABEL=
    • findfs [options] UUID=

tune2fs:

  • tune2fs:重新设定ext系列文件系统可调整参数的值
    • -l 查看指定文件系统超级块信息;super block
    • -L 'LABEL’ 修改卷标
    • -m # 修预留给管理员的空间百分比
    • -j 将ext2升级为ext3
    • -O 文件系统属性启用或禁用, –O ^has_journal
    • -o 调整文件系统的默认挂载选项,–o ^acl
    • -U UUID 修改UUID号
  • dumpe2fs:显示ext文件系统信息,将磁盘块分组管理
    • -h:查看超级块信息,不显示分组信息
  • xfs_info:显示已挂载的 xfs 文件系统信息
    • xfs_info mountpoint

超级块和INODE TABLE

SubperBlock

文件系统检测和修复

  • 文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean”
    • 注意:一定不要在挂载状态下执行下面命令修复
  • fsck: File System Check
    • fsck.FS_TYPE
    • fsck -t FS_TYPE
      • 注意:FS_TYPE 一定要与分区上已经文件类型相同
    • -a 自动修复
    • -r 交互式修复错误
  • e2fsck:ext系列文件专用的检测修复工具
    • -y 自动回答为yes
    • -f 强制修复
    • -p 自动进行安全的修复文件系统问题
  • xfs_repair:xfs文件系统专用检测修复工具
    • -f 修复文件,而设备
    • -n 只检查
    • -d 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot

挂载mount

  • 挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此
    目录做为其它文件访问入口的行为
  • 卸载:为解除此关联关系的过程
  • 把设备关联挂载点:mount Point
    • mount
  • 卸载时:可使用设备,也可以使用挂载点
    • umount 设备名|挂载点
  • 挂载点下原有文件在挂载完成后会被临时隐藏
  • 挂载点目录一般为空

用mount命令挂载文件系统:

  • 挂载方法:mount DEVICE MOUNT_POINT
  • mount:通过查看/etc/mtab文件显示当前已挂载的所有设备
  • mount [-fnrsvw] [-t vfstype] [-o options] device dir
    • device:指明要挂载的设备;
      1. 设备文件:例如/dev/sda5
      2. 卷标:-L 'LABEL', 例如 -L 'MYDATA'
      3. UUID, -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
      4. 伪文件系统名称:proc, sysfs, devtmpfs, configfs
    • dir:挂载点
      • 事先存在,建议使用空目录
      • 进程正在使用中的设备无法被卸载

mount常用命令选项:

  • -t vsftype 指定要挂载的设备上的文件系统类型
  • -r readonly,只读挂载
  • -w read and write, 读写挂载
  • -n 不更新/etc/mtab,mount不可见
  • -a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能) * -L 'LABEL' 以卷标指定挂载设备
  • -U 'UUID' 以UUID指定要挂载的设备
  • -B, --bind 绑定目录到另一个目录上
  • 查看内核追踪到的已挂载的所有设备
    • cat /proc/mounts
  • -o options:(挂载文件系统的选项),多个选项使用逗号分隔
    • async 异步模式 sync 同步模式,内存更改时,同时写磁盘
    • atime/noatime 包含目录和文件
    • diratime/nodiratime 目录的访问时间戳
    • auto/noauto 是否支持自动挂载,是否支持-a选项
    • exec/noexec 是否支持将文件系统上运行应用程序
    • dev/nodev 是否支持在此文件系统上使用设备文件
    • suid/nosuid 是否支持suid和sgid权限
    • remount 重新挂载
    • ro 只读 rw 读写
    • user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
    • acl 启用此文件系统上的acl功能
    • loop 使用loop设备
    • _netdev 当网络可用时才对网络资源进行挂载,如:NFS文件系统
    • defaults 相当于rw, suid, dev, exec, auto, nouser, async

卸载命令:

  • 查看挂载情况
    • findmnt MOUNT_POINT|device
  • 查看正在访问指定文件系统的进程
    • lsof MOUNT_POINT
    • fuser -v MOUNT_POINT
  • 终止所有在正访问指定的文件系统的进程
    • fuser -km MOUNT_POINT
  • 卸载
    • umount DEVICE
    • umount MOUNT_POINT

挂载点和/etc/fstab

  • 配置文件系统体系
  • 被mount、fsck和其它程序使用
  • 系统重启时保留文件系统体系
  • 可以在设备栏使用文件系统卷标
  • 使用mount -a 命令挂载/etc/fstab中的所有文件系统

文件挂载配置文件:

  • /etc/fstab每行定义一个要挂载的文件系统
  • 1、要挂载的设备或伪文件系统
    • 设备文件
      • LABEL:LABEL=""
      • UUID:UUID=""
      • 伪文件系统名称:proc, sysfs
  • 2、挂载点
  • 3、文件系统类型:ext4,xfs,iso9660,nfs,none
  • 4、挂载选项:defaults ,acl,bind
  • 5、转储频率:0:不做备份 1:每天转储 2:每隔一天转储
  • 6、fsck检查的文件系统的顺序:允许的数字是0 1 2
    • 0:不自检
    • 1:首先自检;一般只有rootfs才用
    • 2:非rootfs使用

补充:

  • 循环挂载可以挂载,但是只能进入一层,注意不要犯这个错误
  • 当一个挂载目录有人再目录中时,无法取消挂载
  • 同一时间同一挂载点只能挂载一个设备,如果有多个设备,只能显示最后一个
  • 当挂载点本身有文件时,挂载一个设备会遮挡原来的问价,是原来的文件无法访问
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!