文件系统进阶(上)

一、文件系统类型

  • Linux文件系统: ext2, ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap
  • 光盘:iso9660
  • Windows:fat32, ntfs
  • Unix: FFS(fast), UFS(unix), JFS2
  • 网络文件系统:NFS, CIFS
  • 集群文件系统:GFS2, OCFS2(oracle)
  • 分布式文件系统:ceph, moosefs, mogilefs, fastdfs,glusterfs, Lustre
  • RAW:未经处理或者未经格式化产生的文件系统

文件根据其是否支持“日志(journal)”功能可分为两类:

  • 有日志:ext3, ext4, xfs
  • 无日志:ext2

小贴士:日志文件系统:

一种文件系统,指在文件系统发生变化时,先把相关的信息写入一个被称为日志的区域,然后再把变化写入主文件系统的文件系统。在文件系统发生故障(如内核崩溃或突然停电)时,日志文件系统更容易保持一致性,并且可以较快恢复。

二、虚拟文件系统

虚拟文件系统也成为VFS。

VFS存在的意义:

  • 1.向上,对应用层提供一个标准的文件操作接口;
  • 2.对下,对文件系统提供一个标准的接口,以便其他操作系统的文件系统可以方便的移植到Linux上;
  • 3.VFS内部则通过一系列高效的管理机制,比如inode cache, dentry cache 以及文件系统的预读等技术,使得底层文件系统不需沉溺到复杂的内核操作,即可获得高性能;
  • 4.此外VFS把一些复杂的操作尽量抽象到VFS内部,使得底层文件系统实现更简单。

VFS架构图

三、文件系统的组成

文件系统管理分两部分组成:

  • 文件系统内核模块:如 ext4, xfs, vfat...
  • 文件系统管理工具:如 mkfs.ext4, mkfs.xfs,mkfs.vfat...

查看当前系统支持的文件系统类型

[[email protected] ~]# cat /proc/filesystems 
nodev   sysfs
nodev   rootfs
nodev   bdev
nodev   proc
...

四、文件系统选择

1、大量小文件(LOSF, Lost of small files)I/O应用(如小图片)

Reiserfs(首选), Ext4文件系统适合这类负载特征,IO调度算法选择deadline,block size = 4096, ext4关闭日志功能。

2、大文件I/O应用(如视频下载、流媒体)

EXT4文件系统适合此类负载特征,IO调度算法选择anticipatory, block size = 4096, 关闭日志功能,启用extent(default)。

3、SSD文件系统选择

EXT4/Reiserfs可以作为SSD文件系统,但未对SSD做优化,不能充分发挥SSD性能,并影响SSD使用时间。 Btrfs对SSD作了优化,mount通过参数启用。但Btrfs仍处于实验阶段,生产环境谨慎使用。

五、创建与管理文件系统

1.mkfs命令

格式:

mkfs -t <ext4|xfs|btrfs|vfat> /dev/DEVICE

常用选项:

-t FS_TYPE:指定文件系统类型
-L LABEL:指定卷标名称

实例:

[[email protected] ~]# mkfs -t ext4 -L "YOUNG" /dev/sdb
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=YOUNG
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
First data block=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: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

2.mkfs.FS_TYPE命令

格式:

mkfs.FS_TYPE /dev/DEVICE

实例:

[[email protected] ~]# mkfs.ext4 /dev/sdb
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
...

3.mke2fs命令

mke2fs专用于ext系列文件系统的创建于管理。

常用选项:

-t {ext2|ext3|ext4}:指定文件系统
-b {1024|2048|4096}: 指定块大小
-L LABEL:卷标,即分区名称
-j: 相当于“mke2fs -t ext3”
    mkfs -t ext3 = mke2fs -t ext3 = mke2fs -j = mke2fs -O has_journal
-i #: 为数据空间中的每多少字节创建一个inode;此字节数不应该小于块大小;比例关系;
-I: 一个inode记录大小128---4096
-N #:直接指定元数据区有多少个inode;
-m #: 指定为管理预留管理空间占据总空间的百分比;默认为5%
-O FEATURE[,...]:指定启用分区的某特殊特性
-O ^FEATURE:关闭指定特性
    -O has_journal:启用日志
    -O ^has_journal:关闭关闭

实例:

