什么是journal日志

作为日志文件系统,ext4使用journal来对文件系统操作进行记录,它和文件系统数据是分开进行管理的,当我们写入文件系统时,会先把最新的数据保存在journal区域中,然后再写入到真正文件系统中,当多次写入时会不停的更新journal中的数据内容,以保持最新的写入数据。这样做保证了文件系统的可靠性,并且当文件系统出现问题时,利于分析问题。

journal block的创建

那么这个journal区域是在什么时候创建的呢?
使用Linux系统中的mkfs.ext4命令创建一个ext4文件系统(实际上调用的是mke2fs工具),从下面的输出log可以看到,对应的ext4文件系统会创建journal block。

$ dd if=/dev/zero of=test.img bs=1M count=512
$ mkfs.ext4 test.img
mke2fs 1.42.13 (17-May-2015)
Discarding device blocks: 完成
Creating filesystem with 131072 4k blocks and 32768 inodes
Filesystem UUID: 6482c469-a195-48d0-bed4-2033baec77c4
Superblock backups stored on blocks: 32768, 98304Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

可以通过如下命令选项对journal的区域大小进行配置:

-J size=64

这个选项传入参数的单位是M字节,默认为64M大小。我们修改为32M可以使用如下命令:

mkfs.ext4 -J size=32 test.img

通过挂载上该文件系统镜像后进入挂载目录查看df信息,可以发现原本生成的一个512M的文件系统大小,只剩余472M的总容量,那么其他的容量在哪里?
实际上这里显示的总容量并没有包含journal区域和superblock以及superblock备份区域,因此它显示的总容量是少于原本镜像的大小的。

$ df . -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/loop0      472M  396K  436M    1% /media/xiehaocheng/test

可以使用dumpe2fs来查看该文件系统相关的metadata信息:

dumpe2fs 1.42.13 (17-May-2015)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          d6193181-b0c1-41b4-8c4e-4629636209fa
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 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:              32768
Block count:              131072
Reserved block count:     6553
Free blocks:              120719
Free inodes:              32757
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      31
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Mon Aug 19 19:19:45 2019
Last mount time:          Mon Aug 19 19:20:43 2019
Last write time:          Mon Aug 19 19:20:43 2019
Mount count:              1
Maximum mount count:      -1
Last checked:             Mon Aug 19 19:19:45 2019
Check interval:           0 (<none>)
Lifetime writes:          32 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:      0c1a2d41-bbf6-4a73-a2fc-93125b58521a
Journal backup:           inode blocks
Journal features:         (none)
日志大小:             32M
Journal length:           8192
Journal sequence:         0x00000002
Journal start:            1Group 0: (Blocks 0-32767) [ITABLE_ZEROED]Checksum 0x5742, unused inodes 8181主 superblock at 0, Group descriptors at 1-1保留的GDT块位于 2-32Block bitmap at 33 (+33), Inode bitmap at 37 (+37)Inode表位于 41-552 (+41)30673 free blocks, 8181 free inodes, 2 directories, 8181个未使用的inodes可用块数: 2095-32767可用inode数: 12-8192
Group 1: (Blocks 32768-65535) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]Checksum 0x4075, unused inodes 8192备份 superblock at 32768, Group descriptors at 32769-32769保留的GDT块位于 32770-32800Block bitmap at 34 (bg #0 + 34), Inode bitmap at 38 (bg #0 + 38)Inode表位于 553-1064 (bg #0 + 553)32735 free blocks, 8192 free inodes, 0 directories, 8192个未使用的inodes可用块数: 32801-65535可用inode数: 8193-16384
Group 2: (Blocks 65536-98303) [INODE_UNINIT, ITABLE_ZEROED]Checksum 0xe120, unused inodes 8192Block bitmap at 35 (bg #0 + 35), Inode bitmap at 39 (bg #0 + 39)Inode表位于 1065-1576 (bg #0 + 1065)24576 free blocks, 8192 free inodes, 0 directories, 8192个未使用的inodes可用块数: 73728-98303可用inode数: 16385-24576
Group 3: (Blocks 98304-131071) [INODE_UNINIT, ITABLE_ZEROED]Checksum 0xc611, unused inodes 8192备份 superblock at 98304, Group descriptors at 98305-98305保留的GDT块位于 98306-98336Block bitmap at 36 (bg #0 + 36), Inode bitmap at 40 (bg #0 + 40)Inode表位于 1577-2088 (bg #0 + 1577)32735 free blocks, 8192 free inodes, 0 directories, 8192个未使用的inodes可用块数: 98337-131071可用inode数: 24577-32768

journal挂载选项

关于挂载选项可以参考内核文档,linux/Documentation/filesystems/ext4.txt:

 data=journal        All data are committed into the journal prior to beingwritten into the main file system.  Enablingthis mode will disable delayed allocation andO_DIRECT support.data=ordered    (*) All data are forced directly out to the main filesystem prior to its metadata being committed to thejournal.data=writeback      Data ordering is not preserved, data may be writteninto the main file system after its metadata has beencommitted to the journal.

和journal有关的如上所述,主要分为三种数据写入方式:

  • journal方式

所有数据(data+metadata)在被写入文件系统前,都要先写入到journal区域,可靠性很好,但是性能却最差。

  • ordered方式

这种方式不用记录data,但是需要在data写入文件系统之后,把metadata写入到journal区域,相比前一种提高了性能,稍微降低的可靠性。

  • writeback

这种方式不用记录data,只需要把metadata写入到journal区域,但不保证data已经写入文件系统,所以它的可靠性最差。

默认挂载方式采用的是ordered方式,这种方式是另外两种的一种平衡,使得可靠性和性能都能达到一个均衡。

文件系统挂载选项journal相关推荐

  1. 课时12 Linux文件系统挂载管理

    Linux课程学习笔记来源于网易云课堂:Linux 入门基础 1.挂载操作 磁盘或分区创建好文件系统之后,需要挂载到一个目录才能够使用. Windows或者Mac系统会进行自动挂载,一旦创建好文件系统 ...

  2. linux虚拟文件系统(四)-文件系统挂载操作分析

    ext4文件系统挂载 大家可以使用以下命令挂载一个u盘到 /mnt目录下: mount -t ext4 /dev/sda1 /mnt 其中mount这个应用程序就是使用了mount函数进行系统调用,其 ...

  3. Linux入门之磁盘管理(3)文件系统挂载

    Linux入门之磁盘管理(3)文件系统挂载 当磁盘建立了分区,创建了文件系统,只是说明该设备可以用来存储,但是要想访问设备,就需要通过建立一个或多个挂载点,来提供给用户进行访问,在linux中,提供了 ...

  4. oracle文件系统挂载点,挂载和取消挂载文件系统概述

    挂载和取消挂载文件系统概述 需要首先挂载文件系统,然后才能访问该文件系统上的文件.挂载文件系统时,需要将该文件系统附加到目录(挂载点)并使其对系统可用.始终会挂载根目录 (/) 文件系统.可以将其他任 ...

  5. 嵌入式软件开发之------浅析linux根文件系统挂载(九)

    Linux代码版本:linux4.4 导读:前些天拿到供应商的一块arm64开发板,需要对其新CPU进行测试评估.需要将公司自己的系统移植上去测试一些参数.在挂载公司的cpio包的时候,出现解压失败. ...

  6. imx6ull文件系统挂载失败

    imx6ull文件系统挂载失败(已解决) 系统启动后信息: devtmpfs: error mounting -2 Starting kernel ...Booting Linux on physic ...

  7. mount 文件系统挂载

    mount 文件系统挂载 1.查看系统支持的文件系统类型 cat /proc/filesystems nodev sysfs nodev rootfs #第一列说明文件系统是否需要挂载在一个块设备上, ...

  8. fpga嵌入linux系统,基于FPGA的Virtex-5板的PetaLinux嵌入式操作系统文件系统挂载流程...

    今天总算完成了文件系统的加入,现在看来整个的工作过程少了一个懂linux代码的指导,探索起来确实不易.总结下最近做的事情,条理才逐渐清楚了. 刚开始接到这个任务时是要在petalinux嵌入式操作系统 ...

  9. 【无标题】STM32F407VGT6文件系统挂载TF卡学习笔记CUBEMXKEIL5

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一.CUBEMX配置 二.添加代码main.c文件 1.main函数定义变量 2.文件系统函数 三.调试结果 总结 前言 ...

最新文章

  1. 【问题解决】连接mysql 8错误:authentication plugin 'caching_sha2_password
  2. Linux中top命令使用
  3. 一步步学习webpack 1
  4. Python爬虫开发:requests库的使用--ip代理参数的设置
  5. POJ 3617 Best Cow Line
  6. Linux——粘滞位(sbit)、sgid、suid 权限
  7. 服务器怎么用u盘传文件进去_云服务器无法使用USB设备?一文读懂如何在云服务器上使用优盘...
  8. ib_logfile和mysql_bin_mysql的innodb中事务日志ib_logfile
  9. C语言程序设计基础练习
  10. golang gzip解压
  11. GBase 8a开启防火墙安装集群添加端口策略
  12. 京东自动抢购茅台脚本
  13. 文本数据挖掘实验:文本分类
  14. java 实现 excel normsdist_Excel函数NormSDist和NormSInv的VB实现
  15. 【URL重写】IIS7配置URL重写
  16. sql导出的身份证后几位是000
  17. opengl 多边形线框_opengl基础学习专题 (三) 多边形绘制的几种样式
  18. 政治正确的睡前故事(4则)【搬运】【破事水】
  19. 洛谷【P1873】 砍树 简单二分解析
  20. Openlayers各种下载方法

热门文章

  1. BGP高防是什么意思呢?
  2. python进程process类返回值_Python 中的进程
  3. 【C语言】分支语句和循环语句还能这么用?一篇带你重新认识它(两万字超细详解)
  4. 恭喜叶总完成从前端码农到技术负责人的蜕变……
  5. 海康威视插件播放视频流
  6. USB device和USB host
  7. [python 爬虫]Python爬虫抓取马蜂窝游记的照片 基于xpath
  8. C/C++编程:Google代码规范
  9. Tmail2000研究--Demo不能发送Email的Bug
  10. 香港的房价真的那么贵吗?用数据挖掘真相!