<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>My Crusade &#187; Linux</title>
	<atom:link href="http://www.jarodwang.cn/tag/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jarodwang.cn</link>
	<description>For the future we believe in.</description>
	<lastBuildDate>Tue, 07 Sep 2010 05:42:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Fundamentals of iSCSI on Linux</title>
		<link>http://www.jarodwang.cn/2010/08/04/fundamentals-of-iscsi-on-linux/</link>
		<comments>http://www.jarodwang.cn/2010/08/04/fundamentals-of-iscsi-on-linux/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 05:38:27 +0000</pubDate>
		<dc:creator>jarodwang</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[iSCSI]]></category>

		<guid isPermaLink="false">http://www.jarodwang.cn/?p=335</guid>
		<description><![CDATA[iSCSI 是 Internet Small Computer System Interface 的缩写。 iSCSI 使用的 TCP 知名端口号是 3260。 Initiator 指的是 iSCSI 的客户端。 Target 指的是 iSCSI 的服务器端。 Open-iSCSI 是 Linux 上常见的一个开源 iSCSI initiator 实现。而 iscsiadm 则是 Open-iSCSI 的管理工具。比如 iscsiadm &#8211;mode node 命令可以列出所有的节点记录： # iscsiadm -m node 130.35.224.163:3260,2 iqn.1986-03.com.sun:02:6794049e-b92f-4b33-cb1c-8f69c8316449 这里可以看到 target 的 IP 地址是 130.35.224.163，通过 nslookup 可以查到这个 target 其实是同一个网络上的一个 NAS。这里 target 采用的命名方式是 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/ISCSI">iSCSI</a> 是 Internet Small Computer System Interface 的缩写。</p>
<p>iSCSI 使用的 TCP 知名端口号是 3260。</p>
<p>Initiator 指的是 iSCSI 的客户端。<br />
Target 指的是 iSCSI 的服务器端。</p>
<p><a href="http://www.open-iscsi.org/">Open-iSCSI</a> 是 Linux 上常见的一个开源 iSCSI initiator 实现。而 iscsiadm 则是 Open-iSCSI 的管理工具。比如 iscsiadm &#8211;mode node 命令可以列出所有的节点记录：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># iscsiadm -m node</span>
130.35.224.163:<span style="color: #000000;">3260</span>,<span style="color: #000000;">2</span> iqn.1986-03.com.sun:02:6794049e-b92f-4b33-cb1c-8f69c8316449</pre></div></div>

<p>这里可以看到 target 的 IP 地址是 130.35.224.163，通过 nslookup 可以查到这个 target 其实是同一个网络上的一个 NAS。这里 target 采用的命名方式是 IQN (iSCSI Qualified Name)。<br />
<a href="http://tools.ietf.org/html/rfc3720"><br />
</a>References<br />
<a href="http://tools.ietf.org/html/rfc3720">RFC 3720</a><br />
<a href="http://tools.ietf.org/html/rfc3721">RFC 3721</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jarodwang.cn/2010/08/04/fundamentals-of-iscsi-on-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning IPMI</title>
		<link>http://www.jarodwang.cn/2009/01/19/learning-ipmi/</link>
		<comments>http://www.jarodwang.cn/2009/01/19/learning-ipmi/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 12:47:07 +0000</pubDate>
		<dc:creator>jarodwang</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[IPMI]]></category>

		<guid isPermaLink="false">http://www.jarodwang.cn/2009/01/19/learning-ipmi/</guid>
		<description><![CDATA[IPMI 是 Intelligent Platform Management Interface （智能平台管理接口）的缩写。 IPMI 规格说明定义了一组可以被系统管理员用来监测和管理计算机系统的通用接口。 IPMI 独立运作于操作系统之外，并且允许管理员在没有操作系统或者系统管理软件存在的情况下远程管理计算机系统，甚至在系统关机的状态下也可以（但是系统需要接上电源）。 参考链接： http://en.wikipedia.org/wiki/IPMI http://en.wikipedia.org/wiki/Baseboard_Management_Controller http://www.intel.com/design/servers/ipmi/ http://sourceforge.net/projects/openipmi/ http://sourceforge.net/projects/ipmitool/ http://sourceforge.net/projects/ipmiutil/]]></description>
			<content:encoded><![CDATA[<p>IPMI 是 Intelligent Platform Management Interface （智能平台管理接口）的缩写。<br />
IPMI 规格说明定义了一组可以被系统管理员用来监测和管理计算机系统的通用接口。<br />
IPMI 独立运作于操作系统之外，并且允许管理员在没有操作系统或者系统管理软件存在的情况下远程管理计算机系统，甚至在系统关机的状态下也可以（但是系统需要接上电源）。</p>
<p>参考链接：<br />
<a href="http://en.wikipedia.org/wiki/IPMI">http://en.wikipedia.org/wiki/IPMI</a><br />
<a href="http://en.wikipedia.org/wiki/Baseboard_Management_Controller">http://en.wikipedia.org/wiki/Baseboard_Management_Controller</a><br />
<a href="http://www.intel.com/design/servers/ipmi/">http://www.intel.com/design/servers/ipmi/</a><br />
<a href="http://sourceforge.net/projects/openipmi/">http://sourceforge.net/projects/openipmi/</a><br />
<a href="http://sourceforge.net/projects/ipmitool/">http://sourceforge.net/projects/ipmitool/</a><br />
<a href="http://sourceforge.net/projects/ipmiutil/">http://sourceforge.net/projects/ipmiutil/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jarodwang.cn/2009/01/19/learning-ipmi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gentoo Linux installation 2</title>
		<link>http://www.jarodwang.cn/2009/01/09/gentoo-linux-installation-2/</link>
		<comments>http://www.jarodwang.cn/2009/01/09/gentoo-linux-installation-2/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 14:46:11 +0000</pubDate>
		<dc:creator>jarodwang</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[gentoo]]></category>

		<guid isPermaLink="false">http://www.jarodwang.cn/2009/01/09/gentoo-linux-installation-2/</guid>
		<description><![CDATA[昨天由于晚上临时加班，没有来得及安装 GNOME，但也不是没有折腾 Gentoo，而是参照 LinuxSir 论坛中的安装 Gentoo 疑难解答先升级了一次基本系统： emerge &#8211;sync emerge -avuDN world man emerge 可以看到 &#8211;sync 选项用来启动一次 Portage 树的更新，而更新所使用的 rsync.gentoo.org 镜像是之前安装过程中使用 mirrorselect 来进行选择和设定的。另外，这里还涉及到了为 rsync 设置代理的问题，man rsync 会告诉你设置 RSYNC_PROXY 环境变量即可，每次都 export 会比较麻烦，于是我就把它加到了 /etc/make.conf 中。 剩下的 -a, -v, -u, -D 和 -N 选项的具体意义看看 man emerge 也都一目了然了。最后的 world 是 2 大软件包集合之一，另一个是 system。 今天早上，什么文档都还没有看，就先直接依葫芦画瓢的来了个 emerge -avuDN gnome （事实证明这样是会出问题的），开始 GNOME [...]]]></description>
			<content:encoded><![CDATA[<p>昨天由于晚上临时加班，没有来得及安装 GNOME，但也不是没有折腾 Gentoo，而是参照 LinuxSir 论坛中的<a href="http://www.linuxsir.org/bbs/thread320006.html" target="_blank">安装 Gentoo 疑难解答</a>先升级了一次基本系统：</p>
<p>emerge &#8211;sync<br />
emerge -avuDN world</p>
<p>man emerge 可以看到 &#8211;sync 选项用来启动一次 Portage 树的更新，而更新所使用的 rsync.gentoo.org 镜像是之前安装过程中使用 mirrorselect 来进行选择和设定的。另外，这里还涉及到了为 rsync 设置代理的问题，man rsync 会告诉你设置 RSYNC_PROXY 环境变量即可，每次都 export 会比较麻烦，于是我就把它加到了 /etc/make.conf 中。</p>
<p>剩下的 -a, -v, -u, -D 和 -N 选项的具体意义看看 man emerge 也都一目了然了。最后的 world 是 2 大软件包集合之一，另一个是 system。</p>
<p>今天早上，什么文档都还没有看，就先直接依葫芦画瓢的来了个 emerge -avuDN gnome （事实证明这样是会出问题的），开始 GNOME 安装的漫漫长路，260+ 的包需要全新安装。</p>
<p>结果第一个问题出现了，在安装 gtk+ 时报错了，错误信息告诉我是因为 <a href="http://cairographics.org/" target="_blank">cairo</a> 需要在 USE 标记中设置 X 标记，把 X 加到 /etc/make.conf 的 USE 中去，然后再次 emerge -avuDN gnome 就过去了。</p>
<p>后来又遇到一个错误，又需要添加了 gtk 到 USE 中，看来这样下去不是办法，只好求助于 Google，结果就搜到了 <a href="http://www.gentoo.org/doc/zh_cn/gnome-config.xml" target="_blank">GNOME 配置指南</a>这篇官方的中文文档，终于有了个 USE 的范例：</p>
<p>USE=&#8221;-qt3 -qt4 -arts -kde X dbus gtk gnome hal <span style="color: #ff0000;">avahi</span>&#8221;</p>
<p>只是其中的 avahi 在后来安装 cups 时又遇到了问题，被我拿掉了，其它都保留了下来。</p>
<p>后面的步骤就完全照着这篇文档来了，就此搞定了 GNOME 的安装。</p>
<p>值得一提的是文档中为 gnome-base/gnome-session 这个包单独设置 branding 标记的方法：</p>
<p>echo &#8220;gnome-base/gnome-session branding&#8221; &gt;&gt; /etc/portage/package.use</p>
<p>在后来安装 net-misc/vnc 时又被我依葫芦画瓢了一次：</p>
<p>echo &#8220;net-misc/vnc server&#8221; &gt;&gt; /etc/portage/package.use</p>
<p>只有设置了 server 标记，vncserver 才会被包括在安装中，否则默认情况下 emerge vnc 只会生成 vncviewer。</p>
<p>最后，详细的中文 Portage 入门可以看<a href="http://www.gentoo.org/doc/zh_cn/handbook/handbook-x86.xml?part=2&amp;chap=1" target="_blank">这里</a>，中文 USE 标记使用可以看<a href="http://www.gentoo.org/doc/zh_cn/handbook/handbook-x86.xml?part=2&amp;chap=2" target="_blank">这里</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jarodwang.cn/2009/01/09/gentoo-linux-installation-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gentoo Linux installation 1</title>
		<link>http://www.jarodwang.cn/2009/01/07/gentoo-linux-installation-1/</link>
		<comments>http://www.jarodwang.cn/2009/01/07/gentoo-linux-installation-1/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 12:58:18 +0000</pubDate>
		<dc:creator>jarodwang</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[gentoo]]></category>

		<guid isPermaLink="false">http://www.jarodwang.cn/2009/01/07/gentoo-linux-installation-1/</guid>
		<description><![CDATA[昨天第一次尝试安装 Gentoo Linux 失败了，用的是其最新发布的 Gentoo 2008.0 LiveCD。用 LiveCD 启动电脑，进入 GUI 环境，用 Gentoo Linux Installer (GLI) 进行安装，貌似遇到了 Gentoo Bug 231037，install.log.failed 中的报错信息和 Bug 中的相同。失败的安装还弄乱了硬盘上的分区编号，原本挂载 Debian 根分区的 /dev/sda7 莫名变成了 /dev/sda5，导致从硬盘重启后遇到 GRUB Error 17，之后在 GRUB 菜单中手工修改了 root 和 kernel 的值，指向 /dev/sda5 才后再 boot，成功进入 Debian。最后还要记得进入系统之后编辑 /boot/grub/menu.lst 中对应的行。安装 Gentoo 失败之后向 Gentoo 中文发邮件求助，r0bertz 回复说 GLI 不是推荐的安装方法，应当按照手册用 stage3 一步一步地进行安装。 不甘心失败，今天继续实验。有了昨天的经验，今天的我至少已经不怕无法启动昨晚刚刚升级到 lenny 的 Debian [...]]]></description>
			<content:encoded><![CDATA[<p>昨天第一次尝试安装 <a href="http://www.gentoo.org/">Gentoo Linux</a> 失败了，用的是其最新发布的 <a href="http://bouncer.gentoo.org/fetch/gentoo-2008.0-livecd/x86/">Gentoo 2008.0 LiveCD</a>。用 LiveCD 启动电脑，进入 GUI 环境，用 Gentoo Linux Installer (GLI) 进行安装，貌似遇到了 <a href="http://bugs.gentoo.org/show_bug.cgi?id=231037">Gentoo Bug 231037</a>，install.log.failed 中的报错信息和 Bug 中的相同。失败的安装还弄乱了硬盘上的分区编号，原本挂载 <a href="http://www.debian.org/">Debian</a> 根分区的 /dev/sda7 莫名变成了 /dev/sda5，导致从硬盘重启后遇到 <a href="http://www.gnu.org/software/grub/manual/grub.html#Stage2-errors">GRUB Error 17</a>，之后在 GRUB 菜单中手工修改了 root 和 kernel 的值，指向 /dev/sda5 才后再 boot，成功进入 Debian。最后还要记得进入系统之后编辑 /boot/grub/menu.lst 中对应的行。安装 Gentoo 失败之后向 <a href="http://groups.google.com/group/gentoo-china">Gentoo 中文</a>发邮件求助，<a href="http://r0bertz.blogspot.com/">r0bertz</a> 回复说 GLI 不是推荐的安装方法，应当按照<a href="http://www.gentoo.org/doc/zh_cn/handbook/index.xml">手册</a>用 stage3 一步一步地进行安装。</p>
<p>不甘心失败，今天继续实验。有了昨天的经验，今天的我至少已经不怕无法启动昨晚刚刚升级到 <a href="http://www.debian.org/releases/lenny/">lenny</a> 的 Debian 了。找到另外一个 <a href="http://www.gentoo.org/doc/zh_cn/gentoo-x86-quickinstall.xml">Gentoo Linux x86 快速安装指南</a>和 <a href="http://www.chinaunix.net/jh/4/514650.html">CU 上的一篇 Gentoo 安装精华贴</a>之后，开始动手。</p>
<p>还是用昨天的 LiveCD 启动电脑，用 gentoo 来启动之后，这次不进 GUI 界面了，直接 Ctrl + Alt + F1 进入终端模式。</p>
<p>net-setup 也不用了，LiveCD 已经帮我搞定（可用 /sbin/ifconfig -a 进行验证）。</p>
<p>fdisk -l /dev/sda 找到了昨天本来建好给 Gentoo 用的 /dev/sda7 (swap) 和 /dev/sda8 (/)。</p>
<p>mke2fs -j /dev/sda8<br />
mkswap /dev/sda7<br />
swapon /dev/sda7</p>
<p>挂载文件系统：</p>
<p>mount /dev/sda8 /mnt/gentoo<br />
mkdir /mnt/gentoo/boot<br />
cd /mnt/gentoo</p>
<p>从镜像站点下载 stage3 的压缩包并解开：</p>
<p>export http_proxy=你的代理服务器地址:端口<br />
wget -c http://ftp.jaist.ac.jp/pub/Linux/Gentoo/releases/x86/current/stages/stage3-i686-2008.0.tar.bz2<br />
tar xjf stage3-i686-2008.0.tar.bz2</p>
<p>下载最新的 Portage 快照的压缩包并解开：</p>
<p>wget -c http://ftp.jaist.ac.jp/pub/Linux/Gentoo/snapshots/portage-latest.tar.bz2<br />
tar xjf portage-latest.tar.bz2</p>
<p>后面完全按照手册，直到安装完引导程序 GRUB 之后。由于手册中的 grub.conf (menu.lst) 文件内容非常简单，只考虑了启动刚刚安装的 Gentoo，还需要手工加上我的 Debian：</p>
<p>title Debian GNU/Linux 5.0 Lenny<br />
root (hd0,4)<br />
kernel /boot/vmlinuz-2.6.26-1-686 root=/dev/sda5 ro<br />
initrd /boot/initrd.img-2.6.26-1-686</p>
<p>之后就可用退出 chroot 环境，卸载所有文件系统并重启电脑了：</p>
<p>umount /mnt/gentoo/proc /mnt/gentoo<br />
reboot</p>
<p>回来之后就有一个基本的 Gentoo Linux 可用了，总共花去了大概 2 个小时，这时候 GNOME 还没装呢，明天再继续折腾。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jarodwang.cn/2009/01/07/gentoo-linux-installation-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A sample program for stat()</title>
		<link>http://www.jarodwang.cn/2008/12/11/a-sample-program-for-stat/</link>
		<comments>http://www.jarodwang.cn/2008/12/11/a-sample-program-for-stat/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 15:23:09 +0000</pubDate>
		<dc:creator>jarodwang</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[stat]]></category>
		<category><![CDATA[strace]]></category>

		<guid isPermaLink="false">http://www.jarodwang.cn/?p=180</guid>
		<description><![CDATA[stat() is a Unix system call that returns useful data about a file inode. 今天在看一个 strace 的输出时，看到下面的一行： 19:42:00.545797 stat64(&#8220;/cdctest/orahome&#8221;, {st_mode=S_IFDIR&#124;0755, st_size=8192, &#8230;}) = 0 Google 之后发现 stat64 背后就是 stat() 系统调用，这里有详细的介绍。 于是一时手痒，想自己写一个简单的程序来实验一下，就在自己的 PC 机（跑的是 Debian &#8220;etch&#8221; 4.0r5）上动手。 首先是搭建编译环境： # apt-get install gcc build-essential 然后coding如下： #include #include #include #include #include int main() { struct stat *buf; const [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><a title="stat()" href="http://en.wikipedia.org/wiki/Stat_(Unix)" target="_blank">stat()</a> is a Unix system call that returns useful data about a file inode.</p></blockquote>
<p>今天在看一个 strace 的输出时，看到下面的一行：</p>
<p>19:42:00.545797 stat64(&#8220;/cdctest/orahome&#8221;, {st_mode=S_IFDIR|0755, st_size=8192, &#8230;}) = 0</p>
<p>Google 之后发现 stat64 背后就是 stat() 系统调用，<a title="这里" href="http://linux.die.net/man/2/stat64" target="_blank">这里</a>有详细的介绍。</p>
<p>于是一时手痒，想自己写一个简单的程序来实验一下，就在自己的 PC 机（跑的是 Debian &#8220;etch&#8221; 4.0r5）上动手。</p>
<p>首先是搭建编译环境：</p>
<p># apt-get install gcc build-essential</p>
<p>然后coding如下：</p>
<pre lang="C" line="1" file="test_stat.c" colla="+">
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/stat.h>

int main()
{
	struct stat *buf;
	const char *path = "/home/ftp/upload";

	buf = (struct stat *) malloc(sizeof(struct stat));
	memset(buf, 0, sizeof(struct stat));

	int ret; 

	ret = stat("/home/ftp/upload", buf);

	if (ret == EACCES)
	{
		printf("EACCES\n");
		free(buf);
		buf = NULL;
		exit(-EACCES);
	}

	printf("%d\n", buf->st_mode);

	if (S_ISDIR(buf->st_mode))
	{
		printf("%s is a diretory.\n", path);
	}
	else
		printf("%s is NOT a directory.\n", path);

	free(buf);
	buf=NULL;

	return 0;
}
</pre>
<p>编译生成可执行文件</p>
<p>jarod@zhenwan:~$ gcc -o test_stat test_stat.c</p>
<p>运行之：</p>
<p>jarod@zhenwan:~$ ./test_stat<br />
16895<br />
/home/ftp/upload is a diretory.</p>
<p>大功告成。</p>
<p>最后还可以自己 strace 一把：</p>
<p><span id="more-180"></span></p>
<p>jarod@zhenwan:~$ strace ./test_stat<br />
execve(&#8220;./test_stat&#8221;, ["./test_stat"], [/* 27 vars */]) = 0<br />
uname({sys=&#8221;Linux&#8221;, node=&#8221;zhenwan&#8221;, &#8230;}) = 0<br />
brk(0)                                  = 0x804a000<br />
access(&#8220;/etc/ld.so.nohwcap&#8221;, F_OK)      = -1 ENOENT (No such file or directory)<br />
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7ee9000<br />
access(&#8220;/etc/ld.so.preload&#8221;, R_OK)      = -1 ENOENT (No such file or directory)<br />
open(&#8220;/etc/ld.so.cache&#8221;, O_RDONLY)      = 3<br />
fstat64(3, {st_mode=S_IFREG|0644, st_size=45513, &#8230;}) = 0<br />
mmap2(NULL, 45513, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7edd000<br />
close(3)                                = 0<br />
access(&#8220;/etc/ld.so.nohwcap&#8221;, F_OK)      = -1 ENOENT (No such file or directory)<br />
open(&#8220;/lib/tls/i686/cmov/libc.so.6&#8243;, O_RDONLY) = 3<br />
read(3, &#8220;\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240O\1&#8243;&#8230;, 512) = 512<br />
fstat64(3, {st_mode=S_IFREG|0644, st_size=1241392, &#8230;}) = 0<br />
mmap2(NULL, 1247388, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7dac000<br />
mmap2(0xb7ed3000, 28672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0&#215;127) = 0xb7ed3000<br />
mmap2(0xb7eda000, 10396, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7eda000<br />
close(3)                                = 0<br />
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7dab000<br />
mprotect(0xb7ed3000, 20480, PROT_READ)  = 0<br />
set_thread_area({entry_number:-1 -&gt; 6, base_addr:0xb7dab8e0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0<br />
munmap(0xb7edd000, 45513)               = 0<br />
brk(0)                                  = 0x804a000<br />
brk(0x806b000)                          = 0x806b000<br />
<span style="color: #ff0000;">stat64(&#8220;/home/ftp/upload&#8221;, {st_mode=S_IFDIR|0777, st_size=4096, &#8230;}) = 0</span><br />
fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 5), &#8230;}) = 0<br />
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7ee8000<br />
write(1, &#8220;16895\n&#8221;, 616895<br />
)                  = 6<br />
write(1, &#8220;/home/ftp/upload is a diretory.\n&#8221;, 32/home/ftp/upload is a diretory.<br />
) = 32<br />
munmap(0xb7ee8000, 4096)                = 0<br />
exit_group(0)                           = ?<br />
Process 32729 detached<br />
jarod@zhenwan:~$</p>
<p>可以看出来其中<span style="color: #ff0000;">红色</span>的一行即是由程序中的 stat() 系统调用所产生。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jarodwang.cn/2008/12/11/a-sample-program-for-stat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Linux toolkit</title>
		<link>http://www.jarodwang.cn/2008/11/29/my-linux-toolkit/</link>
		<comments>http://www.jarodwang.cn/2008/11/29/my-linux-toolkit/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 05:01:34 +0000</pubDate>
		<dc:creator>jarodwang</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.jarodwang.cn/?p=156</guid>
		<description><![CDATA[alias ar cat cp -p diff egrep fvwm ftp gdb ifconfig ksh make man mutt nano Perl rsh ssh strace svn tail -f tar top vim VNC vsftp wget xterm]]></description>
			<content:encoded><![CDATA[<p>alias</p>
<p>ar</p>
<p>cat</p>
<p>cp -p</p>
<p>diff</p>
<p>egrep</p>
<p>fvwm</p>
<p>ftp</p>
<p>gdb</p>
<p>ifconfig</p>
<p>ksh</p>
<p>make</p>
<p>man</p>
<p>mutt</p>
<p>nano</p>
<p>Perl</p>
<p>rsh</p>
<p>ssh</p>
<p>strace</p>
<p>svn</p>
<p>tail -f</p>
<p>tar</p>
<p>top</p>
<p>vim</p>
<p>VNC</p>
<p>vsftp</p>
<p>wget</p>
<p>xterm</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jarodwang.cn/2008/11/29/my-linux-toolkit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《深入理解 Linux 内核（第三版）》非官方勘误表</title>
		<link>http://www.jarodwang.cn/2008/11/24/ulk3-unofficial-errata/</link>
		<comments>http://www.jarodwang.cn/2008/11/24/ulk3-unofficial-errata/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 15:07:35 +0000</pubDate>
		<dc:creator>jarodwang</dc:creator>
				<category><![CDATA[Book]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[ULK]]></category>

		<guid isPermaLink="false">http://www.jarodwang.cn/?p=149</guid>
		<description><![CDATA[《深入理解 Linux 内核（第三版）》官方书目链接： http://www.oreilly.com.cn/book.php?bn=978-7-5083-5394-4 迟迟得不到更新的官方勘误表： http://www.oreilly.com.cn/book.php?m=errata&#38;bn=978-7-5083-5394-4 我已经不能忍受 O&#8217;reilly China 即奥莱利技术咨询(北京)有限公司对于勘误表的更新速度了，我提交的几个勘误至今都还没有得到确认和更新，索性在自己的 Blog 里写一个。 个人感觉第三版的翻译（或者归咎于校对）质量相对于第二版下降不是一点点，看来技术类书籍还是看英文原版才是王道。 废话少说，勘误开始： 49 页 第 3 段 原文“与高级电源管理（AMP）相关的3个段”，这里“高级电源管理”的英文缩写应该是 APM(Advanced Power Management)。 71 页 第 3 段 原文“IBM Thinkpnd”，Thinkpad 明显被拼错。 85 页 第 4 段 原文“Linux 使用轻量级进程（lightwetght process）对多线程应用程序提供更好的支持。”，lightweight 明显被拼错。 462 页 表 12-2：超级块对象的字段（续） 原文“struct list_head s_dirty 改进型索引节点的链表”，英文原文是&#8221;List of modified inodes&#8221;，应该翻译为”修改过的索引节点的链表“。]]></description>
			<content:encoded><![CDATA[<p>《深入理解 Linux 内核（第三版）》官方书目链接：</p>
<p><a href="http://www.oreilly.com.cn/book.php?bn=978-7-5083-5394-4" target="_blank">http://www.oreilly.com.cn/book.php?bn=978-7-5083-5394-4</a></p>
<p>迟迟得不到更新的官方勘误表：</p>
<p><a href="http://www.oreilly.com.cn/book.php?m=errata&amp;bn=978-7-5083-5394-4" target="_blank">http://www.oreilly.com.cn/book.php?m=errata&amp;bn=978-7-5083-5394-4</a></p>
<p>我已经不能忍受 O&#8217;reilly China 即奥莱利技术咨询(北京)有限公司对于勘误表的更新速度了，我提交的几个勘误至今都还没有得到确认和更新，索性在自己的 Blog 里写一个。</p>
<p>个人感觉第三版的翻译（或者归咎于校对）质量相对于第二版下降不是一点点，看来技术类书籍还是看英文原版才是王道。</p>
<p>废话少说，勘误开始：</p>
<p>49 页 第 3 段</p>
<p>原文“与高级电源管理（AMP）相关的3个段”，这里“高级电源管理”的英文缩写应该是 APM(Advanced Power Management)。</p>
<p>71 页 第 3 段</p>
<p>原文“IBM Thinkpnd”，Thinkpad 明显被拼错。</p>
<p>85 页 第 4 段</p>
<p>原文“Linux 使用轻量级进程（lightwetght process）对多线程应用程序提供更好的支持。”，lightweight 明显被拼错。</p>
<p>462 页 表 12-2：超级块对象的字段（续）</p>
<p>原文“struct list_head s_dirty 改进型索引节点的链表”，英文原文是&#8221;List of modified inodes&#8221;，应该翻译为”修改过的索引节点的链表“。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jarodwang.cn/2008/11/24/ulk3-unofficial-errata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OCFS2 Installation</title>
		<link>http://www.jarodwang.cn/2008/09/07/ocfs2-installation/</link>
		<comments>http://www.jarodwang.cn/2008/09/07/ocfs2-installation/#comments</comments>
		<pubDate>Sun, 07 Sep 2008 14:16:39 +0000</pubDate>
		<dc:creator>jarodwang</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[RAC]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[OCFS2]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.jarodwang.cn/?p=83</guid>
		<description><![CDATA[OCFS2 (Oracle Cluster File System 2)是由Oracle开发的通用集群文件系统，是一个以GPLv2许可发布的开放源代码项目。由于OCFS2是Cluster-aware的，所以很自然的可以作为RAC的存储的选择之一（其他的选择还有裸设备和ASM）。但是必须指出的是，Oracle home和datafile（还有redo log，archive log，control file，以及Clusterware的OCR和Voting Disks）不能放在同一个OCFS2 volume上。 最近尝试了一下将Oracle Clusterware 11gR1的OCR和VD放在OCFS2上，这里记录一下OCFS2的安装过程。 首先是确定所使用的Linux的发行版本（distribution），内核版本（version）和风格（flavor），处理器架构： # cat /etc/redhat-release Enterprise Linux Enterprise Linux AS release 4 (October Update 5) # uname -r 2.6.9-67.0.4.0.2.ELsmp # uname -p i686 可以看到这里我使用的是Oracle Enterprise Linux 4u5（可以认为是等同于Red Hat Enterprise Linux 4u5），内核版本是2.6.9-67.0.4.0.2，内核风格是smp，处理器架构是i686（也就是x86）。 接下来按照上面的信息去下载相应的OCFS2和OCFS2 Tools（包括ocfs2-tools和ocfs2console）的RPM包。 # wget -c http://oss.oracle.com/projects/ocfs2/dist/files/RedHat/RHEL4/i386/1.2.9-1/2.6.9-67.0.4.EL/ocfs2-2.6.9-67.0.4.ELsmp-1.2.9-1.el4.i686.rpm # wget -c http://oss.oracle.com/projects/ocfs2-tools/dist/files/RedHat/RHEL4/i386/1.2.7-1/ocfs2-tools-1.2.7-1.el4.i386.rpm [...]]]></description>
			<content:encoded><![CDATA[<p><a title="OCFS2" href="http://oss.oracle.com/projects/ocfs2/" target="_blank">OCFS2</a> (Oracle Cluster File System 2)是由Oracle开发的通用集群文件系统，是一个以GPLv2许可发布的开放源代码项目。由于OCFS2是Cluster-aware的，所以很自然的可以作为RAC的存储的选择之一（其他的选择还有裸设备和ASM）。但是必须指出的是，Oracle home和datafile（还有redo log，archive log，control file，以及Clusterware的OCR和Voting Disks）<strong>不能</strong>放在同一个OCFS2 volume上。</p>
<p>最近尝试了一下将<a title="Oracle Clusterware" href="http://www.oracle.com/technology/products/database/clusterware/index.html" target="_blank">Oracle Clusterware</a> 11gR1的OCR和VD放在OCFS2上，这里记录一下OCFS2的安装过程。</p>
<p>首先是确定所使用的Linux的发行版本（distribution），内核版本（version）和风格（flavor），处理器架构：</p>
<p># cat /etc/redhat-release<br />
Enterprise Linux Enterprise Linux AS release 4 (October Update 5)</p>
<p># uname -r<br />
2.6.9-67.0.4.0.2.ELsmp</p>
<p># uname -p<br />
i686</p>
<p>可以看到这里我使用的是<a title="Oracle Enterprise Linux" href="http://www.oracle.com/technologies/linux/index.html" target="_blank">Oracle Enterprise Linux</a> 4u5（可以认为是等同于Red Hat Enterprise Linux 4u5），内核版本是2.6.9-67.0.4.0.2，内核风格是smp，处理器架构是i686（也就是x86）。</p>
<p>接下来按照上面的信息去下载相应的OCFS2和<a title="OCFS2 Tools" href="http://oss.oracle.com/projects/ocfs2-tools/" target="_blank">OCFS2 Tools</a>（包括ocfs2-tools和ocfs2console）的RPM包。</p>
<pre># wget -c http://oss.oracle.com/projects/ocfs2/dist/files/RedHat/RHEL4/i386/1.2.9-1/2.6.9-67.0.4.EL/ocfs2-2.6.9-67.0.4.ELsmp-1.2.9-1.el4.i686.rpm
# wget -c http://oss.oracle.com/projects/ocfs2-tools/dist/files/RedHat/RHEL4/i386/1.2.7-1/ocfs2-tools-1.2.7-1.el4.i386.rpm
# wget -c http://oss.oracle.com/projects/ocfs2-tools/dist/files/RedHat/RHEL4/i386/1.2.7-1/ocfs2console-1.2.7-1.el4.i386.rpm</pre>
<p>删除掉现有的老版本的OCFS2相关RPM包：</p>
<pre># rpm -qa | grep ocfs | xargs rpm -e</pre>
<p>依次安装刚刚下载的3个RPM：</p>
<pre># rpm -ivh ocfs2-tools-1.2.7-1.el4.i386.rpm
# rpm -ivh ocfs2console-1.2.7-1.el4.i386.rpm
# rpm -ivh --nodeps ocfs2-2.6.9-67.0.4.ELsmp-1.2.9-1.el4.i686.rpm</pre>
<p>注意安装OCFS2 RPM时需要加上“&#8211;nodeps”选项。</p>
<p>这里还有一个问题，上面安装的OCFS2 RPM的内核版本（2.6.9-67.0.4）与我所使用的Linux的内核版本（2.6.9-67.0.4.0.2）并不完全一致，所以还需要进行下面的额外工作：</p>
<pre># cp -r /lib/modules/2.6.9-67.0.4.ELsmp/kernel/fs/* /lib/modules/2.6.9-67.0.4.0.2.ELsmp/kernel/fs</pre>
<p>至此，OCFS2的安装已经完成。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jarodwang.cn/2008/09/07/ocfs2-installation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux raw device</title>
		<link>http://www.jarodwang.cn/2008/08/10/linux-raw-device/</link>
		<comments>http://www.jarodwang.cn/2008/08/10/linux-raw-device/#comments</comments>
		<pubDate>Sun, 10 Aug 2008 10:21:45 +0000</pubDate>
		<dc:creator>jarodwang</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[raw device]]></category>

		<guid isPermaLink="false">http://www.jarodwang.cn/?p=81</guid>
		<description><![CDATA[使用 raw -qa 命令来查询当前已经存在的绑定。 Use  the /etc/sysconfig/rawdevices file to define the set of raw device mappings automatically created during the system startup sequence. 在/etc/sysconfig/rawdevices中，注意裸设备对应的块设备如果是SATA或者iSCSI，则应该使用/dev/disk/by-id中的链接来进行指定。 如何确定裸设备对应的块设备？以裸设备/dev/raw/raw57为例： # ls -l /dev/raw/raw57 crw-rw&#8212;-  1 root disk 162, 57 Jul 31 02:02 /dev/raw/raw57 # raw -qa &#124; grep raw57 /dev/raw/raw57: bound to major 65, minor 233 # ls -l [...]]]></description>
			<content:encoded><![CDATA[<p>使用</p>
<p>raw -qa</p>
<p>命令来查询当前已经存在的绑定。</p>
<p>Use  the <strong>/etc/sysconfig/rawdevices</strong> file to define the set of raw device mappings automatically created during the system startup sequence.</p>
<p>在/etc/sysconfig/rawdevices中，注意裸设备对应的块设备如果是SATA或者iSCSI，则应该使用/dev/disk/by-id中的链接来进行指定。</p>
<p>如何确定裸设备对应的块设备？以裸设备/dev/raw/raw57为例：</p>
<p># ls -l /dev/raw/raw57<br />
crw-rw&#8212;-  1 root disk 162, 57 Jul 31 02:02 /dev/raw/raw57</p>
<p># raw -qa | grep raw57<br />
/dev/raw/raw57: bound to major 65, minor 233</p>
<p># ls -l /dev | grep 65 | grep 233<br />
brwxrwxrwx  1 root    disk    65, 233 Jul 31 02:01 sdae9</p>
<p>从而知道裸设备/dev/raw/raw57是绑定到了/dev/sdae9这个块设备。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jarodwang.cn/2008/08/10/linux-raw-device/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rediscover Linux top command</title>
		<link>http://www.jarodwang.cn/2008/07/11/rediscover-linux-top-command/</link>
		<comments>http://www.jarodwang.cn/2008/07/11/rediscover-linux-top-command/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 05:38:33 +0000</pubDate>
		<dc:creator>jarodwang</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[top]]></category>

		<guid isPermaLink="false">http://www.jarodwang.cn/?p=74</guid>
		<description><![CDATA[以往我使用top命令都是不带任何开关的，直接一个top之后就任其不停地刷屏。可是最近才发现原来这个命令不简单，有不少的开关可以用，而且默认启动的时候还是一个交互式（interactive）程序，彻底服了-_-b 这里搜集了几个最近用到的开关： -b 批处理模式，批处理模式在需要将top命令的输出发送到其他程序或者是文件时非常有用 -c 显示命令行（command line）而不只是程序名称（program name） -d delay 屏幕刷新时间延迟 -n iterations 指定命令在退出前产生的输出的最大递归次数 -p PID [, PID...] 仅监控指定PID所对应的进程 最后是一个综合使用以上所有开关的top命令示例： $ top -bc -d 5 -n 2 -p 8648,8752,8715 top &#8211; 22:48:27 up 16 days, 22:20,  4 users,  load average: 2.40, 2.18, 2.07 Tasks:   3 total,   0 running,   3 sleeping,   0 stopped,   0 zombie Cpu(s):  [...]]]></description>
			<content:encoded><![CDATA[<p>以往我使用top命令都是不带任何开关的，直接一个top之后就任其不停地刷屏。可是最近才发现原来这个命令不简单，有不少的开关可以用，而且默认启动的时候还是一个交互式（interactive）程序，彻底服了-_-b</p>
<p>这里搜集了几个最近用到的开关：</p>
<p>-b</p>
<p>批处理模式，批处理模式在需要将top命令的输出发送到其他程序或者是文件时非常有用</p>
<p>-c</p>
<p>显示命令行（command line）而不只是程序名称（program name）</p>
<p>-d delay</p>
<p>屏幕刷新时间延迟</p>
<p>-n iterations</p>
<p>指定命令在退出前产生的输出的最大递归次数</p>
<p>-p PID [, PID...]</p>
<p>仅监控指定PID所对应的进程</p>
<p>最后是一个综合使用以上所有开关的top命令示例：</p>
<p>$ top -bc -d 5 -n 2 -p 8648,8752,8715<br />
top &#8211; 22:48:27 up 16 days, 22:20,  4 users,  load average: 2.40, 2.18, 2.07<br />
Tasks:   3 total,   0 running,   3 sleeping,   0 stopped,   0 zombie<br />
Cpu(s):  2.6% us,  2.1% sy,  0.0% ni, 69.9% id, 25.4% wa,  0.0% hi,  0.0% si<br />
Mem:   6227868k total,  6109896k used,   117972k free,     2736k buffers<br />
Swap: 10288440k total,  1263740k used,  9024700k free,  4210252k cached</p>
<p>PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND<br />
8648 cdcrac    RT   0  564m 563m  37m S  0.0  9.3  77:23.29 /oracle/cluster/crs/bin/ocssd.bin<br />
8752 root      19   0  669m  50m  12m S  0.0  0.8  10:45.79 /oracle/cluster/crs/bin/crsd.bin reboot<br />
8715 cdcrac    16   0  208m  12m 7148 S  0.0  0.2   0:33.25 /oracle/cluster/crs/bin/evmd.bin</p>
<p>top &#8211; 22:48:32 up 16 days, 22:20,  4 users,  load average: 2.60, 2.22, 2.09<br />
Tasks:   3 total,   0 running,   3 sleeping,   0 stopped,   0 zombie<br />
Cpu(s):  1.9% us,  2.1% sy,  0.0% ni, 67.1% id, 28.9% wa,  0.1% hi,  0.0% si<br />
Mem:   6227868k total,  6109880k used,   117988k free,     2856k buffers<br />
Swap: 10288440k total,  1263740k used,  9024700k free,  4213512k cached</p>
<p>PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND<br />
8648 cdcrac    RT   0  564m 563m  37m S  2.0  9.3  77:23.39 /oracle/cluster/crs/bin/ocssd.bin<br />
8752 root      19   0  669m  50m  12m S  0.0  0.8  10:45.79 /oracle/cluster/crs/bin/crsd.bin reboot<br />
8715 cdcrac    16   0  208m  12m 7148 S  0.0  0.2   0:33.25 /oracle/cluster/crs/bin/evmd.bin</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jarodwang.cn/2008/07/11/rediscover-linux-top-command/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
