侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 744 篇文章
  • 累计创建 64 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

Linux基础(32)之文件系统管理

zze
zze
2019-10-22 / 0 评论 / 0 点赞 / 594 阅读 / 9375 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

文件系统的类型

目前常见的文件系统如下:

  • CentOS 5 中使用的 ext2、ex3;
  • CentOS 6 中使用的 ext4;
  • 早期在 Unix 中使用的 xfs;
  • CentOS 7 中使用的 btrfs、reiserfs、jfs;
  • 交换分区使用的文件系统 swap;
  • Windows 中使用的文件系统 fat32、ntfs;
  • 光盘使用的 iso9660;
  • Unix 上常用的文件系统 FFS、UFS、JFS2;
  • 网络文件系统 NFS、CIFS;
  • 集群文件系统 GFS2、OCFS2;
  • 分布式文件系统 ceph、moosefs、mogilefs、GlusterFS、Lustre;

Windows 中的 fat32 格式在 Linux 下识别为 vfat。

根据其是否支持“journal”的功能还可将文件系统分为如下两类:

  • 日志型文件系统:ext3、ext4、xfs 等等..;
  • 非日志型文件系统:ext2、vfat;

文件系统的组成部分

  • 内核中的模块:ext4、xfs、vfat 等等;
  • 用户空间的管理工具:mkfs.ext4、mkfs.xfs、mkfs.vfat;‘

虚拟文件系统VFS

Linux 是一个非常优秀的操作系统,它是免费的,而且很稳定。 Linux 所支持的文件系统高达十几个,除了为它量身打造的 Ext2 之外,它还支持了 Minix,FAT,VFAT,NFS,NTFS…等等。
所谓 VFS 就是 Virtual File System 虚拟文件系统,也称为虚拟文件系统开关(Virtual Filesystem Switch)。
这是 Linux 文件系统对外的接口。任何要使用文件系统的程序都必须经由这层接口来使用它。
VFS 是一个异构文件系统之上的软件粘合层(注:有时也把 VFS 称为可堆叠的文件系统(Stackable Filesystem),因为 VFS 可以无缝地使用多个不同类型的文件系统,就像把多个文件系统堆叠在一起一样,故而得名)。通过 VFS,可以为访问文件系统的系统调用提供一个统一的抽象接口。
VFS 最早由 Sun 公司提出以实现NFS(Network FileSystem,网络文件系统)。但是现在很多 Unix 系统都采用了 VFS(包括Linux、FreeBSD、Solaris等)。
VFS 的作用就是采用标准的 Unix 系统调用读写位于不同物理介质上的不同文件系统。VFS 是一个可以让 open()、read()、write() 等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。在古老的 DOS 操作系统中,要访问本地文件系统之外的文件系统需要使用特殊的工具才能进行。而在 Linux 下,通过 VFS,一个抽象的通用访问接口屏蔽了底层文件系统和物理介质的差异性。
每一种类型的文件系统代码都隐藏了实现的细节。因此,对于VFS层和内核的其它部分而言,每一种类型的文件系统看起来都是一样的。
在Linux中,VFS采用的是面向对象的编程方法。

此段摘自百度百科。

查看支持的文件系统

对 CentOS 7 而言,可以通过查看 /proc/filesystems 来获知当前系统支持哪些类型的文件系统。例:

[root@localhost ~]# cat /proc/filesystems
nodev	sysfs
nodev	rootfs
...
nodev	configfs
nodev	devpts
nodev	hugetlbfs
nodev	autofs
nodev	pstore
nodev	mqueue
nodev	selinuxfs
	xfs

前面没 nodev 的表示当前该类型文件系统正在使用。
要使用文件系统必须安装与之类型对应的内核模块,通过 lsmod 可看到已在内核装载的所有模块。例:

