欢迎来到皮皮网网首页

【node源码分享】【指标源码 会员】【ydui商城源码】nfs 源码解析

来源:django源码分析书籍 时间:2024-11-25 03:30:13

1.linux,码解NFS服务,是什么啊
2.linux启动时挂载rootfs
3.如何从NFS启动Linux及原理
4.Linux Kernel 是什么?

nfs 源码解析

linux,NFS服务,是什么啊

       NFS(Network File System)即网络文件系统,是码解FreeBSD支持的文件系统中的一种,它允许网络中的码解计算机之间共享资源。在NFS的码解应用中,本地NFS的码解客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。码解node源码分享

       NFS最显而易见的码解优点:

       1、节省本地存储空间,码解将常用的码解数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的码解使用。

       2、码解用户不需要在网络中的码解每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。码解

       3、码解一些存储设备如软驱、码解CDROM和Zip(一种高储存密度的指标源码 会员磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。

扩展资料:

       NFS 有很多实际应用。下面是比较常见的四点:

       1、多个机器共享一台CDROM或者其他设备。这对于在多台机器中安装软件来说更加便宜跟方便。

       2、在大型网络中,配置一台中心 NFS 服务器用来放置所有用户的home目录可能会带来便利。这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录。

       3、不同客户端可在NFS上观看影视文件,节省本地空间。

       4、在客户端完成的ydui商城源码工作数据,可以备份保存到NFS服务器上用户自己的路径下。

       NFS是运行在应用层的协议。随着NFS多年的发展和改进,NFS既可以用于局域网也可以用于广域网,且与操作系统和硬件无关,可以在不同的计算机或系统上运行。

       

百度百科-NFS

       百度百科-linux

linux启动时挂载rootfs

       1。linux启动时,经过一系列初始化之后,需要mount 根文件系统,为最后运行init进程等做准备,mount 根文件系统有这么几种方式:

       1)文件系统已经存在于硬盘(或者类似的设备)的某个分区上了,kernel根据启动的命令行参数(root=/dev/xxx),直接进行mount。 这里有一个问题,在root文件系统本身还不存在的xmex系统源码情况下,kernel如 何根据/dev/xxx来找到对应的设备呢?注意:根文件系统和其他文件系统的mount方式是不一样的,kernel通过直接解析设备的名称来获得设备的主、从设备号,然后就可以访问对应的设备驱动 了。所以在init/main.c中有很长一串的root_dev_names(如hda,hdab,sda,sdb,nfs,ram,mtdblock……),通过这个表就可以根据设备名称得到设备号。注意,bootloader或内核中设定的启动参数(root=/dev/xxx)只是一个代号,实际的根文件系统中不一定存在这个设备文件!

       2)从软驱等比较慢的设备上装载根文件系统,如果kernel支持ramdisk,在装载root文件系统时,内核判断到需要从软盘(fdx)mount(root=/dev/fd0),就会自动把文件系统映象复制到ramdisk,一般对应设备ram0,stand发卡源码然后在ram0上mount 根文件系统。 从源码看,如果kernel编译时没有支持ramdisk,而启动参数又是root=/dev/fd0, 系统将直接在软盘上mount,除了速度比较慢,理论上是可行的(没试过,不知道是不是这样?)

       3)启动时用到initrd来mount根文件系统。注意理解ramdisk和initrd这两个概念,其实ramdisk只是在ram上实现的块设备,类似与硬盘操作,但有更快的读写速度,它可以在系统运行的任何时候使用,而不仅仅是用于启动;initrd(boot loader initialized RAM disk)可以说是启动过程中用到的一种机制,具体的实现过程也使用ramdisk技术。就是在装载linux之前,bootloader可以把一个比较小的根文件系统的映象装载在内存的某个指定位置,姑且把这段内存称为initrd(这里是initrd所占的内存,不是ramdisk,注意区别),然后bootloader通过传递参数的方式告诉内核initrd的起始地址和大小(也可以把这些参数编译在内核中),在启动阶段就可以暂时的用initrd来mount根文件系统。initrd的最初的目的是为了把kernel的启动分成两个阶段:在kernel中保留最少最基本的启动代码,然后把对各种各样硬件设备的支持以模块的方式放在initrd中,这样就在启动过程中可以从initrd所mount的根文件系统中装载需要的模块。这样的一个好处就是在保持kernel不变的情况下,通过修改initrd中的内容就可以灵活的支持不同的硬件。在启动完成的最后阶段,根文件系统可以重新mount到其他设备上,但是也可以不再 重新mount(很多嵌入式系统就是这样)。 initrd的具体实现过程是这样的:bootloader把根文件系统映象装载到内存指定位置,把相关参数传递给内核,内核启动时把initrd中的内容复制到ramdisk中(ram0),把initrd占用的内存释放掉,在ram0上mount根文件系统。从这个过程可以看出,内核需要对同时对ramdisk和initrd的支持(这种需要都编入内核,不能作为模块)。

       2。嵌入式系统根文件系统的一种实现方法:对于kernel和根文件系统都存储在flash中的系统,一般可以利用linux启动的initrd的机制。具体的过程前面已经比较清楚了,还有一点就是在启动参数中传递root=/dev/ram0,这样使得用initrd进行mount的根文件系统不再切换,因为这个时候实际的设备就是ram0。还有就是initrd的起始地址参数为虚拟地址,需要和bootloader中用的物理地址对应。

