http://vbird.dic.ksu.edu.tw/linux_basic/linux_basic.php
1.目前Linux主要使用的文件系统为Ext4/Ext3,该文件系统内的信息主要有:
a.superblock:记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等。
b.inode:记录文件的属性,一个文件占用一个inode,同时记录此文件所在的block号码;
c.block:世纪记录文件的内容,若文件太大时,会占用多个block。
2.索引式文件系统(indexed allocation)与FAT文件系统对比:
inode/block 数据存取示意图 FAT文件系统数据存取示意图
在索引式文件系统下,操作系统可以通过inode直接获取到四个block的位置,故而可以排列磁盘的阅读顺序,
而在FAT文件系统中只能依次的读取完一个block后才能下一个block的位置,当block过于分散时读取效率会大大降低,因此需要“磁盘整理”。
3.inode(128bytes),里面有12个直接指向block号码的对照,这12笔记录可以直接取得block号码,也可以再拿一个block来记录block号码,如果文件太大时,就会使用间接的block来记录编号。如果文间持续增大,则会使用二层间接和三层间接。故文件系统支持的最大文件大小为(1.block=1k的情况下,2.每笔block号码的记录会花去4bytes):12*1K+256*1K+256*256*1K+256*256*256*1K=16G.
4.日志文件系统(Journaling filesystem)
一般来说,我们将 inode table 与 data block 称为数据存放区域,至于其他例如 superblock、block bitmap 与 inode bitmap 等区段就被称为 metadata (中介数据) 啰,因为 superblock, inode bitmap 及 block bitmap的数据是经常变动的,每次新增、移除、编辑时都可能会影响到这三个部分的数据,因此被称为中介数据。
a.预备:当系统要开始写入一个文件时,会先在日志记录区块中记录某个文件准备要写入的信息。
b,实际写入:开始写入文件的权限和数据;开始升级metadata的数据;
c.结束;完成数据和metadata的升级后,在日志记录区块中完成文件的记录。
在日志文件系统中不需要每次去对比真实的数据,只需要检查日志即可处理文件系统不一致的问题。
5.df主要查询superblock的内容,故而速度很快
[root@www ~]# df [-ahikHTm] [目录或文件名] 选项与参数: -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统; -k :以 KBytes 的容量显示各文件系统; -m :以 MBytes 的容量显示各文件系统; -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示; -H :以 M=1000K 取代 M=1024K 的进位方式; -T :连同该 partition 的 filesystem 名称 (例如 ext3) 也列出; -i :不用硬盘容量,而以 inode 的数量来显示
6.du会直接到文件系统内去搜寻所有的文件数据,速度较慢
[root@www ~]# du [-ahskm] 文件或目录名称 选项与参数: -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。 -h :以人们较易读的容量格式 (G/M) 显示; -s :列出总量而已,而不列出每个各别的目录占用容量; -S :不包括子目录下的总计,与 -s 有点差别。 -k :以 KBytes 列出容量显示; -m :以 MBytes 列出容量显示;7.ln,硬链接与软链接
- 每个文件都会占用一个 inode ,文件内容由 inode 的记录来指向;
- 想要读取该文件,必须要经过目录记录的文件名来指向到正确的 inode 号码才能读取。
硬链接:添加一个文档名指向同一个inode,一般来说,使用 hard link 配置链接文件时,磁盘的空间与 inode 的数目都不会改变!我们还是由上图来看,由图中可以知道, hard link 只是在某个目录下的 block 多写入一个关连数据而已,既不会添加 inode 也不会耗用 block 数量。
因为硬链接最后是多个文档名指向同一个inode,故而只能在同一个文件系统之内才能链接。且不能链接目录。
软链接:类似与windows下的快捷方式,原文件删除则链接无效。
[root@www ~]# ln [-sf] 来源文件 目标文件 选项与参数: -s :如果不加任何参数就进行连结,那就是hard link,至于 -s 就是symbolic link -f :如果 目标文件 存在时,就主动的将目标文件直接移除后再创建!
8.磁盘的分割、格式化及挂载
磁盘分区: fdisk
[root@www ~]# fdisk [-l] 装置名称 选项与参数: -l :输出后面接的装置所有的 partition 内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的 partition 均列出来。
磁盘格式化:mkfs
[root@www ~]# mkfs [-t 文件系统格式] 装置文件名 选项与参数: -t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)
挂在/卸载:mount/umount
[root@www ~]# mount -a [root@www ~]# mount [-l] [root@www ~]# mount [-t 文件系统] [-L Label名] [-o 额外选项] \ [-n] 装置文件名 挂载点 选项与参数: -a :依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来 -l :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称! -t :与 mkfs 的选项非常类似的,可以加上文件系统种类来指定欲挂载的类型。 常见的 Linux 支持类型有:ext2, ext3, vfat, reiserfs, iso9660(光盘格式), nfs, cifs, smbfs(此三种为网络文件系统类型) -n :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序 的运行。但在某些情况下(例如单人维护模式)为了避免问题,会刻意不写入。 此时就得要使用这个 -n 的选项了。 -L :系统除了利用装置文件名 (例如 /dev/hdc6) 之外,还可以利用文件系统的标头名称 (Label)来进行挂载。最好为你的文件系统取一个独一无二的名称吧! -o :后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写权限等: ro, rw: 挂载文件系统成为只读(ro) 或可擦写(rw) async, sync: 此文件系统是否使用同步写入 (sync) 或异步 (async) 的 内存机制,请参考文件系统运行方式。默认为 async。 auto, noauto: 允许此 partition 被以 mount -a 自动挂载(auto) dev, nodev: 是否允许此 partition 上,可创建装置文件? dev 为可允许 suid, nosuid: 是否允许此 partition 含有 suid/sgid 的文件格式? exec, noexec: 是否允许此 partition 上拥有可运行 binary 文件? user, nouser: 是否允许此 partition 让任何使用者运行 mount ?一般来说, mount 仅有 root 可以进行,但下达 user 参数,则可让 一般 user 也能够对此 partition 进行 mount 。 defaults: 默认值为:rw, suid, dev, exec, auto, nouser, and async remount: 重新挂载,这在系统出错,或重新升级参数时,很有用!
[root@www ~]# umount [-fn] 装置文件名或挂载点 选项与参数: -f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下; -n :不升级 /etc/mtab 情况下卸除。