Linux文件系统

简介: Linux文件系统

文件系统特性

  • 在Linux中使用一个磁盘的步骤:首先需要将磁盘分区,然后格式化需要使用的分区(即将其变为某个文件系统,创建相应的inode和block),在挂载到目录树,就可以使用了。
  • 磁盘在格式化时就创建好了固定的inode和block数量,除非重新格式化,否则是不会变化的。还会创建一个超级区块superblock(1024bytes)会记录整个文件系统的整体信息,包括inode和block的数量,使用量,剩余量,文件系统的挂载时间等。
  • inode存放的是文件的权限和拥有者,修改时间,inode号码等等这些文件属性,一个文件占用一个inode。而block存放的是文件的具体数据,由于一个block的空间有限,所以一个inode可以对应多个block
  • inode除了记录文件一些权限等基本属性外,还具有:
  • 每个inode大小均固定为128bytes (新的ext4与xfs可设定为256bytes)
  • 每个文件只占有一个inode,所以系统的最大文件数与inode有关
  • 系统读取文件是需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够开始实际读取block的内容

读取/etc/passwd的流程:

  1. / 的 inode:
    透过挂载点的信息找到 inode 号码为 128 的根目录 inode,且 inode 规范的权限让我们可以读取该 block 的内容(有 r 与 x) ;
  2. / 的 block:
    经过上个步骤取得 block 的号码,并找到该内容有 etc/ 目录的 inode 号码 (33595521);
  3. etc/ 的 inode:
  4. 读取 33595521 号 inode 得知 dmtsai 具有 r 与 x 的权限,因此可以读取 etc/ 的 block 内容;


etc/ 的 block:


经过上个步骤取得 block 号码,并找到该内容有 passwd 文件的 inode 号码 (36628004);

  1. passwd 的 inode:
    读取 36628004 号 inode 得知 dmtsai 具有 r 的权限,因此可以读取 passwd 的 block 内容;
  2. passwd 的 block:
  3. 最后将该 block 内容的数据读出来。

相关命令

  • dumpe2fs [-bh] 装置文件名
  • -h : (ext家族)仅列出superblock的数据,不会列出其他区段


xfs_info 挂载点|装置文件名 : 观察xfs文件系统的相关信息


查看当前系统支持的文件系统有哪些:ls -l /lib/modules/$(uname -r)/kernel/fs


查看已加载到内存中支持的文件系统: cat /proc/filesystems


df [-hiT] 目录或文件名


-h : 以人们交易容易阅读的G,M,K显示


-i : 不用磁盘容量,而已inode的数量来显示


-T : 连同文件系统的名称(如xfs)也列出


查看分区:


blkid : 列出目前系统有被格式化的装置


lsblk [-dfimpt] [device]


-d :仅列出磁盘本身,并不会列出该磁盘的分区数据


-f :同时列出该磁盘内的文件系统名称


-i :使用 ASCII 的线段输出,不要使用复杂的编码 (再某些环境下很有用)


-m :同时输出该装置在 /dev 底下的权限数据 (rwx 的数据)


-p :列出该装置的完整文件名!而不是仅列出最后的名字而已。


-t :列出该磁盘装置的详细数据,包括磁盘队列机制、预读写的数据量大小等


parted device_name print : 列出磁盘的分区表类型与分区信息

建立分区:

gdisk / fdisk 装置名称:进入和可建立分区,删除分区等一些操作。MBR 分区表请使用 fdisk 分区, GPT 分区表请


使用 gdisk 分区


partprobe -s : 更新Linux核心的分区表信息,在设置好分区后使用,是设置的分区立即生效


