Lunix磁盘与文件系统管理

目录

 

1 认识Lunix文件系统

1.1 文件系统特性

1.2 Lunix的Ext2文件系统

1.2.1 data block (资料区块)

1.2.2  inode table (inode 表格) 

1.2.3 Superblock (超级区块)

1.2.4 Filesystem Description (文件系统描述说明)

1.2.5 block bitmap (区块对照表)

1.2.6 inode bitmap (inode 对照表)

1.2.7 dumpe2fs: 查询 Ext 家族 superblock 信息的指令

1.3 与目录树的关系

1.4 EXT2/EXT3/EXT4 文件的存取与日志式文件系统的功能

1.5 XFS文件系统查看描述命令 xfs_info

1.6 查看文件系统和挂载点df和评估容量du

1.7 磁盘的分区、格式化、检验与挂载

1.7.1 查询磁盘信息lsblk

1.7.2 blkid列出装置的UUID

1.7.3 查询磁盘的分区表类型和分区信息

1.7.4 使用gdisk/fdisk进行分区

1.7.5 用 gdisk 新增分区槽

1.7.6 格式化新建的分区建立文件系统

1.7.8 文件系统检验 xfs_repair 

1.7.9 文件系统挂载与卸除

1.7.10 开机自动挂载

1.8 文件系统的特殊观察与操作

1.8.1 查看容量浪费问题

1.8.2 利用 GNU 的 parted 进行分区行为


1 认识Lunix文件系统

1.1 文件系统特性

磁盘分区完毕后还需要进行格式化(format),之后操作系统才能够使用这个文件系统。这是因为每种操作系统所设定的文件属性/权限并不相同, 为了存放这些文件所需的数据,因此就需要将分区槽进行格式化,以成为操作系统能够利用的文件系统格式。

Linux 的正统文件系统则为 Ext2 (Linux second extended file system, ext2fs),通常我们可以称呼一个可被挂载的数据为一个文件系统。

文件除了内容之外,还具有许多的属性。文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到
inode 中,至于实际数据则放置到 data block 区块中。另外,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。

如果能够找到文件的 inode 的话,那么自然就会知道这个文件所放置数据的 block 号码。

 

1.2 Lunix的Ext2文件系统

我们知道 filesystem 里面可能含有的 inode/block/superblock 等。而标准的 Linux 文件系统 Ext2 就是使用这种 inode 为基础的文件系统!为方便管理,Ext2 文件系统在格式化的时候基本上是区分为多个区块群组 (block group) 的,每个区块群组都有独立的 inode/block/superblock 系统。

1.2.1 data block (资料区块)

data block 是用来放置文件内容数据地方,在 Ext2 文件系统中所支持的 block 大小有 1K, 2K 及4K 三种而已。在格式化时 block 的大小就固定了,且每个 block 都有编号,以方便 inode 的记录。

其他限制

1.2.2  inode table (inode 表格) 

inode 记录的文件数据包括:

该文件的存取模式(read/write/excute);

该文件的拥有者与群组(owner/group);

该文件的容量;

该文件建立或状态改变的时间(ctime);

最近一次的读取时间(atime);

最近修改的时间(mtime);

定义文件特性的旗标(flag),如 SetUID...;

该文件真正内容的指向 (pointer);

inode 其他特点:

每个 inode 大小均固定为 128 bytes (新的 ext4 与 xfs 可设定到 256 bytes);

每个文件都仅会占用一个 inode 而已;

承上,因此文件系统能够建立的文件数量与 inode 的数量有关;

系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与用户是否符合,若符合才能够开始实际
读取 block 的内容。

1.2.3 Superblock (超级区块)

Superblock 是记录整个 filesystem 相关信息的地方,没有 Superblock ,就没有这个 filesystem ,记录的信息包括:

block 与 inode 的总量;

未使用与已使用的 inode / block 数量;

block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128bytes 或 256bytes);

filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信
息;

 一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1 。

1.2.4 Filesystem Description (文件系统描述说明)

这个区段可以描述每个 block group 的开始与结束的 block 号码,以及说明每个区段 (superblock, bitmap, inodemap, data block) 分别介于哪一个 block 号码之间。

