Linux文件系统
什么是文件系统
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。
在linux中,我们可以通过查看/lib/modules/$(uname –r)/kernel/fs里面的东西来查看我们的系统能支持什么文件系统。
文件系统类型
Linux文件系统:
ext2(Extended file system), ext3,ext4, xfs(SGI) , btrf(Oracle) , reiserfs, jfs(AIX) , swap
光盘:
iso9660
Windows:
FAT32, exFAT,NTFS
Unix:
FFS(fast) , UFS(unix) , JFS2
网络文件系统:
NFS, CIFS
集群文件系统:
GFS2, OCFS2(oracle)
分布式文件系统:
fastdfs,ceph, moosefs, mogilefs,glusterfs, Lustre
RAW:
未经处理或者未经格式化产生的文件系统
根据其是否支持"journal"功能:
日志型文件系统: ext3, ext4, xfs, ...
非日志型文件系统: ext2, vfat
文件系统的组成部分:
内核中的模块: ext4, xfs, vfat
用户空间的管理工具: mkfs.ext4, mkfs.xfs,mkfs.vfat
Linux的虚拟文件系统: VFS
查前支持的文件系统: cat /proc/filesystems
什么是VFS
VFS的全称是虚拟文件系统。它的作用就是提供一个接口用于用户使用不同的文件系统,比如我们的一个磁盘格式化成ext4,ext3,xfs三个分区,由于是不同的文件系统,所以在兼容性上有着很大的差异,此时我们的VFS就在我们和这些不同的文件系统建立一个接口,使得我们不必过多的考虑不同文件系统的兼容性。直接对文件系统操作。
类型 |
支持限制 |
Root分区 |
Boot分区 |
注释 |
单节点 |
||||
xfs |
500T |
yes |
yes |
默认分区格式 |
ext4 |
50T |
yes |
yes |
兼容ext3/ext2 |
btrf |
50T |
yes |
yes |
技术预览 |
网络/多节点 |
||||
gfs2 |
2-16个节点 |
Yes |
No |
集群文件共享存储 |
创建文件系统
当我们在给磁盘分完区以后,下一步要做的就是创建文件系统,也就是我们所说的格式化。上面我们列出了很多文件系统,以后我们要是在学习的越深,接触到的文件系统也就越多,现在,我们仅对ext系列的文件系统的创建,修改,查询进行学习。
mkfs命令:
mkfs.fs_type /dev/sd##
fs_type 包括:ext4,xfs,btrfs,vfat
mkfs –t fs_type /dev/sd##
-L “LABEL” :设定卷标
这个命令可以创建多个文件系统,并非仅能创建ext系列
[root@CT731 ~]# mkfs.ext4 /dev/sdb1
[root@CT731 ~]# mkfs -t ext4 /dev/sdb2
[root@CT731 ~]# mkfs -t ext4 -L TEST /dev/sdb3
[root@CT731 ~]# blkid /dev/sdb3 /dev/sdb3: LABEL="TEST" UUID="771f8d20-1308-4787-803d-8bdb80e2b690" TYPE="ext4"
mke2fs命令:
ext系列文件系统专用管理工具
-t {ext2|ext3|ext4}
-b {1024|2048|4096} 指定block的大小
-L 'LABEL'
-j: 相当于 -t ext3
-i n: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小(bytes-per-inode)
-N n:指定分区中创建多少个inode
-I :一个inode记录占用的磁盘空间大小, 128---4096
-m n: 默认5%,为管理人员预留空间占总空间的百分比
-O feature[,...]:启用指定特性 (不常用)
-O ^feature:关闭指定特性
[root@CT731 ~]# mke2fs -t ext4 -b 2048 -L TEST /dev/sdb1
[root@CT731 ~]# blkid /dev/sdb1 /dev/sdb1: LABEL="TEST" UUID="abc55e30-0c5b-40d5-99e3-c89dc4d62c27" TYPE="ext4"
[root@CT731 ~]#dumpe2fs -h /dev/sdb1 dumpe2fs 1.42.9 (28-Dec-2013) Filesystem volume name: TEST Last mounted on: <not available> Filesystem UUID: abc55e30-0c5b-40d5-99e3-c89dc4d62c27 Filesystem magic number: 0xEF53... ... Free blocks: 10280400 Free inodes: 1310709 First block: 0 Block size: 2048 Fragment size: 2048 Group descriptor size: 64
... ...
tune2fs命令:
重新设定ext系列文件系统可调整参数的值
-l:查看指定文件系统超级块信息; super block
-L 'LABEL':修改卷标
-m n:修预留给管理员的空间百分比
-j: 将ext2升级为ext3
-O: 文件系统属性启用或禁用, –O ^has_journal
-o: 调整文件系统的默认挂载选项, –o ^acl
-U UUID: 修改UUID号
[root@CT731 ~]# tune2fs -l /dev/sdb1 tune2fs 1.42.9 (28-Dec-2013) Filesystem volume name: TEST Last mounted on: <not available> Filesystem UUID: abc55e30-0c5b-40d5-99e3-c89dc4d62c27 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 huge_file uninit_bg dir_nlink extra_isize Filesystem flags: signed_directory_hash Default mount options: user_xattr acl ... ...
[root@CT731 ~]# tune2fs -L "test2" /dev/sdb1 tune2fs 1.42.9 (28-Dec-2013) [root@CT731 ~]# blkid /dev/sdb1 /dev/sdb1: LABEL="test2" UUID="abc55e30-0c5b-40d5-99e3-c89dc4d62c27" TYPE="ext4"
文件系统的LABEL
指向设备的另一种方法,与设备无关
blkid:块设备属性信息查看
blkid [OPTION]... [DEVICE]
-U UUID: 根据指定的UUID来查找对应的设备
-L LABEL:根据指定的LABEL来查找对应的设备
[root@CT731 ~]# blkid /dev/sdb1 /dev/sdb1: LABEL="test2" UUID="abc55e30-0c5b-40d5-99e3-c89dc4d62c27" TYPE="ext4"
[root@CT731 ~]# blkid -L test2
/dev/sdb1
e2label:显示或设置ext系列文件系统的LABEL
e2label DEVICE [LABEL]
[root@CT731 ~]#e2label /dev/sdb1
test2
findfs:查找分区
findfs LABEL=<label>
findfs UUID=<uuid>
[root@CT731 ~]#findfs LABEL=test2
/dev/sdb1
Superblock
Superblock是一个记录整个文件系统相关信息的块,可以说,没有superblock就没有了文件系统了。并且每个格式化的分区里面都会有superblock。
它记录的东西有:
1.block和inode的总量
2.未使用和已使用的inode/block数量
3.block和inode的大小
4.filesystem的挂载时间,最近一次写入数据的时间,最近一次检验侧磁盘的时间等
5.一个valid bit数值,若此文件系统被挂载,则值为0,没挂载,则为1
我们可以使用dumpe2fs查看文件系统的超级块和组信息
dumpe2fs命令:
用于打印“ext2/ext3”文件系统的超级块和快组信息。
-h 只查看超级块信息
文件系统检测和修复
1. 常发生于死机或者非正常关机之后
2. 挂载为文件系统标记为“no clean”
3. 注意:一定不要在挂载状态下修复
fsck: File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
-p: 自动修复错误
-r: 交互式修复错误
FS_TYPE一定要与分区上已经文件类型相同
[root@CT731 ~]# fsck.ext4 /dev/sdb1 e2fsck 1.42.9 (28-Dec-2013) test2: clean, 11/1310720 files, 205360/10485760 blocks
[root@CT731 ~]#fsck -t ext4 -p /dev/sdb1 fsck from util-linux 2.23.2 test2: clean, 2518/1310720 files, 281386/10485760 blocks
e2fsck: ext系列文件专用的检测修复工具
-y:自动回答为yes
-f:强制修复
破坏分区
[root@CT731 ~]# dd if=/dev/zero of=/dev/sdb1 bs=1 count=2048 2048+0 records in 2048+0 records out 2048 bytes (2.0 kB) copied, 0.309404 s, 6.6 kB/s
使用fsck检测
[root@CT731 ~]# fsck -t ext4 -p /dev/sdb1 fsck from util-linux 2.23.2 fsck.ext4: Bad magic number in super-block while trying to open /dev/sdb1 /dev/sdb1: The superblock could not be read or does not describe a correct ext2 filesystem. If the device is valid and it really contains an ext2 filesystem (and not swap or ufs or something else), then the superblock is corrupt, and you might try running e2fsck with an alternate superblock: e2fsck -b 8193 <device>
没有恢复,我们使e2fsck 恢复
[root@CT731 ~]#e2fsck -y /dev/sdb1 |less e2fsck 1.42.9 (28-Dec-2013) ext2fs_open2: Bad magic number in super-block e2fsck: Superblock invalid, trying backup blocks... test2 was not cleanly unmounted, check forced. Pass 1: Checking inodes, blocks, and sizes ... ...
小面积的破坏是可以恢复的,但是大面积的损坏(破坏备份区)可能无法恢复,