A. linux操作系统故障处理-ext4文件系统超级块“can't read superblock”损坏修复
前几天在广州参加植物病毒学会议,一边听会一边开着TeamViewer远程连接实验室装有linux系统的工作站跑程序干活。有一天下午发现TeamViewer显示服务器离线,原来是因为施工导致停电。Anyway, 不重要,发微信让小青儿给我重启服务器,结果发现重启不了,大概就是这个界面。 怎么着都进不去图形界面,简而言之,工作站重启不了了。索性不管了,好好听报告,心想回到福州再收拾工作站。回到福州第一件事就是坐下来重启工作站,发现无论怎么折腾都进不去系统。 虽然图形界面进不去,好在还能够在命令行下进行操作。当看到 /bioinfor ,这个存放目录的路径下啥都没有的时候,这可是我所有的数据啊!如果这个盘里的数据没了,各个合作者还不得把我手撕了。想到这里,冷汗差点下来了。 于是开始寻找解决方法。 首先得想办法进入系统,在反复地 sudo reboot 都无法进入系统之后,通过 df -h 也看不到/dev/sda(也就是挂载到/bioinfor路径的磁盘)信息。然后猜测是不是因为磁盘以及分区表之类出现了错误导致不能进入系统。通过 sudo vi /etc/fstab 将除了系统安装盘之外的所有硬盘的挂载信息全部注释掉,再 reboot , 这时候果然可以进入图形界面系统了。但依然看不到 /bioinfor 盘下的数据。能够开机就让我放心了很多。通过 gparted 工具,能够看到/dev/sda硬盘里used space大概是1.7T,还剩下1.9T左右,这就表示我的数据还在。试图通过 sudo umount /dev/sda 先取消挂载,再重新 sudo mount /dev/sda /bioinfor 挂载到/bioinfor路径,结果报错。 报错信息显示: 搜索网页发现,有一个哥们经历了跟我一样的遭遇, 意外断电造成mount挂载硬盘报错 。所以,这次事故是因为意外断电,基本实锤了。 但到底什么是superblock呢? 继续搜索,直到读到一篇技术文章 linux操作系统故障处理,ext4文件系统超级快损坏修复 。本文可以忽略,但这篇技术文章得认真读读。里面讲解了磁头,磁道,柱面,扇区,以及硬盘容量等等概念,以及最重要的inode和block,Superblock(超级块)概念。 既然报错提示Superblock出了问题,那我们就应该从这里入手。linux系统提供了一个磁盘命令 fsck 来尝试对设备进行修复。但可惜,用这个命令的时候,都会提醒你,应该安装最新的 fsck 工具包。 提示如下: 根据这篇文章 E2FSCK: how to handle the “metadata_csum” error by advancing the e2fsck version beyond default installed version 的提示,需要安装1.43X的 e2fsck , 安装方法小结如下。 检验一下是否更新成功: 能够看到已经更新到1.43.5版本。 安装完之后,开始对磁盘进行修复,命令如下: 一般都能修复完毕,然后可以再进行取消挂载或者重新挂载的操作。看到数据都还完好无缺地在电脑上,还处于后怕的我赶紧掏出移动硬盘进行原始数据的备份。 本次debug结束 这篇技术日志对读者可参考性并不高,是因为应用场合实在是少,(试想谁会天天断电呢),但还是有一些体会和感悟:
B. Linux日志式文件系统面面观
文件系统是用来管理和组织保存在磁盘驱动器上的数据的系统软件,其实现了数据完整性的保 证,也就是保证写入磁盘的数据和随后读出的内容的一致性。除了保存以文件方式存储的数据以外,一个文件系统同样存储和管理关于文件和文件系统自身的一些重要信息(例如:日期时间、属主、访问权限、文件大小和存储位置等等)。这些信息通常被称为元数据(metadata)。
由于为了避免磁盘访问瓶颈效应,一般文件系统大都以异步方式工作,因此如果磁盘操作被突然中断可能导致数据被丢失。例如如果出现这种情况:如果当你处理一个在linux的ext2文件系统上的文档,突然机器崩溃会出现什么情况?
有这几种可能:
*当你保存文件以后,系统崩溃。这是最好的情况,你不会丢失任何信息。只需要重新启动计算机然后继续工作。
*在你保存文件之前系统崩溃。你会丢失你所有的工作内容,但是老版本的文档还会存在。
*当正在将保存的文档写入磁盘时系统崩溃。这是最糟的情况:新版文件覆盖了旧版本的文件。这样磁盘上只剩下一个部分新部分旧的文件。如果文件是二进制文件那么就会出现不能打开文件的情况,因为其文件格式和应用所期待的不同。
在最后这种情况下,如果系统崩溃是发生在驱动器正在写入元数据时,那么情况可能更糟。这时候就是文件系统发生了损坏,你可能会丢失整个目录或者整个磁盘分区的数据。
linux标准文件系统(ext2fs)在重新启动时会通过调用文件扫描工具fsck试图恢复损坏的元数据信息。由于ext2文件系统保存有冗余的关键元数据信息的备份,因此一般来说不大可能出现数据完全丢失。系统会计算出被损坏的数据的位置,然后或者是通过恢复冗余的元数据信息,或者是直接删除被损坏或是元数据信息损毁的文件。
很明显,要检测的文件系统越大,检测过程费时就越长。对于有几十个G大小的分区,可能会花费很长时间来进行检测。由于Linux开始用于大型服务器中越来越重要的应用,因此就越来越不能容忍长时间的当机时间。这就需要更复杂和精巧的文件系统来替代ext2。
因此就出现了日志式文件系统(journalling filesystems)来满足这样的需求。
什么是日志式文件系统
这里仅仅对日志式文件系统进行简单的说明。如果需要更深入的信息请参考文章日志式文件系统,或者是日志式文件系统介绍。
大多数现代文件系统都使用了来自于数据库系统中为了提高崩溃恢复能力而开发的日志技术。磁盘事务在被真正写入到磁盘的最终位置以前首先按照顺序方式写入磁盘中日志区(或是log区)的特定位置。
根据日志文件系统实现技术的不同,写入日志区的信息是不完全一样的。某些实现技术仅仅写文件系统元数据,而其他则会记录所有的写操作到日志中。
现在,如果崩溃发生在日志内容被写入之前发生,那么原始数据仍然在磁盘上,丢失的仅仅是最新的更新内容。如果当崩溃发生在真正的写操作时(也就是日志内容已经更新),日志文件系统的日志内容则会显示进行了哪些操作。因此当系统重启时,它能轻易根据日志内容,很快地恢复被破坏的更新。
在任何一种情况下,都会得到完整的数据,不会出现损坏的分区的情况。由于恢复过程根据日志进行,因此整个过程会非常快只需要几秒钟时间。
应该注意的是使用日志文件系统并不意味着完全不需要使用文件扫描工具fsck了。随机发生的文件系统的硬件和软件错误是根据日志是无法恢复的,必须借助于fsck工具。
目前Linux环境下的日志文件系统
在下面的内容里将讨论三种日志文件系统:第一种是ext3,由Linux内核Stephen Tweedie开发。ext3是通过向ext2文件系统上添加日志功能来实现的,目前是redhat7.2的默认文件系统;Namesys开发的ReiserFs日志式文件系统,可以下载,目前Mandrake8.1采用该日志式文件系统。SGI在2001年三月发布了XFS日志式文件系统。可以在 oss.sgi.com/projects/xfs/下载。下面将对这三种日志文件系统采用不同的工具进行检测和性能测试。
安装ext3
关于ext3文件系统技术方面的问题请参考Dr. Stephen Tweedie的论文和访谈。ext3日志式文件系统直接来自于其祖先ext2文件系统。其具有完全向后兼容的关键特性,实际上其仅仅是在ext2日志式文件系统上添加了日志功能。其最大的缺点是没有现代文件系统所具有的能提高文件数据处理速度和解压的高性能。
ext3从 2.2.19开始是作为一个补丁方式存在的。如果希望对内核添加对ext3文件系统的支持,就需要使用补丁,可以得到补丁程序,一共需要如下文件:
* ext3-0.0.7a.tar.bz2:内核补丁
* e2fsprogs-1.21-WIP-0601.tar.bz2 支持ext3的e2fsprogs程序套件
拷贝linux-2.2.19.tar.bz2和ext3-0.0.7a.tar.bz2到/usr/src目录下,进行解压:
mv linux linux-old
tar -Ixvf linux-2.2.19.tar.bz2
tar -Ixvf ext3-0.0.7a.tar.bz2
cd linux
cat ../ext3-0.0.7a/linux-2.2.19.kdb.diff | patch -sp1
cat ../ext3-0.0.7a/linux-2.2.19.ext3.diff | patch -sp1
首先对内核添加SGI的kdb内核调试器补丁,第二个是ext3文件系统补丁。下来就需要配置内核,对文件系统部分的"Enable Second extended fs development code"回答Yes。然后编译。
内核编译安装以后,需要安装e2fsprogs软件套件:
tar -Ixvf e2fsprogs-1.21-WIP-0601.tar.bz2
cd e2fsprogs-1.21
./configure
make
make check
make install
下来要做的工作就是在分区上创建一个ext3文件系统,使用新内核重新启动,这时候你有两种选择创建新的日志文件系统或者对一个已有的ext2文件系统升级到ext3日志文件系统。
对于需要创建新ext3文件系统的情况下,只需要使用安装的e2fsprogs软件包中的mke2fs命令加-f参数就可以创建新的ext3文件系统:
mke2fs -j /dev/xxx
这里/dev/xxx是希望创建ext3文件系统的新分区。-j参数表示创建ext3而不是ext2文件系统。可以使用参数"-Jsize="来指定希望的日志区大小(n单位为M)。
升级一个已有的ext2,使用tune2fs就可以了:
tune2fs -j /dev/xxx
你可以对正在加载的文件系统和没有加载的文件系统进行升级操作。如果当前文件系统正在被加载,则文件.journal会在文件系统加载点的所在目录被创建。如果是升级一个当时没有加载的文件系统,则使用隐含的系统inode来记录日志,这时候文件系统的所有内容都会被保留不被破坏。
你可以使用下面的命令加载ext3文件系统:
mount -t ext3 /dev/xxx /mount_dir
由于ext3实际上是带有日志功能的ext2文件系统 ,因此一个ext3文件系统可以以ext2的方式被加载。
安装XFS文件系统
如果需要从技术方面了解XFS文件系统,请参考SGI的XFS文件系统和SGI信息页面。也可以参考FAQ。
XFS是一个SGI开发的linux环境下的日志文件系统,它是一个成熟的技术,最初是使用在IRIX系统上的文件系统。XFS遵循GPL版权申明。目前xfs文件系统最新版本是1.02。下载得到对内核xfs文件系统支持补丁或者直接下载RPM包方式的内核,下面我们就以补丁方式说明如何对2.4.14内核使用xfs。首先下载如下内容
patch-2.4.14-xfs-1.0.2.bz2
patch-2.4.14-xfs-1.0.2-kdb.bz2
拷贝Linux内核linux-2.4.2.tar.bz2到 /usr/src目录下,修改老的内核目录名,然后解压新内核:
mv linux linux-old
tar -Ixf inux-2.4.2.tar.bz2
拷贝每个每个补丁到内核源码目录下(例如:/usr/src/linux),并打补丁:
zcat patch-2.4.14-xfs-1.0.2.bz2 | patch -p1
zcat patch-2.4.14-xfs-1.0.2-kdb.bz2 | patch -p1
然后配置内核,打开文件系统部分的内核选项:"XFS filesystem support" (CONFIG_XFS_FS)和"Page Buffer support" (CONFIG_PAGE_BUF)。同时需要升级下面这些系统工具到下面或更高的版本:
motils-2.4.0
autoconf-2.13
e2fsprogs-devel-1.18
安装新内核并重启服务器。
然后下载xfs工具。这个软件包包括下面的命令来处理文件系统,使用下面的命令来安装该软件包::
tar -zxf xfsprogs-1.2.0.src.tar.gz
cd xfsprogs-1.2.0
make configure
make
make install
安装这些命令以后,就可以创建新的XFS文件系统:
mkfs -t xfs /dev/xxx
如果xxx是一个已经存在的文件系统,那么就需要使用"-f"参数来创建新分区,但是记得这将会破坏该分区的所有数据。
mkfs -t xfs -f /dev/xxx
创建以后就可以使用基于下面的命令加载新文件系统:
mount -t xfs /dev/xxx /mount_dir
安装ReiserFS文件系统
如果希望更多地从技术方面了解reiserFS文件系统,请参考NAMESYS和FAQ。
ReiserFS文件系统从2.4.1-pre4开始就是Linux内核的正式支持的文件系统了。为了使用reiserFS文件系统那你首先需要在系统上安装文件系统支持工具(如:创建ReiserFS文件系统的mkreiserfs工具)。最新的ReiserFS文件系统版本可以以补丁的方式添加到2.2.x或者2.4.x内核中。这里我们以2.2.19为例:
第一步,首先下在内核源码,并下在ReiserFS文件系统的2.2.19补丁 ,目前补丁最新版本是linux-2.2.19-reiserfs-3.5.34-patch.bz2。同时应该下载工具软件包:reiserfsprogs-3.x.0j.tar.gz。
然后解压内核源码和补丁包到/usr/src中:
tar -Ixf linux-2.2.19.tar.bz2
bzcat linux-2.2.19-reiserfs-3.5.34-patch.bz2 | patch -p0
编译内核支持reiserfs,安装内核。然后安装文件系统工具软件:
cd /usr/src/linux/fs/reiserfs/utils
make
make install
安装新内核并重新启动。现在就可以创建新的'reiserfs文件系统,并加载:
mkreiserfs /dev/xxxx
mount -t reiserfs /dev/xxx /mount_dir
文件系统性能测试
测试环境使用的计算机环境如下:Pentium III – 16 Mb RAM – 2 Gb HD,操作系统为RedHat6.2。所有的文件系统都能正常工作,所以就进行benchmark分析来对它们进行性能比较。首先我直接拔掉系统电源以模拟系统掉电情况,以测试日志文件系统恢复过程。所有的文件系统都成功地经过了文件扫描检测阶段,在数秒以后系统都经过了扫描然后正常启动了系统。
下一步就采用了bonnie++性能测试程序进行测试,这个程序对一个文件进行数据库类型的访问,进行了创建、读和删除小文件,这些操作对于Squid、INN或者Maildir格式的邮件服务器程序(qmail)是最常见的操作。性能测试命令为:
bonnie++ -d/work1 -s10 -r4 -u0
其对加载在/work1目录下的文件系统进行了10Mb(-s10)的测试。因此在执行测试之前必须创建适当类型的文件系统并加载到目录/work1下。其他的参数指定内存大小(-r4)的M数,和以root身份运行测试程序,测试结果如下:
每种测试都有两组数据:文件系统速度(K/sec)和CPU占用率(%CPU)。速度越高,文件系统越好。而对于CPU率来说,数字越小性能越好。可以看到Reiserfs文件系统在文件操作方面(Sequential Create和Random Create部分的) 的性能最好,超出其他文件系统10倍之多。在其他方面(Sequential Output和Sequential Input)则和其他文件系统性能不相上下。对于其他文件系统则没有特别明显的区别。XFS性能接近ext2文件系统,ext3文件系统则比ext2要稍微慢上一些(因为记录日志需要一些额外的时间)。 最后使用从得到的性能测试程序mongo,并对其进行了修改以对三种日志文件系统进行测试。这里在mongo.pl程序中添加了添加了加载xfs和ext3文件系统的命令,并对其进行格式化处理,然后就开始性能测试分析。 该脚本格式划分区/dev/xxxx,加载其并在每个阶段运行指定数目的进程:创建、拷贝、符号连接处理、读、显示文件状态信息、重命名和删除文件。同时,该程序在创建和拷贝阶段以后会计算分段数(fragmentation)。
Fragm = number_of_fragments / number_of_files
可以在结果文件中得到同样的测试比较结果:
log – 原始结果
log.tbl – 比较程序的输出结果
log_table – 表格式的结果
下面的命令进行测试:
mongo.pl ext3 /dev/hda3 /work1 logext3 1
如果要测试其他文件系统,就需要把上面命令的参数中的ext3修改为reiserfs或xfs。其他参数分别为要加载的分区,加载路径,保存测试结果的文件名及启动的进程数。
下面的表格是测试结果。数据单位为秒。值越低性能越好。第一个表格测试使用的数据块大小为100字节,第二个表格为1000字节,最后一个为10000字节
从上面的表格可以看到ext3在状态删除和重命名方面要性能更好一些,而ReiserFS文件系统在文件创建和拷贝性能表现更出色。同时也可以看到reiserFS正如其技术文档提到的其在小文件处理方面性能相当出色。
结论
目前Linux至少有两个健壮可靠的日志文件系统可供选择(XFS和reiserFS),其都得到了广泛的应用。例如Mandrake8.1就默认支持reiserFS文件系统。
从性能测试的结果可以看到,reiserFS是最好的选择。
C. linux下NTFS文件系统出现错误要用什么工具修复呢, 类似windows下工具下的查错。 fsck不支持NTFS。
首先要看抄什么错误,某些linux在不配置之前,是无法访问NTFS文件系统的。(RHEL6.0,这么广泛的版本也无法直接访问NTFS,ubuntu倒是装完直接就可以。)你要确定是NTFS文件系统出错,还是你的linux本身就不支持访问。别弄巧成拙,把数据弄丢了。如果有条件先把NTFS文件系统的区放在windows下跑一下。看看是否能读取。
D. wechatout套餐没有购买名额
没有WeChat Out是因为微信并没有在中国大陆推出这个功能,只面向海外用户提供WeChat Out,绑定国内手机号码的微信是没有的。 WeChat Out是微信提供的费率较低的全球网络电话,用户也需要充值后才可使用,充值过后即可拨打其他国家或地区的号码,拨打后微信采用网络电话呼入自己绑定的号码然后就可以进行畅聊。 (4)fsck最新版本扩展阅读 WeChat Out功能替换了中文版微信中“收付款”。点击图标后,用户会进入通讯录界面,拨叫电话的界面则与iOS的通话界面类似。 该功能已对香港、美国、印度用户开放 [2] ,美国微信用户打向中国,每分钟为0.90美分,不到人民币6分钱,最低充值0.99美元可以往中国打
E. ubuntu下关于ext4碎片整理,fsck的/分区扫描和manpange的语言问题
fsck需要扫描未挂载的磁盘,最好是不要在系统运行到时候弄,而且fsck不是整理碎片而是磁盘检查。没有磁盘碎片这一说,不要被FAT的思维定势误导。所谓高人写的关于EXT也有碎片的说法只能让人说这个伪科学写得真科学……
F. linux下执行fsck命令
在执行fsck命令时,fsck命令如果发现有孤立的文件或目录,这些孤立的文件或目录对于系统管理员或用户来说,就无法访问到它,因为它与它的上级目录失去了关联。
如果不允许fsck把这些孤立的文件或目录找回来的话,那么fsck命令就会破坏这些文件或目录,彻底丢失这些文件或目录,用户或系统管理员永远也无法找回它们了。
(6)fsck最新版本扩展阅读
Linux主要被用作服务器的操作系统,因为它的廉价、灵活性及Unix背景。传统上,以Linux为基础的“LAMP(Linux,Apache,MySQL,Perl/PHP/Python的组合)”技术,除了已在开发者群体中广泛流行,它提供网站服务供应商最常使用的平台。
基于其低廉成本与高度可设置性,Linux常常被应用于嵌入式系统,例如机顶盒、移动电话及移动装置等。在移动电话上,Linux已经成为Symbian OS的主要竞争者;而在移动装置上,则成为Windows CE与Palm OS外之另一个选择。
TiVo数码摄影机使用了经过客制化后的Linux。此外,有不少硬件式的网络防火墙及路由器,例如部分LinkSys的产品,其内部都是使用Linux来驱动、并采用了操作系统提供的防火墙及路由功能。
采用Linux的超级电脑亦愈来愈多,根据2008年11月的TOP500超级电脑列表,现时世上最快速的超级电脑使用Linux作为其操作系统。而在表列的500套系统里,采用Linux为操作系统的,占了439组(即87.8%)。
2006年开始发售的SONY PlayStation 3亦可使用Linux的操作系统,它有一个能使其成为一个桌面系统的Yellow Dog Linux。
之前,Sony亦曾为他们的PlayStation 2推出过一套名为PS2 Linux的DIY组件。Ubuntu自9.04版本,恢复了PPC支持(包括PlayStation 3)。
而随着OLPC的XO-1,华硕的Eee PC等低价电脑的推行,许多人乐观的认为在低端PC市场,linux的市场占有率正在快速的增长。
但在Windows进入此一市场后,Linux的市占率快速下滑。现在Windows系统在所有的PC市场中,都占有绝对优势。
主要用途:虚拟化,数据库服务器,Web服务器,应用服务器,跳转盒(Jump box),日志服务器,开发平台,Google搜索设备,入侵检测系统。
G. Centos文件系统EXT3与EXT4的主要区别
Ext4可以提供更佳的性能和可靠性,还有更为丰富的功能:
1,与Ext3兼容。 执行若干条命令,就能从 Ext3在线迁移到Ext4,而无须重新格式化磁盘或重新安装系统。原有Ext3数据结构照样保留,Ext4作用于新数据,当然,整个文件系统因此也就获得了 Ext4所支持的更大容量。
2,更大的文件系统和更大的文件。较之Ext3目前所支持的最大16TB文件系统和最大2TB文件,Ext4 分别支持1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系统,以及16TB的文件。
3,无限数量的子目录。 Ext3目前只支持32,000个子目录,而Ext4支持无限数量的子目录。
4, Extents。Ext3采用间接块映射,当操作大文件时,效率极其低下。
5,多块分配。当写入数据到 Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块,写一个100MB文件就要调用25,600次数据块分配器,而Ext4的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。
6,延迟分配。Ext3的数据块分配策略是尽快分配,而Ext4和其它现代文件操作系统的策略是尽可能地延迟分配,直到文件在cache中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能。
7,快速 fsck。以前执行fsck第一步就会很慢,因为它要检查所有的inode,现在Ext4给每个组的 inode 表中都添加了一份未使用inode的列表,今后fsck Ext4文件系统就可以跳过它们而只去检查那些在用的inode了。
8,日志校验。日志是最常用的部分,也极易导致磁盘硬件故障,而从损坏的日志中恢复数据会导致更多的数据损坏。Ext4的日志校验功能可以很方便地判断日志数据是否损坏,而且它将Ext3的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。
9,“无日志”(No Journaling)模式。日志总归有一些开销,Ext4允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。
10,在线碎片整理。尽管延迟分配、多块分配和extents能有效减少文件系统碎片,但碎片还是不可避免会产生。Ext4支持在线碎片整理,并将提供e4defrag工具进行个别文件或整个文件系统的碎片整理。
11,inode相关特性。Ext4支持更大的inode,较之Ext3默认的inode大小128字节,Ext4为了在 inode中容纳更多的扩展属性,默认inode大小为256字节。Ext4 还支持快速扩展属性和inode保留。
12,持久预分配。P2P软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。Ext4在文件系统层面实现了持久预分配并提供相应的API,比应用软件自己实现更有效率。
13,默认启用 barrier。磁盘上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写commit记录。Ext4默认启用 barrier,只有当barrier之前的数据全部写入磁盘,才能写barrier之后的数据。
(7)fsck最新版本扩展阅读:
EXT3是第三代扩展文件系统(英语:Third extended filesystem,缩写为ext3),是一个日志文件系统,常用于Linux操作系统。
它是很多Linux发行版的默认文件系统。Stephen Tweedie在1999年2月的内核邮件列表中,最早显示了他使用扩展的ext2,该文件系统从2.4.15版本的内核开始,合并到内核主线中。
EXT4是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是Linux系统下的日志文件系统,是ext3文件系统的后继版本。
Ext4是由Ext3的维护者Theodore Tso领导的开发团队实现的,并引入到Linux2.6.19内核中。
Ext4产生原因是开发人员在Ext3中加入了新的高级功能,但在实现的过程出现了几个重要问题:
(1)一些新功能违背向后兼容性
(2)新功能使Ext3代码变得更加复杂并难以维护
(3)新加入的更改使原来十分可靠的Ext3变得不可靠。
从2006年6月份开始,开发人员决定把Ext4从Ext3中分离出来进行独立开发。Ext4的开发工作从那时起开始进行,但大部分Linux用户和管理员都没有太关注这件事情,直到2.6.19内核在2006年11月的发布。
2008年12月25日,Linux Kernel 2.6.28的正式版本发布。随着这一新内核的发布,Ext4文件系统也结束实验期,成为稳定版。
参考资料:网络:Ext3
参考资料:网络:Ext4
H. Windows需要碎片整理,为什么Linux不需要
如果你是一个Linux用户,你可能会听说Linux的文件系统不需要碎片整理。你也可能会注意到Linux的发行版本也都没有磁盘碎片整理的功能。这是为什么呢?要理解为什么Linux的文件系统不会想Windows的文件系统一样产生碎片,你首先要明白碎片到底是如何产生的,还有这两大操作系统的文件系统的工作方式到底有什么不同。
什么是磁盘碎片?
很多Windows的用户,甚至包括一些没有经验的用户,都相信定时整理文件系统中的碎片会让他们的电脑运行得更快。但他们都不知道这是为什么。
简单来说,一个硬盘驱动器里面包含了很多扇区,每一个扇区都可以存储一小块数据。对于文件,尤其是比较大的文件来说,他们必须要存储在很多不同的扇区内。假设你的文件系统中有很多不同的文件,每一个文件都被存储在连续的扇区群中。然后,你对增加了其中某一个文件的大小。文件系统首先会尝试对该文件新增加的部分存储在紧挨着原来的扇区群的某个扇区中。但是如果当中没有足够的连续扇区,这个文件就必须要被分解成多个小块,这些操作对于你来说都是可见的。当你的硬盘读取这些文件的时候,他的磁头必须在不同的物理位置间跳转以读取连续的扇区群,这会降低它的速度。
碎片整理就是一个通过逐位(位是文件在磁盘中存储的最小单位)移动文件来减少碎片的精密的过程,以此来确保每一个文件在硬盘中都是连续存储的。
当然,对于固态硬盘来说这又有点不一样,固态硬盘不需要移动文件也不需要碎片整理。因为对一个SSD(固态硬盘)做碎片整理会减少它的寿命。而且,在最新版本的Windows系统中,你也不再需要为碎片整理担心,因为Windows会自动帮你完成。
Windows的文件系统如何工作
从前微软使用的FAT文件系统——最后一次作为默认系统被看到是在Windows 98和ME,尽管这个系统还在USB驱动器中使用——并不能够很好地排列文件。当你在FAT文件系统中保存文件时,它会尽可能地将文件排列在磁盘的首部。当你存放下一个文件时,它会将这个文件直接存放在第一个文件的后面,以此类推。所以当文件变大,永远都会有碎片产生,因为文件的旁边已经没有空间来存放增加的部分。
微软在Windows XP和2000中使用的较新的NTFS文件系统就尝试变得更聪明一点。这个文件系统会在文件周围放置更多名为”缓冲区“的自由空间,但是,任何一个Windows用户都会告诉你,NTFS文件系统总有一天也会产生碎片的。
因为文件系统这样的表现,他们需要碎片整理来保持性能。微软只能在最新版的Windows系统中通过在后台自动运行碎片整理程序来减轻这个问题。
Linux的文件系统如何工作
Linux的ext2,ext3,ext4文件系统——ext4是Ubuntu和目前大多发行版所采用的文件系统——会以一种更加智能的方式来放置文件。Linux的文件系统会将文件分散在整个磁盘,在文件之间留有大量的自由空间,而不是像Windows那样将文件一个接一个的放置。当一个文件被编辑了并且变大了,一般都会有足够的自由空间来保存文件。如果碎片真的产生了,文件系统就会尝试在日常使用中将文件移动来减少碎片,所以不需要专门的碎片整理程序。
因为这样的工作方式,你可能会在你的文件系统塞满之后看到碎片。如果文件系统95%(甚至80%)的空间被占用了,你就会开始看到一些碎片。然而,这样的文件系统本来就是设计来在普通使用中减少碎片的。
如果你真的在Linux上出现了碎片的烦恼,你可能就需要一个更大的硬盘了。如果你真的需要对一个文件系统做碎片整理,最简单的可能也是最可靠的方法就是将所有文件拷贝出来,然后清空原来的分区,再将文件拷贝回去。文件系统就会在你拷贝回去的过程中智能地将文件放置好。
你可以使用fsck命令来检测一下一个Linux文件系统的碎片化程度,只需要在输出中查看非连续节点个数(non-contiguous inodes)就可以了。
I. fsck.ext4 命令源码在哪个压缩包里面啊
DOS系统命令都能用输入command能查看面命令 环境变量PATH面应用程序名作命令用面总结些东西内容太关某命令详细信息请键入 HELP 命令名XP.CMD命令全关某命令详细信息请键入 HELP 命令名ASSOC 显示或修改文件扩展名关联AT 计划计算机运行命令程序ATTRIB 显示或更改文件属性BREAK 设置或清除扩展式 CTRL+C 检查CACLS 显示或修改文件访问控制列表(ACLs)CALL 另批处理程序调用CD 显示前目录名称或其更改CHCP 显示或设置代码页数CHDIR 显示前目录名称或其更改CHKDSK 检查磁盘并显示状态报告CHKNTFS 显示或修改启间磁盘检查CLS 清除屏幕CMD 打另 Windows 命令解释程序窗口COLOR 设置默认控制台前景背景颜色COMP 比较两或两套文件内容COMPACT 显示或更改 NTFS 区文件压缩CONVERT FAT 卷转换 NTFS您能转换前驱器COPY 至少文件复制另位置DATE 显示或设置期DEL 删除至少文件DIR 显示目录文件目录DISKCOMP 比较两软盘内容DISKCOPY 软盘内容复制另软盘DOSKEY 编辑命令行、调用 Windows 命令并创建宏ECHO 显示消息或命令显打或关ENDLOCAL 结束批文件环境更改本化ERASE 删除至少文件EXIT 退 CMD.EXE 程序(命令解释程序)FC 比较两或两套文件并显示同处FIND 文件搜索文字字符串FINDSTR 文件搜索字符串FOR 套文件每文件运行指定命令FORMAT 格式化磁盘便跟 Windows 使用FTYPE 显示或修改用于文件扩展名关联文件类型GOTO Windows 命令解释程序指向批处理程序某标明行GRAFTABL 启用 Windows 图像模式显示扩展字符集HELP 提供 Windows 命令帮助信息IF 执行批处理程序条件性处理LABEL 创建、更改或删除磁盘卷标MD 创建目录MKDIR 创建目录MODE 配置系统设备MORE 显示结屏幕MOVE 文件目录移另目录PATH 显示或设置执行文件搜索路径PAUSE 暂停批文件处理并显示消息POPD 原 PUSHD 保存前目录值PRINT 打印文本文件PROMPT 更改 Windows 命令提示符PUSHD 保存前目录其进行更改RD 删除目录RECOVER 问题磁盘恢复读信息REM 记录批文件或 CONFIG.SYS 注释REN 重命名文件RENAME 重命名文件REPLACE 替换文件RMDIR 删除目录SET 显示、设置或删除 Windows 环境变量SETLOCAL 始批文件环境更改本化SHIFT 更换批文件替换参数位置SORT 输入进行类START 启另窗口运行指定程序或命令SUBST 路径跟驱器号关联TIME 显示或设置系统间TITLE 设置 CMD.EXE 窗口标题TREE 图形模式显示驱器或路径目录结构TYPE 显示文本文件内容VER 显示 Windows 版本VERIFY 告诉 Windows 否验证文件否已确写入磁盘VOL 显示磁盘卷标序列号XCOPY 复制文件目录树appwiz.cpl————添加删除程序control userpasswords2——–用户帐户设置cleanmgr——-垃圾整理CMD————–命令提示符作 Windows 附件PingConvert 些能图形环境 使用功能要借助完cmd——jview察看Java虚拟机版本command.com——调用则系统内置 NTVDM DOS虚拟机完全类似 Virtual PC 虚拟环境系统本身联系我命令提示符运行 DOS 程序实际 自转移 NTVDM虚拟机 CMD 本身没关系calc———–启计算器chkdsk.exe—–Chkdsk磁盘检查compmgmt.msc—计算机管理conf———–启 netmeetingcontrol userpasswords2—–User Account 权限设置devmgmt.msc— 设备管理器diskmgmt.msc—磁盘管理实用程序dfrg.msc——-磁盘碎片整理程序drwtsn32—— 系统医dvdplay——–启Media Playerdxdiag———–DirectX Diagnostic Toolgpedit.msc——-组策略编辑器gpupdate /target:computer /force 强制刷新组策略eventvwr.exe—–事件查看器explorer——-打资源管理器logoff———注销命令lusrmgr.msc—-本机用户组msinfo32———系统信息msconfig———系统配置实用程序net start (servicename)—-启该服务net stop (servicename)—–停止该服务notepad——–打记事本nusrmgr.cpl——-同control userpasswords打用户帐户控制面板Nslookup——-IP址侦测器oobe/msoobe /a—-检查XP否激perfmon.msc—-计算机性能监测程序progman——–程序管理器regedit———-注册表编辑器regedt32——-注册表编辑器regsvr32 /u *.dll—-停止dll文件运行route print——查看路由表 rononce -p —-15秒关机rsop.msc——-组策略结集rundll32.exe rundll32.exe %Systemroot%System32shimgvw.dll,ImageView_Fullscreen—-启空白Windows 图片传真查看器secpol.msc——–本安全策略services.msc—本服务设置sfc /scannow—–启系统文件检查器sndrec32——-录音机taskmgr—–任务管理器(适用于2000/xp/2003)tsshutdn——-60秒倒计关机命令winchat——–XP自带局域网聊winmsd———系统信息winver—–显示About Windows 窗口wupdmgr———–Windows Update一,编译之前的准备。1) 了解代码组织结构。Chrome source非常庞大,并且在其主目录下还包含有工具和组件,任何一个工具和组件也附带有其源代码。首先得熟悉这些源代码的组织结构,在中包含如下子目录:releases,曾经发布过的chrome源代码的正式版本;trunk,当前最新的源代码。由于releases中的代码比较旧,这里就不做说明了,只说明trunk的结构。在trunk下面有3个重要的目录,deps包含了chrome编译和运行所需要的全部组件的代码。src里面包含的则是chrome的主程序的代码,tools包含的是下载和配置编译所需要的第三方工具的压缩包和源代码,其中就有svn和python这2个比较重要的工具,后面再详细介绍。暂时做这样一个简单的介绍,因为其组织结构比较负责,以后再作补充斧正。2)如何下载和同步源代码。首先谈谈下载:1,最简单的方法是从chrome官网上直接下载源代码压缩包,地址是。2,或者采用svn从trunk/src这个地方heckout,这要求你先在本地建一个源代码的主目录。3,另外一个办法则是采用google提供的一个部署工具depot_tools。虽然这几种办法都可下载完整的源代码,但目前的情况是:chrome基于Visual Stdio 2005 进行编译,如果顺利完成编译工作,自然少不了sln文件,较早的源代码中包含有现成的sln和vcproject文件,但后来做了修改,这些文件被抛弃掉,Google自己开发了一种脚本工具叫做GYP,这个工具采用python编写,GYP采用了自定义的一套规则,用于生成各种工程文件。而关键的python则包含于depot_tools中,因此不论采用什么方法下载的代码,都得下载depot_tools这个工具,以获得必须的工程文件。depot_tools位于 trunk/tools 下面,包括一个目录和一个zip格式的压缩包。3)关于编译器前面提到Chrome采用Visual Stdio 2005进行编译,根据的说明,需进行如下操作正常编译a, 安装Visual Studio 2005.b, 安装Visual Studio 2005 Service Packe 1.c, 安装Visual Studio Hotfix 947315.d, 如果是vista系统,还需安装Visual Studio 2005 Service Packe 1 Update for Windows Vista.e, 安装Windows 2008 SDK,如果是Visual Studio 2008则不需要这一步。f, 配置Windows 2008 SDK,使2008 SDK成为首选开发库,以获得一些新功能和特性。办法是在开始->程序->Microsoft Windows SDK v6.1 > Visual Studio Registration > Windows SDK Configuration Tool,选择make current按钮。也可以在VS里面手动配置include和libary路径,效果是一样的。二,如何配置工程文件1,如果是采用depot_tools,那么从代码下载到生成sln文件会自动完成。其步骤是(1)下载depot_tools到本地存储,假设位于d:/depot_tools.(2)将d:/depot_tools添加到系统环境变量中。(3)创建一个源代码根目录,假设为 d:/chrome,目录不得包含空格。(4)在命令行下切换当前目录到d:/chrome。(5)执行命令 gclient config trunk/src ,该命令会首先下载svn和python分别到d:/depot_tools/svn_bin和d:/depot_tools/python_bin。(6)执行命令 gclient sync 这个命令会调用svn同步源代码。这个过程会比较漫长。全部完成之后全部源代码就保存在d:/chrome里面。未编译的代码大约有4个G左右,过程将十分漫长。这样获得的源代码已经包含所有的工程文件,可直接打开。重点说明一下gclient,它实际上是一个批处理文件,它主要做了如下一些事情,首先设置环境变量,如代码根目录,工具根目录等。其次调用win_tools.bat从服务器下载svn和python。最后调用python.exe对Chrome.gyp进行解析生成所有工程文件。另外需要说明的是,gclient sync的过程非常漫长,根据命令行的提示来看总共需要同步67个项目(不是工程),期间可能会因为一些原因导致错误而退出这个过程,需要继续调用sync。比如网络出现故障svn会多次进入sleep状态然后重试,如果多次失败就会报错退出,还有的情况是某些子目录的属性问题无法同步,可根据提示进行操作。还有个目前新出现的问题,下面2个目录“src/webkit/data/layout_tests/LayoutTests”和“src/third_party/WebKit/LayoutTests”的源代码是从src.webkit.org签出来的,但是这个网站目前存在问题无法签出代码, 需要屏蔽掉这2个目录,由于里面是测试代码,即使丢弃也不会影响整个工程的编译,方法是打开trunk下面的.gclient文件,向里面添加如下内容"custom_deps" : {"src/webkit/data/layout_tests/LayoutTests":None,"src/third_party/WebKit/LayoutTests":None肠川惯缎甙等轨劝憨滑,},这样svn就能完成代码的同步了。最后gclient会调用depot_tools/python_bin/python.exe 对 src/build/gyp_chromium进行处理,这样就得到了所有的sln和vcproject文件。2,如果是下载的代码压缩包或者checkout的代码,代码目录里面没有sln文件,这个时候需要调用命令行进入源代码根目录,然后执行命令 gclient runhooks –force,命令执行后会直接对Chrome.gyp进行解析,生成sln文件。在实际下载过程中,最开始的时候我用TortoiseSVN从trunk/src checkout源代码,但是得到的代码只有几百兆,执行gclient runhooks –force命令后也没有找到sln文件,具体原因未知,不建议使用此方式。而直接下载代码压缩包的方式没有尝试过,不知道是否可行。因此最稳妥的方法还是使用depot_tools来部署和处理源代码。三 编译工程启动Visual Studio 2005打开 src/chrome/browser/chrome.sln,或者打开src/build/all.sln,如果打开的是chrome.sln里面包含480个工程,而all.sln则包含507个工程,一些09年的编译说明提到有300左右的工程,可见chrome的代码变动比较大。对整个解决方案进行编译,打开需要2个小时才能完成编译,视硬件环境而定,内存越大越快,推荐4G以上内存,酷睿2核或者4核。编译完成以后据说会占用30G的空间。编译后的文件位于 d:/chorme/chrome/debug 目录或者 d:/chorme/chrome/release目录下。四 chrome涉及的开源项目Chrome 采用了很多开源项目,这里把它们列出来以备后用,目前Chrome涉及25个开源代码:1、Google Breakpad/src/breakpad开源的跨开台程序崩溃报告系统。2、Google URL/src/googleurlGoogle小巧的URL解析整理库。3、Skia/src/skia矢量图引擎。4、Google v8/src/v8Google开源的JavaScript引擎。V8实现了ECMA-262第三版的ECMAScript规范,可运行于Windows XP 和 Vista, Mac OS X 10.5 (Leopard), 及 Linux等基于IA-32 或 ARM 的系统之上。V8可单独运行也可嵌入到任何C++程序中。5、Webkit/src/webki开源的浏览器引擎6、Netscape Portable Runtime (NSPR)/src/base/third_party/nsprNetscape Portable Runtime (NSPR) 提供了系统级平台无关的API及类似libc的函数。7、Network Security Services (NSS)/src/base/third_party/nssNetwork Security Services (NSS) 一套用于支持服务器端与客户端安全开发的跨平台函数库。程序通过NSS可支持SSL v2 and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 认证及其它一些安全标准。8、Hunspell/src/chrome/third_party/hunspellSpell checker and morphological analyzer library and program designed for languages with rich morphology and complex word compounding or character encoding.9、Windows Template Library/src/chrome/third_party/wtl用于开发Windows程序与UI组件的C++ library。WTL扩展了ATL (Active Template Library) 并提供一套用于controls, dialogs, frame windows, GDI objects等开发的类。10、Google C++ Testing Framework/src/testing/gtestGoogle用于编写C++测试的基于xUnit架构的框架,可用于多种平台上:Linux, Mac OS X, Windows, Windows CE, and Symbian。支持自动测试发现,有一套丰富的Assertions断言,用于可自定义断言,death tests, fatal and non-fatal failures, various options for running the tests, and XML test report generation.11、bsdiff 与 bspatch/src/third_party/bsdiff 及 /src/third_party/bspatchbsdiff 与 bspatch 用于为二进制文件生成补丁。12、bzip2/src/third_party/bzip2bzip2使用Burrows-Wheeler block sorting text compression 算法与Huffman编码压缩文件。13、International Components for Unicode (ICU)/src/third_party/icu38ICU是一套成熟并被广泛使用的C/C++ 及 Java 库,可为软件提供Unicode与全球化支持。14、libjpeg/src/third_party/libjpeg用于处理JPEG (JFIF)图像格式的库。15、libpng/src/third_party/libpngPNG图像格式库。支持绝大部分的PNG特性,可扩展。已经被广泛地使用了13年以上了。16、libxml/src/third_party/libxmlC语言的XML解析库。17、libxslt/src/third_party/libxsltC语言的XSLT库。18、LZMA/src/third_party/lzma_sdkLZMA为7-Zip软件中7z格式压缩所使用的压缩算法,有很好的压缩效果。19、stringencoders/src/third_party/modp_b64一系列高性能的c-string转换函数,比如:base 64 encoding/decoding。通常比其标准实现快两倍以上。20、Netscape Plugin Application Programming Interface (NPAPI)/src/third_party/npapi多种浏览器使用的跨平台插件架构。21、Pthreads-w32/src/third_party/pthread用于编写多线程程序的API22、SCons – a software construction tool/src/third_party/scons开源的软件构建工具——下一代的编译工具。可以认为SCons是改进过的跨平台配上autoconf/automake与ccache的Make工具的子系统。23、sqlite/src/third_party/sqlite大名鼎鼎的嵌入式数据库引擎。自管理、零配置、无需服务器、支持事务。24、TLS Lite/src/third_party/tlsliteSSL 3.0, TLS 1.0, and TLS 1.1的Python免费实现库。TLS Lite支持这些安全验证方式:SRP, shared keys, and cryptoIDs in addition to X.509 certificates。注:Chrome并不包涵Python。TLS Lite用于Chrome开发过程中的代码覆盖、依赖检查、网页加载时间测试及生成html结果比较等。25、zlib/src/third_party/zlibzlib为一套用于任意平台与机器的无损数据压缩的库,它免费、自由、无任何法律专利问题。