`
helloyesyes
  • 浏览: 1271820 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

虚拟文件系统之文件系统的安装与卸载

阅读更多

努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2011/05/14/6420104.aspx

安装普通文件系统
mount系统调用被用来安装一个普通的文件系统;它的服务例程是sys_mount()。这个函数首先把参数的值拷贝到临时内核缓冲区,也就是位于内核栈的这个函数的那些局部变量。获取大内核锁,并调用do_mount()函数。

它调用do_kern_mount函数,给它传递的参数为文件系统类型,安装标志以及块设备名。
do_kern_mount返回一个新的安装文件系统描述符的地址。

do_add_mount实现的基本功能:
1)获得当前进程的写信号量namespace_sem,因为函数要更改namespace结构。
2)do_kern_mount()函数可能让当前进程睡眠;同时,另一个进程可能在完全相同的安装点上安装文件系统或者甚至更改根文件系统(current->namespace->root)。验证在该文件系统安装点上最近安装的文件系统是否仍指向当前的namespace;如果不是,则释放读/写信号量并返回一个错误码。
3)如果要安装的文件系统已经被安装在由系统调用的参数所指定的安装点上,或该安装点是一个符号链接,则释放读/写信号量并返回一个错误码。
4)初始化由do_kern_mount()分配的新安装文件系统对象的mnt_flags字段的标志。
5)调用graft_tree()把新安装的文件系统对象插入到namespace链表,散列表及父文件系统的子链表中。
6)释放namespace_sem读/写信号量并返回
这里说明一下真正实现文件系统安装的是do_add_mount函数,而不是do_kern_mount函数。do_kern_mount函数只是得到一个vfsmount,并初始化超级块之类的。真正的挂载在do_add_mount函数中调用的graft_tree,graft_tree调用的attach_recursive_mnt,attach_recursive_mnt调mnt_set_mountpoint(dest_mnt,dest_dentry,source_mnt)完成的:

分配超级块对象
文件系统对象的get_sb方法通常是由单行函数实现,例如在Ext2文件系统中该方法的实现如下:

get_sb_bdev()VFS函数分配并初始化一个新的适合于磁盘的文件系统的超级块;它接受ext2_fill_super()函数的地址,该函数从Ext2磁盘分区读取磁盘超级块。

安装文件系统
安装文件系统分两个阶段:
1.内核安装特殊rootfs文件系统,该文件系统仅提供一个作为初始安装点的空目录。
2.内核在空目录上安装实际根文件系统。
阶段一:安装rootfs文件系统
第一阶段由init_rootfs()和init_mount_tree()函数完成的,它们在系统初始化过程中完成。

1.调用do_kern_mount函数,把字符串"rootfs"作为文件系统类型参数传递给它,并把该函数返回的新安装文件系统描述符的地址保存在mnt局部变量中。do_kern_mount()最终调用rootfs文件系统的get_sb方法,也即rootfs_get_sb()函数:

get_sb_nodev()函数执行如下步骤:

a.调用sget()函数分配新的超级块,传递set_anon_super()函数的地址作为参数。接下来,用合适的方式设置超级块的s_dev字段:主设备号为0,次设备号不同于其他已安装的特殊文件系统的次设备号。
b.将flags参数的值拷贝到超级块的s_flags字段中。
c.调用ram_fill_super()函数分配索引节点和对应的目录项对象,并填充超级块字段值。由于rootfs是一种特殊文件系统,没有磁盘超级块,因此只需执行两个超级块操作。
d.返回新超级块的地址。
2.为进程0的命名空间分配一个namespace对象,并将新分配的已安装文件系统描述符插入到namespace的链表中。
3.将系统中每个进程的namespace字段设置为namespace对象的地址;同时初始化引用计数器namespace->count(缺省情况下,所有进程共享同一个初始namespace)。
4.将进程0的根目录和当前工作目录设置为根文件系统。
阶段二:安装实际根文件系统
prepare_namespace()函数执行如下:


卸载文件系统
umount()系统调用用来卸载一个文件系统。

该函数执行如下操作:
1.调用user_path()查找安装点路径名;该函数把返回的查找结果存放在nameidata类型的局部变量nd中。
2.如果查找的最终目录不是文件系统的安装点,则设置retval返回码为-EINVAL并跑到第6步。这种检查是通过验证path.mnt->mnt_root进行的。
3.如果要卸载的文件系统还没有安装在命名空间中,则设置retval返回码为-EINVAL并跳到第6步,这种检查是通过验在path.mnt上调用check_mnt()函数进行的。
4.如果用户不具有卸载文件系统的特权,则设置retval返回码为-EPERM并跳到第6步。
5.调用do_umount(),传递给他的参数为path.mnt和flags。
a.从已安装文件系统对象的mnt_sb字段检查超级块对象的sb的地址。
b.如果用户要求强制拆卸操作,则调用umount_begin超级块操作中断任何正在进行的安装操作。
c.如果要卸载的文件系统是根文件系统,且用户并不要求真正的把它卸载下来,则调用do_remount_sb()重新安装根文件系统为只读并终止。
d.为进行写操作而获取当前进程的namespace_sem读/写信号量和vfsmount_lock自旋锁。
e.如果已安装文件系统不包含任何子安装文件系统的安装点,或者用户要求强制卸载文件系统,则调用umount_tree()卸载文件系统(及其所有子文件系统);
f.释放vfsmount_lock自旋锁和当前进程的namespace_sem读/写信号量。
6.减少相应文件系统根目录的目录项对象和已安装文件系统描述符的引用计数器的值;这些计数器值由path_lookup()增加。
7.返回retval的值。

分享到:
评论

相关推荐

    疯狂内核之——虚拟文件系统

    1 虚拟文件系统概述 5 1.1 通用文件模型 7 1.2 VFS所处理的系统调用 9 2 虚拟文件系统架构 11 2.1 VFS对象数据结构 11 2.1.1 超级块对象 11 2.1.2 索引节点对象 15 2.1.3 文件对象 18 2.1.4 目录项对象 22 2.2 把...

    轻量级虚拟系统小工具(无视一切后门木马)

    为了弥补了用户对于传统沙箱看不见摸不着的不足,虚拟系统的界面采用Windows系统的操作展现让用户更好的与之交互。界面近似于Win7系统,操作上也类似虚拟机,但不需要安装新系统,也没有虚拟机那些系统资源占用,...

    完美卸载 v31.04

    4、卸载IE工具条与IE修复:解决IE慢的问题,打开IE出错,打不开网页等诸多上网问题。 5、卸载启动项:解决电脑启动慢的问题,可以帮助用户分析出木马或可疑软件,及时断其启动源头。 6、卸载进程:帮助用户找出非法...

    万能的软件卸载工具完美卸载

    一套功能比较强大的安装/卸载/清理工具可以帮您解决以下问题:电脑运行越来越慢;电脑启动越来越慢;C盘空间越来越少;经常报告虚拟内存不足;怀疑自己的电脑中了木马或流氓软件;IE打开网页速度如同蜗牛;安装了...

    rhce系统管理ppt教程

    卸载文件系统 文件系统维护 自动挂载 第三单元 开机与启动 启动流程图 开机流程 BIOS 初始化 启动引导工具 LILO GRUB 核心初始化 init 初始化 运行级别 启动脚本 运行级别目录 /etc/rc.d/rc.local 虚拟控制台 第四...

    完美卸载 2009 Build 27.07

    完美卸载(本软件完全免费,不含广告与插件,不锁定主页) 系统维护的瑞士军刀,物美价廉的超级体验! 推荐:全方位的服务,我们共可以清除总计253种软件,包括流氓软件,IE插件,广告软件等,自动上网升级病毒库和新版本。 ...

    完美卸载 Build27.32

    完美卸载,系统维护的瑞士军刀,简单易用的电脑清洁工,可以帮您解决以下问题:电脑运行越来越慢;电脑启动越来越慢;C盘空间越来越少;经常报告虚拟内存不足;怀疑自己的电脑中了木马或流氓软件;IE打开网页速度...

    创建虚拟文件柜(虚拟磁盘)

    从TrueCrypt中摘出来的代码,供二次开发者使用。提供三个接口:创建文件柜,加载文件柜,卸载文件柜。编译工具vc2008。在vista系统中使用FAT32格式,其他系统默认使用NTFS格式。

    完美卸载 V31.13.zip

    完美卸载是系统维护的瑞士军刀,简单易用的电脑清洁工,可以帮您解决以下问题:电脑运行越来越慢;电脑启动越来越慢;C盘空间越来越少;经常报告虚拟内存不足;怀疑自己的电脑中了木马或流氓软件;IE打开网页速度...

    局域网文件管理软件(HFS网络文件服务器)

    运行主程序,在“虚拟文件系统”窗格下按鼠标右键,即可新增/移除文件夹。或者直接将欲加入的档案拖曳至此窗口,便可架设完成个人 HTTP 文件服务器。 可以选择将设置保存在注册表或者INI文件。主程序提供卸载功能,...

    VDACleanupUtility VDA卸载工具

    它可以帮助用户完全卸载和清理与NVIDIA vGPU相关的驱动程序、服务和注册表项,以确保系统干净并准备好进行新的安装或升级。 这个工具的使用非常简单,用户只需要下载并运行VDACleanupUtility,然后按照提示进行操作...

    [UNIX操作系统教程:管理与编程].刘循

    UNIX文件系统本章主要内容2.1 UNIX文件及目录2.1.1 文件、目录及权限...虚拟文件系统2.3.3 文件系统管理文件2.3.4 远程文件系统2.4 文件系统的管理命令2.4.1 确定文件系统类型2.4.2 维护文件系统2.4.3 文件系统检测...

    HTTP 文件服务器——Http File Server

    运行主程序,在“虚拟文件系统”窗格下按鼠标右键,即可新增/移除文件夹。或者直接将欲加入的档案拖曳至此窗口,便可架设完成个人 HTTP 文件服务器。 可以选择将设置保存在注册表或者INI文件。主程序提供卸载功能,...

    云端,云端将未来十大IT技术之一的应用虚拟化,全球第一家引入个人用户领域,创造软件使用崭新方式:不安装、不重装、无垃圾。

    4、操作系统保护 云端提供的虚拟化环境,极大的避免了软件安装使用和软件安装过多带来的操作系统出错、系统运行缓慢等,有效去除了软件卸载不干净而残留的注册表、dll文件等系统垃圾。降低了重装系统的频率,保护...

    hfs网络文件服务器

    运行主程序,在“虚拟文件系统”窗格下按鼠标右键,即可新增/移除文件夹。或者直接将欲加入的档案拖曳至此窗口,便可架设完成个人 HTTP 文件服务器。 可以选择将设置保存在注册表或者INI文件。主程序提供卸载功能,...

    完美卸载 v2009 Build 27.05

    完美卸载,系统维护的瑞士军刀,简单易用的电脑清洁工,可以帮您解决以下问题:电脑运行越来越慢;电脑启动越来越慢;C盘空间越来越少;经常报告虚拟内存不足;怀疑自己的电脑中了木马或流氓软件;IE打开网页速度...

    完美卸载 v2008 26.49

    11.文件加密: 虚拟磁盘保险箱及文件(夹)加密确保私人文件安全。 12.磁盘修复: 扫描并修复磁盘表、文件分配情及目录错误。 13.驱动管理: 制作驱动安装包,重装系统一次性智能恢复。 14.黄金内存: 极品的内存优化...

    64位的内存虚拟盘

    直接在[设备管理器]中选中[RAMDrive (QSoft)]设备,选择卸载即可(卸载后系统会提示重启,重启后驱动文件将自动清除) 使用说明: 1、如何配置RAMDisk虚拟驱动器: [我的电脑]右键菜单[系统属性]--〉选[硬件]...

    PowerISO v4.7便携版

    PowerISO是一款功能强大的CD/DVD映像文件处理软件,它可以创建、编辑、展开、压缩、加密、分割映像文件,并使用自带的虚拟光驱加载映像文件。PowerISO使用方便,支持Shell集成,剪贴板和拖放操作。PowerISO支持ISO、...

    小巧无需安装的虚拟光驱

    点是软件无需安装并可以动态加载/卸载虚拟的驱动器。也算得上是个绿色软 件了,但是界面却非常简洁,体积也非常之小巧,不到40 K,只需要两个文件就可以模拟光驱并支持大部分虚拟光盘文件格式!毕竟是微软“自家的...

Global site tag (gtag.js) - Google Analytics