[root@localhost ~]# lsmod
Module                  Size  Used by
ip6t_rpfilter          12595  1 
ipt_REJECT             12541  2 
nf_reject_ipv4         13373  1 ipt_REJECT
ip6t_REJECT            12625  2 
nf_reject_ipv6         13717  1 ip6t_REJECT
xt_conntrack           12760  11 
ip_set                 45644  0 
nfnetlink              14490  1 ip_set
ebtable_nat            12807  1 
...

文件系统的格式化工具

mkfs

要把一个分区格式化为指定类型的文件系统,我们需要借助用户空间的管理工具来实现。CentOS 7 默认就提供了很多类型文件系统的工具,如下:

[root@localhost ~]# mkfs
mkfs         mkfs.btrfs   mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    mkfs.minix   mkfs.xfs 

对 CentOS 6 来说推荐的文件系统是 ext4,CentOS 7 自带了 btrfs,xfs 在 CentOS 6 和 CentOS 7 中皆可使用。

要将指定分区格式化为指定类型的文件系统,只需要使用对应的管理工具即可。
例:将分区 /dev/sda3 格式化为 btrfs 文件系统。

[root@localhost ~]# mkfs.btrfs /dev/sda3
btrfs-progs v4.9.1
See http://btrfs.wiki.kernel.org for more information.

Label:              (null)
UUID:               ad8de5e9-9d43-42dd-bec7-4cfe07df8a96
Node size:          16384
Sector size:        4096
Filesystem size:    5.00GiB
Block group profiles:
  Data:             single            8.00MiB
  Metadata:         DUP             256.00MiB
  System:           DUP               8.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  1
Devices:
   ID        SIZE  PATH
    1     5.00GiB  /dev/sda3

如果要查看指定分区的文件系统相关属性,则可使用 blkid 命令。
例:查看 /dev/sda3 使用的文件系统类型。

[root@localhost ~]# blkid /dev/sda3
/dev/sda3: UUID="a06a7f30-2582-4b2c-b560-5b8a7e7d0ead" UUID_SUB="fce605d2-29b1-4f46-ac53-4c3d8fe6a618" TYPE="btrfs"

使用管理工具格式化分区时还可以使用 -L 指定卷标。
例:格式化 /dev/sda5 分区为 ext4 文件系统,指定其卷标为 MyData

[root@localhost ~]# mkfs.ext4 /dev/sda5 -L MyData
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=MyData
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@localhost ~]# blkid /dev/sda5
/dev/sda5: LABEL="MyData" UUID="d21f6294-ba6c-4855-9a74-1bcc66b9b508" TYPE="ext4" 

如果要使用 mkfs.FSTYPE /dev/DEVICE 要将一个已存在文件系统的分区格式化,需指定 -f 选项来强制格式化。
除了上述方式,还可使用 mkfs -t FSTYPE /dev/DEVICE 的方式来执行格式化操作,-t 选项用来指定文件系统的类型,该命令同样可以使用 -L 来指定卷标。

mke2fs

上面 mkfs 能支持大部分类型文件系统的格式化,而 mke2fs 只是支持 ext 系列的文件系统的格式化,如 ext2ext3ext4
常用选项:

  • -t:指定文件系统类型,只支持 ext2ext3ext4
  • -b:指定文件系统的块大小,默认的块大小为 4096;
  • -L:指定文件系统的卷标;
  • -j:相当于 mke2fs -t ext3
  • -i:为数据空间中指定的数量的字节创建一个 inode,此大小不应该小于 block 大小;
  • -N:直接指定数据空间创建的 inode 数;
  • -m:为管理人员预留的空间占据的百分比;
  • -O FEATURE[,...]:启用指定特性,使用 -O ^FEATURE 来关闭指定特性;

inode 译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。

其它常用工具

blkid

上面已经简单使用了 blkid 命令,该命令的作用就是用来查看块设备的属性信息。
使用格式:

blkid [OPTION] [DEVICE]

常用选项:

  • -U:根据 UUID 来查找设备;
  • -L 根据指定的卷标来查找设备;

不指定选项及参数时为显示所有设备信息,例:

[root@localhost ~]# blkid 
/dev/sda3: UUID="a06a7f30-2582-4b2c-b560-5b8a7e7d0ead" UUID_SUB="fce605d2-29b1-4f46-ac53-4c3d8fe6a618" TYPE="btrfs" 
/dev/sda5: LABEL="MyData" UUID="d21f6294-ba6c-4855-9a74-1bcc66b9b508" TYPE="ext4" 
/dev/sda1: UUID="3c27050f-4338-4e90-aeb2-f1fe6804c183" TYPE="xfs" 
/dev/sda2: UUID="S1BTHO-P7n0-lPWe-nU8s-D5UT-9vWK-NpRxZM" TYPE="LVM2_member" 
/dev/mapper/centos-root: UUID="fd5212ac-6acd-4f92-aebd-dd337491bec7" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="eb7a8253-d3e5-4185-a05d-1f2d2977d339" TYPE="swap" 

e2label

e2label 命令用来管理 ext 系列文件系统的卷标信息。
例:查看 /dev/sda5 的卷标。

[root@localhost ~]# e2label /dev/sda5 
MyData

例:设置 /dev/sda5 的卷标为 SDAFIVE

[root@localhost ~]# e2label /dev/sda5 SDAFIVE
[root@localhost ~]# e2label /dev/sda5
SDAFIVE

tune2fs

重新设定 ext 系列文件系统可调整参数的值。
常用选项:

  • -l:查看指定文件系统的超级块(super block)信息;
  • -L:修改卷标;
  • -m:修改预留给管理员的空间百分比;
  • -j:启用日志记录属性,将 ext2 升级为 ext3;
  • -O:文件系统属性启用或禁用,直接指定属性表示启用,属性前加 ^ 字符表示禁用;
  • -o:调整文件系统默认的挂载选项,同样可以使用 ^ 字符取消挂载;
  • -u UUID:修改 UUID 号;

文件系统中的多个块可以组成一个数据区,这个数据区的信息就保存在超级块中,超级块中记录了这个数据区从哪儿起始,从哪儿结束等信息。如果超级块挂了,那么整个文件系统就挂了。超级块信息不是独立存放的,而是存放在元数据区,为了避免超级块挂掉,每个超级块还有好几个副本。

dumpe2fs

使用 dumpe2fs /dev/DEVICE 不仅可以查看超级块信息,还可以查看到具体的块组信息。
如果仅查看超级块信息,则可指定 -h 选项。

mkswap

mkswap 命令用来创建交换分区。
使用格式:

mkswap [OPTIONS] DEVICE

注意:要将一个分区设置为交换分区前,需将分区的 id 设置为 82(对应 swap / Solaris 类型的分区)。

设置分区的 id 可使用上篇【磁盘管理】中提到的 fdisk 的子命令 t

fsck

fsck 全称 File System Check,该命令的作用是可用来对文件系统进行检测。
它的使用和 mkfs 命令也很接近,可使用 fsck.FSTYPE 这种形式来对指定类型的文件系统进行检测,也可通过 fsck -t FSTYPE 完成同样的操作。
例:对文件系统类型为 ext4 的分区 /dev/sda5 进行检查,下面两种方式效果相同。

[root@localhost ~]# fsck -t ext4 /dev/sda5
fsck,来自 util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
SDAFIVE: clean, 11/327680 files, 58462/1310720 blocks
[root@localhost ~]# fsck.ext4 /dev/sda5
e2fsck 1.42.9 (28-Dec-2013)
SDAFIVE: clean, 11/327680 files, 58462/1310720 blocks

要注意的是,命令指定的文件系统一定要和分区已有的真正的文件系统对应相同。

常用选项:

  • -a:自动修复错误;
  • -r:交互式修复错误;

e2fsck

创建文件系统工具 mkfs 有与之对应的 mke2fs 来专门创建 ext 系列文件系统,文件系统检测工具 fsck 也有与之对应的 e2fsck 来专门对 ext 系列的文件系统进行检测。
常用选项:

  • -y:自动修复;
  • -f:强制修复;
0

评论区