如何从NFS启动Linux及原理

       é¦–先我们要明确我们所指的程序,是放在有目录级结构的文件系统里,为了寻找到所需要操作系统来运行的程序,我们必须告诉它,文件在哪个文件系统。一 般来说,PC机的文件就存储在硬盘上;对于Live CD而言,文件系统就藏在光盘上面。也就是说,只要操作系统能找到并正确地认识了文件系统,就可以执行里面的程序了!

       è®¾ç½®ç›®æ ‡æœºå™¨ä¸Šçš„NFS启动

       çœ‹å®Œäº†ç¬¬ä¸€èŠ‚,明白启动的过程了吗? 简单地说,就是内核加载 ,内核找到一个文件系统 ,内 核执行文件系统里的一个程序 。无论是从NFS启动,还是从硬盘启动,都是上述过程。只是NFS启动,其文件系统是放在网络上的。只要我 们告诉内核,具体放在什么地方,在网络的另一端我们设置好共享,自然可以从NFS启动。

       è®©å†…核识别NFS并可从NFS启动

       ç¼–译内核

       åœ¨å†…核源代码目录树下,配置内核:

       $make menuconfig

       ä¾æ¬¡è¿›å…¥ File Systems -> Network File System中选择 NFS client support 以及 Root file system on NFS。如果找不到Root file system on NFS 选项,要打开第一级菜单下的Networking support -> Networking options -> TCP/IP networking -> IP: kernel level autoconfiguration。如果NFS要使用DHCP,还得选上 IP: DHCP support。

       ä¿å­˜é…ç½®å¹¶é‡æ–°ç¼–译即可。

       é…ç½®å†…核参数

       è¿›å…¥ARM开发板的设置 linux_cmd_line的地方(mini则为开机按 s,输入linux_cmd_line,并带着引号输入参数),或者进入PC的GRUB,设置类似参数

       root=/dev/nfs rw nfsroot=..1.1:/linux ip=..1.5:::...0:linux::off

       è¯¥é…ç½®ä¸ºé™æ€IP设置。各参数意义如下:

       root=/dev/nfs :指定根文件系统为 /dev/nfs,即NFS 。这与/dev这个目录并没有什么关系,在此仅为一个名字。

       rw :根文件系统挂载为可读写。还可以有 ro 即只读的选项。

       nfsroot=..1.1:/linux :指明挂载哪一个NFS上的哪一个目录。这里指的是挂载IP 为..1.1的电脑上导出的/linux目录。

       ip=..1.5:::...0:linux::off :设置本机的IP。此举是为了 连接刚才设置的IP。这里是一个静态的配置,配置的格式为 ip=本机的IP地址::网关地址:网络掩码:本机的主机名:网络接口名:off 。一般情况下网关、网络接口名都不需要设置。如果是DHCP获取IP,那很简单,直接 ip=dhcp 即可。

       è®¾ç½®NFS服务器

       Ubuntu下看链接:/User/xiaoxiaopig/article/_1.htm

       NFS服务器可以是任意操作系统,只要能提供NFS服务即可(WINDOWS可以使用 WSU —— Windows Services for Unix来实现,具体请参考接下来本站要发表的文章)。在这里以Fedora为例,希望别的发行版的用户触类旁通。

       å¯¹äºŽFedora来说,有图形界面的工具进行设置,在管理-》服务器设置-》NFS中添加一个共享即可。

       æ›´é€šç”¨çš„作法,就是修改 /etc/exports文件,之后再启动NFS服务器。

       /etc/exports文件格式如下

       å¯¼å‡ºçš„文件夹 导出的网段(对该导出的网段的选项)

       æ‰€è°“导出的网段就是只向哪个网段导出,保证安全性。一个例子为:

       /linux ..1.0/(rw,sync,no_root_squash)

       å°±æ˜¯å°† /linux 导出到网段为..1.0,子网掩码为...0 (即)的网络。其中可用的选项为(翻译自man文档):

       secure和insecure : secure选项下,所有连接的端口均小于。默认打开。

       rw和ro : Read/Write和Read Only

       async和sync async将使用异步数据存取,数据并非马上写入服务器的。sync则相反。使用async需要注意服务器不能随意不正常地关闭,否则可能导致数据丢失。

       no_wdelay :不使用延迟写入。NFS服务器会将写入写入请求缓冲起来,可以提高性能。如果async已经打开那么该选项无效。

       no_subtree_check :不进行子树检查(使用该选项易引起安全问题)

       root_squash和no_root_squash、all_squash :root_squash选项使得客户端以root权限访问 文件系统时,转换为服务器端的匿名用户。这选项打开一定要设置好服务器的权限。

       ä¹‹åŽå†é‡æ–°å¯åŠ¨NFS服务。Fedora下使用 /etc/init.d/nfs restart

       ä½¿ç”¨ exports查看导出的文件。