格式化分区(建立文件系统

mkfs.xfs [-b bsize] [-d parms] [-i parms] [-l parms] [-L label] [-f] [-r parms] 装置名称 ------> 建立xfs文件系统


关于单位:底下只要谈到『数值』时,没有加单位则为 bytes 值,可以用 k,m,g,t,p (小写)等来解释,比较特殊的是 s 这个单位,它指的是 sector 的『个数』喔!


-b :后面接的是 block 容量,可由 512 到 64k,不过最大容量限制为 Linux 的 4k 喔!


-d :后面接的是重要的 data section 的相关参数值,主要的值有:


agcount=数值 :设定需要几个储存群组的意思(AG),通常与 CPU 有关


agsize=数值 :每个 AG 设定为多少容量的意思,通常 agcount/agsize 只选一个设定即可 file :指的是『格式化的装置是个文件而不是个装置』的意思!(例如虚拟磁盘)


size=数值 :data section 的容量,亦即你可以不将全部的装置容量用完的意思


su=数值 :当有 RAID 时,那个 stripe 数值的意思,与底下的 sw 搭配使用


sw=数值 :当有 RAID 时,用于储存数据的磁盘数量(须扣除备份碟与备用碟)


sunit=数值 :与 su 相当,不过单位使用的是『几个 sector(512bytes 大小)』的意思


swidth=数值 :就是 su*sw 的数值,但是以『几个 sector(512bytes 大小)』来设定


-i :与 inode 有较相关的设定,主要的设定值有:


-f :如果装置内已经有文件系统,则需要使用这个 -f 来强制格式化才行!


size=数值 :最小是 256bytes 最大是 2k,一般保留 256 就足够使用了!


internal=[0|1]:log 装置是否为内建?预设为 1 内建,如果要用外部装置,使用底下设定


logdev=device :log 装置为后面接的那个装置上头的意思,需设定 internal=0 才可!


size=数值 :指定这块登录区的容量,通常最小得要有 512 个 block,大约 2M 以上才行!


-L :后面接这个文件系统的标头名称 Label name 的意思!


-r :指定 realtime section 的相关设定值,常见的有:


extsize=数值 :就是那个重要的 extent 数值,一般不须设定,但有 RAID 时,最好设定与 swidth 的数值相同较佳!最小为 4K 最大为 1G 。


mkfs.ext4 [-b size] [-L label] 装置名称 ------> 建立ext4文件系统


-b : 设定block大小


-L :后面接这个装置的标头名称


mkfs 是一个综合的指令,当我们使用 mkfs -t xfs 时,它就会跑去找 mkfs.xfs 相关的参数给我们使用!mkfs[tab][tab] 会显示出该系统支持的文件系统


文件系统的检验/修复


xfs_repair [-fnd] 装置名称


-f :后面的装置其实是个文件而不是实体装置-n :单纯检查并不修改文件系统的任何数据 (检查而已)


-n :单纯检查并不修改文件系统的任何数据 (检查而已)


-d :通常用在单人维护模式底下,针对根目录 (/) 进行检查与修复的动作!很危险!不要随便使用


fsck.ext4 [-pf] [-b superblock] 装置名称


-p :当文件系统在修复时,若有需要回复 y 的动作时,自动回复 y 来继续进行修复动作。


-f :强制检查!一般来说,如果 fsck 没有发现任何 unclean 的旗标,不会主动进入细部检查的,如果您想要强制 fsck 进入细部检查,就得加上 -f 旗标啰!


-D :针对文件系统下的目录进行优化配置。


-b :后面接 superblock 的位置!一般来说这个选项用不到。但是如果你的 superblock 因故损毁时,透过这个参数即可利用文件系统内备份的 superblock 来尝试救援。一般来说,superblock 备份在:1K block 放在 8193, 2K block 放在 16384, 4K block 放在 32768


文件系统的挂载与卸除

mount -a

mount -l

mount [-t 文件系统] LABEL=’’ 挂载点

mount [-t 文件系统] UUID=’’ 挂载点

mount [-t 文件系统] 装置文件名 挂载点


-a :依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来


-l :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!


-t :可以加上文件系统种类来指定欲挂载的类型。常见的 Linux 支持类型有:xfs, ext3, ext4,reiserfs, vfat, iso9660(光盘格式), nfs, cifs, smbfs (后三种为网络文件系统类型)


-n :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序的运作。但在某些情况下(例如单人维护模式)为了避免问题会刻意不写入。此时就得要使用 -n 选项。


-o :后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写权限等:async, sync: 此文件系统是否使用同步写入 (sync) 或异步 (async) 的内存机制,请参考文件系统运作方式。预设为 async。


atime,noatime: 是否修订文件的读取时间(atime)。为了效能,某些时刻可使用 noatime


ro, rw: 挂载文件系统成为只读(ro) 或可擦写(rw)


auto, noauto: 允许此 filesystem 被以 mount -a 自动挂载(auto)


dev, nodev: 是否允许此 filesystem 上,可建立装置文件? dev 为可允许


suid, nosuid: 是否允许此 filesystem 含有 suid/sgid 的文件格式?


exec, noexec: 是否允许此 filesystem 上拥有可执行 binary 文件?


user, nouser: 是否允许此 filesystem 让任何使用者执行 mount ?一般来说,mount 仅有 root 可以进行,但下达 user 参数,则可让 一般 user 也能够对此 partition 进行 mount 。


defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and async remount: 重新挂载,这在系统出错,或重新更新参数时,很有用!


umount [-fn] 装置文件名或挂载点:


-f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;


-l :立刻卸除文件系统,比 -f 还强!


-n :不更新 /etc/mtab 情况下卸除。


设定开机挂载

在文件/etc/fstab里面添加如下规则的开机挂载即可:


[装置/UUID 等] [挂载点] [文件系统] [文件系统参数] [dump] [fsck]


最后三个字段设为defaults 0 0就OK了


文件系统的一些属性修改:

xfs_admin [-lu] [-L label] [-U uuid] 装置文件名


-l :列出这个装置的 label name


-u :列出这个装置的 UUID


-L :设定这个装置的 Label name


-U : 设定这个装置的UUID


tune2fs [-l] [-L Label] [-U uuid] 装置文件名


-l :类似 dumpe2fs -h 的功能~将 superblock 内的数据读出来~


-L :修改 LABEL name


-U :修改 UUID 啰!


制作loop装置文件

该功能是为了将以前的分区不合理的情况下也能来分区,如:买的服务器默认的只有一个根目录的空间,没有其他分区


建立大型文件:dd if=/dev/zero of=/srv/loopdev bs=1M count=512


if指定输入输入文件,/dev/zero为一个生成空内容的装置

of指定输出文件

bs为块大小

count为块的个数,所以生成的文件大小就为bs乘以count

格式化:mkfs.xfs -f /srv/loopdev


挂载:如:mount -o loop UUID=“7dd97bd2-4446-48fd-9d23-a8b03ffdd5ee” /mnt,一定要加上-o loop,在设置开机挂载是也需要在文件系统参数这个字段加上loop,如:/srv/loopdev /data/file xfs defaults**,loop** 0 0


目录
相关文章
|
2月前
|
存储 Linux 数据处理
探索Linux操作系统的内核与文件系统
本文深入探讨了Linux操作系统的核心组件,包括其独特的内核结构和灵活的文件系统。文章首先概述了Linux内核的主要功能和架构,接着详细分析了文件系统的工作原理以及它如何支持数据存储和检索。通过比较不同的文件系统类型,本文旨在为读者提供一个关于如何根据特定需求选择合适文件系统的参考框架。
|
1月前
|
存储 缓存 算法
【linux】认识“文件”的本质,理解“文件系统”的设计逻辑,体会linux优雅的设计理念
【linux】认识“文件”的本质,理解“文件系统”的设计逻辑,体会linux优雅的设计理念
|
7天前
|
存储 Linux 文件存储
Linux 存储管理 (二)创建文件系统
【8月更文挑战第13天】使用`fdisk`创建分区后,通过`mkfs`命令创建文件系统,支持多种类型如ext4、XFS等。创建前确认分区无重要数据,示例命令为`mkfs.ext4 /dev/sdc1`。之后使用`mount`命令将分区挂载至指定目录,如`mount /dev/sdc1 /w`。为实现开机自动挂载,可在`/etc/fstab`文件中添加相应条目。这些步骤有助于高效管理和利用存储空间。
19 2
|
17天前
|
存储 数据管理 物联网
探索Linux文件系统的奥秘
【8月更文挑战第3天】在数字时代的海洋中,Linux 文件系统犹如一座灯塔,指引着数据存储和访问的航向。本文将带你深入Linux的文件系统结构,从基础概念到操作实践,通过代码示例揭示文件系统背后的逻辑与美学。准备好跟随我们的脚步,开启一场关于数据组织和管理的知识之旅。
|
1月前
|
存储 运维 安全
Linux命令stat:深入了解文件与文件系统状态
`stat`命令在Linux中用于显示文件和文件系统的详细状态,包括权限、大小、时间戳等。它通过读取inode获取信息,特点是显示全面、易用且支持多种参数,如`-c`自定义格式,`-f`查看文件系统状态,`-L`处理符号链接。例如,`stat example.txt`显示文件详情,`stat -c "%n 的大小是 %s 字节" example.txt`输出文件大小。理解`stat`有助于系统管理和故障排查。
|
1月前
|
存储 Linux Windows
【Linux】文件系统软硬链接的那些事儿
本文介绍了Linux文件系统的磁盘结构、逻辑结构以及文件和inode的关系,重点讲解了软链接和硬链接的区别,强调了它们在文件管理中的作用。
43 7
|
1月前
|
存储 缓存 固态存储
Linux操作系统之文件系统详解
Linux操作系统之文件系统详解
|
2月前
|
存储 Unix 数据管理
深入探讨Linux文件系统:从传统到现代
深入探讨Linux文件系统:从传统到现代
26 0
|
3月前
|
运维 安全 Linux
深入理解 Linux 文件系统的权限管理
【5月更文挑战第30天】 在 Linux 操作系统中,文件系统权限管理是维护系统安全与数据完整性的基石。本文旨在深入探讨 Linux 权限模型的核心概念、实现机制及其对系统安全性的影响。通过对用户身份、文件权限和访问控制列表(ACL)等关键元素的剖析,揭示权限管理在实际操作中的应用细节。文章还将讨论如何有效配置权限来优化系统性能和提升安全性,以及解决常见的权限问题的策略。
|
3月前
|
Linux PHP 数据安全/隐私保护
深入理解PHP7的返回值类型声明深入理解 Linux 文件系统的权限管理
【5月更文挑战第30天】在PHP7中,引入了返回值类型声明的特性。这一特性使得开发者可以在函数定义时指定函数应返回的值的类型。本文将详细解析返回值类型声明的用法,以及它在实际开发中的应用,帮助读者更好地理解和使用这一特性。