1.2.5 block bitmap (区块对照表)

block bitmap 记录使用与未使用的 block 号码。

1.2.6 inode bitmap (inode 对照表)

 inode bitmap 记录使用与未使用的 inode 号码。

1.2.7 dumpe2fs: 查询 Ext 家族 superblock 信息的指令

dumpe2fs  [options]  装置文件名

blkid <==这个指令可以叫出目前系统有被格式化的装置

选项与参数:

-b :列出保留为坏轨的部分

-h :仅列出 superblock 的数据,不会列出其他的区段内容!

1.3 与目录树的关系

文件系统会分配一个 inode 与至少一块 block 给该目录。其中,inode 记录该目录的相关权限与属性,并可记录分配到的那块 block 号码; 而 block 则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据。

想要实际观察 root 家目录内的文件所占用的 inode 号码时,可以使用 ls -i 这个选项来处理:

由于目录树是由根目录开始读起,因此系统透过挂载的信息可以找到挂载点的 inode 号码,此时就能够得到根目录的 inode 内容,并依据该 inode 读取根目录的 block 内的文件名数据,再一层一层的往下读到正确的档名。 

1.4 EXT2/EXT3/EXT4 文件的存取与日志式文件系统的功能

上一小节谈到的仅是读取而已,那么如果是新建一个文件或目录时,我们的文件系统是如何处理的呢?这个时候就得要 block bitmap 及 inode bitmap 的帮忙了!假设我们想要新增一个文件,此时文件系统的行为是:

1. 先确定用户对于欲新增文件的目录是否具有 w 与 x 的权限,若有的话才能新增;

2. 根据 inode bitmap 找到没有使用的 inode 号码,并将新文件的权限/属性写入;

3. 根据 block bitmap 找到没有使用中的 block 号码,并将实际的数据写入 block 中,且更新 inode 的 bloc指向数据;

4. 将刚刚写入的 inode 与 block 数据同步更新 inode bitmap 与 block bitmap,并更新 superblock 的内容;

数据的不一致 (Inconsistent) 状态

