概念一:linux-ext2文件系统
ext2在分区的时候会分成多个组块(block group)和一个启动扇区(boot sector),每一个组块内又有superblock、File system Description、block bitmap、iNode bitmap、iNode table、data block六个部分。
boot sector:可以安装引导装载程序,利用它能做出多重引导的环境。
superblock:记录整个文件系统的相关信息大小一般为1024bytes,可以用dumpe2fs来查看。此为一个文件系统只需要一个superblock,也就是第一个blockgroup内的superblock,后面的如果有,则都是第一个的备份。
File system Description:描述block group的开始于结束block等。可以用dumpe2fs查看。
block bitmap:记录那些block是空的。
iNode bitmap :同上。
iNode table:iNode块,记录文件属性、权限以及该文件实际存放在那个block中。每个iNode固定大小为128bytes,每个文件都至少会占用一个iNode,iNode记录block号码的时候有12个直接、一个间接、一个双间接、一个三间接记录区。
data block:数据存放的位置,block的大小和数量在格式化完的时候就确定了,之后不能改变。每个block内最多只能放一个文件的数据(所以零碎的小文件有时会浪费大量的空间)。
其他:
在ext2中数据发生不一致的时候会进行数据一致性检查,通过e2fsck进行。
在ext3中会借助日志文件系统(Journaling file system)来进行快速修复。
ext4是对ext3的改进和性能提升,并没有加入明显的新的功能。
关于VFS(virtual filesystem switch):我们在进入不同的文件系统读取文件的时候并没有显示指明我们使用的文件系统类型,但是系统还是能正常读取文件,就是因为有VFS的存在,它帮我们选取了恰当的文件系统进行操作。
概念二:两种连接文件
hard link:只是在某个目录下新建一条文件名连接到某iNode号码的关联记录而已,所以一般情况下,创建hard link不会导致新的iNode和block被占用,除非写新记录的目录刚好满了。删除任意一个hard link并不会影响其他hard link对文件的读取,删除源文件也不会。直到所有的hard link被删除,源文件才会被真正的删除。hard link不能跨文件系统也不能连接到目录。
symbolic link:和window的快捷方式很像,会单独新建一个文件,占用iNode和block,block里面记录了指向源文件名地址的信息,当源文件被删除后这些symbolic link就会全部失效。
相关命令:
ln [-sf] 源文件 目标文件 #产生连接文件,默认产生的是hard link。
-s #加上这个参数,产生的就是symbolic link。
-f #如果目标文件存在则删除然后再创建。
概念三:/etc/fstab和/etc/mtab的作用与区别
/etc/fstab:记录静态文件系统信息,记录了文件系统的挂载相关信息,开机的时候,linux都会检查这个文件,按照里面的记录对文件系统进行挂载。
/etc/mtab:动态记录当前系统的挂载情况,mount与umount都会影响其记录。
详细可以参考下面的博客
http://blog.163.com/qimeizhen8808@126/blog/static/165119518201281892121501/
文件系统的简单操作:
磁盘目录与容量:
df [-ahTi] 目录或文件名 #列出文件系统的整体磁盘使用量,这个的信息来源为superblock,什么目录都不写会默认将所有文件系统的情况列出来,列出某个目录或文件系统时,会列出所在文件系统的信息。
-a #列出所有的文件系统,包括系统特有的/proc等文件系统。
-h #以人们较易阅读的GB、MB、KB等格式自行显示。
-T #连同该分区的文件系统名称也显示出来。
-i #不用硬盘容量而是用iNode的数量来显示大小。
du [-ahsS] 目录或文件名 #统计目录与其子目录的大小,不写目录文件名的时候统计当前路径。
-a #列出当前目录下所有目录下,包括系统特有的/proc等文件系统。
-h #以人们较易阅读的GB、MB、KB等格式自行显示。
-s #列出目录的总大小。
-S #不包括子目录下的统计信息,只统计每个目录“自己”所占用的大小。
磁盘分区、格式化、检验与挂载。
磁盘分区:
fdisk [-l] 设备名称 #之后会进入fdisk的菜单,跟着菜单就能完成分区。
-l #列出此设备的分区表。
格式化:
mkfs [-t 文件系统格式名] 设备文件名 #只需指定文件系统,会用默认设置来进行初始化。
如果我们想自己定义文件系统的卷标、block大小、iNode数量,则我们可以用以下的命令。
mke2fs [-b block大小] [-i 每多少bytes分配一个iNode] [-L 卷标] [-cj] 设备文件名
-b #设置block大小,支持1024、2048、4096bytes。
-i #每多少bytes分配一个iNode。
-L #卷标名称。
-c #写一个-c会进行快速读取测试,写-c -c会进行读写测试。
-j #不写j格式化为ext2,写了j格式化为ext3。
磁盘检查:
fsck [-t 文件系统] [-AayC] 设备名称 #用来检查与修正文件系统错误的指令,因为fsck扫描硬盘时有可能造成文件系统的损坏,所以使用这个命令时,分区一定要处于未挂载的状态。
-t #输入要检查的文件系统类型,现在不输入一般也行。
-A #依据/etc/fstab的内容,将需要扫描的设备扫描一次。
-a #自动修复有问题的扇区,不用人工确认。
-y #同a,但是有的文件系统只支持y不支持a。
-C #可以显示一个直方图提示进度。
badblocks [-svw] #用于检查坏轨,但是现在用的很少,因为格式化阶段一般有这个过程。
-s #显示进度。
-v #显示进度。
-w #用写入的方式检查,不建议使用。
磁盘挂载与卸载:
mount #虽然参数很多,但是一般可以不用,正真使用起来还是很简单的,这个命令还能用来挂载CD、DVD、U盘、软盘,另外当系统出错时,可以用这个命令重新挂载目录。
用法一:mount [设备名称/Label(卷标)] 目录 [-o] #将设备挂载到目录上-o后面接额外命令,可接命令如下(部分)。
ro,rw:文件系统只读,或者可读写。
async,sync:文件系统采用异步或者同步内存机制。
auto,noauto:允许次分区被mount -a自动挂载。
dev,nodev:是否允许在这个分区上创建设备文件。
suid,nosuid:是否可以包含suid、sgid文件。
exec,noexec:是否可以包含可执行文件。
user,nouser:是否可让一般用户在此分区上执行monut。
#注:默认值为,rw,suid,dev,exec,auto,nouser,async。
用法二:mount -a #依照配置文件/etc/fstab的数据将所有为挂载的设备都挂载上。
用法三:mount [-l] #只输入mount时,会列出所有的挂载信息,加上-l时会加上label。
用法四:mount -o remount,rw,auto / #单独列出这个是因为这个命令很有用,在文件系统出问题的时候可以用这个命令重新挂载,这里写的是重新挂载根目录的情况,另外还带了一下其他参数。
umount 设备文件名或者挂载点 #卸载
磁盘参数修改:
mknod 设备文件名称 [bcp] [Major] [Minor](设置主设备号和次设备号)
b #设置设备为一个外部存储设备,如硬盘等。
c #设置设备为一个外部输入输出设备,如鼠标等。
p #设置成fifo文件。
e2label 设备名称 新的Label # 修改卷标
tune2fs -j 设备名称 # 可以将ext2转换成ext3,还有其他一些功能未列出。
hdparm [-tT] 设备名称 #测试硬盘性能,另外对IDE接口的硬盘有一些作用这里未说明。
-t #测试硬盘实际访问性能。
-T #测试cache 的访问性能。
开机挂载:直接修改/etc/fstab这个文件即可。
特殊设备loop挂载:我们同样可以对文件进行挂载,如将一个镜像文件进行挂载,这样就可以直接读取内部文件,或者我们新建一个大文件,对这个文件进行格式化(用mkfs)后,将这个文件挂载,当做一个分区使用。
mount -o loop 文件 挂载点 #将iso文件或者格式化过的文件挂载到挂载点。
构建swap:分为四个步骤,分区(fdisk),格式化(mkswap),使用(swapon,swapoff),查看(free),当然我们也可以使用文件来构建swap,就是4中说的特殊设备挂载。
分区:和正常分区的区别就是需要修改system id 为82。
格式化:mkswap 设备名 #格式化为swap。
使用 :swapon 设备名 #启动。
停用:swapoff 设备名 #停用。
查看:free #列出内存情况。
其他问题:
1,当分区大小高与2TB的时候,就不能用fdisk了,需要用GNU的parted,暂时不介绍。
2,boot sector与super block的关系:superblock与boot sector大小都为1024bytes,当block大小为1024时,第一个block是boot sector ,第二个是superblock,当block是2048是,他们会在同一个block。
参考资料:《鸟哥的Linux私房菜》