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


目录
相关文章
|
5天前
|
存储 Linux 文件存储
Linux文件系统
Linux文件系统 一切皆文件 在Linux中,“一切皆文件”的概念意味着系统中的所有资源,包括硬件设备、目录及进程等,均被视为文件。这种设计简化了操作和管理,具体包括: 普通文件:存储数据的常规文件。 目录文件:包含其他文件和子目录的文件。 进程文件:在/proc目录下代表系统中运行的进程。 设备文件:位于/dev目录,代表硬件设备。 网络字节流套接字文件:用于网络通信的数据流。 链接文件:指向另一个文件的符号链接或硬链接。 管道文件:用于进程间通信的文件。
30 7
|
2月前
|
存储 Linux 索引
Linux 下最主流的文件系统格式——ext
【9月更文挑战第8天】硬盘被划分为若干相同大小的块(Block),默认大小为4K,便于灵活管理文件数据。文件数据分散存放于这些块中,提高了数据添加、删除和插入的便利性。
|
3月前
|
编解码 Linux 程序员
深度探索Linux操作系统 —— 构建根文件系统2
深度探索Linux操作系统 —— 构建根文件系统
44 12
|
3月前
|
Linux Shell 网络安全
深度探索Linux操作系统 —— 构建根文件系统1
深度探索Linux操作系统 —— 构建根文件系统
51 6
|
3月前
|
存储 人工智能 数据管理
深入理解Linux操作系统之文件系统管理探索人工智能:从理论到实践的旅程
【8月更文挑战第30天】在探索Linux的无限可能时,我们不可避免地会遇到文件系统管理这一核心话题。本文将深入浅出地介绍Linux文件系统的基础知识、操作命令及高级技巧,帮助你更有效地管理和维护你的系统。从基础概念到实践应用,我们将一步步揭开Linux文件系统的神秘面纱。
|
3月前
|
存储 Linux 数据安全/隐私保护
在Linux中,如何创建文件系统的备份?
在Linux中,如何创建文件系统的备份?
|
3月前
|
存储 监控 Linux
|
3月前
|
存储 监控 Linux
|
3月前
|
存储 缓存 Linux
在Linux中,文件系统概念是什么?
在Linux中,文件系统概念是什么?
|
3月前
|
存储 Linux 文件存储
在Linux中,文件系统是如何组织的?
在Linux中,文件系统是如何组织的?