[[email protected] ~]# mke2fs -t ext4 -b 4096 -L ‘young‘-i 4096 -N 100000 -I 128 -m 6 -O has_journal /dev/sdb
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=young
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
102400 inodes, 5242880 blocks
314572 blocks (6.00%) reserved for the super user
...

4.e2lablel命令

e2lablel命令用于卷标查看及管理。

格式:

e2label DEVICE [LABEL]

实例:

[[email protected] ~]# e2label /dev/sdb
young
[[email protected] ~]# e2label /dev/sdb "GEEK"
[[email protected] ~]# e2label /dev/sdb
GEEK

5.blkid命令

blkid命令用于块设备属性信息显示。

格式:

blkid [OPTIONS] [DEVICE]

常用选项:

-U UUID: 列出某UUID对应的设备
-L LABEL: 列出使用此LABEL设备

实例:

[[email protected] ~]# blkid 
/dev/sdb: LABEL="GEEK" UUID="2e564b3f-e542-4bef-aa88-d70935c5c5fb" TYPE="ext4" 
/dev/sr0: UUID="2015-12-09-22-36-30-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sda1: UUID="812a29ec-11dd-4fa6-b373-c4b42fb80162" TYPE="xfs" 
/dev/sda2: UUID="3b67c557-763b-41f2-aff0-4810b0324128" TYPE="xfs" 
/dev/sda3: UUID="86e06c71-0806-4463-bf6d-490a28cb12b6" TYPE="xfs" 
/dev/sda5: UUID="431c5b57-a52d-4fcc-8845-f984c463b78f" TYPE="swap" 
[[email protected] ~]# ^C
[[email protected] ~]# blkid -U 2e564b3f-e542-4bef-aa88-d70935c5c5fb
/dev/sdb
[[email protected] ~]# blkid /dev/sdb
/dev/sdb: LABEL="GEEK" UUID="2e564b3f-e542-4bef-aa88-d70935c5c5fb" TYPE="ext4" 
[[email protected] ~]# blkid -L "GEEK" 
/dev/sdb

6.dumpe2fs命令

dumpe2fs用于ext系列文件系统的超级块信息查看。

格式:

dumpe2fs [OPTIONS] DEVICE

常用选项:

-h: 仅显示超级块信息

实例:

[[email protected] ~]# dumpe2fs /dev/sda1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          /boot
Filesystem UUID:          23048871-a3fd-4d25-92da-5c39459bf7c6
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super 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:              51200
Block count:              204800
Reserved block count:     10240
Free blocks:              64456
Free inodes:              49329
First block:              1
Block size:               1024
Fragment size:            1024
Reserved GDT blocks:      256
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         2048
Inode blocks per group:   256
Flex block group size:    16
Filesystem created:       Tue Jul 19 19:11:41 2016
Last mount time:          Tue Jan 31 02:35:52 2017
Last write time:          Tue Jan 31 02:35:52 2017
Mount count:              143
Maximum mount count:      -1
Last checked:             Tue Jul 19 19:11:41 2016
Check interval:           0 (<none>)
Lifetime writes:          332 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      ac8bb143-702c-4f17-80fd-afda06b8763e
Journal backup:           inode blocks
Journal features:         journal_incompat_revoke
Journal size:             4096k
Journal length:           4096
Journal sequence:         0x000002a7
Journal start:            1

Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
  Checksum 0x70bd, unused inodes 214
  Primary superblock at 1, Group descriptors at 2-2
  Reserved GDT blocks at 3-258
  Block bitmap at 259 (+258), Inode bitmap at 275 (+274)
  Inode table at 291-546 (+290)
  3545 free blocks, 216 free inodes, 229 directories, 214 unused inodes
  Free blocks: 4648-8192
  Free inodes: 34, 1834-2048
...

innode与超级块关系图:

超级块:超级块(superblock)的作用是存储文件系统的大小、有多少是空的和已经填满的占多少,以及他们各自的总数和其他诸如此类的信息。要使用一个分区来进行数据访问,那么第一个要访问的就是超级块。所以,超级块坏了,那磁盘也就基本没救了。

超级块占用1号物理块,就是文件系统的控制块,超级块包括:文件系统的大小、空闲块数目、空闲块索引表、空闲i节点数目、空闲i节点索引表、封锁标记等。超级块是系统为文件分配存储空间、回收存储空间的依据。

