最近看了一本电子书,书名叫《笨兔兔的故事》,乍一听书名,是不是以为是童话故事书?实际上它是一本介绍linux系统的技术书籍,作者通过趣味幽默的笔触,把很多乏味难读的技术文章,通过笨兔兔这个小动物以第一人称生动表达,非常适合初学者,或者即使有经验的同事把它当趣味小说也能串联复习到不少知识,欢迎各位同事下载阅读,希望你能在这本书中有所收获!(此处不可以上传PDF附件,可以自行下载,地址http://xiaoxing.b0.upaiyun.com/2013/04/story.pdf)。
此文档以Ubuntu8.04(即是作者起名为“笨兔”)系统为例,先后介绍了系统的安装过程,安装后的配置,常用影音软件、办公软件的介绍,介绍wine和虚拟机VBox,Ubuntu下的程序开发软件的使用方法,shell的介绍等等。本书介绍内容很多,我只针对磁盘文件系统这部分总结(知识分享负责的部分),以下两段是摘录。
———————————————————————————————————-
Windows只会两种文件系统——换句话说,只会用两种方式规划整个屋子的空间,那就是FAT32和NTFS。FAT32是一种很老旧的格式了,连 4G 以上的文件都不支持,性能也不好,还不支持多用户的权限,所以基本不怎么用了。这个查皮也是,没有用FAT32,而是用了另一个比较高级的格式——NTFS。那么,我就必须能够读懂 NTFS 格式的磁盘,我才能去查皮那里串门。要说以前,我们Linux是不太能读懂NTFS格式的磁盘的,毕竟是微软私有的格式,我的前辈们基本上只能勉强自从NTFS的磁盘上读取东西,往里写是不行的。不过自从Canonical学校为我们增加了一本ntfs-3g教材以后,读写NTFS就都不在话下了。不过虽然能够读懂,但是我自己是不会用这个文件系统的,我会用很多其他的文件格式,比如ext2,ext3,xfs,jfs,reiserfs,ufs,zfs 等等,各有优势,我现在的屋里使用的是非常强大的xfs格式,至于怎么强大,以后慢慢细聊,现在,我要走了,去串门。
文件系统就是我们管理整个硬盘这间屋子的方式,这个以前跟大家说过了。文件系统有很多种,过去的文件系统都是非日志文件系统,这种文件系统比较落后。比如EXT2,比如查皮那的FAT。非日志文件系统在发生意外断电的时候就容易出问题。就像今天的情况,如果我这屋子用的是ext2的话,没准就丢个文件阿什么的,搞不好整个分区都坏掉了。那用日志文件系统又怎么样呢?日志文件系统,顾名思义,就是有日志的文件系统(废话)。还是拿上面那种情况举例,OO 要存那文件,那我怎么做呢?我会在硬盘上一个专门的记录日志的地方些下来:OO 要覆盖 笨兔兔的故事.odt 文件。如果这个时候停电了,没事,原来的那文件还好好的,但是内存里的还是没了,这条记录也就作废。记录之后,我就开始把内存里的东西往硬盘里放——放在记录日志的地方,并不动原来的那个文件。如果放到一半停电了,那也没关系,原来的文件还好好的。修改了的那份也有一部分放到了硬盘里,不过这是一部分的话,多半还是没什么用。如果我把文件完全搬到了记录日志的那部分硬盘里,那就再在刚才记录的那条日志下面写上:已经把要覆盖的内容存到了日志去xxx位置,准备替换原文件。如果这个时候停电,没事,等再开机,我一查日志,就知道要修改的版本已经完全存在了硬盘里,只要按着上面记录的继续做就行了。写好日志之后,就开始用日志区的这个新文件去替换硬盘上那个原来的文件。这个过程会很快,因为其实并不需要真的搬运数据,只要在原文件的地方做上标记,表示这个文件已经作废,然后把那个 笨兔兔的故事.odt文件名指向新写的这个文件就好了。(我们只是拿箱子比喻文件,但文件毕竟不是你家的箱子。)这样,无论中间的哪个过程断电,都不会完全损坏整个文件,要么原版还留着,要么修改后的版本已经生效,通过查看日志就能知道现在哪个版本有效。这就是日志文件系统。
———————————————————————————————————-
总结:
1. 介绍:
文件系统:是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型。
Windows系统支持FAT32及NTFS文件系统,Linux系统可以支持十多种文件系统类型:Btrfs、JFS、ReiserFS、ext、ext2、ext3、ext4、XFS、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
想要知道你的linux支持的文件系统有哪些,可以查看下面的目录:
ls –l /lib/modules/$(uname -r)/kernel/fs
查看系统目前已加载到内存中支持的文件系统:
cat /proc/filesystems
注意:部分Linux发行版默认不支持NTFS文件系统,解决方法是安装ntfs-3g或ufsd等NTFS驱动程序。部分Linux发行版对NTFS的支持度并不高。
2.文件系统特性:
文件数据除了实际内容外,通常还有很多的属性。EXT2文件系统将文件的实际内容放在数据块中,将属性放在i节点中。此外,还有超级块用来记录整个文件系统的整体信息。
超级块(super block):记录文件系统的整体信息,包括inode/block的总量、使用量、剩余量、以及文件系统的格式与相关信息。
i节点(inode):记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码。
数据块(block):实际记录文件的内容,如果文件太大时,或占用多个block。
3. 常用命令:
3.1 dumpe2fs
功能:显示ext2/ext3文件系统信息。
用法:dumpe2fs [ -bfhixV ] [ -ob superblock ] [ -oB blocksize ] device
-b 列出保留为坏道的部分。
-h 仅列出superblock的数据,不会列出其他的区段内容。
3.2 df
功能:显示文件系统的整体磁盘使用情况。
用法:df [-ahikHTm] [目录或文件名]
-a 列出所有的文件系统,包括/proc等文件系统。
-K 以KB的形式显示文件系统容量。
-m 以MB的形式显示文件系统容量。
-h 以易读的KB、MB、GB的实现显示文件系统容量。
-H 以1M=1000K代替1M=1024K的进位方式。
-T 连同该分区的文件系统名称(如ext3)也列出来。
-i 不以硬盘容量,而以inode的数量显示出来。
3.3 du
功能:评估文件或目录的容量。
用法:du [-ahskm] 文件或目录
-a 列出所有的文件和目录的容量。
-h 以人们易读的KB、MB、GB的形式显示容量。
-s 仅列出总量。
-S 列出不包括子目录的总量。
-k 以KB显示容量。
-m 以MB显示容量。
–exlude 排除某个目录或文件
–max-depth 深入到第几阶目录。
3.4 ln
Linux下的链接文件有两种:
软连接:类似于windows下的快捷方式。
硬链接:在某个目录下,产生一个新文件名,该文件名对应一个已存在的inode,并不产生一个新的文件。
3.5 fdisk
功能:分区命令(工具)
用法:fdisk [-l] 设备名称
-l 输出设备的所有分区内容。
fdisk –l 列出系统的所有能够找到的设备的分区。
4. 日志文件系统
正常情况下,数据的新增或改动操作可以顺利完成。但是如果在写入文件时,有异常情况发生会怎样?(比如:突然断电、或内核发生错误)早期ext2文件系统中,如果发生这种情况,系统在重启时会进行一致性检查,要耗费很长时间。为了避免文件系统不一致的情况发生,在文件系统中规划出一个块,该块专门记录写入或修订文件时的步骤。这样,即可简化一致性的检查。也就是说:
预备:当系统要写入一个文件时,会先在日志记录块中记录某个文件准备要写入的信息。
实际写入:开始写入文件的权限与数据,开始更新meta data的数据。
结束:完成数据与meta data的更新后,在日志记录块中完成该文件的记录。
在这样的程序当中,万一数据的记录过程当中发生了问题,那么我们的系统只要去检查日志记录块就可以知道那个文件发生了问题,针对该问题来做一致性检查即可,而不必针对整块文件系统去检查,这样就可以达到快速修复文件系统的能力了。这就是日志式文件最基础的功能。