NBD-网络块设备[翻译]
1997年4月,Pavel Machek 写了他的网络块设备代码,并被当时的Linux Kernel 2.1.55接受。Pavel 在随后的四个发行版(对应的内核版本为55、101、111、132)中维护并升级了他的代码。Andrzej M. Krzysztofowicz贡献了64位机上运行的版本,随后Stephen Tweedie 为其提出了许多的专业建议,尤其是引入了基于信号量的锁机制,使得代码在对称多处理器系统中能够安全的运行。作者们已将其增强以便于运用于工业环境之中。本文描述了网络块设备、驱动、以及它的开发历史。 NBD的驱动程序提供了一种在这个面向网络的世界中更为普遍的访问模型。它在本地客户端模拟了一个块设备,比如一个磁盘或者是一块磁盘分区,但实际提供物理支持的却是通过网络连接的远程服务器。在本地,该设备看起来是一个磁盘分区,但那只是远程服务器的表面。远程服务器是一段轻量级的守护进程代码,它提供对远程设备的访问,而且该守护进程并不需要运行在linux平台之上。本地操作系统必须是linux,而且要支持Linux内核NBD驱动,并且能够运行本地客户端进程。安装NBD可被用来进行远 ...
内核源码编译
编译内核的目的在于把纷繁复杂的内核源码编译成一个可执行的镜像文件。当然,内核功能复杂,并不是所有的 功能都需要用到,所以,我们在使用make对其编译前,要做一件事——配置。kconfig和make就好比将军和士兵。kconfig是指导方向的,make是干活的。kconfig对内核进行配置,告诉make,哪些功能需要编译进内核,哪些功能要作为模块编译,make便根据配置文件来进行编译。 ###编译步骤 获取内核源码(这几天kernel.org被黑了,该步骤方法暂时用不了): 1、使用git工具: ubuntu下安装git: sudo apt-get install git 使用git检出Linus分支的版本: git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.t.git 检出之后便可以通过下列命令进行升级: git pull 使用上述两个命令便可以获得内核源码的最新版本。 2、直接从kernel.org上下载源码包: 源码包有两种格式: linux-x.y.z.tar.bz2和linux ...
Linux基础知识总结
一:什么是Linux?Linux被称为类Unix操作系统,遵循POSIX标准。Linux与Unix的最大不同在于源代码的开放性和自由性。 Linux的发音:Linux发音 Linux的发展历史:1991年9月17日,Linus Torvalds 在网上发布了Linux的0.01版本。 1994年3月13日,在众多程序员的努力下,Linux 1.0版本正式发布。呵呵,人多力量大,要学会分享知识。 1996年,Linux 2.0发布,其重要特点是开始支持对称多处理器。 2004年12月18日,Linux2.6.0版本发布。 二:Linux所遵循的标准1、POSIX(Portable Oprating System Interface of Unix):即可移植操作系统接口,由IEEE于1988年发布。其作用是使在某一Unix版本下开发的应用程序也能应用于其他Unix版本,以此保证了软件代码的可移植性。 2、LSB(Linux Standard Base):由于Linux遵循POSIX标准,不同Linux发行版之间的源代码级有很好的兼容性,但二进制文件的兼容性不足,为解决这一 ...
FUSE
一、FUSE简介FUSE(用户空间文件系统)是这样一个框架,它使得FUSE用户在用户态下编写文件系统成为可能,而不必和内核打交道。FUSE由三个部分组成,linux内核模块、FUSE库以及mount 工具。用户关心的只是FUSE库和mount工具,内核模块仅仅提供kernel的接入口,给了文件系统一个框架,而文件系统本身的主要实现代码位于用户空间中。 FUSE库给用户提供了编程的接口,而mount工具则用于挂在用户编写的文件系统。 FUSE起初是为了研究AVFS(A Virtual Filesystem)而设计的,而现在已经成为SourceForge的一个独立项目,目前适用的平台有Linux, FreeBSD, NetBSD, OpenSolaris和Mac OS X。官方的linux kernel版本到2.6.14才添加了FUSE模块,因此2.4的内核模块下,用户如果要在FUSE中创建一个文件系统,需要先安装一个FUSE内核模块,然后使用FUSE库和API来创建。 二、FUSE特性 库文件和 API简单,极大地方便了用户的使用 安装简便,不需要加补丁或者重新编译 kernel ...
Linux用户管理
一、用户管理:Linux系统用户分为三类:超级用户、普通用户和伪用户。其具体区别如下: 超级用户:具有管理系统的一切权限。UID为0。 普通用户:具有有限的权限。UID从500到6000。 伪用户:在/etc/passwd中有记录,但因记录中shell为空,所以不能登录系统。其作用是为了方便管理系统,满足相应的系统进程对文件属主的需要。 用户帐号的配置文件是/etc/passwd,可用sudo gedit /etc/passwd命令查看和修改。文件内容格式如下: 1234567891011121314 root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/ ...
Linux权限管理
Linux权限管理是其一大特色,优秀的权限管理机制为Linux安全性提供了可靠的保障。 一、用户权限管理:root用户是系统的超级用户,是Linux系统的CEO,它具有最高的管理权限,所以一般不用该用户登录系统进行日常的操作与维护,root可将某些权限赋予其他用户来管理系统的某些资源。 su命令用来切换用户,用该命令切换用户时,用户身份和环境变量都发生改变。例如: kelvin@kelvin-laptop:~$ ls examples.desktop workplace 公共的 模板 视频 图片 文档 下载 音乐 桌面 kelvin@kelvin-laptop:~$ su ws 密码: ws@kelvin-laptop:/home/kelvin$ 在ubuntu系统中,有些动作需要管理员的权限才能执行,可用sudo来提升权限。若在/etc/目录下建立nologin文件,则只允许root用户登录。相反,删除该文件则所有用户都可以登录系统。 二、文件权限管理:使用ls -l命令可以以长格式显示该目录下文件和子目录信息。如: kelvin@kelvin-laptop: ...
Make
一、make的功能:make是一个用来维护程序模块关系和生产可执行文件的工具,他可以根据程序修改的情况重新编译链接生成的中间代码或最终的可执行文件。执行make命令需要一个Makefile文件,来定义整个项目的编译规则。makefile定义了模块间的依赖关系,指定文件的编译顺序,以及编译所使用的命令。有了make和Makefile文件,整个项目的源程序可以自动编译,极大的提高了软件开发效率。 二、Make的一般使用:1、Makefile的基本构成: Makefile由规则构成,一条规则生成一个或多个目标文件,其格式如下: 目标文件列表 分隔符 依赖文件列表 [;命令] //[]中的内容可选 [命令] [命令] 例如: main:main.o module1.o module2.o gcc main.o module1.o module2.o -o main 第二行是命令必须以Tab键开头,第一行是说明模块间的依赖关系,所以不加Tab,若加Tab,make就认为这是一条命令。以#开头的行为注释行,makefile中若用到#,可用#;同样,$应该用$$。在依赖 ...
perf ,比较好的一个程序性能测试工具
面对一个问题程序,最好采用自顶向下的策略。先整体看看该程序运行时各种统计事件的大概,再针对某些方向深入细节。而不要一下子扎进琐碎细节,会一叶障目的。 对于优化自己写的代码,cpu bound 型 和 IO bound 型是不一样的: cpu bound 型:所谓cpu bound型指的是程序大部分时间都在使用CPU。 IO bound 型:由cpu bound型的定义就不难推出了。 perf stat 命令用于统计进程总体的信息1234567891011121314151617/*******************************************************************************/$ perf stat ./Joseph_ring Performance counter stats for './Joseph_ring': 19.755435 task-clock # 0.000 CPUs utilized ...
Linux shell 程序设计5——shell中一些特殊符号的用法总结
1、{} 大括号: eg: ls my_{finger,toe}s 这条命令相当于如下两个命令的组合: ls my_fingers ; ls my_toes eg: mkdir {userA,userB,userC}-{home,bin,data} 我们得到 userA-home, userA-bin, userA-data, userB-home, userB-bin, userB-data, userC-home, userC-bin, userC-data,这几个目录 大括号也可用于语句块的构造,命令之间可用回车隔开 2、[] 中括号:允许匹配方括号中任何一个单个字符 eg: ls /[eh][to][cm]* 相当于执行 ls /etc 和 ls /home。 常出现在流程控制中,其作用是括住判断式。注意:[、] 与表达式之间有空格。 eg: if [ "$?" != 0 ] then echo "Executes error" fi 3、command 反引号:反引号中的 ...
Linux shell 程序设计4——shell变量
1、shell变量没有类型,所有变量都被当作字符串来处理。 2、shell变量的命名和c语言相同。 3、shell变量赋值和c语言略有不同,shell赋值要求等号的两边不能出现空格,而在linux C 中,一般为了增强代码的可读性,等号的两边都加一个空格。如果shell变量的赋值为字符串,而且字符串中含有空格,则必须给该字符串加单引号或双引号。 4、shell变量不同于c语言,无需定义可直接赋值使用。例如: #!/bin/bash #This is an example to show how to use variables version="2.6.24" name="linux-headers-2.6.24" echo -e "name:$name\nversion:$version" 执行结果: name:linux-headers-2.6.24 version:2.6.24 5、shell变量的作用范围是本shell环境。例如: 我们编写如下脚本: #!/bin/bash #script name: exam ...
![NBD-网络块设备[翻译]](/images/bg2.jpg)


