Linux磁盘及文件系统管理进阶

  • 文件系统管理工具
    • 创建文件系统的工具
      • mkfs
        • 具体实现各不相同,mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat...
        • 或者统一使用mkfs -t命令,例如mkfs -t ext2 /dev/sda3
    • 检测及修复文件系统的工具
      • fsck
        • fsck.ext2, fsck.ext3...
    • 查看文件系统属性的工具
      • ext系列文件系统:dumpe2fs,tune2fs
      • 其它各个文件系统工具各不相同
    • 调整文件系统特性的工具
      • ext系列文件系统:tune2fs
      • 其它各个文件系统工具各不相同
  • 内核级文件系统的组成部分
    • 文件系统驱动:由内核提供
    • 文件系统管理工具:由用户空间的应用程序提供
  • ext系列文件系统的管理工具
    • mkfs.ext2, mkfs.ext3, mkfs.ext4;或者mkfs -t 
      • 后面的版本兼容前面的版本
      • 使用方法:COMMAND Partition,例如mkfs.ext2 /dev/sda3
      • CentOS 6默认不支持xfs文件系统,需要安装xfs的npm包。
        • yum install xfsprogs
        • yum -y install xfsprogs,就不用敲yes了
    • ext系列文件系统专用的管理工具:mke2fs
      • mke2fs [Options] Partition
      • -t {ext2 | ext3 | ext4}:指明格式化的文件系统类型是什么
        • mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4
      • -b {1024 | 2048 | 4096}:指明块大小,分别代表1k,2k,4k
      • -L LABEL:指明卷标
      • -j:创建有日志功能的文件系统ext3
        • mkfs.ext3 = mkfs -t ext3 = mke2fs -t ext3 = mke2fs -j
      • -i #:每多少字节一个inode,bytes-per-inode
      • -N #:直接指明要给此文件系统创建的inode的数量
      • -m #:指定预留空间的百分比,不需要加百分号,给一个数字就行了;默认是5%
      • -O [^]FEATURE:以给定的特性创建目标文件系统,不加^表示启用某特性,加了表示取消某特性
        • mkfs.ext3 = mkfs -t ext3 = mke2fs -t ext3 = mke2fs -j = mke2fs -O has_journal
    • e2lable命令:ext系列文件系统专用的卷标查看修改工具
      • 查看:e2lable Partition
      • 修改:e2lable Partition Label
    • tune2fs命令:查看或修改ext系列文件系统的某些属性
      • 只能修改某些属性,例如块大小创建之后就不能再修改
      • tune2fs [Options] Partition
        • -l:查看超级块的内容
        • -j:将ext2升级为ext3,不损害数据
        • -L LABEL:修改卷标,不损害数据
        • -m #:调整预留空间的百分比
        • -O [^]Feature:开启或关闭某种特性
        • -o [^]mount_options:开启或关闭某种默认的挂载选项,比如acl选项
    • dumpe2fs命令:显示ext系列文件系统的属性信息
      • dumpe2fs [-h] Partition
      • -h:只显示超级块的信息;
    • 用于实现文件系统检测的工具
      • 因进程意外终止或系统崩溃,断电等原因导致的写入操作非正常终止时,可能会造成文件损坏,此时,建议检测并修复文件系统;建议离线进行,即不要挂载,或者不要写入。
      • ext系列文件系统的专用工具:e2fsck
        • e2fsck [Options] Partition
        • -y:对所有问题自动回答为yes
        • -f:即使文件系统处于clean状态(与dirty状态对应),也要强制进行检测
      • fsck:通用的工具
        • -t:指明文件系统类型,如果不指明的话有时候会自动检测出来
          • fsck -t ext4 = fsck.ext4
        • -a:无需交互而自动修复所有错误
          • 不推荐,因为修复就是把坏文件删除,有些文件已经写了很多了,删除就全没了
        • -r:交互式修复
  • blkid命令:
    • blkid Partition:查看分区的相关属性
    • blkid -L LABEL:根据LABEL定位分区
    • blkid -U UUID:根据UUID定位分区
  • swap文件系统
    • Linux上的交换分区必须使用独立的文件系统,且文件系统的System ID必须为82
    • mkswap命令:创建swap文件系统
      • mkswap [Options] Partition
      • -L LABEL:指明卷标
      • -f:强制
  • Windows无法识别Linux的文件系统
  • Windows的NTFS文件系统在某些桌面级的Linux版本上被支持
  • Windows的fat32文件系统在Linux上被识别为vfat文件系统
  • 存储设备需要在两种系统之间交叉使用时,应该使用windows和linux同时支持的文件系统: fat32(vfat)
    • mkfs.vfat Partition
  • 文件系统的使用
    • 首先要“挂载”:mount命令和umount命令
    • 根文件系统之外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”;此目录即为“挂载点”;
      • 挂载点:mount_point,用于作为另一个文件系统的访问入口
      • 挂载点特性
        • 事先存在的目录
        • 应该使用未被且不会被其它进程使用到的目录
        • 挂载点下原有的文件将会被隐藏
    • mount命令:
      • mount [-fnrsvw] [-t vfstype] [-o options] device dir
      • 命令选项
        • -r:只读挂载
        • -w:读写挂载,为默认值
        • -n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性
        • -t vfstype:指明要挂载的设备上的文件系统的类型;多数情况下可以省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型
        • -L LABLE:挂载时以卷标的方式指明设备
          • mount -L LABEL dir
        • -U UUID:挂载时以UUID的方式指明设备
      • 挂载选项
        • -o options:挂载选项
          • sync/async:同步/异步操作;写入内存后,过一会儿再写入磁盘叫异步,立即写入磁盘叫同步;异步性能好,但是同步数据不容易丢失(比如突然断电)
          • atime/noatime:文件或目录在被访问时,是否更新其访问时间戳
          • diratime/nodiratime:目录在被访问时,是否更新其访问时间戳
          • remount:重新挂载
          • acl:支持使用facl功能
            • mount -o acl device dir
            • tune2fs -o acl device; mount device dir
            • 复习facl命令
              • setfacl -m u:centos:rw- fstab
              • getfacl fstab
          • ro:只读
          • rw:读写
          • dev/nodev:此设备上是否允许创建设备文件
          • exec/noexec:是否允许运行此设备上的程序文件;可以防止木马等未授权的程序自动运行;
          • auto/noauto:是否允许mount命令使用-a选项自动挂载
          • user/nouser:是否允许普通用户挂载此文件系统
          • suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效
          • defaults:使用默认选项,rw,suid,dev,exec,auto,nouser,async and relatime
          • -o选项之间通过逗号分隔,例如:mount -o remount,acl /dev/sda3 /mnt
      • 一个使用技巧:可以实现将目录绑定至另一个目录,作为其临时访问入口
        • mount --bind 源目录 目标目录
        • unmount 目标目录
      • 查看当前系统上所有已挂载的设备
        • 直接使用mount命令
        • cat /etc/mtab
        • cat /proc/mounts
      • 挂载光盘
        • mount -r /dev/cdrom mount_point
        • 光盘设备文件:/dev/cdrom,/dev/dvd
      • 挂载U盘
        • 事先需要识别U盘的设备文件
      • 挂载本地的回环设备(如iso镜像文件,img映像文件)
        • mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT
    • umount命令:
      • umount device | dir
      • 注意:正在被进程访问到的挂载点无法被卸载
        • 查看被哪个或者哪些进程所占用
          • lsof mount_point,例如:lsof /mnt
          • fuser -v mount_point,例如:fuser -v /mnt
        • 终止所有正在访问某挂载点的进程
          • fuser -km mount_point
  • 交换分区
    • 创建交换分区的命令:mkswap
    • 交换分区的启用和禁用不能使用mount
    • 启用:swapon
      • swapon [options] [device]
      • -a:定义在/etc/fstab文件中的所有swap设备
    • 禁用:swapoff
      • swapoff device
  • 设定除根文件系统以外的其它文件系统能够开机时自动挂载:/etc/fstab文件
    • 每行定义一个要挂载的文件系统及相关属性,一共有6个字段
      • 要挂载的设备,有四种方式指定:设备文件,UUID,Label,伪文件系统(如sysfs,proc,tmpfs等)
      • 挂载点
        • swap类型的设备的挂载点为swap
      • 文件系统类型
      • 挂载选项
        • 如果要同时指明多个挂载选项,彼此之间用逗号分隔
      • 转储频率
        • 0:从不备份
        • 1:每天备份一次
        • 2:每隔一天备份一次
      • 自检次序
        • 0:不自检
        • 1:首先自检,通常只能是根文件系统可用1
        • 2:次级自检
        • ......
      • mount -a命令会将fstab中定义的所有支持自动挂载的设备挂载上来
  • 两个与磁盘相关的命令:df和du
    • df命令:查看磁盘的使用状态
      • df [option]... [file]...
      • -l:仅显示本地文件系统的相关信息
      • -h:以人类可读的方式做单位换算后显示
      • -i:显示inode的使用情况,而非blocks
    • du命令:评估文件占用的空间大小
      • du [option]... [file]...
      • -s:summary,显示目录下所有文件的大小之和
      • -h:以人类可读的方式做单位换算后显示

练习:

1,创建一个10G的分区,并格式化为ext4文件系统

  • block大小为2048;预留空间为2%;卷标为MYDATA
  • 挂载至/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳
  • 可开机自动挂载,且默认有acl挂载选项

 

以下为另一个相似题目的答案,用来参考。不是本题答案。

(1) 创建20G分区略,假设为/dev/sda7

(2) mke2fs -t ext4 -b 2048 -L 'MYDATA' /dev/sda7

(3) 编辑/etc/fstab文件,

LABEL=‘MYDATA’   /mydata    ext4     defaults,acl   0    0

 

2,创建一个大小为1G的swap分区,并启用之

 

后期补充:

  • 删除文件的过程
    • 将此文件inode指向的所有data block标记为未使用
    • 将此文件的inode标记为未使用
  • 复制文件
    • 新建文件
  • 移动文件
    • 同一文件系统:改变仅仅是路径
    • 不同文件系统:复制文件,并删除原文件
  • 符号链接文件的inode指向数据块的指针里存放的是一个字符串,即原文件的路径;但是当原文件的路径很长的时候,也有可能存在数据块里,然后inode指向该数据块
posted on 2017-10-23 13:58  小兔无情  阅读(293)  评论(0编辑  收藏  举报