jbd2 英文名是这样的:Journaling Block Device 2。
它是跟着 ext4 格式来的,当然它也可以在其他磁盘格式下工作。
这个进程的工作原理是这样的:文件系统写入数据,要提交给驱动程序,而 jbd2 就是在文件系统调用驱动之前工作的。文件系统要先调用 jbd2,然后 jbd2 会根据系统的设置(设置有 writeback、ordered、journal),进行数据的备份,然后再让文件系统提交数据。当文件系统将数据写入了块设备之后,jbd2 就会把备份的数据删除。如果文件系统写块设备时出了问题(比如说可悲的断电),那 jbd2 这里还有一个备份,在进行完整性检查时就会把数据补全,所以数据不会丢。
jbd2 就是这样保证数据的完整性的。
jbd2 有一个参数 barrier,它用来开启磁盘屏障。就是设置一个栅栏,要先把 barrier 之前的数据全都写到磁盘设备之后,才会写 barrier 之后的数据,也就是说它是用来保证原子操作中数据的完整性的。当然了,开启 barrier 的一个后果就是性能下降。
关闭barrier的方法:
挂载磁盘的时候使用挂载选项 -o barrier=0 或者 nobarrier。
[root@主机A]# cat /proc/mounts
/dev/mapper/data_lvm-data_lv /data ext4 rw,relatime,barrier=1,data=ordered 0 0
也可以直接关掉 journal 功能:
tune2fs -o journal_data_writeback /dev/mapper/data_lvm-data_lv tune2fs -O "^has_journal" /dev/mapper/data_lvm-data_lv e2fsck -f /dev/mapper/data_lvm-data_lv