一、简述
1.分类
1.1)根据使用场景分类
Linux文件系统:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap
swap:交换分区
光盘:iso9660
Windows:fat32,ntfs
Unix:FFS,UFS,JFS2
网络文件系统:NFS,CIFS
集群文件系统:GFS2,OCFS2
分布式文件系统:ceph,moosefs,mogilefs,GlusterFS,Lustre
1.2)根据是否支持“journal(日志)”功能分类
日志型文件系统:ext3,ext4,xfs...
非日志型文件系统:ext2,vfat
2.文件系统的组成部分
内核中的模块:ext4,xfs,vfat
用户空间的管理工具:mkfs.ext4,mkfs.xfs,mkfs.vfat
二、使用
1.文件系统创建
1.1)mkfs命令
mkfs - 创建一个 Linux 文件系统。
A)格式
a.方式一
~]# mkfs.FS_TYPE /dev/DEVICE
mkfs.FS_TYPE:
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat
mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
# 设定卷标
-L 'LABEL'
b.方式二
~]# mkfs -t FS_TYPE /dev/DEVICE
FS_TYPE:
btrfs cramfs ext2 ext3 ext4 fat minix msdos vfat xfs
# 设定卷标
-L 'LABEL'
B)案例
# 查看需要分区的硬盘(这里新加了一块硬盘)
[root@wybaron_host1015 ~]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb
# 进行“ext4”格式的分区,设置卷标为“ext4_TEST”
[root@wybaron_host1015 ~]# mkfs.ext4 -L ext4_TEST /dev/sdb
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
无论如何也要继续? (y,n) y
文件系统标签=ext4_TEST
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2153775104
160 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, 1605632, 2654208,
4096000
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
# 查看分区块是否存在
[root@wybaron_host1015 ~]# fdisk -l /dev/sdb
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
# 根据卷标查看对应设备
[root@wybaron_host1015 ~]# blkid -L ext4_TEST
/dev/sdb
1.2)mke2fs命令
ext[2|3|4]文件系统专用的创建工具。
A)格式
~]# mke2fs [ -b block-size ] [ -i bytes-per-inode ] [ -j ][ -N number-of-inodes ] [ -m reserved-blocks-percentage ] [ -O feature[,...] ] [ -L volume-label ] [ -t fs-type ]
-b block-size:以字节为单位指定块的大小,常用格式:-b {1024|2048|4096}
-i bytes-per-inode:为数据空间每多少个字节创建一个inode(指定字节/索引的比率),此大小不应该小于block(块)大小,常用格式:-i #
-j:相当于“-t ext3”,mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-N number-of-inodes,为数据空间创建多少个inode,常用格式:-N #
-m reserved-blocks-percentage:为管理人员预留的空间占据的百分比,常用格式:-m #
-O feature[,...]:启用指定特性
-O ^feature[,...] 关闭指定特性
-L volume-label:指定卷标
-t fs-type:指定文件系统类型,常用格式:-t {ext2|ext3|ext4}
# inode节点数的选择
inode节点的大小一般是128字节或256字节。inode节点的总数,在格式化时就给定了,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为256字节,每1KB就设置一个inode,那么inode table的大小就会达到256MB,占整块硬盘的25.6%。(具体什么是inode,可参见“补充”的笔录)
B)案例
[root@wybaron_host1015 ~]# mke2fs -b 4096 -i 2048 -N 1000 -m 1 -L ext2_TEST -t ext2 /dev/sdb
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
无论如何也要继续? (y,n) y
文件系统标签=ext2_TEST
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2560 inodes, 5242880 blocks
52428 blocks (1.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=4294967296
160 block groups
32768 blocks per group, 32768 fragments per group
16 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: 完成
正在写入inode表: 完成
Writing superblocks and filesystem accounting information: 完成
[root@wybaron_host1015 ~]# df /dev/sdb
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 1919536 0 1919536 0% /dev
[root@wybaron_host1015 ~]# df -i /dev/sdb
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 479884 378 479506 1% /dev
1.3)mkswap命令
在一个设备上或者在一个文件里创建一个linux交换区,前提必须调整其分区的ID为82。
A)格式
~]# mkswap [OPTIONS] DEVICE [SIZE]
# 设定卷标
-L 'LABEL'
# 其它帮助可以使用“man mkswap”查看
B)案例
[root@wybaron_host1015 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x0521ca40 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):m
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition s system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):l
0 空 24 NEC DOS 81 Minix / 旧 Linu bf Solaris
1 FAT12 27 隐藏的 NTFS Win 82 Linux 交换 / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 隐藏的 C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux 扩展 c7 Syrinx
5 扩展 41 PPC PReP Boot 86 NTFS 卷集 da 非文件系统数据
6 FAT16 42 SFS 87 NTFS 卷集 db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux 纯文本 de Dell 工具
8 AIX 4e QNX4.x 第2部分 8e Linux LVM df BootIt
9 AIX 可启动 4f QNX4.x 第3部分 93 Amoeba e1 DOS 访问
a OS/2 启动管理器 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad 休 eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 扩展 (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC
11 隐藏的 FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq 诊断 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 隐藏的 FAT16 <3 61 SpeedStor ab Darwin 启动 f2 DOS 次要
16 隐藏的 FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 隐藏的 HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST 智能睡眠 65 Novell Netware b8 BSDI swap fd Linux raid 自动
1b 隐藏的 W95 FAT3 70 DiskSecure 多启 bb Boot Wizard 隐 fe LANstep
1c 隐藏的 W95 FAT3 75 PC/IX be Solaris 启动 ff BBT
1e 隐藏的 W95 FAT1 80 旧 Minix
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@wybaron_host1015 ~]# mkswap -L swap_TEST /dev/sdb1
正在设置交换空间版本 1,大小 = 20970492 KiB
LABEL=swap_TEST, UUID=bb487ba9-7865-4ced-9ac9-3b5c797047a5
[root@wybaron_host1015 ~]# fdisk -l /dev/sdb
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0521ca40
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 41943039 20970496 82 Linux swap / Solaris
2.文件系统查看
2.1)blkid命令
用于定位或输出块设备的属性信息。
A)格式
~]# blkid [OPTION]... [DEVICE]
-U UUID:根据指定的UUID来查找对应的设备
-L LABEL:根据指定的LABEL(卷标)来查找对应的设备
B)案例
[root@wybaron_host1015 ~]# blkid
/dev/sdb: LABEL="ext4_TEST" UUID="76ad0794-7b12-4e52-88dc-c19cf2313058" TYPE="ext4"
# 根据UUID定位设备
[root@wybaron_host1015 ~]# blkid -U 76ad0794-7b12-4e52-88dc-c19cf2313058
/dev/sdb
# 根据卷标定位设备
[root@wybaron_host1015 ~]# blkid -L ext4_TEST
/dev/sdb
2.2)dumpe2fs命令
用于查看设备超级块信息。
A)格式
~]# dumpe2fs [选项] device
-h 查看超级块信息
B)案例
[root@wybaron_host1015 ~]# dumpe2fs -h /dev/sdb
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:
Last mounted on:
Filesystem UUID: 19e2624d-40c1-4ec8-939d-c75dd5ca04d5
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 1310720
Block count: 5242880
Reserved block count: 262144
Free blocks: 5116558
Free inodes: 1310709
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 1024
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Thu Oct 4 12:30:26 2018
Last mount time: n/a
Last write time: Thu Oct 4 12:30:26 2018
Mount count: 0
Maximum mount count: -1
Last checked: Thu Oct 4 12:30:26 2018
Check interval: 0 ()
Lifetime writes: 132 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 81c6483f-42ad-43e8-bbf8-71242552c56c
Journal backup: inode blocks
Journal features: (none)
日志大小: 128M
Journal length: 32768
Journal sequence: 0x00000001
Journal start: 0
3.文件系统修改
3.1)e2label命令
更改ext2,ext3,ext4文件系统的标签、卷标。
A)格式
~]# e2label device [ new-label ]
B)案例
[root@wybaron_host1015 ~]# blkid -L ext4_TEST
/dev/sdb
[root@wybaron_host1015 ~]# e2label /dev/sdb ext4_test
[root@wybaron_host1015 ~]# blkid -L ext4_test
/dev/sdb
3.2)tune2fs命令
调整ext2,ext3,ext4文件系统的可调节参数。
A)格式
~]# tune2fs [ -l ] [ -L volume-name ] [ -j ] [ -m reserved-blocks-percentage ] [ -o [^]mount-options[,...] ] [ -O [^]feature[,...] ] [ -U UUID ] device
-l:查看指定文件系统超级块(super block)信息
-L volume-name:修改卷标
-j:将ext2升级为ext3
-m reserved-blocks-percentage:预留给管理员的空间百分比
-o [^]mount-options[,...]:调整文件系统的默认挂载选项
-O [^]feature[,...]:文件系统属性启用或禁用
-U UUID:修改UUID号
B)案例
[root@wybaron_host1015 ~]# mkfs.ext2 -L ext2_TEST /dev/sdb
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
无论如何也要继续? (y,n) y
文件系统标签=ext2_TEST
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=4294967296
160 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, 1605632, 2654208,
4096000
Allocating group tables: 完成
正在写入inode表: 完成
Writing superblocks and filesystem accounting information: 完成
[root@wybaron_host1015 ~]# tune2fs -j -L ext3_TEST /dev/sdb
tune2fs 1.42.9 (28-Dec-2013)
Creating journal inode: 完成
[root@wybaron_host1015 ~]# mkdir data
[root@wybaron_host1015 ~]# mount /dev/sdb data/
[root@wybaron_host1015 ~]# df -lhT
文件系统 类型 容量 已用 可用 已用% 挂载点
...
/dev/sdb ext3 20G 45M 19G 1% /root/data
4.文件系统检测
e2fsck命令
用于检测和修复ext2,ext3,ext4文件系统的工具,需要在未挂载状态进行操作。
A)格式
~]# e2fsck [ OPTIONS ] DEVICE
-y:自动答复“yes”,进行e2fsck非交互式操作
-f:强制进行检测和修复
# e2fsck退出码及其意义
0 没有错误
1 文件系统错误已修复
2 文件系统错误已修复,建议重启系统
4 文件系统错误修复失败
8 操作失误
16 语法错误
32 用户取消操作
128 共享库错误
B)案例
[root@wybaron_host1015 ~]# e2fsck -y /dev/sdb
e2fsck 1.42.9 (28-Dec-2013)
/dev/sdb is mounted.
e2fsck: 无法继续, 中止.
[root@wybaron_host1015 ~]# mount /dev/sdb
mount: /dev/sdb 已经挂载或 /root/data 忙
/dev/sdb 已经挂载到 /root/data 上
[root@wybaron_host1015 ~]# umount /root/data/
[root@wybaron_host1015 ~]# mount /dev/sdb
mount: 在 /etc/fstab 中找不到 /dev/sdb
[root@wybaron_host1015 ~]# e2fsck -y /dev/sdb
e2fsck 1.42.9 (28-Dec-2013)
ext3_TEST: clean, 11/1310720 files, 126322/5242880 blocks
[root@wybaron_host1015 ~]# e2fsck -f /dev/sdb
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
ext3_TEST: 11/1310720 files (0.0% non-contiguous), 126322/5242880 blocks
三、补充
inode
1.基础
inode(发音:eye-node)译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、属主及属组等。
读取和修改一个文件的时候:
a)首先根据文件名,找到这个文件的Inode-no(节点数)。
b)当找到个文件的Inode-no时,就会根据这个number数在inodetable中找到对应的条目。
c)inodetable(上图)中的信息: 从左到右依次是:节点数、文件类型、文件的权限、硬链接数、用户ID、组ID、文件的大小、时间戳记,最后为指向硬盘上存放数据的数据块的指针(即:inodetable主要用于存储除开文件名,文件具体内容的一张表)。
综上可知:如果某个文件系统或分区的 inode 使用率达到百分之百,即使磁盘仍有空间,那么依旧无法在该文件系统中创建更多的文件、设备、目录等。
2.案例
问题:
在一台Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了90%,还有50G的剩余空间,用df -i查看/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。
原因分析:
/data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。
解决方案:
删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。
用软连接将空闲分区/opt/data中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题:
~]# ln -s /opt/data/newcache /data/cache