Linux Kernel 是什么?

       Linux Kernel是操作系统Linux的核心组件,负责管理和控制硬件资源,以及为应用程序提供接口。它是一个开放源码项目,允许开发者和用户进行修改和扩展。

       最近,Linux Kernel的NFS(网络文件系统)实现被发现存在漏洞。这一漏洞允许远程攻击者绕过访问控制,从而获取非授权访问权限。攻击者通过在NFS文件系统上更改ACL(访问控制列表),实现了对资源的绕过访问控制,进而获取非授权访问。

       具体来说,漏洞出现在NFS实现中,该实现没有在设置ACL之前验证远程用户的权限。这意味着,攻击者能够以未授权身份更改ACL,从而绕过访问控制机制,实现非授权访问。这一问题严重威胁了系统的安全性和稳定性。

       为修复这一漏洞,Linux社区已经发布了解决方案。用户需要更新到最新版本的Linux内核,以确保其系统得到保护。同时,开发者和系统管理员应保持警觉,及时监控系统状态,以防止潜在的安全威胁。

       总的来说,Linux Kernel是Linux操作系统的核心,其安全性对于整个系统的稳定性和安全至关重要。漏洞的发现和修复提醒我们,持续关注和更新系统是维护网络安全的重要步骤。用户应确保其系统始终运行在最新版本,以抵御各种安全风险。