浅谈Linux的文件系统, 新增XFS.Ext3.GFS.ReiserFS.JFS相关知识

2023-11-17

如果您是一位新手,也许 您还不知道如何把文件从Windows拷贝到 Linux上吧?下面,我们将说明Unix文件系统以及mount的工作过程,然后再比较详细地讨论。

  mount的使用和有关选项。如果您已经了解Unix文件系统是如何工作的,那么可以跳过下面一节。否则,您最好继续接着学习"mount"的含义。

   什么是mount?

  在一些操作系统(如Windows)中,计算机通过设备名来识别设备,例如,大多数PC机系统都包括"A:drive"(软盘)、"C:drive"(硬盘)和-"D:drive"(一般是只读光盘)。

  出于各种各样的理由, Linux系统一般不采用这种方式指示存储设备。 Linux系统采用单一的目录树(类似于Windows上用户的"C:drive"目录树-结构),通过mount到目录树的分支上来查找存储设备的内容。

  在这台特定的计算机上,总共有4个硬盘驱动器,它们全都被文件系统管理。例如,假设我们沿用Windows系统的方法,给这4个硬盘驱动器分别命名为C、D、E-和F,那么它们的 Linux路径名和Windows的等价名如表1所示。

   磁盘号 Linux路径等价的Windows文件名

  1/C:/

  1 /var C:/VAR

  1 /var/adm C:/VAR/ADM

  1 /var/spool C:/VAR/SPOOL

  1 /home C:/HOME

  1 /home C:/HOMEJACKON

  2 /usr D:/

  2 /usr/lib D:/USR/LIB

  3 /usr/X11R6 E:/

  4 /home F:/


  通过维护系统中的设备列表,以及设备被mount的情况, Linux系统知道到哪里去寻找包含在每个路径表上的数据,而不管数据具体存放在哪个设备上。因为数据-映射的操作是自动完成的,所以用户不需要记住数据在哪个硬盘驱动器上。

  例如,对匿名ftp用户,只需要记住/home/ftp是在"home"目录上,而不需要记住所有的ftp文件都在"F:/"或第4个硬盘驱动器上,这样

  显然直观多了。同样地,记住面向用户的库程序全在/usr/lib上,比必须记住面向用户的库程序全部在第2个硬盘驱动器的"LIB"目录上也直观得多。

   设备标识

  为了记住每个设备被mount到哪里, Linux系统需要有一种惟一的方法标识各个设备。对于人来讲,通过在/dev目录上找到设备名就完成了任务。但

  是,这个目录包含了大量的特殊文件,每个文件都指示不同类型的设备,或现有设备上的分区。例如,/dev/hda设备指示系统的第一个硬盘驱动器;

  /dev/hda1指示第一个硬盘驱动器的第1分区,而/dev/hda2是第2个硬盘驱动器的第2分区。表2展示了一些常用的设备文件和相应的设备。

   特殊文件 设备

  /dev/fdo 第1软盘驱动器

  /dev/fdl 第2软盘驱动器

  /dev/cdrom CD-ROM驱动器

  /dev/hda[1-16] 第1硬盘驱动器(IDE1,1)和分区1-16

  /dev/hdb[1-16] 第2硬盘驱动器(IDE2,2)和分区1-16

  /dev/sda[1-16] 第1硬盘驱动器(SCSI0)和分区1-16

  /dev/sdb[1-16] 第2硬盘驱动器(SCSI1)和分区1-16

  /dev/sdc[1-16] 第3硬盘驱动器(SCSI2)和分区1-16

  /dev/sdd[1-16] 第4硬盘驱动器(SCSI3)和分区1-16


  当然,有许多设备在表2中没能列出。要看到在您的系统中完整的特殊设备列表,可以采用如下命令:

  #/s/dev

  不用担心,许多设备您永远也用不上,一般也不需要研究和记住它们。

   文件格式

  除了要记住每个设备被mount到何处, Linux系统还需要记住每个设备上存在什么类型的文件系统。对于Windows操作系统,大多数设备存储信息

  时,只采用目前流行的两种格式,即FAT16或FAT32中的一种。只有CD-ROM驱动器是一个明显的例外,它采用ISO-9660文件格式。对于

   Linux系统,大多数设备存储信息采用Extended-2(ext2)文件系统。同样地,最显著的例外也是CD-ROM驱动器,它依然采用ISO-

  9660文件格式,但是 Linux也能识别和mount其他的文件系统。要看看您的 Linux内核支持哪些文件系统,可以输入以下命令:

  #cat/proc/filesystems

  让我们假设对于一种给定的情况,上述命令的执行结果为:

  ext2

  vfat

  noelevproc

  iso9660

  对于这个特定的系统, Linux内核支持ext2、vfat、proc和iso9660文件系统。表3给出了 Linux所支持的大部分文件系统类型。

   文件系统 操作系统或类型

  ext2 LinuxExtended-2

  minix Minix文件系统

  msdos 最初的FAT文件系统(短文件名)

  vfat 其他FAT文件系统(长文件名)

  ntfs WindowsNT文件系统(长文件名)

  hpft OS/2高性能文件系统

  hfs AppleMacintosh文件系统

  nfs 网络文件系统

  ncpfs NovellNetWare文件系统

  affs Amiga快速文件系统


   Linux还支持其他一些文件系统。为了让 Linux支持更多的文件系统,需要或者重新编译 Linux的内核,或者下载有关的模块。

  /etc/fstab文件幸运的是,在使用 Linux维护目录树时,用户不必经常直接和设备名或文件系统打交道。我们已经提到过, Linux在mount

  文件系统时,会自动进行维护,它还知道每次是从什么地方开始mount文件系统,这主要是它利用了/etc/fstab文件。对于上面提到过的4个设备的

  目录,从/etc/fstab文件中可以摘出有关的内容:

  /dev/sda1 / ext2 defaults 1 1

  /dev/sdc1 /usr ext2 ext2 defaults 1 2

  /dev/sdc1 /usr/X11R6 ext2 defaults 1 2

  /dev/sdc2 /home/ftp vfat defaults 1 2

  对上述给定的/etc/fstab信息, Linux每次开始mount时将按下列步骤进行:

   ●mount第1个SCSI硬盘驱动器的第1个分区(/dev/sda1),把它作为最先的(根)文件系统,这是一个Linux的ext2格式的磁盘;

  ●在/usr的目录树上,mount第2个SCSI硬盘驱动器的第1个分区(/dev/sdb1),这是一个Linux的ext2格式的磁盘;

  ●在/home/ftp的目录树上,Mount第3个SCSI硬盘驱动器的第2个分区(/dev/sdc2),这是一个Windows95的vfat格式的硬盘-。


  通过适当地配置/etc/fstab文件,用户可以构造一个目录树,该目录树可以容纳许多不同的设备,而且支持许多不同的操作系统文件格式。每次在 Linux的-根部将自动构造这种目录树。(IMG: http://songzhelun.68ab.com/JH.png)

以下为新增的知识

Linux环境下使用XFS文件系统


  XfS文件系统是SGI开发的高级日志文件系统,XFS极具伸缩性,非常健壮。所幸的是SGI将其移植到了Lin ux系统中。在 linux环境下。目前版本可用的最新XFS文件系统的为1.2版本,可以很好地工作在2.4核心下。

   一、XFS文件系统简介

  主要特性包括以下几点:

  数据完全性

  采用XFS文件系统,当意想不到的宕机发生后,首先,由于文件系统开启了日志功能,所以你磁盘上的文件不再会意外宕机而遭到破坏了。不论目前文件系统上存储的文件与数据有多少,文件系统都可以根据所记录的日志在很短的时间内迅速恢复磁盘文件内容。

  传输特性

  XFS文件系统采用优化算法,日志记录对整体文件操作影响非常小。XFS查询与分配存储空间非常快。xfs文件系统能连续提供快速的反应时间。笔者曾经对XFS、JFS、Ext3、ReiserFS文件系统进行过测试,XFS文件文件系统的性能表现相当出众。

  可扩展性

  XFS 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最大可支持的文件大小为263 = 9 x 1018 = 9 exabytes,最大文件系统尺寸为18 exabytes。

  XFS使用高的表结构(B+树),保证了文件系统可以快速搜索与快速空间分配。XFS能够持续提供高速操作,文件系统的性能不受目录中目录及文件数量的限制。

  传输带宽

  XFS 能以接近裸设备I/O的性能存储数据。在单个文件系统的测试中,其吞吐量最高可达7GB每秒,对单个文件的读写操作,其吞吐量可达4GB每秒。

   二、XFS文件系统的使用

   1.下载与编译内核

  下载相应版本的内核补丁,解压补丁软件包,对系统核心打补丁

  下载地址:ftp://oss.sgi.com/projects/xfs/download/Release-1.1/kernel_patches/xfs-1.1-2.4.18-all.patch.bz2

  对核心打补丁,下载解压后,得到一个文件:xfs-1.1-2.4.18-all.patch文件。
对核心进行修补如下:

  # cd /usr/src/ linux
  # patch -p1 < /path/to/xfs-1.1-2.4.18-all.patch

  修补工作完成后,下一步要进行的工作是编译核心,将XFS编译进 Linux核心可中。
首先运行以下命令,选择核心支持XFS文件系统:

  #make menuconfig

  在“文件系统“菜单中选择:

  <*> SGI XFS filesystem support ##说明:将XFS文件系统的支持编译进核心
  或
   SGI XFS filesystem support ##说明:以动态 加载模块的方式支持XFS文件系统

  另外还有两个选择:

  Enable XFS DMAPI ##说明:对磁盘管理的API,存储管理应用程序使用
  Enable XFS Quota ##说明:支持配合Quota对用户使用磁盘空间大小管理

  完成以上工作后,退出并保存核心选择配置.

  之后,然后编译内核,安装核心:

  #make bzImage
  #make module
  #make module_install
  #make install

  如果你对以上复杂繁琐的工作没有耐心或没有把握,那么可以直接从SGI的站点上下载已经打好补丁的核心,其版本为2.4.18。它是一个rpm软件包,你只要简单地安装即可。SGI提交的核心有两种,分别供smp及单处理器的机器使用。

   2.创建XFS文件系统

  完成对核心的编译后,还应下载与之配套的XFSprogs工具软件包,也即mkfs.xfs工具。不然我们无法完成对分区的格式化:即无法将一个分区格式化成XFS文件系统的格式。要下载的软件包名称:xfsprogs-2.0.3。

  将所下载的XFSProgs工具解压,安装,mkfs.xfs自动安装在/sbin目录下。

  #tar –xvf xfsprogs-2.0.3.src.tar.gz
  #cd xfsprogs-2.0.3src
  #./configure
  #make
  #make install

  使用mkfs.xfs格式化磁盘为xfs文件系统,方法如下:

  # /sbin/mkfs.xfs /dev/sda6 #说明:将分区格式化为xfs文件系统,以下为显示内容:

  meta-data=/dev/sda6 isize=256 agcount=8, agsize=128017 blks
  data = bsize=4096 blocks=1024135, imaxpct=25
  = sunit=0 swidth=0 blks, unwritten=0
  naming =version 2 bsize=4096
  log =internal log bsize=4096 blocks=1200
  realtime =none extsz=65536 blocks=0, rtextents=0

  格式化磁盘时,如果mkfs.xfs提示你分区原本已被格式化为其它文件系统,可以使用参数 –f 强行格式化:

  #/sbin/mkfs.xfs –f /dev/sda6

   3.加载XFS文件系统

  #mount –t xfs /dev/sda6 /xfs ##其中/xfs是主分区/下的一个目录。

  最后,为了让系统启动后就自动 加载,应该更改/etc/fstab,这样系统启动后就会自动 加载xfs分区而不必每次都手工 加载

  要说明的一点是目前的xfs由于受 linux内存页限制,在x86版本中,只能实现文件系统的块尺寸为4K。另外,XFS文件系统可以不同的方式mount,即允许文件系统以读方式 加载,也允许以读写方式 加载。这是因为xfs文件系统用作根文件系统时,为了安全要以只读方式 加载

   三、文件系统的迁移

  要使得系统中的其它分区使用XFS文件系统,还有一步是迁移文件系统。建议在迁移文件系统时,首先将磁盘上的数据、文件先备份,以免发生不可挽回的损失,在进行文件系统转换之间,最好能将整个系统进行完全备份。这一步有很多种方法,本文仅就笔者的迁移方法加以描述。各位可以按照自己习惯的方式去完成

  如果你想得到一个纯的xfs系统(系统的所有文件系统均采用XFS文件系统)话,还得将根文件系统也格式化为xfs文件系统。这实际上是比较繁杂的一步。因为根文件系统不能被umount,所以,必须首先创建一个分区,其文件系统为ext2文件系统,然后将目前的根分区上的所有文件与目录,原原本本地复制到这一个分区,然后更改/etc/fstab文件,替换原来的根分区。

  方法如下:

  $ mkfs -t ext2 /dev/hda4
  $ mkdir /mnt/temp
  $ mount -t ext2 /dev/hda4 /mnt/temp
  $ cd /
  $ tar lcvf - .|(cd /mnt/temp; tar xpvf - )

  以上操作是将根分区上的所有文件打包,复制到新建立的分区。当然,你也可以直接使用以下命令复制文件。

  # cp –dpR / /mnt/temp

  接着,将下次启动的根分区更改到/dev/hda4分区,更改/etc/fstab文件及/etc/lilo.conf ,然后,运行 lilo.

  重新启动后,新的根分区就已经为/dev/hda4。

  接下来,创建一个xfs文件系统的分区:

  $ mkfs -t xfs /dev/hda2

   加载此分区,采用两样的方法,将根分区的内容复制到此分区

  $ mount -t xfs /dev/hda2 /mnt/temp

  在根分区下,运行

  $ cd /
  $ tar lcvf - .|(cd /mnt/temp; tar xpvf - )

  再次更改/etc/fstab、/etc/lilo.conf,用新建的xfs分区替换原来的ext2主分区。如下所示:

  /dev/hda2 / xfs defaults 1 1

  将新建的xfs分区用作根分区,保存以上设置。再次检查配置文件内容,确认无误后再重新启动系统。如果你的设置全部正确,那么系统成功启动后,你就拥有一个纯XFS文件系统的系统了。

Linux环境中使用Ext3文件系统


   Linux缺省情况下使用的文件系统为Ext2,ext2文件系统的确高效稳定。但是,随着 Linux系统在关键业务中的应用, Linux文件系统的弱点也渐渐显露出来了;其中系统缺省使用的ext2文件系统是非日志文件系统。这在关键行业的应用是一个致命的弱 点。本文向各位介绍 Linux下使用ext3日志文件系统应用。

  Ext3文件系统是直接从Ext2文件系统发展而来,目前ext3文件系统已经非常稳定可靠。它完全兼容ext2文件系统。用户可以平滑地过渡到一个日志功能健全的文件系统中来。这实际上了也是ext3日志文件系统初始设计的初衷。

   一、Ext3日志文件系统的特点

   1、高可用性

  系统使用了ext3文件系统后,即使在非正常关机后,系统也不需要检查文件系统。宕机发生后,恢复ext3文件系统的时间只要数十秒钟。

   2、数据的完整性:

  ext3文件系统能够极大地提高文件系统的完整性,避免了意外宕机对文件系统的破坏。在保证数据完整性方面,ext3文件系统有2种模式可供选择。其中之一就是“同时保持文件系统及数据的一致性”模式。采用这种方式,你永远不再会看到由于非正常关机而存储在磁盘上的垃圾文件。

   3、文件系统的速度:

  尽管使用ext3文件系统时,有时在存储数据时可能要多次写数据,但是,从总体上看来,ext3比ext2的性能还要好一些。这是因为ext3的日志功能对磁盘的驱动器读写头进行了优化。所以,文件系统的读写性能较之Ext2文件系统并来说,性能并没有降低。

   4、数据转换

  由ext2文件系统转换成ext3文件系统非常容易,只要简单地键入两条命令即可完成整个转换过程,用户不用花时间备份、恢复、格式化分区等。用一个ext3文件系统提供的小工具tune2fs,它可以将ext2文件系统轻松转换为ext3日志文件系统。另外,ext3文件系统可以不经任何更改,而直接 加载成为ext2文件系统。

   5、多种日志模式

  Ext3有多种日志模式,一种工作模式是对所有的文件数据及metadata(定义文件系统中数据的数据,即数据的数据)进行日志记录(data=journal模式);另一种工作模式则是只对metadata记录日志,而不对数据进行日志记录,也即所谓data=ordered或者data=writeback模式。系统管理人员可以根据系统的实际工作要求,在系统的工作速度与文件数据的一致性之间作出选择。

   二、使用Ext3文件系统

   1.下载与编译核心

  对核心打补丁,补丁下载地址:之后运行:

  #make menuconfig

  在Filesystem菜单中,会多出以下选项,选择内核支持Ext3文件系统:

  <*> Ext3 journalling file system support (EXPERIMENTAL)

  JBD (ext3) debugging support

  选择支持Ext3文件系统,保存核心配置文件,重新编译核心。

  #make bzImage
  #make module
  #make module_install
  #make install

  内核编译安装完成。使用新的内核启动系统后,就可以创建ext3文件系统了。

   2.实际使用Ext3文件系统

  创建新的ext3文件系统,例如要把磁盘上的hda5分区格式化ext3文件系统,并将日志记录在/dev/hda1分区,那么操作过程如下:

  [root@test /sbin]# ./mke2fs -j /dev/sda5
  mke2fs 1.24a (02-Sep-2001)
  Filesystem label=
  OS type: Linux
  Block size=1024 (log=0)
  .. .. ..
  Creating journal (8192 blocks): done
  Writing superblocks and filesystem accounting information: done
  This filesystem will be automatically checked every 30 mounts or
  180 days, whichever comes first. Use tune2fs -c or -i to override.

  在创建新的文件系统时,可以看到,ext3文件系统执行自动检测的时间为180天或每第31次被mount时,实际上这个参数可以根据需要随意调节。

  以下将新的文件系统mount到主分区ext3目录下:

  #[root@test /sbin]# mount -t ext3 /dev/sda5 /ext3

  说明:以上将已格式化为ext3文件系统的/dev/sda5分区 加载到/ext3目录下。

  ext3 基于ext2 的代码,它的磁盘格式和 ext2 的相同;这意味着,一个干净卸装的 ext3 文件系统可以作为 ext2 文件系统重新挂装。Ext3文件系统仍然能被 加载成ext2文件系统来使用,你可以把一个文件系统在ext3和ext2自由切换。这时在ext2文件系统上的ext3日志文件仍然存在,只是ext2不能认出日志而已。

   3.将ext2文件系统转换为ext3文件系统

  将 linux系统的文件系统由ext2转至ext3,有以下几处优点:第一系统的可用性增强了,第二数据集成度提高,第三启动速度提高了,第四ext2与ext3文件系统之间相互转换容易。

  以转换文件系统为例,将ext2文件系统转换为ext3文件系统,命令如下:

  [root@test /sbin]# ./tune2fs -j /dev/sda6
  tune2fs 1.24a (02-Sep-2001)
  Creating journal inode: done
  This filesystem will be automatically checked every 31 mounts or
  180 days, whichever comes first. Use tune2fs -c or -i to override.

  这样,原来的ext2文件系统就转换成了ext3文件系统。注意将ext2文件系统转换为ext3文件系统时,不必要将分区缷载下来转换。

  转换完成后,不要忘记将/etc/fstab文件中所对应分区的文件系统由原来的ext2更改为ext3。如果你正在转换的分区为根分区,你还应使用initrd启动系统,运行mkinitrd,确保lilo或grub能正常 加载initrd。如果你没有做以上几步,那么根在下次启动时仍然会以ext2文件系统的方式 加载。要查看根分区目前的文件系统,可以运行“cat /proc/mounts”查看结果,有关对根文件系统的转换,可以从随ext3软件包的说明手册中找到详细说明

   4.日志的存放位置

  可以将日志放置在另外一个存储设备上,例如存放到分区/dev/hda9。例如要在/dev/hda5上创建一个ext3文件系统,并将日志存放在外部设备/dev/hda9上,则运行以下命令:

  #mke2fs -J device=/dev/hda9 /dev/hda5

   5.文件系统修复

  新的e2fsprogs中的e2fsck支持ext3文件系统。当一个ext3文件系统被破坏时,先卸载该设备,在用e2fsck修复:

  #umount /dev/hda6
  #e2fsck -fy /dev/hda6

  总之,ext3日志文件系统是目前 linux系统由ext2文件系统过度到日志文件系统最为简单的一种选择,实现方式也最为简洁。由于是直接从ext2文件系统发展而来,系统由ext2文件系统过渡到ext3日志文件系统升级过程平滑,可以最大限度地保证系统数据的安全性。目前 linux系统要使用日志文件系统,最保险的方式就是选择ext3文件系统。

Linux环境下使用GFS文件系统


  GFS文件系统其实是一个网络日志文件系统,通常被用作多台计算机共享同一存储设备。由于GFS是日志文件系统,所以,如果将其应用到单独的一台计算机上,即完全等同于 本地日志文件系统,享受日志文件系统带来的好处。本文便向各位简介GFS文件系统在 linux环境下的使用。

   一、下载与编译

  下载 GFS文件系统

  GFS文件系统以前是一个源代码完全公开的项目,直至版本为GFS-4.2.0时都可以下载到源代码。笔者在写这一篇文章时,下载到了GFS4.2.0的源代码,但是现在再也无法下载到GFS4.2.0以后的代码了,因为GFS开始收费了。不过,4.1.1及以前的版本仍然可以在这里下载到。试用版可以通过在http://www.sistina.com/注册后下载使用30天。

   1、编译核心

  本文以GFS4.2.0为例进行说明。首先对核心打补丁,运行以下脚本,为核心打补丁:
  # ./GFS-contribe-4.2.0/scripte/apply_patch –k /usr/src/ linux –p

  回答一大串的yes,

  完成打补丁工作。之后,运行以下命令: 

  #make menuconfig
  #make dep
  #make bzImage;make modules; make modules_install
  #cp bzImage /boot

  编辑/etc/lilo.conf,运行lilo之后,重新启动系统。

   2、安装GFS文件系统的配套工具软件安装步骤如下:

  #tar –zxvf GFS-4.2.0.tar.gz

  编译过程如下:

  #./configure
  #make
  #make install

  编译安装GFS工具完成。

   二、使用GFS文件系统

  在编译时,将GFS编译为可 加载模块,所以在使用时,首先要 加载GFS模块。 加载模块命令如下:

  #modprobe nolock

  在 加载gfs模块之前首先要 加载nolock模块,因为gfs依赖于nolock模块

  #modprobe gfs

  编译时,GFS文件系统是以可插入模块方式编译的,所以用此命令 加载gfs模块。

  内核 加载了对GFS文件系统的支持模块后,接下来是创建一个GFS文件系统,使用GFS工具创建GFS文件系统,创建过程如下:

  [root@test /sbin]# ./mkfs_gfs -j 5 /dev/sda8 –p nolock
  Device: /dev/sda8
  Blocksize: 4096
  Filesystem Size: 177484
  Journals: 5
  Resource Groups: 10
  Locking Protocol:
  Lock Table:

  Syncing...
  All Done
  [root@test /sbin]#

  说明:将分区/dev/sda8格式化为gfs文件系统,在本分区内保存日志记录。

  格式化完成后,下来是 加载GFS文件系统

  # mount –t gfs /dev/hda8 /gfs ##说明:将GFS分区 加载到/gfs目录下

  GFS: Trying to acquire journal lock 0…
  GFS: Trying at journal 0…
  GFS: Done

  以上表示成功mount,接下来就可以使用了。

  为了让以后机器启动以后自动 加载GFS文件系统,需要改写/etc/fstab文件,加以下内容:

  /dev/hda8 /gfs default 0 0

  以后系统启动时就会自动 加载GFS文件系统了。

Linux环境下使用ReiserFS文件系统


  ReiserFS是一个非常优秀的文件系统。也是最早用于 Linux的日志文件系统之一。

  ReiserFS的开发者非常有魄力,整个文件系统完全是从头设计的。目前,ReiserFS可轻松管理上百G的文件系统,这在企业级应用中非常重要。

   一、ReiserFS的特点

   1.先进的日志机制

  ReiserFS有先进的日志(Journaling/logging)功能 机制。日志机制保证了在每个实际数据修改之前,相应的日志已经写入硬盘。文件与数据的安全性有了很大提高。

   2.高效的磁盘空间利用

  Reiserfs对一些小文件不分配inode。而是将这些文件打包,存放在同一个磁盘分块中。而其它文件系统则为每个小文件分别放置到一个磁盘分块中。这意味着:如果有10000个小文件,就要占用10000个分块。想想看这多浪费磁盘空间。

   3.独特的搜寻方式

  ReiserFS基于快速平衡树(balanced tree)搜索,平衡树在性能上非常卓越,这是一种非常高效的算法。ReiserFS搜索大量文件时,搜索速度要比ext2快得多。Reiserfs文件系统使用B*Tree存储文件,而其它文件系统使用B+Tree树。B*Tree查询速度比B+Tree要快很多。Reiserfs在文件定位上速度非常快。

  在实际运用中,ReiserFS 在处理小于 1k 的文件时,比ext2 快 8 到 15 倍!ReiserFS 几乎在各个方面都优于 ext2,具体数据请参见笔者的测试篇。更详细的测试可以见以下网址:
   http://www.namesys.com/benchmarks/benchmark-results.html 这里有更为详细的测评数据。

   4.支持海量磁盘

  ReiserFS是一个非常优秀的文件系统,可轻松管理上百G的文件系统,ReiserFS文件系统最大支持的文件系统尺寸为16TB。这非常适合企业级应用中。

   5.优异的性能

  由于它的高效存储和快速小文件I/O特点,使用ReiserFs文件系统的PC,在启动X窗口系统时,所花的时间要比在同一台机器上使用ext2文件系统少1/3。另外,ReiserFS文件系统支持单个文件尺寸为4G的文件,这为大型数据库系统在 linux上的应用提供了更好的选择。

   二、使用ReiserFS文件系统

   1、编译核心

  本文以在2.4.x 核心下安装Reiserfs文件系统为例,简述其安装及使用过程。内核版本为2.4.x以后的版本缺省都支持Reiserfs文件系统。如果你的核心目前不支持Reiserfs,那么从 http://www.namesys.com/处下载reiserfs的补丁程序,要确保下载的补丁版本和你的kernel版本是一致的。

  下载后用root身份登录进入系统,切换至/usr/src/ linux目录,执行命令:

  #gunzip /path/to/ linux-2.2.16-reiserfs-3.5.22-patch.gz
  #patch -p1 -i /path/to/ linux-2.2.16-reiserfs-3.5.22-patch

  要让新的核心支持Reiserfs文件系统,编译时首先要打开相应选项,目前内核缺省不支持Reiserfs文件系统。所以,在编译内核时,要配置内核,以支持reiserfs文件系统。

  #make menuconfig

  在菜单"Code maturity level options"中,选择"Prompt for development and/or incomplete code/drivers."选项。然后,进入文件系统菜单"File systems",打开以下选项:

  <*> Reiserfs support

  Have reiserfs do extra internal checking

  即将Reiserfs文件系统的支持编译时内核。

  然后编译核心,安装核心。

  #make bzImage
  #make module
  #make module_install
  #make install;

  完成内核编译安装工作。

   2、编译Reiserfs工具

  下面我们将编译ReiserFS工具,相应的代码是存放在/usr/src/ linux/fs/reiserfs/utils目录中的,首先make编译程序,然后再make install来安装程序。如果你的核心中没有包括这些工具,你需要另外下载。从这里下载:

   ftp://ftp.namesys.com/pub/reiserfsprogs/r...s-3.x.0j.tar.gz

  解压文件:

  # tar zxvf reiserfsprogs-3.x.0j.tar.gz
  # cd reiserfsprogs-3.x.0j
  # ./configure
  # make
  # make install

  完成Reiserfs工具的编译与安装。

  之后用新的核心启动系统。如果不出什么问题,这时新的核心已经支持Reiserfs文件系统了。

   三、使用新的文件系统

   1.创建Reiserfs文件系统

  要使用新的文件系统,首先以下创建一个Reiserfs文件系统:

  [root@test /sbin]# ./mkreiserfs -f /dev/sda3

  以下为格式化分区时所显示的信息:

  <-------------mkreiserfs, 2001------------->
  reiserfsprogs 3.x.0j
  =========================================================================
  LEAF NODE (8211) contains level=1, nr_items=2, free_space=3932 rdkey
  ------------------------------------------------------------------------
  |###|type|ilen|f/sp| loc|fmt|fsck| key |
  | | | |e/cn| | |need| |
  ------------------------------------------------------------------------
  | 0|1 2 0x0 SD, len 44, entry count 0, fsck need 0, format new|
  (NEW SD), mode drwxr-xr-x, size 48, nlink 2, mtime 09/14/2001 15:26:51 blocks 8
  ------------------------------------------------------------------------
  | 1|1 2 0x1 DIR, len 48, entry count 2, fsck need 0, format old|
  ###: Name length Object key Hash Gen number
  0: ". "( 1) 1 2 0 1, loc 40, state 4 ??
  1: ".. "( 2) 0 1 0 2, loc 32, state 4 ??
  =======================================================================

  Creating reiserfs of 3.6 format
  Block size 4096 bytes
  Block count 128520
  ... ...
  ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
  (y/n) ALL DATA WILL BE LOST ON '/dev/sda3'!

  键入“y”后回车,开始创建新的文件系统:

  格式化的过程比较慢,视分区的大小而定,但是,对其它的文件系统的格式化比较,其明显要慢很多。格式化完成后,显示如下信息:

  (y/n) ALL DATA WILL BE LOST ON '/dev/sda3'! y
  Initializing journal- 0%....20%....40%....60%....80%....100% left 0, 182 /sec
  Syncing...
  ReiserFS core development sponsored by SuSE Labs (suse.com)
  Journaling sponsored by MP3.com.
  To learn about the programmers and ReiserFS, please go to
  http://www.devlinux.com/namesys
  Have fun.

  至此创建完成Reiserfs分区的创建。

   2.使用reiserfs文件系统

  为了使用新的分区,需要将其mount上来:
  # mounut –t reiserfs /dev/sda3 /mnt/fs

  这样新的文件系统就被mount到/mnt/fs目录下了。现在就可以开始使用新的文件系统存放文件了。

  最后,为了让系统每次启动时都自动 加载Reiserfs文件系统,应该手工更改/etc/fstab内容,将相应的分区加入其中。本文在此不再赘述。

Linux环境下使用JFS文件系统


  JFS是IBM公司为 linux系统开发的一个日志文件系统。从IBM的实力及它对 Linux的态度来看,JFS应该是未来日志文件系统中最具实力的一个文件系统。

  JFS提供了基于日志的字节级文件系统,该文件系统是为面向事务的高性能系统而开发的。JFS 能够在几秒或几 分钟内就把文件系统恢复到一致状态。JFS能够保证数据在任何意外宕机的情况下,不会造成磁盘数据的丢失与损坏。

   一、JFS文件系统特点

   1.存储空间更大

  JFS 支持的最小文件系统是 16M 字节。最大文件系统的大小为 512 万亿字节(TB)。JFS 是真正意义上的 64 位的文件系统。所有 JFS 文件系统结构化字段都是 64 位大小。

   2.动态磁盘 inode 分配

  JFS 按需为磁盘 inode 动态地分配空间,释放不再需要的空间。这种方式避开了在文件系统创建期间,为磁盘 inode 保留固定数量空间的传统方法。用户不需要考虑文件系统包含的文件和目录最大数目。

   3.基于盘区的寻址结构

  JFS 使用基于盘区的寻址结构,JFS 分配尝试通过分配最小数量的盘区策略,而使每个盘区尽可能大。这有利于大的 I/O 传送,磁盘读写性能所有提高。

   4.块尺寸可变

  JFS 支持 512、1024、2048 和 4096 字节的块尺寸,允许用户根据应用环境优化空间利用率。较小的块尺寸减少有利于内部存储碎片的数量,提高空间利用率。系统缺省块尺寸为 4096 字节。

   二、使用JFS文件系统

   1.编译内核以支持JFS文件系统

  首先下载最新的2.4.x 核心,下载地址 ftp://ftp.kernel.org/。然后下载JFS系统软件包: http://www-124.ibm.com/developerworks/oss/jfs/,名称为:jfs-x.y.z-patch.tar.gz。 将下载文件存放在/usr/src目录中。

  在/usr/src/上当目录下解开jfs的软件包

  # tar –zxvf jfs-2.4-1.0.4.tar.gz
  # tar –zxvf jfs-2.4-1.0.4-patch.tar.gz

  得到四个文件:

  jfs-2.4.common-v1.0.4-patch
  jfs-2.4.7-v1.0.4-patch
  jfs-2.4.5-v1.0.4-patch
  jfs-2.4.0-v1.0.4-patch

  其中,jfs-2.4.common-v1.0.4-patch文件用于所有的2.4核心,jfs-2.4.0-v1.0.4-patch用于2.4.0-2.4.2。jfs-2.4.5-v1.0.4-patch可用于核心2.4.5及2.4.6。

  注意仔细阅读README文件,不要用错了patch文件

  接着是为核心打补丁:

  # patch –p1 < jfs-2.4.5-v1.0.4-patch

  打补丁工作完成。

  最后运行

  #make menuconfig

  将新的文件系统加入了核心编译配置文件中,要进行以下内核配置:

  使用make menuconfig 在菜单"Code maturity level options"中,选择"Prompt for development and/or incomplete code/drivers."选项。然后,进入文件系统菜单"File systems",选择"JFS filesystem support."选项。配置核心,使核心支持JFS文件系统。配置核心的其它选项。

  <*> JFS filesystem support

  ##将JFS文件系统的支持编译入内核,也可以将其编译成模块 加载方式,见以下选择:

   JFS filesystem support

  笔者建议将JFS文件系统支持直接编译进内核,这有利于提高系统性能。

  然后编译核心:

  #make dep
  #make clean
  #make bzImage
  #make modules
  #make modules_install
  #cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.5-jfs

  最后,编辑 /etc/lilo.conf 文件,加入新内核条目,以便使用新的内核引导系统。如下所示,在 lilo.conf文件中加入以下几行内容:

  image=/boot/vmlinuz-2.4.5-jfs
  label=jfs
  read-only
  root=/dev/hda5

  然后运行lilo,使更改生效。

  #lilo  

   三、创建JFS文件系统

   1.查看系统对JFS文件系统的支持

  如果新的内核正确启动,这说明核心已支持JFS文件系统了。查看系统进程,可以看到以下进程:

  #lsmod
  7 ? SW 0:00 [jfsIO]
  8 ? SW 0:00 [jfsCommit]
  9 ? SW 0:00 [jfsSync]

  如果你看到了以上这几个进程,这表明系统核心已支持JFS文件系统。

  另外,在/proc/fs/jfs 目录下应该还有三个文件:

  jfsFYI
  logmgr
  TxAnchor

   2.下载编译JFS文件系统工具

  为了使用JFS文件系统,我们还需要创建文件系统的工具,到IBM的JFS网站下载相应工具jfsutils-1.0.7.tar.gz软件包。

  下载地址: http://oss.software.ibm.com/developer/open...ls-1.0.7.tar.gz

  编译安装过程如下:

  #tar –zxvf jfsutils-1.0.7.tar.gz
  #cd jfsutils-1.0.7
  #./configure
  #make
  #make install

  安装完成后,在/usr/sbin中就多出一个 可执行文件mkfs.jfs,我们就用它将分区格式化成jfs文件系统。

   3.创建JFS文件系统

  以下开始创建一个JFS文件系统, 将hda6分区格式化成JFS文件系统,以下为格式化时显示的内容:

  #mkfs -t jfs /dev/hda6
  mkfs.jfs development version: $Name: v0_3_1 $
  Warning! All data on device /dev/hda6 will be lost!
  Continue? (Y/N) y
  /
  Format completed successfully.
  5120608 kilobytes total disk space.

  运行完成后,JFS文件系统已经在hda6分区创建完成了。

   4.加载JFS文件系统

  首先,创建一个目录jfs,以便将JFS文件系统mount到其上:

  #mkdir jfs

  将新的分区mount到jfs目录下:

  #mount –t jfs /dev/hda6 /jfs

  这样,新的文件系统就 加载到/jfs目录下了。现在可以使用新的文件系统了。

   四、使用JFS文件系统

   1.普通分区使用JFS文件系统

   Linux内核支持了JFS文件系统后,可以将磁盘 所有分区均格式化为JFS文件系统。通常情况下,建议/usr,/usr/sbin等分区采用非日志文件系统,而在那些对读写要求频繁的分区上使用JFS文件系统。这有利于提高系统性能。

   2.主引导区使用JFS文件系统

  主分区为 linux的启动分区,其中存放了系统启动所需的基本文件。以下开始将JFS文件系统用于主分区,首先备份主分区上的所有常用文件目录:

  #cd /
  #cp -a bin etc lib boot dev home usr var [...] /jfs
  #mkdir /jfs/proc

  在使用JFS文件系统启动之前,还应该更改/etc/fstab文件,将相应的分区用作根分区。如下所示:原来的根分区为:

  LABEL=/ / ext2 defaults 1 1

  应该更改为:

  /dev/hda6 / jfs defaults 1 1

  然后,编译/etc/lilo.conf文件,将主引导分区更改为/dev/hda6。置label为jfs,将缺省的启动设置为jfs。

  如下所示:

  default=jfs
  ...
  image=/boot/vmlinuz-2.4.0-jfs
  label=jfs
  read-only
  root=/dev/hda6

  然后,运行lilo,完成。

  最后,reboot 系统,启动之后,你就得到一个纯jfs文件系统的 linux环境了,剩下的事情就是将原来的主分区重新格式化成 jfs,然后再将其mount到主分区的某个目录下就行了。(IMG: http://songzhelun.68ab.com/JH.png)
 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈Linux的文件系统, 新增XFS.Ext3.GFS.ReiserFS.JFS相关知识 的相关文章

随机推荐

  • 如何写监听回调(事件完成监听、点击响应监听 )

    转载请注明出处 如何写监听回调 事件完成监听 点击响应监听 Mr Leixiansheng的博客 CSDN博客 主要对监听回调做一个简单说明 监听的作用 某一事件只要出现 就会调用其对应的方法 进行响应操作 方式有2 1 常规方式 和控件设
  • 对虚拟机原有磁盘扩容

    对虚拟机原有磁盘扩容 扩容不会导致数据丢失 1 先关闭虚拟机 手动去虚拟机的硬盘扩容 2 lsblk df h查看磁盘容量 3 fdisk dev sda命令扩展 输入P查看分区的start和end的值 需要先删除要扩容的分区 输入d 选择
  • 转:使用DOS命令chcp查看windows操作系统的默认编码以及编码和语言的对应关系

    代码页是字符集编码的别名 也有人称 内码表 早期 代码页是IBM称呼电脑BIOS本身支持的字符集编码的名称 当时通用的操作系统都是命令行界面系统 这些操作系统直接使用BIOS供应的VGA功能来显示字符 操作系统的编码支持也就依靠BIOS的编
  • 微信小程序绘制二维码

    一 前言 在日常的小程序项目中 会经常遇到需要动态绘制二维码的需求 使用场景很多 例如绘制在海报上 例如制作票务码 核销码等等 这篇文章是应一位好友的需求而写的 也希望能够给有需要的同学一些帮助 二 实现原理 使用微信小程序的canvas组
  • STM32的低功耗模式

    目前的低功耗设计主要从芯片设计和系统设计两个方面考虑 随着半导体工艺的飞速发展和芯片工作频率的提高 芯片的功耗迅速增加 而功耗增加又将导致芯片发热量的增大和可靠性的下降 因此 功耗已经成为深亚微米集成电路设计中的一个重要考虑因素 为了使产品
  • HTML、CSS制作小米商城网页首页源码解析

    简介 这是我学习前端以来仿写的第一个项目 沿着尚硅谷李立超老师的教学视频学习 在仿写这个项目的过程中即巩固了这两周以来的知识 也增加了一些小经验 主要是老师传授 同时也让自己更加有信心学习下去 相信自己一定会实现自己的小梦想 加油 小米官网
  • [运算放大器系列]二、电压转4 - 20MA电流电路分析

    运算放大器系列 二 电压转4 20MA电流电路分析 1 电路原理图 2 原理分析 1 电路原理图 偶然在网上看到一个4 20MA转换电路原理图如下 2 原理分析 R L R L RL 为负载 分析电流流向如上图箭头所示可以得到 假设Rloo
  • Elasticsearch 6.1 TransportClient实现多条件重排序搜索查询之FilterFunctionBuilder和FunctionScoreQueryBuilder

    搜索条件 在Index为10000下查找标题包含 IPhone 优先取 品牌手机 这个分类 销量越高越前 结果随机给用户展示 JAVA 代码实现片段 String searchContent IPhone TransportClient c
  • UI测试和接口测试

    安全测试是我下个阶段的主学习了 UI测试和接口测试 安全和性能调优 和测试相关的一些专业术语 测试的发展方向大体是4种 接口自动化测试 UI自动化测试 持续集成 和测试相关的一些专业术语 QA quality assurance 质量保证
  • 调试远程tomcat服务器

    1 关闭linux下防火墙 不然远程客户机可能无法连接上该tomcat 注意不直接关闭防火墙 而是将远程客户机与端口添加到防火墙上 关闭主要是最简单 service iptables stop 2 启动tomcat 命令行下运行 catal
  • ML Impossible and Rescure

    No Rule to Define will cause conflict Using available data to estimate target function if without rule target is unknown
  • PageHelper的概述和基本使用

    PageHelper介绍 PageHelper是国内非常优秀的一款开源的mybatis分页插件 它支持基本主流与常用的数据库 例如mysql oracle mariaDB DB2 SQLite Hsqldb等 本项目在 github 的项目
  • 线与逻辑详解

    什么是线与逻辑 需要和CMOS漏极开路门 Open Drain OD 一起介绍 通常CMOS门电路都有反相器作为输出缓冲电路 而在工程实践中 有时需要将两个门的输出端并联以实现 与 逻辑的功能称为 线与 逻辑 或者用于驱动大电流负载 或者实
  • 第一章 webpack与构建发展简史

    官方loader和插件 Loaders webpack Plugins webpack 为什么需要构建工具 初识webpack webpack默认配置文件 webpack config js 可以通过webpack config
  • 数据结构-图的创建(邻接矩阵,邻接表)C语言实现

    图的定义 图 Graph G由两个集合V和E组成 记为 G V E 其中V是顶点的有穷非空集合 其实就是顶点 E是V中顶点偶对的有穷集合 就是边 V G 和E G 通常分别表示图G的顶点集合以及边集合 E G 可以为空集合 但是此时的图只有
  • 502 Bad Gateway The proxy server received an invalid response from an upstream server

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 打开网站一直报错 查看了一下nginx错误日志 发现很多的报错 2018 12 24 11 02 51 alert 20026 20026 33113943 socket
  • 【渗透测试笔记】之【内网渗透——Windows系统散列值获取与防范】

    拓扑图 Windows系统散列值获取 1 通过CS模块获取用户凭证信息 在获取到目标主机权限后 我们可以抓取hash和dump明文密码 这两项功能都需要管理员权限 如果权限不足 先要进行提权操作 抓取密码哈希 右键被控主机 gt Acces
  • 【OpenCV学习笔记】【教程翻译】五 (车牌识别之OCR分割)

    车牌识别 车牌识别的第二步主要是提取出车牌中的字符 对于每个被检测出的车牌 我们对车牌进行分割获取每个字符 然后用神经网络机器学习算法实现字符的识别 在这个过程中 我们也可以学习到如何评估一个分类算法 OCR分割 首先 我们将车牌图像作为具
  • sqli-labs 21——40关攻略

    Less 21 基于错误的复杂的字符型Cookie注入 base64编码 单引号 报错型 cookie型注入 本关和less 20相似 只是cookie的uname值经过base64编码了 登录后页面 圈出来的地方显然是base64加密过的
  • 浅谈Linux的文件系统, 新增XFS.Ext3.GFS.ReiserFS.JFS相关知识

    如果您是一位新手 也许 您还不知道如何把文件从Windows拷贝到 Linux上吧 下面 我们将说明Unix文件系统以及mount的工作过程 然后再比较详细地讨论 mount的使用和有关选项 如果您已经了解Unix文件系统是如何工作的 那么