在文件在写入文件系统时,因为不知名原因导致系统中断(,所以写入的数据仅有 inode table 及 data block 而已, 最后一个同步更新中介数据的步骤并没有做完,此时就会发生 metadata 的内容与实际数据存放区产生不一致(Inconsistent) 的情况。

日志式文件系统

为避免数据不一致状态。日志式文件系统设计的基本功能:在filesystem 当中规划出一个区块,该区块专门在记录写入或修订文件时的步骤。

1.5 XFS文件系统查看描述命令 xfs_info

像 EXT 家族的 dumpe2fs 指令去观察 superblock 内容一样,xfs文件系统可以使用xfs_info 命令去观察!

1.6 查看文件系统和挂载点df和评估容量du

df [options]  目录或文件名

选项与参数:

-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;

-k :以 KBytes 的容量显示各文件系统;

-m :以 MBytes 的容量显示各文件系统;

-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;

-H :以 M=1000K 取代 M=1024K 的进位方式;

-T :连同该 partition 的 filesystem 名称 (例如 xfs) 也列出;

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

du [options]  目录或文件名

输出的数值数据为 1K 大小的容量单位

选项与参数:

-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。

-h :以人们较易读的容量格式 (G/M) 显示;

-s :列出总量而已,而不列出每个各别的目录占用容量;

-S :不包括子目录下的总计,与 -s 有点差别。

-k :以 KBytes 列出容量显示;

-m :以 MBytes 列出容量显示

1.7 磁盘的分区、格式化、检验与挂载

如果我们想要在系统里面新增一颗磁盘时,应该有哪些动作需要做的呢:

1. 对磁盘进行分区,以建立可用的 partition ;

2. 对该 partition 进行格式化 (format),以建立系统可用的 filesystem;

3. 若想要仔细一点,则可对刚刚建立好的 filesystem 进行检验;

4. 在 Linux 系统上,需要建立挂载点 (亦即是目录),并将他挂载上来;

1.7.1 查询磁盘信息lsblk

为了给磁盘分区,首先要知道磁盘是MBR 还是 GPT 格式的,用以决定采用 fdisk 或者是 gdisk 来处理分区。

lsblk [options]  [device]

选项与参数:

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

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

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

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

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

NAME:装置文件名

MAJ:MIN:其实核心认识的装置都是透过这两个代码来熟悉的!分别是主要:次要装置代码!

RM:是否为可卸除装置 (removable device),如光盘、USB 磁盘等等

SIZE:容量

RO:是否为只读装置的意思

TYPE:是磁盘 (disk)、分区槽 (partition) 还是只读存储器 (rom) 等输出

MOUTPOINT:挂载点

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

1.7.2 blkid列出装置的UUID

lsblk 可以使用 -f 来列出文件系统与装置的 UUID 数据,但也可以直接使用 blkid 来找出装置的 UUID 。

1.7.3 查询磁盘的分区表类型和分区信息

使用lsblk查询出磁盘名称之后,可以使用parted命令查询磁盘分区类型

1.7.4 使用gdisk/fdisk进行分区

注意:MBR 分区表使用 fdisk 分区, GPT 分区表使用 gdisk 分区。

使用『 p 』可以列出目前这颗磁盘的分区表信息,这个信息的上半部在显示整体磁盘的状态。 如上这个磁盘共有 40GB 左右的容量,共有 83886080 个扇区,每个扇区的容量为512bytes。 要注意的是,现在的分区主要是以扇区为最小的单位!下半部的分区表信息主要在列出每个分区槽的个别信息项目。每个项目的意义为:

Number:分区槽编号,1 号指的是 /dev/vda1 这样计算。

Start (sector):每一个分区槽的开始扇区号码位置

End (sector):每一个分区的结束扇区号码位置,与 start 之间可以算出分区槽的总容量

Size:就是分区槽的容量了

Code:在分区槽内的可能的文件系统类型。Linux 为 8300,swap 为 8200。不过这个项目只是一个提示而
已,不见得真的代表此分区槽内的文件系统喔!

Name:文件系统的名称等等

1.7.5 用 gdisk 新增分区槽

更新lunix核心

partprobe -s

查看磁盘分区表

cat   /proc/partitions

1.7.6 格式化新建的分区建立文件系统

『建置文件系统 (make filesystem)』所以使用的指令是 mkfs !而我们要建立的其实是 xfs 文件系统, 因此使用的是 mkfs.xfs 这个指令。

mkfs.xfs [-b bsize] [-d parms] [-i parms] [-l parms] [-L label] [-f] \  [-r parms] 装置名称

1.7.8 文件系统检验 xfs_repair 

当有 xfs 文件系统错乱才需要使用这个指令!所以,这个指令最好是不要用到啦!但有问题发生时,这个指令却又很重要。

xfs_repair [options]  装置名称

选项与参数:

-f :后面的装置其实是个文件而不是实体装置

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

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

1.7.9 文件系统挂载与卸除

挂载的先决条件:

单一文件系统不应该被重复挂载在不同的挂载点(目录)中;

单一目录不应该重复挂载多个文件系统;

要作为挂载点的目录,理论上应该都是空目录才是。

提示:挂载了文件系统之后,原目录下的东西就会暂时的消失

示例

umount 将装置文件卸除 

1.7.10 开机自动挂载

若想要开机挂载,那就直接到 /etc/fstab 里面去修修就行。

1.8 文件系统的特殊观察与操作

1.8.1 查看容量浪费问题

使用 ls -l 去查询某个目录下的数据时,第一行都会出现一个『total』的字样!指的是该目录下的所有数据所耗用的实际 block 数量 * block 大小的值。

从上面的特殊字体部分,那就是每个文件所使用掉 block 的容量!举例来说,那个 crontab 虽然仅有 451bytes , 不过他却占用了整个 block (每个 block 为 4K),所以将所有的文件的所有的 block 加总就得到 12Kbytes 那个数值了。 如果计算每个文件实际容量的加总结果,其实只有不到 5K ,这样就耗费掉好多容量了。

1.8.2 利用 GNU 的 parted 进行分区行为

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值