所以为了防止超级块数据损坏,就需要对超级块数据进行备份,以便于损坏时可以修复。

  • indoe bitmap (indoe对照表): 用来记录当前文件系统的indoe哪些是已经使用的,哪些又是未使用的。
  • block bitmap (块对照表): 用来记录当前文件系统哪些block已经使用,哪些又是未使用的。
  • inode table (inode 表格):inode是用来记录文件的属性以及该文件实际数据所在的block的号码。
  • GDT(Global Descriptor Table):用来描述每个block group开始和结束的block号码以及每个区段位于哪一个block号码之间。相当于文件系统描述的是每个block group的信息。
  • data blocks:数据块,用于存放数据

7.tune2fs命令

tune2fs用于重新设定可ext系统文件系统中的可调整参数。

格式:

tune2fs [OPTIONS] DEVICE

常用选项:

-l: 查看指定文件系统的超级块信息
-L LABEL:设定卷标
-m #: 调整为管理员预留空间的百分比
-j: 用于为ext2文件系统 添加ext3格式的日志,提升ext2为ext3
-O: 文件系统属性的打开或关闭,–O ^has_journal
-o: 调整文件系统挂载的默认属性(文件系统挂载属性的开启或关闭),–o ^acl
-U UUID:设定指定文件系统的UUID;

实例:

[[email protected] ~]# tune2fs -l /dev/sdb #列出超级块信息,相当于dumpe2fs -h
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   GEEK
Last mounted on:          <not available>
Filesystem UUID:          2e564b3f-e542-4bef-aa88-d70935c5c5fb
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:              102400
...

[[email protected] ~]# tune2fs -L "H" /dev/sdb #设定卷标
tune2fs 1.42.9 (28-Dec-2013)
[[email protected] ~]# e2label /dev/sdb  
H

[[email protected] ~]# blkid /dev/sdb
/dev/sdb: UUID="6ce61834-a56c-4367-bce3-953d05f5f4bc" TYPE="ext2" 
[[email protected] ~]# tune2fs -j /dev/sdb   #增加日志,提升为ext3
tune2fs 1.42.9 (28-Dec-2013)
Creating journal inode: done
[[email protected] ~]# blkid /dev/sdb     
/dev/sdb: UUID="6ce61834-a56c-4367-bce3-953d05f5f4bc" SEC_TYPE="ext2" TYPE="ext3" 

[[email protected] ~]# tune2fs -o ^acl /dev/sdb

[[email protected] ~]# uuidgen
5272519a-039a-4bf0-817a-6014daec5e15
[[email protected] ~]# tune2fs -U 5272519a-039a-4bf0-817a-6014daec5e15 /dev/sdb #修改uuid
tune2fs 1.42.9 (28-Dec-2013)
[[email protected] ~]# blkid -U 5272519a-039a-4bf0-817a-6014daec5e15
/dev/sdb

8.findfs命令

findfs命令用于根据卷标或者UUID查找设备

格式:

findfs [OPTIONS] UUID=<uuid>
findfs [OPTIONS] LABEL=<label>

实例:

[[email protected] ~]# e2label /dev/sdb "YOUNG"
[[email protected] ~]# e2label /dev/sdb
YOUNG
[[email protected] ~]# blkid /dev/sdb
/dev/sdb: LABEL="YOUNG" UUID="5272519a-039a-4bf0-817a-6014daec5e15" SEC_TYPE="ext2" TYPE="ext3" 
[[email protected] ~]# findfs UUID="5272519a-039a-4bf0-817a-6014daec5e15"
/dev/sdb
[[email protected] ~]# findfs LABEL="YOUNG"
/dev/sdb
时间: 2024-10-13 19:45:40

文件系统进阶(上)的相关文章

Hive进阶(上)

