普通应用下,建议在的ext4,xfs,btrfs之间按需要进行选择。如果有特殊要求再讨论其他方案。
早期的Windows可能还需要在Fat32及NTFS之间选择,但现在Windows和MacOSX用户对于文件系统,只有一种选择,那就是NTFS和APFS。相反,对于Linux系统而言,有很多种文件系统可以选择,现在默认的是广泛采用的ext4。也有用户会尝试新的btrfs文件系统。那btrfs有什么优点,它与其它文件系统又有什么相同点及区别呢?
首先让我们对文件系统有一个简单的认识,然后我们再对Linux下几个常用的文件系统做一个详细的比较。
文件系统主要用于控制所有程序在不使用数据时如何存储数据、如何访问数据以及有什么其它信息(元数据)和数据本身相关,等等。听起来要编程实现并不是轻而易举的事情,实际上也确实如此。文件系统一直在改进,包括了更多的功能、更高效地完成它需要做的事情。总而言之,它是所有计算机的基本需求、但并不像听起来那么简单。
文件系统(FileSystem或fs),定义并实现了数据在存储介质(如硬盘等)上的存储方式和结构,以及其是如何被访问的,如索引、读取等。操作系统里,硬盘中的数据被抽象为文件的形式,并对其进行管理,比如为一块或多块数据关联一个文件名等,这些用于管理文件的数据结构(以及其对应的规则)为文件系统,Unix中更是讲一切皆文件,可见文件系统的地位非常之高。随着技术的发展,现代的文件系统特性也越来越多,如Btrfs等文件系统,支持快照、子卷、校验和自检、软RAID甚至透明压缩等。
由于每个操作系统都能创建或者删除分区,很多人对分区都有模糊的认识。Linux操作系统即便使用标准安装过程,在同一块磁盘上仍使用多个分区,这看起来很奇怪,因此需要一些解释。拥有不同分区的一个主要目的就是为了在灾难发生时能获得更好的数据安全性。
通过将硬盘划分为分区,数据会被分隔以及重组。当事故发生的时候,只有存储在被损坏分区上的数据会被破坏,很大可能上其它分区的数据能得以保留。这个原因可以追溯到Linux操作系统还没有日志文件系统、任何电力故障都有可能导致灾难发生的时候。
使用分区也考虑到了安全和健壮性原因,因此操作系统部分损坏并不意味着整个计算机就有风险或者会受到破坏。这也是当前采用分区的一个最重要因素。举个例子,用户创建了一些会填满磁盘的脚本、程序或者web应用,如果该磁盘只有一个大的分区,如果磁盘满了那么整个系统就不能工作。如果用户把数据保存在不同的分区,那么就只有那个分区会受到影响,而系统分区或者其它数据分区仍能正常运行。
记住,拥有一个日志文件系统只能在掉电或者和存储设备意外断开连接时提供数据安全性,并不能在文件系统出现坏块或者发生逻辑错误时保护数据。对于这种情况,用户可以采用廉价磁盘冗余阵列RAID:RedundantArrayofInexpensiveDisks的方案。
写时拷贝(Copy-on-write)是另一个有趣并且很酷的特性。在大多数文件系统上,当数据被重写时,它将永久丢失。而在ZFS中,新数据会写到不同的块。写完成之后,更新文件系统元数据信息,使之指向新的数据块(LCTT译注:更新之后,原数据块成为磁盘上的垃圾,需要有对应的垃圾回收机制)。这确保了如果在写新数据的时候系统崩溃(或者发生其它事,比如突然断电),那么原数据将会保存下来。这也意味着,在系统发生崩溃之后,不需要运行fsck来检查和修复文件系统。
写时拷贝使得ZFS有了另一个特性:快照(snapshots)。ZFS使用快照来跟踪文件系统中的更改。快照包含文件系统的原始版本(文件系统的一个只读版本),实时文件系统则包含了自从快照创建之后的任何更改。没有使用额外的空间。因为新数据将会写到实时文件系统新分配的块上。如果一个文件被删除了,那么它在快照中的索引也会被删除。所以,快照主要是用来跟踪文件的更改,而不是文件的增加和创建。
快照可以挂载成只读的,以用来恢复一个文件的过去版本。实时文件系统也可以回滚到之前的快照。回滚之后,自从快照创建之后的所有更改将会丢失。
当向ZFS写入新数据时,会创建该数据的校验和。在读取数据的时候,使用校验和进行验证。如果前后校验和不匹配,那么就说明检测到了错误,然后,ZFS会尝试自动修正错误。
ZFS不需要任何额外软件或硬件就可以处理RAID(磁盘阵列)。毫不奇怪,因为ZFS有自己的RAID实现:RAID-
Z。RAID-Z是RAID-5的一个变种,不过它克服了RAID-5的写漏洞:意外重启之后,数据和校验信息会变得不同步(LCTT译注:RAID-5的条带在正写入数据时,如果这时候电源中断,那么奇偶校验数据将跟该部分数据不同步,因此前边的写无效;RAID-Z用了“可变宽的RAID条带”技术,因此所有的写都是全条带写入)。为了使用基本级别的RAID-Z(RAID-Z1),你需要至少三块磁盘,其中两块用来存储数据,另外一块用来存储奇偶校验信息。而RAID-Z2需要至少两块磁盘存储数据以及两块磁盘存储校验信息。RAID-Z3需要至少两块磁盘存储数据以及三块磁盘存储校验信息。另外,只能向RAID-Z池中加入偶数倍的磁盘,而不能是奇数倍的。
文件系统的选择,其重要性不言而喻,可能仅次于Linux发行版的选择。其实,各个文件系统在功能及性能方面是有不小的差异的。我们主要讨论Linux中主流的三个文件系统:Ext4、XFS以及Btrfs的功能特点
ext4文件系统由ext3文件系统改进而来,而后者又是从ext2文件系统改进而来。虽然ext4文件系统已经非常稳定,是过去几年中绝大部分发行版的默认选择,但它是基于陈旧的代码开发而来。另外,Linux操作系统用户也需要很多ext4文件系统本身不提供的新功能。虽然通过某些软件能满足这种需求,但性能会受到影响,在文件系统层次做到这些能获得更好的性能。
而Btrfs提供了更多新的功能,也扩大了容量,也可作为新的选择。但因为它是一种新的文件系统,有可能会有些Bug或稳定性的问题。所以选择文件系统需要考虑多方面的因素,综合考虑。
Ext4、XFS、Btrfs都是实现在Kernel代码中的fs目录下。文件系统需要实现操作系统所定义的对象和接口,如inode、dentry等。
Ext4(ext4日志文件系统、第四代扩展文件系统)文件系统是Linux用途最广泛的日志文件系统。Ext4稳定版本发布于2008年,即Linux2.6.28版本。但它的历史最早可以追溯到1992年的Ext2文件系统,那是Linux最早使用的文件系统,而后2001年出现的Ext3在Ext2基础上增加了日志功能,并最终由Ext4替代,而且Ext4可向前兼容Ext2/Ext3。Ext4是很多发行版如Debian、Ubuntu等的默认文件系统。什么是日志(Journaling)文件系统?就是在数据更改正式提交至硬盘之前,先在日志区域(也是存在文件系统上的)记录变更日志,这样可以在系统崩溃或掉电后能快速恢复。
最大卷1EiB,最大文件16TiB(对于4KiB块)。Ext4中实现了基于extent的数据管理。extents可以简单理解为连续的块,有了它管理大文件就更方便,大大降低了用于索引大文件的元数据量——原来用间接块索引(IndirectBlock)的方法是非常浪费的——自然访问也性能也提升。而且,Ext4的inode比Ext3大一倍,达到256字节。
2)增加并优化了日志校验和(journalchecksumming)功能,fsck过程更快
ext4的限制:最大文件大小是16tebibytes(大概是17.6terabytes),但这比我们当前能买到的硬盘都要大,所以这个限制暂时并不是太大的问题。使用ext4能创建的最大卷/分区是1exbibyte(大概是1,152,921.5terabytes)
ext4比ext3有很大的速度提升。另它是一个日志文件系统,意味着它会对文件在磁盘中的位置以及任何其它对磁盘的更改都会做记录。不过它还不支持透明压缩、重复数据删除或者透明加密。技术上支持了快照,但该功能还处于实验性阶段。
XFS文件系统是扩展文件系统extentfilesystem的一个扩展。XFS是64位高性能日志文件系统。对XFS的支持大概在2002年合并到了Linux内核,到了2009年,红帽企业版Linux5.4也支持了XFS文件系统。对于64位文件系统,XFS支持最大文件系统大小为8exbibytes。
目前RHEL7.0文件系统默认使用XFS。XFS是1993年由SiliconGraphicInc(SGI)公司创建的高性能的64位文件系统。2001年进入Linux内核,如今已被大多数Linux发行版支持。最支持的要数红帽公司,其下主打的操作系统RHEL(RedHatEnterpriseLinux)7和8——即最近两个稳定版——都选XFS为默认的文件系统,红帽的很多工程师也深度参与了XFS的开发和维护。
XFS的文件系统结构如上,不同于Ext4,它通过
B 树来索引inode和数据块。用树结构的文件系统通常相比Ext4用表结构,如链表、直接/间接Block以及extent,能更好地支持大文件,如视频/数据库文件等。另外其元数据规模少,使得硬盘可用空间更多,实测XFS、Btrfs多平均至少1.5%以上的可用空间。
XFS能支持单卷可达8EiB,最大文件也到8EiB,相比Ext4的16TiB可高了几个数量级。而且是其实动态分配inode的实现机制,只要有空间,就不会耗尽inode。通过df命令看出,其inode初始值就是ext4的10倍左右。
另外,XFS可以更高效支持并行IO操作,RAID上的扩展性更好,多线程并行读写时相比Ext4有优势。
ZFS在创建之初,就被设计为最后一代文件系统。在大多数文件系统都是64位的时候,ZFS创建者决定直接跳到128位。这意味着ZFS“提供了32位或64位系统容量的160亿倍”。
当谈到ZFS功能和安装时,其实说的是OpenZFS。自从Oracle停止对OpenSolaris更新代码之后[1],ZFS(由Oracle开发)和OpenZFS遵循了不同的路径
如果想开箱即用地使用ZFS,则需要安装FreeBSD或使用illumos内核的操作系统。illumos是OpenSolaris内核的一个分支。事实上,对ZFS的支持是一些有经验的Linux用户选择BSD的主要原因之
一。
如果想在Linux上试用ZFS,可以将其用作存储文件系统。最近,Ubuntu19.10引入了在根目录上开箱即用安装ZFS的功能
Btrfs,是B-TreeFileSystem的缩写,可以读作“butterfs”或“b-treefs”,是一个支持copy-on-write(COW)的文件系统,由Oracle公司于2007年设计并使用,2013年进入Linux内核稳定发布。目前除了Oracle外,SUSELinuxEnterpriseServer将其用作默认文件系统,而在工作站领域中,Fedora33也将其作为默认文件系统,Facebook公司也大量应用了Btrfs文件系统。
btrfs是一个几乎完全从头开发的文件系统。btrfs出现的原因是它的开发者起初希望扩展文件系统的功能使得它包括快照、池化pooling、校验以及其它一些功能。虽然和ext4无关,它也希望能保留ext4中能使消费者和企业受益的功能(小辣椒高效Office),并整合额外的能使每个人,尤其是企业受益的功能。对于使用大型软件以及大规模数据库的企业,让多种不同的硬盘看起来一致的文件系统能使他们受益并且使数据整合变得更加简单。删除重复数据能降低数据实际使用的空间,当需要镜像一个单一而巨大的文件系统时使用btrfs也能使数据镜像变得简单。
用户当然可以继续选择创建多个分区从而无需镜像任何东西。考虑到这种情况,btrfs能横跨多种硬盘,和ext4相比,它能支持16倍以上的磁盘空间。btrfs文件系统一个分区最大是16exbibytes,最大的文件大小也是16exbibytes。
Btrfs的强大之处,在于实现了很多先进特性的同时,还保持了很高的容错能力、可扩展性以及可靠性。其最早的COWB-tree的数据结构也是2007年才提出的,Btrfs比Ext4、XFS小了近20年,是一个现代文件系统。
Btrfs支持大文件,16EiB最大卷和文件大小;集成了卷管理功能,可以以卷的方式动态地增减设备,实现硬盘资源池化;高效的数据完整性check,如基于cow的自恢复(self-healing)、基于checksum的数据清理(datascrubbing);高性能的读写/只读快照,得益于cow,增量快照和备份非常直接、灵活且低成本;软raid支持,数据和元数据的stripe和mirror生产环境级别支持;透明的压缩,支持lzo和zlib;在线去碎片(onlinedefragmentation);数据去重(datadeduplication)。
这方面,与其说是更好的文件系统,倒不如说它把传统的逻辑卷管理(如LVM)、软RAID(如mdadm)等工具做的工作集成在了文件系统层面上,方便了系统管理员,确实是一大进步。
Btrfs文件系统最多可以支持2个64字节,相当于16EiB或exbibytes!现在这是一个巨大的存储空间!
Btrfs提供基于范围的文件存储。这被描述为为文件存储保留的连续区域。文件元数据的开销大大减少,小元数据直接有助于提高存储效率和性能。
Btrfs文件系统包括对RAID0(数据剥离)、1(数据镜像)和RAID10(数据剥离和镜像)的支持
Btrfs提供inode的动态分配。它会在需要时将inode分配给文件,这有助于防止在文件系统上有很多小文件的情况下inode耗尽。
Btrfs提供的另一个出色功能是对快照的支持。您可以轻松地创建文件系统的快照,并在数据意外删除或损坏时利用它来恢复其他地方的数据。
你会发现像群晖Nas也提供Btrfs文件系统并提供创建快照的功能,这个在防范病毒木马攻击及数据恢复非常有用。
另一个重要特性是对校验和的支持。校验和是小块数据,可以避免静默文件或数据损坏的可能性,这是其他文件系统不提供的。校验和存储在文件系统中,并持续关注文件系统错误和数据损坏的迹象。
SSD(固态硬盘)驱动器确实在PC中提供了相当程度的速度、可靠性和稳定性。Btrfs文件系统通过优化它们的读写性能进一步提高了它们的性能,从而提高了SSD的寿命。
这是两个文件系统之间出现的第一个主要区别。Ext4文件系统是一个日志文件系统,而Btrfs是一个Copy-on-Write(CoW)文件系统。
将单个文件系统分布在多个设备上提供了某些优势,例如容量增加和可靠性更高。Btrfs具有内置的RAID支持,可以轻松地在文件系统级别管理多个设备。
Ext4文件系统没有对多设备的内置支持。您将不得不使用LVM2之类的第3方逻辑卷管理器将文件系统跨越多个设备和磁盘。
重复数据删除是一种自动从文件系统中删除重复数据副本以节省磁盘空间的功能。Btrfs文件系统通过将文件系统中的相同块替换为指向该块的单个副本的逻辑链接来支持重复数据删除。此功能可节省大量磁盘空间。
Btrfs使用压缩算法来支持文件系统级别的数据压缩。这意味着数据将在写入文件系统时自动压缩。
使用ext4可以创建的最大分区是1exbibyte——相当于大约1,152,921.5TB。最大文件大小为16TiB,比普通消费者目前可以购买的任何硬盘都要大得多。
Ext4允许您创建最多232个(=4,294,967,296~=40亿)文件。Btrfs允许您创建最多264个(=18,446,744,073,709,551,616~=18quintillion)文件。
Btrfs文件系统使用CRC32C校验和来确保数据完整性并避免数据损坏。Ext4文件系统不保证数据的完整性。
Btrfs文件系统支持文件的只读和可写快照。快照是一个子卷,它使用COW功能与另一个子卷共享其数据和元数据。
块子分配是一种功能,将大文件存储在块中,同时有效利用最后一个块末尾的尾部空间。块子分配是一种将另一个文件块的一部分存储到尾块并节省磁盘空间的方法。
Btrfs旨在利用此可用空间,并可以将多个块的尾部与其他文件打包在一起。这提高了文件系统性能并提高了存储效率。
Ext4在于它的易用性以及广泛性。对于桌面或者工作站,ext4仍然是一个很好的文件系统。由于它是默认提供的文件系统,用户可以在上面安装操作系统。同时,ext4支持最大1exabytes的卷和16terabytes的文件,在多数情况下也够用了。
Ext4文件系统是扩展文件系统的最新版本。Ext4已经存在了很长时间,并且被证明是可靠和稳定的。建议日常使用。万一停电,ext4很有可能会确保您保存的数据安全。
另一方面,Btrfs是一个现代文件系统,可以处理多达16倍于Ext4的数据以及更好的容错。这种改进特别重要,因为Linux现在在企业实体中使用。Btrfs有很多上面提到的很好的特性,例如Copy-on-Write、快照、校验和和复制。Btrfs正在快速增长,但仍被认为不稳定。它感觉更像是一个附加的文件系统。
有网友对各个文件系统的性能进行过详细测试,可参考这篇:ext4、ntfs、xfs、btrfs、zfs、f2fs和reiserFS文件系统性能对比_林地宁宁
到目前为止,ext4似乎是桌面系统上更好的选择,因为它是默认文件系统,并且在传输文件时比btrfs更快。btrfs文件系统值得研究,但要在桌面Linux上完全取代ext4可能需要些时间。
我们在网络通信时候用到socket套接字,有的时候我们更希望Linux能使用d服务无疑是Linux下一种很好的方法。什么是d呢?d是新一代的网络守护进程服务程序,又叫超级服务器,常用来管理多种轻量级服务。d提供类似于d tcp_wrapper的功能,但是更加强大和安全。
简单介绍下d的特色1)强大的存取控制功能—内置对恶意用户和善意用户的差别待遇设定。—使用libwrap支持,其效能更甚于tcpd。—可以限制连接的等级,基于主机的连接数和基于服务的连接数。—设置特定的连接时间。—将某个服务设置到特定的主机以提供服务。2)有效防止DoS攻击—可以限制连接的等级。—可以限制一个主机的大连接数,从而防止某个主机独占某个服务。—可以限制日志文件的大小,防止磁盘空间被填满。3)强大的日志功能—可以为每一个服务就syslog设定日志等级。—如果不使用syslog,也可以为每个服务建立日志文件。—可以记录请求的起止时间以决定对方的访问时间。—可以记录试图非法访问的请求。
4)转向功能可以将客户端的请求转发到另一台主机去处理。5)支持IPv66)能与客户端交互当我们在linux下安装了d服务后,将/etc/services这个文件中添加相应的服务协议和端口号,然后再/xinit.d目录中添加相应的配置文件就可以启动这个服务了。让我们看一些基本的应用.我们要看的第一个基本的服务是echo,它是d和d固有的服务。servicexecho{socket_type=streamprotocol=tcpwait=nouser=roottype=INTERNALserver=/usr/bin/rsync}下面说明每一行选项的含义:—disable=yes:表示禁用这个服务。—socket_type=stream:表示服务的数据包类型为stream。—wait=no:表示不需等待,即服务将以多线程的方式运行。—user=root:表示执行此服务进程的用户是root。—server=/usr/bin/rsync:启动脚本的位置。可以用drestart启动。当然如果连接的话你还需要有ssh或者服务器,服务器是通过d(超级守护进程)来管理的,安装d。安装完后,需要为d建立一个配置文件/etc/d.d/,该文件的内容如下所示:{disable=notype=UNLISTEDsocket_type=streamwait=nouser=nobodyserver=/usr/sbin/dserver_args=-hlog_on_failure =HOSTUSERIDlog_on_ess =PIDHOSTUSERIDEXITDURATIONid=id-git-streamlog_type=FILE/gitdaemonlog}这只是一些d的配置用法,具体还有很多方面的应用例如我们可以用一个简单的大小写转换的程序测试下,在连接d的终端下实现,或者实现一个小的服务器,让我们的d的可以连接到浏览器上。
在本文中,让我们讨论如何设置tftpboot,包括安装必要的软件包,以及tftpboot配置。
TFTP引导服务主要用于在您没有物理访问权限的远程计算机上执行操作系统安装。为了成功执行操作系统安装,应该有一种重新启动远程服务器的方法-使用wakeonlan或手动重新启动它或其他方式。
在这些情况下,您可以相应地设置tftpboot服务,并且可以远程完成操作系统安装(您需要拥有autoyast配置文件来自动执行操作系统安装步骤)。本文介绍了64位架构中的SLES10-SP3的分步过程。但是,这些步骤与任何其他Linux发行版非常相似。
安装syslinux包后,会在/usr/share/pxelinux/目录下创建pxelinux.0文件。这是在客户端机器上加载安装内核和initrd映像所必需的。
安装syslinux软件包后,PXELinux映像将可用。将其复制到/tftpboot路径,如下所示。
让我们假设我们要在远程服务器上安装SLES10SP3Linux发行版。如果您有SUSE10-SP3DVD,请将其插入驱动器或安装您拥有的ISO映像。在这里,iso映像已按如下方式挂载:
根据上面的条目,nfs安装模式用于提供安装RPM和配置文件。因此,在导出列表中使用/tftpboot目录在这台机器上设置nfs。您可以在autoyast配置文件中添加“autoyast”选项以自动执行操作系统安装步骤,否则您需要手动运行安装步骤。
在这里,这台机器在eth1设备上的ip地址为192.168.1.101。因此,如上所示,为DHCPD_INTERFACE指定eth1。
修改/etc/d.d/tftp文件以反映以下内容。默认情况下,禁用参数的值为“yes”,请确保将其修改为“no”,并且需要将server_args条目更改为-s/tftpboot。
最后,tftpboot设置已准备就绪,现在可以在BIOS设置中将第一个引导设备更改为“网络”后引导客户端计算机。
从tftpserver检索一些文件以确保tftp服务使用tftp客户端正常工作。让我们假设sample.txt文件存在于/tftpboot目录下。
如果感觉小编写得不错,请素质三连:点赞 转发 关注。我会努力写出更好的作品分享给大家。更多JAVA进阶学习资料小编已打包好,可以关注私信找我领取哦