1、挂载文件系统的细节
挂载文件系统到某个目录下,例如"mount /dev/sda8 /media/haypin/Test",挂载成功后/media/haypin/Test/目录中原来的文件全都暂时不可见了,且挂载后权限和所有者(如果指定允许普通用户挂载)等的都改变了,知道这是为撒么?
在将文件系统/dev/sda8挂载到挂载点/mnt之前,挂载点/media/haypin/Test/是根文件系统中的一个目录,/media/haypin/的data block中记录了/media/haypin/Test/的一些信息,其中包括inode号,而在inode table中,/media/haypin/Test对应的inode记录中又存储了block指针,此时这指针还是普通的指针。
当文件系统/dev/sda8挂载到/media/haypin/Test/上后,/media/haypin/Test/此时就称为另一个文件系统的入口了,因此它需要连接两边文件系统的inode和data block,具体来说是/media/haypin/Test/目录名的inode号"暂时"更改为根文件系统中的另一个inode号(原inode记录被标记为暂时不可用),而这个inode号却指向/dev/sda8文件系统的data block,从而将根文件系统与挂载的/dev/sda8文件系统联系起来:
(图中目录的data block为了图形简洁是将根文件系统中/media/haypin/Test目录的data block单独列在中间,根文件系统所有块组中其他目录的data block"合并"列到顶部,/dev/sda8文件系统所有块组中所有目录的data block列到底部。例如对父目录/media/haypin/,父父目录/media/、自身目录/meida/haypin/、原子目录/media/haypin/Test/、挂载后子目录/media/haypin/Test/中均有指向/media/haypin/的inode指针——文件名项)
在根文件系统的inode_table中,为/media/haypin/Test/重新分配一个inode记录m,该记录的block指针block_m指向文件系统/dev/sda8中的data block。既然为/media/haypin/Test/分配了新的inode记录m,那么在根目录的data block中,也需要修改其inode指针为inode_m以指向m记录。同时,原来inode table中的inode记录n就被标记为暂时不可用。
block_m指向的是文件系统/dev/sda8的data block,所以严格说来,除了/media/haypin/Test/的元数据信息即inode记录m还在根文件系统上,/media/haypin/Test/的data block已经是在/dev/sda8中的了。
这就是挂载新文件系统后实现的跨文件系统,它将挂载点的元数据信息和数据信息分别存储在不同的文件系统上。
挂载完成后,将在/proc/self/{mounts,mountstats,mountinfo}这三个文件中写入挂载记录和相关的挂载信息,并会将/proc/self/mounts中的信息同步到/etc/mtab文件中,当然,如果挂载时加了-n参数,将不会同步到/etc/mtab。
而卸载文件系统,其实质是移除临时新建的inode记录inode_m(当然,在移除前会检查是否正在使用)及其指针,并将指针指回原来的inode记录,这样inode记录中的block指针也就同时生效而找回原来的data block了。由于卸载只是移除inode记录,所以使用挂载点(sudo umount /dev/sda8)和文件系统(sudo umount /media/haypin/Test)都可以实现卸载,因为他们是联系在一起的。
下面是分析或结论。
①挂载点挂载时的inode记录是新分配的。
可以看到,根文件系统中的目录/media/haypin/Test/挂载前的inode号是16515078,目录中仅有一个文件Original.txt。挂载/dev/sda8后"."的inode号是2(这应该是指向的根文件系统根目录/的inode),目录中是/dev/sda8磁盘分区内的文件;注意到不同文件系统(磁盘分区)的inode号是会重复的,/media/haypin/Test/目录中其他文件的inode号就是/dev/sda8文件系统的inode号了,与根文件系统中的inode号可能重复。
②挂载后,挂载点原来的内容将暂时不可见、不可用,卸载后文件又再次可见、可用。
在卸载文件系统后,又会重新启动挂载点原来的inode记录,根文件系统的data block中的/media/haypin/Test的inode指针又重新指向该inode记录。
☂挂载后,挂载点的元数据和data block是分别存放于原文件系统、挂载文件系统上的。
④挂载点即使在挂载后,也还是属于源文件系统的文件。
2、多文件系统操作关联
3、ext3文件系统的日志功能