“再睡一夏”为你分享5篇“日志式文件系统简介Windows系统”,经本站小编整理后发布,但愿对你的工作、学习、生活带来方便。
篇1:日志式文件系统简介Windows系统
尽管 Linux 可以支持种类繁多的文件系统,但是几乎所有的Linux发行版都用ext2作为默认的文件系统, ext2的设计者主要考虑的是文件系统性能方面的问题。ext2在写入文件内容的同时并没有同时写入文件的meta-data(和文件有关的信息,例如:权限、所有者以及创
尽管Linux可以支持种类繁多的文件系统,但是几乎所有的Linux发行版都用ext2作为默认的文件系统。
ext2的设计者主要考虑的是文件系统性能方面的问题。ext2在写入文件内容的同时并没有同时写入文件的meta-data(和文件有关的信息,例如:权限、所有者以及创建和访问时间)。换句话说,Linux先写入文件的内容,然后等到有空的时候才写入文件的meta-data。这样若出现写入文件内容之后但在写入文件的meta-data之前系统突然断电,就可能造成在文件系统就会处于不一致的状态。在一个有大量文件操作的系统中出现这种情况会导致很严重的后果。
日志文件系统比传统的文件系统安全,因为它用独立的日志文件跟踪磁盘内容的变化。就像关系型数据库(RDBMS),日志文件系统可以用事务处理的方式,提交或撤消文件系统的变化。Linux系统缺少日志式文件系统是限制推广其在企业级应用的一个重要制约因素。
日志式文件系统在强调数据完整性的企业级服务器中有着重要的需求,是文件系统发展的方向。日志式文件系统的思想来自于如Oracle等大型数据库。数据库操作往往是由多个相关的、相互依赖的子操作组成,任何一个子操作的失败都意味着整个操作的无效性,对数据库数据的任何修改都要回复到操作以前的状态。日志式文件系统采用了类似的技术。
在分区中保存有一个日志记录文件,文件系统写操作首先是对记录文件进行操作,若整个写操作由于某种原因(如系统掉电)而中断,则在下次系统启动时就会读日志记录文件的内容来恢复没有完成的写操作。而这个过程一般只需要几秒钟到几分钟,而不是ext2文件系统的fsck那样在大型服务器情况下可能需要几个小时来完成扫描。
当前linux环境下有下面几种日志文件可供选择:
一、SGI的xfs文件系统
SGI最新发布xfs为 1.0.1版.(oss.sgi.com/projects/xfs/)
SGI的XFS 1.0是可被linux的2.4.x核心支持.在redhat上运行的很好,SGI还在redhat上开发了一个安装程序.
其它linux发行版的安装程序也正在开发中.
SGI的xfs被称为业界最先进的、最具可升级性的文件系统技术。它是一个全64位,快速、稳固的日志文件系统,多年用于sgi的irix操作系统。sgi决定支持linux社区,将关键的基本架构技术授权于linux。它以开放资源形式发布了他们自己拥有的xfs的源代码,并开始进行移植。此工作进展得很快,目前已进入beta版阶段。作为一个64位文件系统,xfs可以支持超大数量的文件(9g×1gb,甚至更大的18g×1gb),可在大型 2d 和 3d 数据方面提供显著的性能。xfs有能力预测其它文件系统薄弱环节,同时xfs提供了在不妨碍性能的情况下增强可靠性和快速的事故恢复。
sgi的xfs可为linux和开放资源社区带来的新特性有:
可升级性
xfs被设计成可升级,以面对大多数的存储容量和i/o存储需求,可处理大型文件和包含巨大数量文件的大型目录,满足二十一世纪快速增长的磁盘需求。xfs有能力动态地为文件分配索引空间,使系统形成高效支持大数量文件的能力。在它的支持下,用户可使用1exabyte (1g×1gb) 大的文件,远远大于现在最大的文件系统。
优秀的i/o 性能
典型的现代服务器使用大型的条带式磁盘阵列,以提供达数gb/秒的总带宽。xfs可以很好地满足i/o请求的大小和并发i/o请求的数量。
系统排错
xfs可以在一秒内从大多数意外中断中恢复。传统文件系统必须在中断后做一些特定的文件系统检查,可能会花费数小时才完成。xfs避免了冗长的文件系统检查,可明显地减少读写磁盘的时间。
xfs可作为root文件系统,并被lilo支持.在NFS服务器上使用也没问题.支持软件raid和LVM.
二、Reiserfs文件系统
Reiserfs文件系统的主页是www.reiserfs.org/
在7月23日,Hans Reiser把他的基于平衡树结构的ReiserFS文件系统在网上公布 。 这是ReiserFS的第一次公开亮相。此后,ReiserFS一直在Hans Reiser和领导下的开发小组下开发和发展,SuSE Linux也对它的发展起了重大的帮助。
由于ReiserFS有一些很有用的特性,更主要的是它比ext2fs要快得多,所以它很快被很多人使用。Linux内核2.4.1-pre4版本开始包含ReiserFS文件系统。当前的ReiserFS只能在Intel结构体系上使用,但支持其他体系结构的ReiserFS版本也正在积极开发中,
新一代的reiser4将于/9/30日发布.
ReiserFS是一种新型的文件系统,在蓝点Linux中你可以选择它来装载你的Linux操作系统和其他应用程序和数据文件。它通过一种与众不同的方式--完全平衡树结构来容纳数据,包括文件数据,文件名以及日志支持。ReiserFS还以支持
海量磁盘和磁盘阵列,并能在上面继续保很快的搜索速度和很高的效率。
ReiserFS是基于平衡树的文件系统结构,尤其对于大量文件的巨型文件系统,如服务器上的文件系统,搜索速度要比ext2快;ext2使用局部的二分查找法,综合性能比不上ReiserFS。
空间分配和利用情况
ReiserFS里的目录是完全动态分配的,因此不存在ext2中常见的无法回收巨型目录占用的磁盘空间的情况。ReiserFS里小文件(<4K)可以直接存储进树,小文件读取和写入的速度更快,树内节点是按字节对齐的,小的文件可共享同一个硬盘块,
节约大量空间。Ext2使用固定大小的块分配策略,也就是说,不到4K的小文件也要占据4K的空间,导致的空间浪费比较严重。
先进的日志机制
ReiserFS有先进的日志(Journaling/logging)机制,在系统意外崩溃的时候,未完成的文件操作不会影响到整个文件系统结构的完整性。 ext2虽然健壮性很强,但一旦文件系统被不正常地断开,在下一次启动时它将不得不进行漫长的检查系统数
据结构的完整性的过程,这是为了防止数据丢失而必需的操作。对于较大型的服务器文件系统,这种“文件系统检查”可能要持续好几个小时,在很多场合下这样长的时间是无法接受的。 解决这个问题的一种技术“日志文件系统”。在日志的帮助下,每个对数据结构的改变都被记录下来,日志在机制保证了在每个实际数据修改之前,相应的日志已经写入硬盘。正因为如此,在系统突然崩溃时,在下次启动几秒钟后就能恢复成一个完整的系统,系统也就能很快的使用了。
支持海量磁盘和优秀的综合性能
ReiserFS是一个相当现代化的文件系统,相比之下,ext2虽然性能已经很好了,但其设计还只是19世纪80年代的水准。
ReiserFS的出现,使Linux拥有了像Irix/AIX那样的高档商用Unix才有的高级文件系统。ReiserFS可轻松管理上百G的文件系统,在企业级应用中有其用武之地,由于它的高效存储和快速小文件I/O特点,它在桌面系统上也表现出色:启动X窗口系统的时间ReiserFS比ext2少1/3。而ext2则无法管理2G以上的单个文件,这也使得ReiserFS在某些大型企业级应用中比ext2要出色。
ReiserFS一个最受人批评的缺点是每升级一个版本,都将要将磁盘重新格式化一次,这个缺点也正在改进中。
三、IBM的jfs文件系统
IBM最新发布xfs 1.0.2版.(oss.software.ibm.com/developerworks/opensource/jfs/)
jfs(Journaled File System Technology for Linux)的开发者包括AIX(IBM的Unix)的jfs的主要开发者。在AIX上,jfs已经经受住了考验。它是可靠、快速和容易使用的。
2月,ibm宣布在一个开放资源许可证下,移植linux版的jfs文件系统。jfs也是一个有大量用户安装使用的企业级文件系统。
使用日志文件系统,性能上会稍有损失,是因为当它保持一个日志时,系统需要写许多数据。但面对系统崩溃及运行fsck,这是值得的。jfs通过把同步日志转为异步日志从而减少了性能的损耗。使用同步日志,系统直接进行与文件系统的动作成比例的日志记录操作;而异步日志,日志记录较少,且其可以在不影响其它文件系统操作时进行记录,因而可减少日志的开销。
四、ext2的后继者ext3fs
ext3是由开放资源社区开发的日志文件系统,主要开发人员是redhat的 高手stephen tweedie。ext3被设计成是ext2的升级版本,尽可能地方便用户从ext2fs向ext3fs迁移。ext3在ext2的基础上加入了记录元数据的日志功能,努力保持向前和向后的兼容性。这个文件系统也许称为ext2的下一个版本更为合适些。
ext3fs工作得很好。ext3fs最大的优点是向下兼容ext2。而且ext3fs还支持异步的日志,这意味着它的性能可能比ext2还好。但是使用ext3文件系统时要注意硬盘限额问题,在这个问题解决之前,不推荐在重要的应用上采用ext3+disk quota
ext3最新版本是针对kernel 2.4.8的ext3-2.4-0.9.6-248.gz
新推出的redhat 7.2B上正式启用了ext3,Turbolinux Server 6.5则同时支持 ReiserFS 及 ext3.
通过在已有的ext2文件系统上添加日志文件可把ext2文件系统转换成ext3文件系统.
你可以把一个文件系统在ext3和ext2自由切换.因为在ext2文件系统上的ext3日志文件仍然存在,只是ext2不能认出而已.
原文转自:www.ltesting.net
篇2:ext3日志式文件系统使用介绍Windows系统
ext3是由开放资源社区 开发 的日志文件系统,主要开发人员是redhat的 高手stephen tweedie,ext3被设计成是ext2的升级版本,尽可能地方便用户从ext2fs向ext3fs迁移。ext3在ext2的基础上加入了记录元数据的日志功能,努力保持向前和向后的 兼容性 。这个文
ext3是由开放资源社区开发的日志文件系统,主要开发人员是redhat的 高手stephen tweedie。ext3被设计成是ext2的升级版本,尽可能地方便用户从ext2fs向ext3fs迁移。ext3在ext2的基础上加入了记录元数据的日志功能,努力保持向前和向后的兼容性。这个文件系统也许称为ext2的下一个版本更为合适些。
ext3fs工作得很好。ext3fs最大的优点是向下兼容ext2。而且ext3fs还支持异步的日志,这意味着它的性能可能比ext2还好。但是使用ext3文件系统时要注意硬盘限额问题,在这个问题解决之前,不推荐在重要的应用上采用ext3+disk quota
ext3最新版本是针对kernel 2.4.8的ext3-2.4-0.9.6-248.gz
新推出的redhat 7.2B上正式启用了ext3,Turbolinux Server 6.5则同时支持 ReiserFS 及 ext3.
一、安装ext3文件系统(以redhat 7.1为例)
首先下载ext3-2.4-0.9.6-248.gz和linux-2.4.8.tar.gz并把它们拷贝到/usr/src/目录下.
你可能要下载最新版的util-linux(www.kernel.org/pub/linux/utils/util-linux/)和e2fsprogs
(e2fsprogs.sourceforge.net/)
要确保e2fsprogs的版本>1.22,redhat 7.1也需要升级.怕麻烦的可下载redhat 7.2b的相应rpm包e2fsprogs-1.22-3.i386.rpm和util-linux-2.11f-5.i386.rpm
rpm -Uhv e2fsprogs-1.22-3.i386.rpm
rpm -Uhv util-linux-2.11f-5.i386.rpm
tar zxvf linux-2.4.8.tar.gz
mv kernel linux-2.4.8
rm linux-2.4
ln -s linux-2.4.8 linux-2.4
cd /usr/src/linux-2.4
gunzip < ../ext3-2.4-0.9.6-248.gz | patch -p1
make mproper
make menuconfig(在文件系统栏目中选上ext3,作为模块也可以.再选上“JBD debugging support”项,如果出错的话,可提供有用的信息;通常不要选上“Buffer head tracing”,因为这样的话会使用大量的内存.)
make dep
make clean
make bzImage
make modules
make modules-install
cp System.map /boot/System.map-2.4.8
cp arch.i386/boot/bzImage /boot/vmlinuz-2.4.8
cd /boot
rm System.map
ln -s System.map-2.4.8 System.map
vi /etc/lilo.conf
lilo
reboot
二、把ext2文件系统转换成ext3文件系统
通过在已有的ext2文件系统上添加日志文件可把ext2文件系统转换成ext3文件系统.假设打算把原/back (/dev/hda4)从ext2文件系统转换成ext3文件系统.
1、卸载/back目录
umount /back
2、转换
tune2fs -j /dev/hda4
3、安装/back目录
mount -t ext3 /dev/hda4 /back
4、修改/etc/fstab文件.
三、创建新的ext3文件系统
假设打算把/dev/hda4)创建为ext3文件系统.
1、创建
mke2fs -j /dev/hda4
2、安装/back目录
mount -t ext3 /dev/hda4 /back
3、修改/etc/fstab文件.
四、在ext2与ext3之间切换
你可以把一个文件系统在ext3和ext2自由切换.因为在ext2文件系统上的ext3日志文件仍然存在,只是ext2不能认出而已.
umount /back
mount -t ext3 /dev/hda4 /back
umount /back
mount -t ext2 /dev/hda4 /back
五、文件系统修复
新的e2fsprogs中的e2fsck支持ext3.当一个ext3文件系统被破坏时,先卸载该设备,在用e2fsck修复.
umount /back
e2fsck -fy /dev/hda4
六、其它事项
用ext3可以避免重启动时长时间的文件系统检查.用下面的名令:
tune2fs -i 0 -c 0 /dev/hda4来关闭文件系统检查.
原文转自:www.ltesting.net
篇3:ReiserFS文件系统Windows系统
1. 什么是ReiserFS ReiserFS是一种新型的文件系统,在蓝点 Linux 中你可以选择它来装载你的Linux操作系统和其他应用程序和数据文件,它通过一种与众不同的方式--完全平衡树结构来容纳数据,包括文件数据,文件名以及日志支持。ReiserFS还以支持海量磁盘和磁
1. 什么是ReiserFS
ReiserFS是一种新型的文件系统,在蓝点Linux中你可以选择它来装载你的Linux操作系统和其他应用程序和数据文件。它通过一种与众不同的方式--完全平衡树结构来容纳数据,包括文件数据,文件名以及日志支持。ReiserFS还以支持海量磁盘和磁盘阵列,并能在上面继续保很快的搜索速度和很高的效率。ReiserFS文件系统一直以来被用在高端Unix系统上如SGI等。
2. ReiserFS的特点(与ext2的对比):
ReiserFS相对于Linux上传统的文件系统--ext2有很多优点,在下面一一介绍。
搜寻方式
ReiserFS是基于平衡树的文件系统结构,尤其对于大量文件的巨型文件系统,如服务器上的文件系统,搜索速度要比ext2快;ext2使用局部的二分查找法,综合性能比不上ReiserFS。
空间分配和利用情况
ReiserFS里的目录是完全动态分配的,因此不存在ext2中常见的无法回收巨型目录占用的磁盘空间的情况。ReiserFS里小文件(<4K)可以直接存储进树,小文件读取和写入的速度更快,树内节点是按字节对齐的,小的文件可共享同一个硬盘块,节约大量空间。Ext2使用固定大小的块分配策略,也就是说,不到4K的小文件也要占据4K的空间,导致的空间浪费比较严重。
先进的日志机制
ReiserFS有先进的日志(Journaling/logging)机制,在系统意外崩溃的时候,未完成的文件操作不会影响到整个文件系统结构的完整性。 ext2虽然健壮性很强,但一旦文件系统被不正常地断开,在下一次启动时它将不得不进行漫长的检查系统数据结构的完整性的过程,这是为了防止数据丢失而必需的操作。对于较大型的服务器文件系统,这种“文件系统检查”可能要持续好几个小时,在很多场合下这样长的时间是无法接受的。 解决这个问题的一种技术“日志文件系统”。在日志的帮助下,每个对数据结构的改变都被记录下来,日志在机制保证了在每个实际数据修改之前,相应的日志已经写入硬盘。正因为如此,在系统突然崩溃时,在下次启动几秒钟后就能恢复成一个完整的系统,系统也就能很快的使用了。
支持海量磁盘和优秀的综合性能
ReiserFS是一个相当现代化的文件系统,相比之下,ext2虽然性能已经很好了,但其设计还只是19世纪80年代的水准。ReiserFS的出现,使Linux拥有了像Irix/AIX那样的高档商用Unix才有的高级文件系统。ReiserFS可轻松管理上百G的文件系统,在企业级应用中有其用武之地,由于它的高效存储和快速小文件I/O特点,它在桌面系统上也表现出色:启动X窗口系统的时间ReiserFS比ext2少1/3,
而ext2则无法管理2G以上的单个文件,这也使得ReiserFS在某些大型企业级应用中比ext2要出色。
3.缺点
ReiserFS一个最受人批评的缺点是每升级一个版本,都将要将磁盘重新格式化一次,这个缺点也正在改进中。
4.ReiserFS的起源与未来
在7月23日,Hans Reiser把他的基于平衡树结构的ReiserFS文件系统在网上公布 。 这是ReiserFS的第一次公开亮相。此后,ReiserFS一直在Hans Reiser和领导下的开发小组下开发和发展,SuSE Linux也对它的发展起了重大的帮助。由于ReiserFS有一些很有用的特性,更主要的是它比ext2fs要快得多,所以它很快被很多人使用。据说在Linux内核2.4.0以上的版本可能将采用ReiserFS作为它的文件系统。当前的ReiserFS只能在Intel结构体系上使用,但支持其他体系结构的ReiserFS版本也正在积极开发中。我们等待着更强大,兼容性更好的ReiseFS的到来。
附:怎样添加ReiserFS文件系统
简介
ReiserFS文件系统是一种新的linux文件系统。它通过一种与众不同的方式--完全平衡树结构来容纳数据, 包括文件数据,文件名以及日志支持,并能在上面继续保持很快的搜索速度和很高的效率。ReiserFS文件系统一直以来被用在高端Unix系统上如,SGI。
ReiserFS是在Hans Reiser和其领导下的开发小组下开发和发展,SuSE Linux也对它的发展起了重大的帮助。由于ReiserFS有一些很有用的特性,更主要的是它比ext2fs要快得多,所以它很快被很多人使用。据说在Linux内核2.4.0以上的版本可能将采用ReiserFS作为它的文件系统。当前的ReiserFS只能在Intel结构体系上使用,但支持其他体系结构的ReiserFS版本也正在积极开发中。我们等待着更强大,兼容性更好的 ReiseFS的到来。
安装
从www.devlinux.com/namesys下载reiserfs的补丁程序,要确保下载的补丁版本和你的kernel版本是一致的。
下载后用root身份登录进入系统,切换至/usr/src/linux目录,执行命令:
#gunzip /path/to/linux-2.2.16-reiserfs-3.5.22-patch.gz
#patch -p1 -i /path/to/linux-2.2.16-reiserfs-3.5.22-patch
在做完上面的两步后,重新编译kernel,将reiserfs编译进kernel或做成一个模块。
Reiserfs的相关应用程序在 /usr/src/linux/fs/reiserfs/utils 目录下。你可以用下面方法安装它们:
#mkdir bin
#make
#make install
最后,你可以用“fdisk”命令重新分区或用“mkreiserfs”命令重新格式化一个已经存在的分区。 指定reiserfs类型加载这个分区,如“mount -t reiserfs /dev/hda2 /download”,这样你就可以使用这个新的分区了。
原文转自:www.ltesting.net
篇4:理解/proc文件系统Windows系统
(这个是,希望给大家提供帮助,更好地理解/proc文件系统) 不只一次的有人问我关于/proc文件系统,那是什么,那些巨大的文件在那里做什么?我可以删除它们吗?本文将详细介绍/proc文件系统,描述一些工具,你可以通过这些工具领略/proc的威力,最后有一
(这个是转贴,希望给大家提供帮助,更好地理解/proc文件系统)
不只一次的有人问我关于/proc文件系统,那是什么,那些巨大的文件在那里做什么?我可以删除它们吗?本文将详细介绍/proc文件系统,描述一些工具,你可以通过这些工具领略/proc的威力。最后有一个例子程序,演示了系统管理员如何与/proc交互。
◆ 介绍/proc
在过去那些糟糕的日子里,只能通过直接访问内核内存(/dev/kmem)获取进程数据,比如运行ps(1)命令时。为了实现这种访问,需要超级用户权限,而且步骤相当复杂。Sun公司从UNIXSVR4开始解决了进程数据访问问题,现在,可以简单地通过/proc访问进程数据。
/proc文件系统不是普通意义上的文件系统,它是一个到运行中进程地址空间的访问接口。通过/proc,可以用标准Unix系统调用(比如open、read()、write()、ioctl()等等)访问进程地址空间。事实上,Solaris ps(1)命令正是利用/proc获取进程状态。
S (l) 进程状态:
O 正在运行
S 休眠: 进程正在等待某个事件发生/完成
R 可运行: 进程位于运行队列中
Z 僵尸状态: 进程结束了,但是其父进程未处理SIGCHLD信号
T 进程暂停: 可能是任务控制信号所致,或者正在被
跟踪调试
/proc下的大文件对应运行中进程的地址空间,不是标准Unix文件。事实上每个文件名对应运行中进程的PID,文件属主、属组对应进程拥有者的real-uid和primary-gid。权限控制与普通Unix文件一样。文件大小是最令人迷惑的地方,事实上相当好理解,对应进程内存映像大小,并不真正占用硬盘空间,所以你不必担心空间浪费的问题。不要企图删除这些文件!观察图A中列举的/proc例子:
--------------------------------------------------------------------------
$ ls -l /proc
total 43384
-rw------- 1 root root 0 Apr 2 20:07 00000
-rw------- 1 root root 393216 Apr 2 20:07 00001
-rw------- 1 root root 0 Apr 2 20:07 00002
-rw------- 1 root root 0 Apr 2 20:07 00003
-rw------- 1 root root 1695744 Apr 2 20:07 00081
-rw------- 1 root root 1597440 Apr 2 20:07 00083
-rw------- 1 root root 1777664 Apr 2 20:08 00096
-rw------- 1 root root 1683456 Apr 2 20:08 00099
-rw------- 1 root root 1589248 Apr 2 20:08 00101
-rw------- 1 root root 1445888 Apr 2 20:08 00116
-rw------- 1 root root 1404928 Apr 2 20:08 00126
-rw------- 1 root root 798720 Apr 2 20:08 00135
-rw------- 1 root root 1368064 Apr 2 20:08 00195
-rw------- 1 root root 1585152 Apr 2 20:08 00197
-rw------- 1 root root 1368064 Apr 2 20:08 00200
-rw------- 1 root other 225280 Apr 2 20:08 00201
-rw------- 1 root root 1454080 Apr 2 20:08 00203
-rw------- 1 root root 1519616 Apr 2 20:14 00243
-rw------- 1 rthomas wheel 1499136 Apr 2 20:14 00245
-rw------- 1 rthomas wheel 806912 Apr 2 20:16 00261
$
图A: /proc例子
--------------------------------------------------------------------------
操作/proc下文件的方式和操作普通Unix文件一样,可以使用所有你熟悉的系统调用,包括ioctl()。在内核中,针对/proc下文件的vnode操作被转向procfs。这意味着操作vnode的系统调用(比如lookuppn())实际上最终转向procfs-savvy系统调用(比如prlookup())。
◆ /proc能告诉我什么
Solaris下使用/proc的工具相当完善,位于/usr/proc/bin目录中。这些工具提供了一种访问任意指定进程临界数据的简捷办法。比如,想知道一个进程已经打开了多少文件,你可以使用crash(1M)(见鬼,我不会),但是你是root吗?不必担心,可以用/usr/proc/bin/pfiles获取这种信息,图B演示了pfiles(1)命令的使用:
--------------------------------------------------------------------------
[scz@ /export/home/scz]> ps
PID TTY TIME CMD
637 pts/3 0:00 bash
[scz@ /export/home/scz]> pfiles 637
637: -bash
Current rlimit: 64 file descriptors
0: S_IFCHR mode:0620 dev:151,0 ino:196787 uid:500 gid:7 rdev:24,3
O_RDWR
1: S_IFCHR mode:0620 dev:151,0 ino:196787 uid:500 gid:7 rdev:24,3
O_RDWR
2: S_IFCHR mode:0620 dev:151,0 ino:196787 uid:500 gid:7 rdev:24,3
O_RDWR
3: S_IFDOOR mode:0444 dev:191,0 ino:1618164880 uid:0 gid:0 size:0
O_RDONLY|O_LARGEFILE FD_CLOEXEC door to nscd[213]
63: S_IFCHR mode:0620 dev:151,0 ino:196787 uid:500 gid:7 rdev:24,3
O_RDWR FD_CLOEXEC
[scz@ /export/home/scz]>
图B: 使用pfiles(1)命令
--------------------------------------------------------------------------
正如上面演示的,/usr/proc/bin下的命令使用很简单,只需要在命令行上指定PID。然而,留心权限许可设置,与所有普通Unix文件一样,你无权访问那些权限设置上禁止访问的指定PID的进程数据。
花点事件看看proc(1)手册页,熟悉其中介绍的命令,你将学会列举指定进程相关的库、进程信号设置、进程信任设置,你甚至可以暂停、重启进程,
◆ 编写/proc工具
/proc的魅力在于它包含了你可能想知道的关于一个进程的任何信息,你只需要简单地从中获取。/usr/include/sys/procfs.h文件中定义了两个结构,prstatus和prpsinfo,从中可以获取指定进程的很多信息。下面是个例子,开发者想知道他的应用程序究竟占用了多少内存。简单!ls /proc就可以知道了。但是,他还想知道更多细节,他需要知道总的映像大小、常驻部分的大小、堆区(heap)大小、栈区(stack)大小。此外,他希望能够定期跟踪这些数据信息,类似vmstat(1M)那种方式。如上所述,听起来象是一个令人生畏的任务。
译者: Solaris 2.6开始这两个结构定义在/usr/include/sys/old_procfs.h文件中
然而,通过使用/proc文件系统,我们可以使这项编程挑战变得容易些。我们写的这个工具称做memlook,将显示指定PID对应的内存统计信息。此外,可以在命令行上指定一个时间间隔,以便定期重新检测内存利用信息。图C演示了一次简单的输出:
--------------------------------------------------------------------------
$ memlook 245
PID IMAGE RSS HEAP STACK
245 1499136 1044480 24581 8192
$
图C: memlook的输出举例
--------------------------------------------------------------------------
下面是memlook.c的源代码
--------------------------------------------------------------------------
/*
* @(#)memlook.c 1.0 10 Nov
* Robert Owen Thomas robt@cymru.com
* memlook.c -- A process memory utilization reporting tool.
*
* gclearcase/“ target=”_blank“ >cc-Wall -O3 -o memlook memlook.c
*/
#pragma ident ”@(#)memlook.c 1.0 10 Nov 1997 Robert Owen Thomas robt@cymru.com“
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int counter = 10;
int showUsage ( const char * );
void getInfo ( int, int );
int main ( int argc, char * argv[] )
{
int fd, pid, timeloop = 0;
char pidpath[BUFSIZ]; /* /usr/include/stdio.h: #define BUFSIZ 1024 */
switch ( argc )
{
case 2:
break;
case 3:
timeloop = atoi( argv[2] );
break;
default:
showUsage( argv[0] );
break;
} /* end of switch */
pid = atoi( argv[1] );
sprintf( pidpath, ”/proc/%-d“, pid ); /* -表示向左靠 */
if ( ( fd = open( pidpath, O_RDONLY ) ) < 0 )
{
perror( pidpath );
exit( 1 );
}
if ( 0 < timeloop )
{
for ( ; ; )
{
getInfo( fd, pid );
sleep( timeloop );
}
}
getInfo( fd, pid );
close( fd );
exit( 0 );
} /* end of main */
int showUsage ( const char * progname )
{
fprintf( stderr, ”%s: usage: %s < PID > [time delay]n“, progname, progname );
exit( 3 );
} /* end of showUsage */
void getInfo ( int fd, int pid )
{
prpsinfo_t prp;
prstatus_t prs;
if ( ioctl( fd, PIOCPSINFO, &prp ) < 0 )
{
perror( ”ioctl“ );
exit( 5 );
}
if ( ioctl( fd, PIOCSTATUS, &prs ) < 0 )
{
perror( ”ioctl“ );
exit( 7 );
}
if ( counter > 9 )
{
fprintf( stdout, ”PIDtIMAGEttRSSttHEAPttSTACKn“ );
counter = 0;
}
fprintf( stdout, ”%ut%-9ut%-9ut%-15ut%-15un", pid,
( unsigned int )prp.pr_bysize, ( unsigned int )prp.pr_byrssize,
( unsigned int )prs.pr_brksize, ( unsigned int )prs.pr_stksize );
counter++;
} /* end of getInfo */
--------------------------------------------------------------------------
译者: 作者这里利用了ioctl(),而不是直接读取/proc下文件,这样做的好处在于即使系统升级后/proc布局改变,内核中相应ioctl cmd支持也随之改变,对于应用层的开发者,接口一样,源代码可平稳移植。事实上从作者前面举例来看, memlook.c是在Solaris 2.6以前的版本上开发的,但我并未修改就可以直接用在Solaris 2.6上,虽然此时/proc布局已经发生重大变化。
仔细阅读prstatus和prpsinfo结构,寻找那些你敢兴趣的成员。在未能真正掌握这种技术之前不要针对/proc文件系统使用write()或者ioctl()。针对特定进程胡乱做write()调用,结果未知。
◆ 结论
当痛苦调试程序或者试图获取指定进程状态的时候,/proc文件系统将是你强有力的支持者。通过它可以创建更强大的工具,获取更多信息。
:em02: :em02: :em02: :em02: :em02: :em02:
climbmount 回复于:-12-18 13:26:45好文章,来得真及时。
.netfrihor 回复于:2004-12-18 16:00:04不错
顶一下
急不通 回复于:2004-12-21 09:41:24好文。bye the way,在linux下面的/proc也是类似的吗?
飞天二狭 回复于:2004-12-21 22:40:56linux下面当然有了。
原文转自:www.ltesting.net
篇5:强行卸载文件系统Windows系统
我在卸载(umount)一个文件系统的时候系统报错,提示文件系统busy
强行解决的方法:fuser -ku /yourfs
然后umount
ps:系统为aix5.1
lu上的精华贴
larryh
昨天, 13:12
原文转自:www.ltesting.net
★ java简历表格
【日志式文件系统简介Windows系统(集锦5篇)】相关文章:
入侵检测修正药业2023-01-27
XMind功能介绍2023-05-07
电路系统调试总结2022-04-30
操作系统实习报告2022-09-25
揭开Boot.ini文件的神秘面纱2024-01-23
Win 7常用运行命令总结2022-12-09
用蒙特卡洛法对非线性零部件的优化设计2022-04-29
Java软件工程师求职简历2023-11-26
软件系统安装与实施合同书2022-05-28
Windows软件卸载专家使用手册2023-03-23