Hive进阶(上) 执行数据导入 使用Load语句 语法: 1.LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1,partcol2=val2 ...)] 说明: [LOCAL]:从操作系统中的一个目录中进行导入,如果不写LOCAL则为hdfs的数据导入 INPATH:为导入的路径,后面指明文件目录路径,如不指明文件名,则将目录下的所有文件进行导入 [OVER

文件系统进阶(下)

六.文件系统检测和修复 因进程意外中止或系统崩溃等情况导致定稿非正常中止时,可能会导致文件损坏:此时,应该修复文件系统. 常发生于死机或者非正常关机之后 挂载为文件系统标记为" no clean" 一定不要在挂载状态下修复 1.fsck命令:file system check 常用选项: -t FS_TYPE:指定文件系统类型,相应地确定调用哪一个修复工具 -a: 自动修复错误 -r: 交互式修复错误 实例: [[email protected] ~]# blkid /dev/sdb

Linux文件系统的上权限

Linux文件系统上的权限 首先我们来看一下如何修改文件的属主和属组 修改文件的属主:chown chown [OPTION]... [OWNER][:[GROUP]]FILE... 用法 OWNER修改属主 OWNER:GROUP修改属主:属组 :GROUP修改属组 命令中的冒号可以用.替换 -R:递归 chowen [OPTION]... --reference=RFILE FILE... 参考RFILE文件的权限,将FILE文件的权限修改为与RFILE文件权限相同 修改文件的属组:chgr

一步一步学ZedBoard &amp; Zynq(七):制作ZedBoard上linux根文件系统(ramdisk)

一步一步学ZedBoard & Zynq(七):制作ZedBoard上linux根文件系统(ramdisk) 网址:http://xilinx.eetrend.com/blog/3935 Digilent的OOB设计给出了一个ZedBoard上完整的运行的linux系统所需要的所有文件,包括配置FPGA的bit文件. 配置ARM PS系统的First-Stage boot loader(FSBL)和引导linux需要的Second-Stage boot loader(SSBL).Linux内核z

无法删除 NTFS 盘上的文件或文件夹(对Windows文件的各种情况有比较详细的描述)

简介 本文介绍您可能无法删除 NTFS 文件系统卷上的文件或文件夹的原因,以及如何分析造成此问题的不同原因从而解决此问题. 更多信息 注意:在内部,NTFS 将文件夹作为特殊类型的文件进行处理.因此,本文中的“文件”一词可能指文件,也可能指文件夹. 原因 1:文件使用了 ACL 如果某个文件使用了访问控制列表 (ACL),您可能无法删除该文件.要解决此问题,请更改该文件上的权限.您可能需要拥有这些文件的所有权才能更改权限. 管理员具有取得任何文件所有权的隐含能力,即使未明确向他们授予针对此文件的

嵌入式: 根文件系统

看完1, 知道根文件系统的结构和作用. 看完2, 知道kernel挂载根文件系统的实际过程. 1. 详解制作根文件系统  http://fangjian0518.blog.163.com/blog/static/5591965620112171420757/ 什么是根文件系统?Linux引导启动时,默认使用的文件系统是根文件系统. 存放文件系统的设备就是文件系统设备.比如,对于一般使用的windows 2000操作系统,硬盘C盘就是文件系统设备,而硬盘上按一定规则存放的文件就组成文件系统,win

常见文件系统的格式

文件系统(File System)是文件管理系统的简称,根据维基百科的描述,文件系统是用来组织数据在存储介质上的存储方式以及检索方式的.没有文件系统,信息在存储介质上会是一个很大的信息块,没法知道一条信息什么时候会结束,也没法知道信息在什么时候开始,对信息的管理就会十分的麻烦. ??文件系统的种类有很多,每一种文件系统的结构,逻辑,存取速度,灵活性,安全性,大小,等等都不一样. ??文件系统可以被使用在很多不同的存储设备(storage devices)上,这些存储设备使用不同的媒介(media

使用BusyBox制作根文件系统

1.BusyBox简介 BusyBox 是很多标准 Linux 工具的一个单个可执行实现.BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大.更复杂的工具,例如 grep.find.mount 以及 telnet:有些人将 BusyBox 称为 Linux 工具里的“瑞士军刀”. BusyBox 揭露了这样一个事实:很多标准 Linux 工具都可以共享很多共同的元素.例如,很多基于文件的工具(比如 grep 和 find)都需要在目录中搜索文件的代码.当这些工具被

(转载)文件系统与数据库系统的区别

转自:http://storage.chinabyte.com/14/11568014.shtml 很多人刚刚接触数据库时都有疑问:在很多程序中都会是有的直接读取一个静态文件,有的是读取数据库.直接读取静态文件,不访问数据库速度是会很快,但是为什么还要访问数据库呢?它们两则肯定是有区别的,那么区别是什么呢? 其实他们之间的关系很简单,如下参考: 文件系统把数据组织成相互独立的数据文件,实现了记录内的结构性,但整体无结构;而数据库系统实现整体数据的结构化,这是数据库的主要特征之一,也是数据库系统与