zoukankan      html  css  js  c++  java
  • 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指向该数据块
  • 相关阅读:
    恐怖的东西,C#进入前四,进入正轨。
    JavaScript高级培训-自定义对象
    优秀程序员无他善假于物也
    Java基础知识之泛型全接触
    Haskell函数式编程之二递归
    敏捷的写博客
    生命、宇宙及万物的终极答案《图灵的秘密》读后感
    Java基础知识之Enum全接触
    WebDriver自动化测试利器剖析
    Haskell函数式编程之三纯函数式编程特点
  • 原文地址:https://www.cnblogs.com/jacky1982/p/7716445.html
Copyright © 2011-2022 走看看