===========================================================
zt:Linux性能监控之Memory篇
===========================================================
http://linux.chinaunix.net/techdoc/net/2008/05/21/1004838.shtml
首先说说虚拟内存和物理内存:
虚拟内存就是采用硬盘来对物理内存进行扩展,将暂时不用的内存页写到硬盘上而腾出更多的物理内存让有需要的进程来用。当这些内存页需要用的时候在从硬盘读回内存。这一切对于用户来说是透明的。通常在Linux系统说,虚拟内存就是swap分区。在X86系统上虚拟内存被分为大小为4K的页。
每一个进程启动时都会向系统申请虚拟内存(VSZ),内核同意或者拒就请求。当程序真正用到内存时,系统就它映射到物理内存。RSS表示程序所占的物理内存的大小。用ps命令我们可以看到进程占用的VSZ和RSS。
# ps –aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
daemon 2177 0.0 0.2 3352 648 ? Ss 23:03 0:00 /usr/sbin/atd
dbus 2196 0.0 0.5 13180 1320 ? Ssl 23:03 0:00 dbus-daemon-1 --sys
root 2210 0.0 0.4 2740 1044 ? Ss 23:03 0:00 cups-config-daemon
root 2221 0.3 1.5 6108 4036 ? Ss 23:03 0:02 hald
root 2231 0.0 0.1 2464 408 tty1 Ss+ 23:03 0:00 /sbin/mingetty tty1
内核会定期将内存中的数据同步到硬盘,这个过程叫做Memory Paging。同时内核也要负责回收不用的内存,将他们分给其他需要的进程。PFRA算法(Page Frame reclaim algorithm)负责回收空闲的内存。算法根据内存页的类型来决定要释放的内存页。有下列4种类型:
1. Unreclaimable – 锁定的,内核保留的页面;
2. Swappable – 匿名的内存页;
3. Syncable – 通过硬盘文件备份的内存页;
4. Discardable – 静态页和被丢弃的页。
除了第一种(Unreclaimable)之外其余的都可以被PFRA进行回收。与之相关的进程是kswapd。在kswapd中,有2个阀值,pages_hige和pages_low。当空闲内存页的数量低于pages_low的时候,kswapd进程就会扫描内存并且每次释放出32个free pages,直到free page的数量到达pages_high。具体kswapd是如何回收内存的呢?有如下原则:
1. 如果页未经更改就将该页放入空闲队列;
2. 如果页已经更改并且是可备份回文件系统的,就理解将内存页的内容写回磁盘;
3. 如果页已经更改但是没有任何磁盘上的备份,就将其写入swap分区。
# ps -ef | grep kswapd
root 30 1 0 23:01 ? 00:00:00 [kswapd0]
在回收内存过程中还有两个重要的方法,一是LMR(Low on memory reclaiming),另一个是OMK(Out of Memory Killer)。当分配内存失败的时候LMR将会其作用,失败的原因是kswapd不能提供足够的空闲内存,这个时候LMR会每次释放1024个垃圾页知道内存分配成功。当LMR不能快速释放内存的时候,OMK就开始其作用,OMK会采用一个选择算法来决定杀死某些进程。当选定进程时,就会发送信号SIGKILL,这就会使内存立即被释放。OMK选择进程的方法如下:
1. 进程占用大量的内存;
2. 进程只会损失少量工作;
3. 进程具有低的静态优先级;
4. 进程不属于root用户。
进程管理中另一个程序pdflush用于将内存中的内容和文件系统进行同步,比如说,当一个文件在内存中进行修改,pdflush负责将它写回硬盘。
# ps -ef | grep pdflush
root 28 3 0 23:01 ? 00:00:00 [pdflush]
root 29 3 0 23:01 ? 00:00:00 [pdflush]
每当内存中的垃圾页(dirty page)超过10%的时候,pdflush就会将这些页面备份回硬盘。这个比率是可以调节的,通过参数vm.dirty_background_ratio。
# sysctl -n vm.dirty_background_ratio
10
Pdflush同PFRA是独立运行的,当内核调用LMR时,LMR就触发pdflush将垃圾页写回硬盘
lfree
发表于:2008.05.27 08:13
::分类:
(
linux
)
::阅读:(66次)
::
评论
(0)
===========================================================
zt:用 OProfile 彻底了解性能
===========================================================
http://www.chinalinuxpub.com/read.php?wid=2495
由于在硬件和软件之间有一些意料之外的交互,分析 Linux 操作系统和应用程序的代码可能是很困难的,但评测( profiling )办法可以识别出系统的性能问题。本文介绍的是 Oprofile,这是一种用于 Linux 的评测工具,将包含在即将发布的稳定内核中。
评测 是表示不同性能特性和特征的数据的形式化总结或分析,它通常以图形和表的形式的出现。评测表提供为特定的处理器事件收集的采样的百分数或数量,比如高速缓存线路故障的数量、传输后备缓存( TLB )故障的数量,等等。
Oprofile 是用于 Linux 的若干种评测和性能监控工具中的一种。它可以工作在不同的体系结构上,包括 IA32, IA64 和 AMD Athlon 系列。它的开销小,将被包含在(Linux)2.6 版的内核中。
Oprofile 可以帮助用户识别诸如循环的展开、高速缓存的使用率低、低效的类型转换和冗余操作、错误预测转移等问题。它收集有关处理器事件的信息,其中包括TLB的故障、停机、存储器访问、位于 DCU(数据高速缓存单元)中的总线路数、一个 DCU 故障的周期数,以及不可高速缓存的和可高速缓存的指令的获取数量。Oprofile是一种细粒度的工具,可以为指令集或者为函数、系统调用或中断处理例程收集采样。Oprofile 通过取样来工作。使用收集到的评测数据,用户可以很容易地找出性能问题。
安装 Oprofile
Oprofile 包含在 Linux 2.5 和更高版本的内核中,也包含在大多数较新的 Linux 版本中,包括 Red Hat 9 。用户也可以使用在本文后面 参考资料部分中的链接来下载 Oprofile 。用户需要在启用 Oprofile 的情况下重新编译内核。下面介绍具体做法:
1. 启动Oprofile:
#cd /usr/src/linux
#make xconfig/menuconfig
在评测菜单中启用 Oprofile ,在 .config 文件中设置 CONFIG_PROFILING=y 和 CONFIG_OPROFILE=y 。 另外,还要在 Processor type and features 菜单中启用 Local APIC 和 IO-APIC 。
2. 按下面命令格式重新编译:
#make dep (use for 2.4 kernel versions )
#make bzImage
启动新内核:
3. 为了配置和安装 Oprofile 实用工具,键入以下语句:
#./configure --with-linux=/usr/src/linux/ --with-qt-dir=/usr/lib/qt/
--with-kernel-support
#make
#make install
关于系统要求的信息和更加详细的安装指示,请参阅 参考资料部分中的链接。
Oprofile 工具概述:
* op_help: 列出可用的事件,并带有简短的描述
* opcontrol: 控制 Oprofile 的数据收集
* oprofpp: 检索有用的评测数据
* op_time: 为系统上的所有映像列出相关的评测值
* op_to_source: 产生带注解的源文件、汇编文件或源文件和汇编文件的混合
* op_merge: 合并属于同一个应用程序的采样文件
* op_import: 将采样数据库文件从外部格式(abi)转换为本地格式
启动评测的三个快速步骤:
1. 启动 profiler(评测器):
# opcontrol --setup --ctr0-event=CPU_CLK_UNHALTED
--ctr0-count=600000 --vmlinux=/usr/src/linux-2.4.20/vmlinux
For RTC mode users, use --rtc-value=2048
# opcontrol --start
2. 现在评测器已经运行,用户可以开始做他们做的事情:
3. 用下面的选项来转储被评测的数据:
# opcontrol --stop/--shutdown/--dump
Oprofile 分析:高速缓存利用率问题
高速缓存是最靠近处理器执行单元的存储器,它比主存储器容量小得多,也快得多。它可以在处理器芯片的内部,也可以在处理器芯片的外部。高速缓存中存放的是最频繁使用的指令和数据。由于允许对频繁使用的数据进行快速存取,软件运行要比从主存储器中存取数据快得多。在 Intel IA32 P4 中,数据被存储在每条线路 32 字节的高速缓存线路中。
对于多 CPU 的系统来说,当一个 CPU 修改在 CPU 之间共享的数据的时候,在CPU的高速缓存中的高速缓存线路是无效的。
如果数据或指令没有出现在高速缓存中,或者如果高速缓存线路无效的时候,CPU 通过从主存储器中读数据来更新它的高速缓存。负责做这件事情的处理器事件称为 L2_LINES_IN 。从主存储器读数据需要较多的 CPU 周期。Oprofile 可以帮助用户识别类似于清单 1 所列出的高速缓存问题。
清单 1. 存在高速缓存问题的程序代码
/*
* Shared data being modified by two threads running on different CPUs.
*/
/* shared structure between two threads which will be optimized later*/
struct shared_data_align {
unsigned int num_proc1;
unsigned int num_proc2;
};
/*
* Shared structure between two threads remains unchanged (non optimized)
* This is required in order to collect some samples for the L2_LINES_IN event.
*/
struct shared_data_nonalign {
unsigned int num_proc1;
unsigned int num_proc2;
};
/*
* In the example program below, the parent process creates a clone
* thread sharing its memory space. The parent thread running on one CPU
* increments the num_proc1 element of the common and common_aln. The cloned
* thread running on another CPU increments the value of num_proc2 element of
* the common and common_aln structure.
*/
/* Declare global data */
struct shared_data_nonalign common_aln;
/*Declare local shared data */
struct shared_data_align common;
/* Now clone a thread sharing memory space with the parent process */
if ((pid = clone(func1, buff+8188, CLONE_VM, &common)) < 0) {
perror("clone");
exit(1);
}
/* Increment the value of num_proc1 in loop */
for (j = 0; j < 200; j++)
for(i = 0; i < 100000; i++) {
common.num_proc1++;
}
/* Increment the value of num_proc1 in loop */
for (j = 0; j < 200; j++)
for(i = 0; i < 100000; i++) {
common_aln.num_proc1++;
}
/*
* The routine below is called by the cloned thread,
to increment the num_proc2
* element of common and common_aln structure in loop.
*/
int func1(struct shared_data_align *com)
{
int i, j;
/* Increment the value of num_proc2 in loop */
for (j = 0; j < 200; j++)
for (i = 0; i < 100000; i++) {
com->num_proc2++;
}
/* Increment the value of num_proc2 in loop */
for (j = 0; j < 200; j++)
for (i = 0; i < 100000; i++) {
common_aln.num_proc2++;
}
}
上面的程序是用来评测事件 L2_LINES_IN 的。请注意在 func1 和 main 中收集的采样:
清单 2. 用于 L2_LINES_IN 的 Oprofile 数据
# opcontrol --setup --ctr0-event=L2_LINES_IN
--ctr0-count=500 --vmlinux=/usr/src/linux-2.4.20/vmlinux
#opcontrol --start
#./appln
#opcontrol --stop
#oprofpp -l ./appln
Cpu type: PIII
Cpu speed was (MHz estimation) : 699.57
Counter 0 counted L2_LINES_IN events
(number of allocated lines in L2) with a
unit mask of 0x00 (No unit mask) count 500
vma samples % symbol name
080483d0 0 0 _start
080483f4 0 0 call_gmon_start
08048420 0 0 __do_global_dtors_aux
08048480 0 0 fini_dummy
08048490 0 0 frame_dummy
080484c0 0 0 init_dummy
08048630 0 0 __do_global_ctors_aux
08048660 0 0 init_dummy
08048670 0 0 _fini
080484d0 4107 49.2033 main
080485b8 4240 50.7967 func1
现在使用 CPU_CLK_UNHALTED 事件来评测同一个应用程序(可执行文件),这个事件基本上就是收集无停顿地运行的 CPU 周期数的采样。在该例程中收集到的采样数量与处理器在执行指令时所花的时间成正比。收集的采样越多,处理器执行指令所花的时间就越多。请注意在 main 和 func1 中收集的采样数量:
清单 3. 为 CPU_CLK_UNHALTED 收集的 Oprofile 数据
#oprofpp -l ./appln
Cpu type: PIII
Cpu speed was (MHz estimation) : 699.667
Counter 0 counted CPU_CLK_UNHALTED events
(clocks processor is not halted) with
a unit mask of 0x00 (No unit mask) count 10000
vma samples % symbol name
080483d0 0 0 _start
080483f4 0 0 call_gmon_start
08048420 0 0 __do_global_dtors_aux
08048480 0 0 fini_dummy
08048490 0 0 frame_dummy
080484c0 0 0 init_dummy
08048640 0 0 __do_global_ctors_aux
08048670 0 0 init_dummy
08048680 0 0 _fini
080484d0 40317 49.9356 main
080485bc 40421 50.0644 func1
为了改善性能,现在我们把共享数据结构的两个元素分离到不同的高速缓存线路,从而优化共享的数据结构。在 Intel IA32 P4 处理器中,每条 L2 高速缓存线路的大小是 32 个字节。通过填充 shared_data_align 结构中的第一个元素的28个字节,该结构的元素可以被分离到两个不同的高速缓存线路。现在,父线程修改 shared_data_align 的 num_proc1 ,这导致在首次存取时从 1 号 CPU 的高速缓存线路上读入 num_proc1 。将来父线程对 num_proc1 的存取会导致从该高速缓存线路的数据读入。克隆的线程修改 shared_data_align 的 num_proc2 ,这将导致在 2 号 CPU 的另一条高速缓存线路上获得 num_proc2 。 这两个并行运行的线程分别修改位于不同高速缓存线路上元素 num_proc1 和 num_proc2 。通过把该数据结构的两个元素分离到两条不同的高速缓存线路,一条高速缓存线路的修改就不会导致再次从存储器读入另外一条高速缓存线路。这样,被读入的高速缓存线路的数量就减少了。
清单 4. 经过优化的数据结构
/*
* The padding is added to separate the two unsigned ints in such a
* way that the two elements num_proc1 and num_proc2 are on two
* different cache lines.
*/
struct shared_data_align {
unsigned int num_proc1;
char padding[28];
unsigned int num_proc2;
};
/*
* This structure remains unchanged, so that some cache lines
* read in can be seen in profile data.
*/
struct shared_data_nonalign {
unsigned int num_proc1;
unsigned int num_proc2;
};
注意, shared_data_nonalign 还没有被优化。
既然您已经启用并运行了 Oprofile(已经这样做了,不是吗?),现在您可以试着自己执行下面的一些评测:为事件 L2_LINES_IN 收集 Oprofile 数据,并且将计数器设置为 500,如 清单 2 所示。
还要尝试为事件 CPU_CLK_UNHALTED 收集 Oprofile 数据,同时将计数设置为 10000 。对用优化的和未经优化的方法收集的数据加以比较,并且注意性能的改善。
Oprofile 分析:转移的错误预测
现代处理器可以实现程序转移预测(请参看 参考资料),因为底层的算法和数据是有规律的。如果预测是正确的,那么程序转移的成本就比较低廉。然而程序转移的预测并不总是正确,并且某些程序转移是很难预测的。可以通过改进软件中的转移预测功能来解决这个问题,也可以通过评测应用程序和内核的事件来解决问题。
清单 5 中的代码显示了程序转移的错误预测。这个程序例子创建了一个与其父进程共享存储器空间的克隆线程。运行在一个处理器上的父进程根据 num_proc2 的值来切换 num_proc1 的值(并且根据由另一个处理器修改的该变量的值进行转移)。编译器简单地假设在任何时候 num_proc2 都等于 1,并且默认地为该转移生成代码 。如果 num_proc2 不等于 1,就说明发生了转移的错误预测。
运行在另一个处理器上的克隆的线程切换 num_proc1 的值(并且根据由另一个处理器修改的该变量的值进行转移)。这导致 num_proc2 不总是等于 1,因而在父线程中发生了转移的错误预测。与此类似,由父线程切换的 num_proc1 的值导致了克隆线程中的转移的错误预测。
清单 5. 显示错误转移预测的程序代码
/*shared structure between the two processes */
struct share_both {
unsigned int num_proc1;
unsigned int num_proc2;
};
/*
* The parent process clones a thread by sharing its memory space. The parent
* process just toggles the value of num_proc1 in loop.
*/
/* Declare local shared data */
struct share_both common;
/* clones a thread with memory space same as parent thread*/
if ((pid = clone(func1, buff+8188, CLONE_VM, &common)) < 0) {
perror("clone");
exit(1);
}
/* toggles the value of num_proc1 in loop */
for (j = 0; j < 200; j++)
for(i = 0; i < 100000; i++) {
if (common.num_proc2)
common.num_proc1 = 0;
else
common.num_proc1 = 1;
}
/*
* The function below is called by the cloned thread, which just toggles the
* value of num_proc2 every time in the loop.
*/
int func1(struct share_both *com)
{
int i, j;
/* toggles the value of num_proc2 in loop */
for (j = 0; j < 200; j++)
for (i = 0; i < 100000; i++) {
if (com->num_proc1)
com->num_proc2 = 0;
else
com->num_proc2 = 1;
}
}
转移的错误预测可以通过编译上面未经优化的代码来表明:
#gcc -o branch parent_thread_source_code clone_thread_source_code
现在评测该应用程序的 BR_MISS_PRED_TAKEN_RET 事件,同时将计数设置为 500,如 清单 2 所示。注意在 main 和 func1 中收集的采样。
另外评测同一可执行文件的 CPU_CLK_UNHALTED 事件 ,同时将计数设置为 10000,如 清单 2 所示。
也可以通过使用编译器的 -02 选项来优化转移的错误预测:
#gcc -O2 -c clone_thread_source_code
#gcc -o branch clone_thread_source_code.o parent_thread_source_code
现在开始评测应用程序的 BR_MISS_PRED_TAKEN_RET 和 CPU_CLK_UNHALTED 事件 ,如 清单 2 所示。请注意性能的改善。
让我们在下面关于内核评测的小节中考察另一个错误预测转移的例子。
内核评测的例子
下面列出的评测数据是通过用于 2.5.70 内核的 kernbench 基准为事件 BR_MISS_PRED_TAKEN_RET 收集的。总共为 vma_merge 收集了 23,360 个采样,为 do_mmap_pgoff 收集了 20,717 个采样。
清单 6. 内核的评测数据
# oprofpp -l -i /boot/vmlinux | tail -20
c0143510 4719 1.26446 page_add_rmap
c0117740 4791 1.28375 schedule
c0140320 4825 1.29286 find_vma_prepare
c010f720 4862 1.30278 sys_mmap2
c0134fc0 5005 1.34109 __alloc_pages
c0123670 5473 1.46649 run_timer_softirq
c0134800 5648 1.51339 bad_range
c0139250 6571 1.7607 mark_page_accessed
c0143bd0 6919 1.85395 __pte_chain_free
c013f180 6973 1.86842 do_no_page
c0140ec0 7393 1.98096 get_unmapped_area
c01400f0 8020 2.14896 vm_enough_memory
c0140ff0 9897 2.65191 find_vma
c01594e0 10939 2.93111 link_path_walk
c0134e70 11467 3.07259 buffered_rmqueue
c0117370 11690 3.13234 scheduler_tick
c013eeb0 17463 4.67922 do_anonymous_page
c01153e0 20322 5.44529 do_page_fault
c01408e0 20717 5.55113 do_mmap_pgoff
c0140600 23360 6.25933 vma_merge
转移的错误预测可以通过删掉转移来排除。在 Intel IA32 处理器中,转移可以通过使用 SETcc 指令或使用 P6 处理器的条件转移指令 move CMOVcc 或者 FCMOVcc 来删除。
下面的C代码行表示了条件转移:
(A > B) ? C1 : C2;
下面是上述该C代码的等价汇编指令:
清单 7. 等价的汇编指令
cmp A, B ; compare
jge L30 ; conditional branch
mov ebx, CONST1
jmp L31 ; unconditional branch
L30:
mov ebx, CONST2
L31:
可以优化这段代码,以消除类似如下的转移:
清单 8. 删除转移后的等价汇编指令
xor ebx, ebx ;
cmp A, B
setge b1 ; if ebx = 0 or 1
dec ebx
and ebx, (CONST2-CONST1)
add ebx, min(CONST2,CONST1) ; ebx = CONST1 or CONST2
经过优化的代码将寄存器 EBX 设置为 0,然后比较 A 和 B。如果 A 大于或等于 B, EBX 则被置为 1。 EBX 的值被减少,并且与两个常量值的差执行与( AND )操作。这就将 EBX 或者设置为 0,或者将其设置为两个值的差。通过加上两个常量值中较小的一个,这样就把正确的值写到了 EBX 中 。
我希望您已经对 Oprofile 和可以优化内核代码的方法有了一些了解。2.6 版本的内核即将发布,其中将会有大量有关评测的内容。
参考资料
* 您可以参阅本文在 developerWorks 全球站点上的 英文原文.
* 在 SourceForge 网站的 OProfile 首页上可以阅读更多有关Oprofile的内容。
* Oprofile 的 系统需求、 安装说明和 下载页面 也托管在 SourceForge 网站上。
* 在 OProfile 手册页上可以找到大量的 Oprofile 选项。
* Oprofile 用有它自己的 邮件列表 。
* FOLDOC 提供了对 转移评测 的简单解释。
* " 走向 Linux 2.6" ( developerWorks, 2003年9月)介绍了下一个新内核的工作情况。
* 了解多位 IBM Linux 技术中心成员对 改善 Linux 内核性能和可伸缩性所作的努力( developerWorks, 2003 年 1 月)。
* " 超线程加快了 Linux 的速度" 分析了 Xeon 处理器的超线程技术所承诺的性能改善。( developerWorks, 2003 年 1 月)。
* " Efficient, Unified, and Scalable Performance Monitoring for Multiprocessor Operating Systems"是来自 IBM Research 的一篇论文的标题(PDF 格式)。
* JaViz ,这篇出自 IBM Systems Journal的文章介绍了这个用于 Java 的客户/服务器评测工具。
* 用于AIX系统的 Performance Management Guide,内容包含评测和其他性能监测工具,以及在性能管理上存在的问题。
* Dynamic Probes是一种普及的调试工具,用于收集难于得到的诊断信息。
* Linux Kernel Performance 项目的目标是通过基准测试和分析来改善 Linux 的性能,重点强调服务器环境中的 SMP 可伸缩性。
* 如果所有改善应用程序性能的尝试都失败了,那就说明应该升级硬件了。您可以在 Linux for eServer 页面上获得更多有关在IBM系统上运行 Linux 的信息,在 Speed-start your Linux app Software Evaluation Kit 或 iSeries and pSeries download center找到用于 xSeries(基于 Intel 的处理器)的 Linux 软件下载。
* 在 developerWorks 的 Linux 专区可以找到 关于 Linux 的更多文章。
lfree
发表于:2008.05.13 08:34
::分类:
(
linux
)
::阅读:(88次)
::
评论
(0)
===========================================================
samba不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接
===========================================================
最近在配置samba,windows连接的时候出现如下问题:
samba
不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接,
google查询后,找到解决方法:
如下:
net use * /del /y
实际上我估计我自己重新启动windows就OK了。因为在配置的过程中改来改去。
加上linux中我使用selinux安全机制,引入了许多麻烦。
http://blog.chinaunix.net/u/19637/showart_491257.html
查看全文
lfree
发表于:2008.04.29 15:37
::分类:
(
linux
)
::阅读:(277次)
::
评论
(0)
===========================================================
zt:Linux cpio initrd操作
===========================================================
今天需要修改initrd.img 文件,才发现rhel已经修改文件格式,
采用gz+cpio的模式,不是原来的gz+ext2文件系统,google
发现如下链接,记录下来:
http://blog.opensource.org.cn/hdcola/2007/09/linux-cpio-initrd.html
在OpenSUSE中使用了2.6 kernel所支持的cpio initrd。我们需要手工更新这个initrd时需要一系列的操作。这里记录下来:
解开一个cpio initrd:
> mkdir work
> cp /boot/initrd.img ./initrd.img.gz
> gunzip -c initrd.img.gz
> cpio -i --make-directories < initrd.img
制作一个cpio initrd
> find . | cpio -c -o > ../initrd.img
> gzip ../initrd.img
lfree
发表于:2008.04.14 16:05
::分类:
(
linux
)
::阅读:(199次)
::
评论
(0)
===========================================================
zt:通过vnc 安装linux
===========================================================
http://www.ixpub.net/thread-747567-1-1.html
在机器启动的过程中按F2,之后输入:
linux askmethod vnc vncpassword=password
回车启动,之后显示配置语言,键盘,之后配置网络,配置完网络后出现:
starting vnc...
the vnc server is now running.
please connect to IP:1 to begin the install...
press <enter> for a shell
starting graphical installation
XKB extension not present on :1
然后在另外一个机器上启动vncviewer,登录后就可以看到安装界面了。接着安装即可。
lfree
发表于:2008.04.08 08:54
::分类:
(
linux
)
::阅读:(75次)
::
评论
(0)
===========================================================
使用内存的百分比
===========================================================
http://www.ixpub.net/viewthread.php?tid=737887&page=1#pid6185003
# free | sed -n 2p | awk '{print "used="$3/$2*100"%","free="$4/$2*100"%"}'
used=28.6574% free=71.3426%
lfree
发表于:2008.03.05 11:27
::分类:
(
linux
)
::阅读:(815次)
::
评论
(0)
===========================================================
zt:Grub引导的Linux系统下使用MaxDos V6.0
===========================================================
http://www.chinalinuxpub.com/read.php?wid=2214
教你如何在Linux下使用MaxDos V6.0
1.首先在硬盘内安装最新MaxDos提取C:MaxDos文件夹的内容。
2.把MaxDos文件夹里的内容传到Linux内的 /boot/maxdos/文件目录内。
注意大小写,Linux对大小写的要求是非常严格的。
3.在Linux中/boot/grub/menu.lst文件内添加如下代码。
title Maxdos6.0
此命令为标题,Linux的Grub不支持中文,所以不要写中文。
root (hd0,1)
此为第1快硬盘的第2个分区。请大家根据实际情况进行修改。
password ****
*号代表你要设置的密码,由于Linux本身就非常安全,所以我把原命令中的
-Md5去掉了。
fontfile /boot/maxdos/Maxft.gz
kernel /boot/maxdos/Memdisk.gz c=555 h=2 s=18 floppy
initrd /boot/maxdos/Maxs.sys c=555 h=2 s=18 floppy
以上3行是启动Max必须的,不解释了。
如果你想把启动界面也换成MaxDos的界面的话请继续看
4.修改menu.lst文件内容中包含splashimage的行,内容改为如下。
splashimage=(hd0,1)/boot/maxdos/Maxtf.gz
"#"号为注释,调整时,可以利用#号来调试。
按照以上操作就可以完成了,恭喜你已经安装成功。
做网维的朋友可以利用Linux的gurb来实现引导,抛弃功能柔弱的Win引导。
lfree
发表于:2008.01.17 09:42
::分类:
(
linux
)
::阅读:(100次)
::
评论
(0)
===========================================================
ZT:使用lsof恢复误删除的文件
===========================================================
先介绍一些文件的基本概念, 文件实际上是一个指向inode的链接, inode链接包含了文件的所有属性, 比如权限和所有者, 数据块地址(文件存储在磁盘的这些数据块中). 当你删除(rm)一个文件, 实际删除了指向inode的链接, 并没有删除inode的内容. 进程可能还在使用. 只有当inode的所有链接完全移去, 然后这些数据块将可以写入新的数据.
proc文件系统可以协助我们恢复数据. 每一个系统上的进程在/proc都有一个目录和自己的名字: 里面包含了一个fd(文件描述符)子目录(进程需要打开文件的所有链接). 如果从文件系统中删除一个文件, 此处还有一个inode的引用:
/proc/进程号/fd/文件描述符
接下来, 你需要知道打开文件的进程号(pid)和文件描述符(fd). 这些都可以通过lsof工具方便获得, lsof的意思是”list open files, 列出(进程)打开的文件”. 然后你将可以从/proc拷贝出需要恢复的数据.
下面介绍在Fedora Core 5系统上使用lsof恢复误删的文件:
环境
主机: 使用微睦独立主机, 一台基于vmware的虚拟独立主机.
系统: Fedora Core 5
内核: 2.6.16-1.2122_FC5
lsof版本:
[zhaoke@fedora5 ~]$ /usr/sbin/lsof -v
lsof version information:
revision: 4.77
预备工作:
如果你的系统没有安装lsof, 可以从作者网站或pbone获得.
恢复过程:
首先, 我们需要创建一个文本文件, 删除然后恢复:
[zhaoke@fedora5 ~]$ man lsof | col -b > myfile
然后看一下文件内容:
[zhaoke@fedora5 ~]$ less myfile
你可以看到lsof所有的文本帮助信息.
现在按Ctrl-Z退出less命令, 然后在shell提示符下查看文件属性信息:
[zhaoke@fedora5 ~]$ stat myfile
File: `myfile’
Size: 116549 Blocks: 240 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 492686 Links: 1
Access: (0664/-rw-rw-r–) Uid: ( 505/ zhaoke) Gid: ( 505/ zhaoke)
Access: 2006-11-20 12:59:38.000000000 +0800
Modify: 2006-11-20 12:59:34.000000000 +0800
Change: 2006-11-20 12:59:34.000000000 +0800
没问题, 继续下面工作:
[zhaoke@fedora5 ~]$ rm myfile
[zhaoke@fedora5 ~]$ ls -l myfile
ls: myfile: No such file or directory
[zhaoke@fedora5 ~]$ stat myfile
stat: cannot stat `myfile’: No such file or directory
myfile文件删除了.
这时候, 你不要终止仍在使用文件的进程. 因为一旦终止, 文件将很难恢复.
现在我们开始找回数据, 首先用lsof查看一下:
[zhaoke@fedora5 ~]$ lsof | grep myfile
less 9104 zhaoke 4r REG 253,0 116549 492686 /home/zhaoke/myfile (deleted)
第一个纵行是进程的名称(命令名), 第二纵行是进程号(PID), 第四纵行是文件描述符(r意思是普通文件), 现在你知道9104进程仍有打开文件, 文件描述符是4. 那我们开始从/proc里面拷贝出数据. 你可能会考虑使用cp -a, 但实际上没有作用, 你将拷贝的是一个指向被删除文件的符号链接:
[zhaoke@fedora5 ~]$ ls -l /proc/9104/fd/4
lr-x—— 1 zhaoke zhaoke 64 Nov 20 13:00 /proc/9104/fd/4 -> /home/zhaoke/myfile (deleted)
[zhaoke@fedora5 ~]$ cp -a /proc/9104/fd/4 myfile.wrong
[zhaoke@fedora5 ~]$ ls -l myfile.wrong
lrwxrwxrwx 1 zhaoke zhaoke 29 Nov 20 13:02 myfile.wrong -> /home/zhaoke/myfile (deleted)
[zhaoke@fedora5 ~]$ file myfile.wrong
myfile.wrong: broken symbolic link to `/home/zhaoke/myfile (deleted)’
[zhaoke@fedora5 ~]$ file /proc/9104/fd/4
/proc/9104/fd/4: broken symbolic link to `/home/zhaoke/myfile (deleted)’
然后, 使用cp拷贝出数据:
[zhaoke@fedora5 ~]$ cp /proc/9104/fd/4 myfile.saved
最后, 确认一下文件:
[zhaoke@fedora5 ~]$ ls -l myfile.saved
-rw-rw-r– 1 zhaoke zhaoke 116549 Nov 20 13:03 myfile.saved
[zhaoke@fedora5 ~]$ man lsof | col -b > myfile.new
[zhaoke@fedora5 ~]$ cmp myfile.saved myfile.new
lfree
发表于:2007.12.04 14:28
::分类:
(
linux
)
::阅读:(110次)
::
评论
(0)
===========================================================
zt:Linux系统攻略 用UUID在Fstab中挂载分区
===========================================================
http://www.linuxeden.com/html/sysadmin/20071018/36313.html
Fstab 文件大家都很熟悉,Linux 在启动的时候通过 fstab 中的信息挂载各个分区,一个典型的分区条目就像这样:
/dev/sdb5 /mnt/usb vfat utf8,umask=0 0 0
/dev/sda4 为需要挂载的分区,sda4 是 Linux 检测硬盘时按顺序给分区的命名,一般来讲,这个名称并不会变化,但是如果你有多块硬盘,硬盘在电脑中的顺序变化的时候,相同的名称可能代表着不同的硬盘分区,如果你是从 USB 设备启动,与其他 USB 设备的插入顺序也会导致分区识别的困难。
这个时候 UUID 就派上用场了,UUID 全称是 Universally Unique Identifier,也就是说,每个分区有一个唯一的 UUID 值,这样就不会发生分区识别混乱的问题了。
在 fstab 中用 UUID 挂载分区,看起来向这样:
UUID=1234-5678 /mnt/usb vfat utf8,umask=0 0 0
在 UUID= 后面填入分区相应的 UUID 值,就可以正确挂载分区了。
那么,我们如何知道一个分区的 UUID 呢?
有 3 种方法:
1. 通过浏览 /dev/disk/by-uuid/ 下的设备文件信息。
# ls -l /dev/disk/by-uuid/
------
lrwxrwxrwx 1 root root 10 10-13 09:14 0909-090B -> ../../sdb5
lrwxrwxrwx 1 root root 10 10-13 09:13 7c627a81-7a6b-4806-987b-b5a8a0a93645 -> ../../sda4
.....
2. 通过 vol_id 命令。
# vol_id /dev/sdb5
ID_FS_USAGE=filesystem
ID_FS_TYPE=vfat
ID_FS_VERSION=FAT32
ID_FS_UUID=0909-090B
ID_FS_UUID_ENC=0909-090B
ID_FS_LABEL=SWAP
ID_FS_LABEL_ENC=SWAP
ID_FS_LABEL_SAFE=SWAP
3. 通过 blkid 命令
# blkid /dev/sdb5
/dev/sdb5: LABEL="SWAP" UUID="0909-090B" TYPE="vfat"
通过这三种方法都可以获得分区的 UUID,UUID 依据分区不同,长度和格式都不相同。
lfree
发表于:2007.10.19 08:48
::分类:
(
linux
)
::阅读:(133次)
::
评论
(0)
===========================================================
zt:用Syslog 记录UNIX和Windows日志的方法
===========================================================
http://www.chinalinuxpub.com/read.php?wid=1720
在比较大规模的网络应用或者对安全有一定要求的应用中,通常需要对系统的日志进行记录分类并审核,默认情况下,每个系统会在本地硬盘上记录自己的日志,这样虽然也能有日志记录,但是有很多缺点:首先是管理不便,当服务器数量比较多的时候,登陆每台服务器去管理分析日志会十分不便,其次是安全问题,一旦有入侵者登陆系统,他可以轻松的删除所有日志,系统安全分析人员不能得到任何入侵信息。因此,在网络中安排一台专用的日志服务器来记录系统日志是一个比较理想的方案。本文以FreeBSD 下的syslog为例,介绍如何利用freebsd的syslogd来记录来自UNIX和windows的log信息。
一、记录UNIX类主机的log信息
首先需要对Freebsd的syslog进行配置,使它允许接收来自其他服务器的log信息。
在/etc/rc.conf中加入:
syslogd_flags="-4 -a 0/0:*"
说明:freebsd的syslogd参数设置放在/etc/rc.conf文件的syslogd_flags变量中
Freebsd对syslogd的默认设置参数是syslogd_flags="-s",(可以在/etc/defaults/rc.conf中看到)
默认的参数-s表示打开UDP端口监听,但是只监听本机的UDP端口,拒绝接收来自其他主机的log信息。如果是两个ss,即-ss,表示不打开任何UDP端口,只在本机用/dev/log设备来记录log.
修改后的参数说明:
-4 只监听IPv4端口,如果你的网络是IPv6协议,可以换成-6
-a 0/0:* 接受来自所有网段所有端口发送过来的log信息。
如果只希望syslogd接收来自某特定网段的log信息可以这样写:-a 192.168.1.0/24:*
-a 192.168.1.0/24:514或者-a 192.168.1.0/24表示仅接收来自该网段514端口的log信息,这也是freebsd的syslogd进程默认设置,也就是说freebsd 在接收来自其他主机的log信息的时候会判断对方发送信息的端口,如果对方不是用514端口发送的信息,那么freebsd的syslogd会拒绝接收信息。即,在默认情况下必须:远程IP的514端口 发送到本地IP的514,
在参数中加入*,表示允许接收来自任何端口的log信息。这点,在记录UNIX类主机信息的时候感觉不到加不加有什么区别,因为UNIX类主机都是用 514端口发送和接收syslog信息的。但是在接收windows信息的时候就非常重要了。因为windows的syslog软件不用514端口发送信息,这会让默认配置的syslogd拒绝接收信息。笔者同样在linux系统下用 linux的syslogd来配置log服务器,发现linux下的syslogd就没有那么多限制,只要给syslogd加上-r参数,就可以接收来自任何主机任何端口的syslog信息,在这方面来说freebsd的默认配置安全性要比linux稍微高一点。
修改好syslogd参数后,我们需要修改一下/etc/syslog.conf文件,指定log信息的存放路径,
比如你要记录其他系统的远程登陆登出信息并指定日志存放路径,则需要修改以下行:
authpriv.* /var/log/testlog
这表示把系统的登入登出日志(包括本机系统登陆登出日志)存放到/var/log/testlog文件中。
当然,这是最简陋的做法,因为这样会把所有服务器的登陆登出信息存放在一个文件中,察看的时候很不方便,通常的做法是用一个脚本,对接收到的信息进行简单的分拣,再发送到不同的文件。
如下设置:
authpriv.* |/var/log/filter_log.sh
在记录目标前面加上“|”表示把接收到的信息交给后面的程序处理,这个程序可以是一个专门的日志处理软件,也可以是一个自己编写的小的脚本,举例:
#!/bin/sh
read stuff
SERVER=`echo $stuff |awk ‘{print $4}’`
echo $stuff >> /var/log/login_log/$SERVER.log
这个简单的脚本以IP作为分类依据,先用read读取log信息,用awk取出第四字段(即IP地址或者主机名所在的字段),以该字段为文件名存放该主机的日志。
这样一来,来自192.168.1.1的log会记录到 192.168.1.1.log文件中,来自192.168.1.2的log会被记录在192.168.1.2.log文件中,分析和归类就比较方便了。当然这是一个最简单的例子,读者可以根据自己的需求写出更好的脚本,甚至把log信息分类后插入数据库中,这样日志的管理和分析就更方便了。
最后重启一下syslogd服务,让配置生效:
/etc/rc.d/syslogd restart
OK,服务端的配置完成。现在配置一下客户端:
这里所说的客户端,就是发送自己的日志到远程日志服务器上的主机。
修改/etc/syslog.conf文件:
我们举例你只要记录系统登入登出日志到远程日志服务器上,那么只需要修改以下一行:
authpriv.* @192.168.10.100
这里的192.168.10.100就是log服务器的IP,“@”符号表示发送到远程主机。
OK,重启一下syslog服务:
Linux: /etc/init.d/syslogd restart
BSD: /etc/rc.d/syslogd restart
用logger测试一下是否配置成功:
logger –p authpriv.notice “Hello,this is a test”
到log服务器上去看看,“Hello,this is a test”应该已经被记录下了。最后在客户机上登陆登出几次,看看真实的authpriv信息是否也被成功的记录下。
二、Windows日志的记录
对于UNIX类主机之间记录日志,由于协议、软件和日志信息格式等都大同小异,因此实现起来比较简单,但是windows的系统日志格式不同,日志记录软件,方式等都不同。因此,我们需要第三方的软件来将windows的日志转换成 syslog类型的日志后,转发给syslog服务器。
介绍第三方软件evtsys (全称是evntlog to syslog)
文件才几十K大小,非常小巧,解压后是两个文件evtsys.dll和evtsys.exe
把这两个文件拷贝到 c:windowssystem32目录下。
打开Windows命令提示符(开始->运行 输入CMD)
C:>evtsys –i –h 192.168.10.100
-i 表示安装成系统服务
-h 指定log服务器的IP地址
如果要卸载evtsys,则:
net stop evtsys
evtsys -u
启动该服务:
C:>net start evtsys
打开windows组策略编辑器 (开始->运行 输入 gpedit.msc)
在windows设置-> 安全设置 -> 本地策略->审核策略中,打开你需要记录的windows日志。evtsys会实时的判断是否有新的windows日志产生,然后把新产生的日志转换成syslogd可识别的格式,通过UDP 3072端口发送给syslogd服务器。
OK,所有的配置windows端配置完成,现在配置一下syslogd的配置文件.
参数的配置和上面相同,
所不同的是evtsys是以daemon设备的方式发送给 syslogd log信息的。
因此,需要在/etc/syslog.conf中加入:
daemon.notice |/var/log/filter_log.sh
关于syslog 记录设备和记录等级方面的知识可以参考syslog文档。
OK,所有配置设置完成。
Linux 、BSD和windows上的系统日志都可以统一记录到一台日志服务器上轻松管理了。
lfree
发表于:2007.10.12 08:32
::分类:
(
linux
)
::阅读:(86次)
::
评论
(0)
===========================================================
ZT:Vista不支持LinuxSamba Server的解决办法
===========================================================
http://www.linuxeden.com/html/solution/20071008/35602.html
原来Windows Vista强制使用NTLMv2认证,而 Samba Server 只支持NTLM
1. 单击“开始”,指向“程序”,然后单击“管理工具”。
2. 在“本地安全设置”(或者直接开始 运行 “secpol.msc”)下,展开“本地策略(Local Policies)”。
3. 单击“安全选项(Security Options)”。
4. 双击“网络安全:LAN Manager 身份验证级别(Network Security: LAN Manager authentication level)”,然后单击列表中:发送LM和NTLMv2,如果已协商,则使用NTLMv2协议(LM and NTLM – use NTLMV2 session security if negotiated)
搞定。
lfree
发表于:2007.10.08 15:31
::分类:
(
linux
)
::阅读:(112次)
::
评论
(0)
===========================================================
使用mrtg监测华为8508 的CPU使用率
===========================================================
关键字: 华为 8508 6503 CPU MRTG
想检测华为8508的CPU使用率,上网检索发现一些链接:
http://www.ciscosky.org/dispbbs.asp?boardID=9&ID=23&page=11
http://cnhawk386.blog.51cto.com/101260/31886
http://blog.chinaunix.net/u/19664/showart_175166.html
正好我手头有一个Quidview的试用版,安装后获得华为MIB,下载
http://www.wtcs.org/snmp4tpc/FILES/Tools/SNMP/getif/GETIF-MIBS.ZIP
http://www.wtcs.org/snmp4tpc/FILES/Tools/SNMP/getif/getif-2.3.1.zip
安装后,将华为MIB拷贝到对应的MIB文件.
安装getif如下:
1、解压GETIF2.3后进行安装,按照默认设置安装即可。
2、删除GETIF2.3安装目录中MIBs子目录里的.index文件。
3、解压GETIF-MIBS.ZIP到上步中.index文件所在的目录。
4、运行GetIf2.3
运行getif,在MBROWSER上检索:
在.1.3.6.1.4.1.2011(注意前面有一个点),可以发现华为一些自己的信息应该在这里.
我是猜出来的,结合上面的几个链接确定,可以不断的执行disp cpu确定:
SLOT 3:1.3.6.1.4.1.2011.6.1.1.1.3.3
其余类推.
其他华为的产品也很容易确定,例如华为6503:
slot 0 :1.3.6.1.4.1.2011.6.1.1.1.3.0
华为5626: 1.3.6.1.4.1.2011.6.1.1.1.3.65536
在linux下安装mrtg,建立在/etc/mrtg/cpu.cfg 文件,写入如下:
WorkDir: /var/www/mrtg/
icondir: /mrtg
Language:gb2312
directory[_]: cpu
.......)
Target[cpu_254_8]:1.3.6.1.4.1.2011.6.1.1.1.3.8&1.3.6.1.4.1.2011.6.1.1.1.4.8:XXXX@192.168.1.254
MaxBytes[cpu_254_8]: 100
Title[cpu_254_8]: S8508 HUAWEI CPU_Utilization
PageTop[cpu_254_8]: <H1>华为S8508 SLOT 8 双绞线模块LSB1GT24B0 CPU_Utilization</H1>
Unscaled[cpu_254_8]: ymwd
ShortLegend[cpu_254_8]: %
YSize[cpu_254_8]: 100
YLegend[cpu_254_8]: CPU Utilization
Legend1[cpu_254_8]: CPU Utilization in % (Load)
Legend2[cpu_254_8]: CPU Utilization in % (Load)
Legend3[cpu_254_8]:
Legend4[cpu_254_8]:
LegendI[cpu_254_8]: Usage
LegendO[cpu_254_8]: Usage
Options[cpu_254_8]: growright,nopercent,gauge
......
如果要加入多个检测,要修改cpu_254_8,以及target的值等.
在/etc/cron.d/mrtg
*/2 * * * * root /usr/bin/mrtg /etc/mrtg/cpu.cfg --lock-file /var/lock/mrtg/cpu_l --confcache-file /var/lib/mrtg/cpu.ok
开始会报错,要执行上面的命令多次.
建立index.html文件,注解cpu.cfg文件的directory[_]: cpu.
执行:
indexmaker --title="CPU" --output=/var/www/mrtg/cpu/index.html /etc/mrtg/cpu.cfg
然后修改cpu.cfg文件,取消注解.
建立apache的服务,这个步骤很简单.
执行http://ip/mrtg/cpu
就可以了.
lfree
发表于:2007.09.10 09:55
::分类:
(
linux
)
::阅读:(400次)
::
评论
(0)
===========================================================
Vimperator插件像vim一样控制firefox
===========================================================
昨天帮别人安装firefox,接着安装插件,无意中发现一个很有意思的插件Vimperator。它能够使用类似vim的命令操控firefox。
下载完插件后,重新启动firefox,我在windows下使用。开始真的有点找不到北。原来缺省设置隐藏了firefox的菜单以及工具条,好在第1次启动,又一个help。直接输入:set guioptions=mT,打开菜单以及工具条。遇到不会的命令可以按F1寻求帮助。卸载按:addons.
我的测试存在不是很完整,命令也不是很熟悉。
在访问mail.163.com的时候,如果点击退格键,会有一些问题。
lfree
发表于:2007.09.04 15:26
::分类:
(
linux
)
::阅读:(211次)
::
评论
(0)
===========================================================
如何在linux添加服务
===========================================================
最近要写一个oracle启动服务,遇到一个问题,特记录如下:编写好脚本后,测试可以正常启动与关闭,加入服务的时候出现如下提示:
chkconfig --add oracle
service oracle does not support chkconfig
google发现如下链接:
http://lists.suse.com/archives/suse-oracle/2001-Jun/0143.html
Make sure the rc script has a chkconfig-conforming header.
Citing the manual page:
RUNLEVEL FILES
Each service which should be manageable by chkconfig needs two or more
commented lines added to its init.d script. The first line tells
chkconfig what runlevels the service should be started in by default,
as well as the start and stop priority levels. If the service should
not, by default, be started in any runlevels, a - should be used in place
of the runlevels list. The second line contains a description for the
service, and may be extended across multiple lines with backslash
continuation.
For example, random.init has these three lines:
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for
# higher quality random number generation.
This says that the random script should be started in levels 2, 3, 4, and 5,
that its start priority should be 20, and that its stop priority
should be 80. You should be able to figure out what the description says;
the causes the line to be continued. The extra space in front of
the line is ignored.
仔细检查我写的oracle脚本,发现description 我少写一个冒号,加入后,在执行
chkconfig --add oracle
一切正常。
lfree
发表于:2007.08.14 16:53
::分类:
(
linux
)
::阅读:(470次)
::
评论
(0)
===========================================================
SSH相互认证的问题
===========================================================
最近别人遇到一个ssh相互认证的问题,就是每次执行ssh remote_ip date,都要输入password。
没有办法我只好从头开始还是不行。删除原来建立的文件,按照如下脚本重新建立相互认证
http://lfree.itpub.net/post/4950/366227
发现还是不行,有一边可以通过认证,另外一边无论如何测试就是要输入口令。
逐步检查发现,原来远程登陆的机器/home/oracle 的权限为770 ,而本机的/home/oracle权限为700。
修改/home/oracle权限为700后正常。
实际上要相互认证,ssh要求的权限是很高的,如果修改authorized_keys的权限为620,对方的机器也
不能通过认证。需要修改原来的authorized_keys权限为644,正常。
chmod 644 ~/.ssh/authorized_keys
lfree
发表于:2007.08.14 15:35
::分类:
(
linux
)
::阅读:(97次)
::
评论
(0)
===========================================================
快速建立ssh相互认证
===========================================================
建立oracle的rac经常要建立ssh相互认证,每次都是使用copy 和 paste来建立,很容易错误,自己写了一个简单的脚本,很容易完成这个工作,如下:
mkdir -p ~/.ssh
chmod 755 ~/.ssh
/usr/bin/ssh-keygen -t rsa
/usr/bin/ssh-keygen -t dsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
echo -n "wait another host $1 run finish, press twice key continue !!!"
read a
read a
ssh $1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh $1 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
chmod 644 ~/.ssh/authorized_keys
# 命名脚本 为可执行
chmod 755 sshx
./sshx remote_ip
就可以了!
lfree
发表于:2007.08.13 10:21
::分类:
(
linux
)
::阅读:(168次)
::
评论
(0)
===========================================================
ZT:网络安装LINUX服务器设置
===========================================================
lfree
发表于:2007.08.08 17:58
::分类:
(
linux
)
::阅读:(125次)
::
评论
(0)
===========================================================
linux:ora-27054:nfs file system error
===========================================================
http://nmgzw.itpub.net/index.php
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 07/31/2007 09:55:18
ORA-19504: failed to create file "/bak/bak_629373314_15_1"
ORA-27054: NFS file system where the file is created or resides is not mounted with correct options
Additional information: 3
正确的选项为: -o rw,bg,hard,intr,proto=tcp,vers=3,rsize=32768,wsize=32768,timeo=600
lfree
发表于:2007.07.31 15:30
::分类:
(
linux
)
::阅读:(221次)
::
评论
(0)
===========================================================
ZT:通过PXE远程安装Linux系统全程解析
===========================================================
http://www.chinalinuxpub.com/read.php?wid=1633
在单台PC或者是服务器上安装LINUX是一件很轻松的事情。但是,要在多台PC或者是服务器上安装LINUX,如果再使用传统的光盘或者是镜像文件来进行逐个安装就显得比较笨拙,会消耗很多时间和精力。最近我用PXE进行了8台服务器的安装,现将整个安装过程详细介绍如下,希望能对将要进行此类安装的朋友有所帮助。
注意:本篇文章中#后面所跟内容为实际操作时输入的相关命令。
一、安装前的准备
将要安装的系统光盘或镜像文件:Red Hat Enterprise Linux AS (其它版本的LINUX也可以)
硬件需求:将要安装系统的计算机需配置了带PXE功能的网卡(比较简单的方法就是看计算机BIOS中的启动选项里是否有通过LAN或者PXE启动这一项)
准备好一台已经安装了Red Hat Enterprise Linux As 的计算机(我们给这台计算机取个名字叫服务器A)。这台计算机要装有dhcp包和tftp包。如果没有则需要进行安装:
#rpm -ivh tftp-server-0.39-0.EL3.1.c0.i386.rpm
#rpm -ivh dhcp-3.0.1-10_EL3.i386.rpm
关闭服务器A上的防火墙
#iptables –F
二、准备NFS服务器(在服务器A上进行)
1、复制文件
(1)创建一个含有Red Hat Enterprise Linux安装文件的目录。我把这个目录命名为/mnt/inst
#mkdir /mnt/inst
(2)拷贝第一张安装光盘上的相关内容
插入第一张安装光盘到光驱
#mount /dev/cdrom /mnt/cdrom
#cp -ar /mnt/cdrom/RedHat /mnt/inst
#cp /mnt/cdrom/.discinfo /mnt/inst
#umount /dev/cdrom
取出第一张光盘,放入第二张
#mount /dev/cdrom /mnt/cdrom
#cp –ar /mnt/cdrom/RedHat /mnt/inst
#umount /dev/cdrom
取出第二张光盘,放入第三张
#mount /dev/cdrom /mnt/cdrom
#cp –ar /mnt/cdrom/RedHat /mnt/inst
#umount /dev/cdrom
取出第三张光盘,放入第四张
#mount /dev/cdrom /mnt/cdrom
#cp –ar /mnt/cdrom/RedHat /mnt/inst
#umount /dev/cdrom
2、配置NFS服务
(1) #vi /etc/exports
添加一行:
========+==========+===========
/mnt/inst *(ro,sync)
========+==========+===========
保存退出。
(2)导出这个/mnt/inst这个共享目录
#exportfs –a
(3)启动NFS服务
#service nfs restart
三、配置dhcp服务器和tftp服务器
1、配置dhcp服务器
#vi /etc/dhcpd.conf
=============+==========+===========
ddns-update-style interim;
ignore client-updates;
default-lease-time 21600;
max-lease-time 43200;
authourtative;
subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
range 192.168.0.18 192.168.0.78;
default-lease-time 21600;
max-lease-time 43200;
filename "/pxelinux.0";
}
=============+==========+===========
保存退出。
2、配置tftp服务器
#vi /etc/xinetd.d/tftp
=============+==========+===========
service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -u nobody -s /tftpboot
per_source = 11
cps = 100 2
flags = IPv4
}
=============+==========+===========
保存退出。
3、启动dhcp服务和tftp服务
#service dhcpd restart
#chkconfig dhcpd on
#/sbin/chkconfig --level 345 xinetd on
#/sbin/chkconfig --level 345 tftp on
该命令配置 tftp 和 xinetd 服务被立即启用,还把配置它们在运行级别3、4和5的引导期间启动。
四、配置支持PXE
# mkdir /tftpboot
# cp /usr/lib/syslinux/pxelinux.0 /tftpboot
把LINUX第一张安装光盘上/image/pxeboot/initr.img和vmlinux 以及isolinux/*.msg考到/tftpboot目录下
# cd /tftpboot
# mkdir pxelinux.cfg
#cd pxelinux.cfg
# vi default
=============+==========+===========
default
prompt 1
timeout 30
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
F7 snake.msg
label local
localboot 0
label linux
kernel vmlinuz
append initrd=initrd.img devfs=nomount ramdisk_size=9216
label text
kernel vmlinuz
append initrd=initrd.img text devfs=nomount ramdisk_size=9216
label expert
kernel vmlinuz
append expert initrd=initrd.img devfs=nomount ramdisk_size=9216
label ks
kernel vmlinuz
append ks initrd=initrd.img devfs=nomount ramdisk_size=9216
label nofb
kernel vmlinuz
append initrd=initrd.img devfs=nomount nofb ramdisk_size=9216
label lowres
kernel vmlinuz
append initrd=initrd.img lowres devfs=nomount ramdisk_size=9216
kernel vmlinuz
=============+==========+===========
五、开始安装
用集线器或交换机将8台服务器连接起来。启动一台服务器,进入BIOS,设置通过LAN或PXE启动机器即可。其余机器也按此操作。需要注意的是,当安装完成后重启机器时要把BIOS里的启动选项改为硬盘启动。
lfree
发表于:2007.07.20 16:05
::分类:
(
linux
)
::阅读:(132次)
::
评论
(0)
===========================================================
man 无法使用的问题
===========================================================
今天在linux想看一下一个命令的如何使用,打入man xxx,发现马上退出。接着使用man来看其他命令结果也一样,使用find 检查/usr/share/man 是否存在cat命令,发现存在。
仔细检查发现/tmp空间满了,删除一些垃圾文件后一切正常。
lfree
发表于:2007.07.20 16:04
::分类:
(
linux
)
::阅读:(159次)
::
评论
(0)
===========================================================
ZT:用Windows登录Linux服务器远程桌面的方法
===========================================================
http://www.chinalinuxpub.com/read.php?wid=1635
实验环境:Redflag Linux 数据服务器4.1
一、VNC配置
1、首先要安装vnc-server,将vnc-server-4.0-0.beta4.1.1.i386.rpm保存在DCserver4.1系统的 /tmp目录中,然后安装。
rpm -ivh /tmp/vnc-server-4.0-0.beta4.1.1.i386.rpm
安装完成后,生成配置文件是/etc/sysconfig/vncservers,其实里面需要配置一行:
VNCSERVERS="1:root"
1表示VNC以桌面1运行,可以修改配置如下:
VNCSERVERS="1:root"
可以启动超级用户的桌面。
还需要在/root目录下建立.vnc目录,然后在里面创建一个密码文件passwd,空的就可以,VNC服务第一次启动时会要求设置密码,注意,这个密 码是VNC连接时的密码,与系统密码可以不同。
mkdir /root/.vnc
touch /root/.vnc/passwd
/etc/init.d/vncserver start
再修改/root/.vnc目录下xstartup文件,将最后一行
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
替换成
startkde
这样就可以启动KDE了。
2、安装客户端(windows客户端我们仅以个人名义发送,红旗公司不负责!)
vnc-3.3.7-x86_win32.exe
桌面上会生成一个VNC图标,双击它,在出现登录提示的时候指定服务器的ip就可以了,如:
172.16.82.18:1
后面的1就对应用root用户登录。
二、XDM服务(配置较繁琐,支持widnows下的x-win32或者Xmanager客户端)
1、配置服务器
(1)配置xfs(“X Font Server”,可以由由一台服务器来统一提供字体,远程图形客户端程序就不需要单独安装所有的字体了。)
xfs的配置文件是/etc/X11/fs/config,内容如下:
========================================
#
# Default font server configuration file for Mandrake Linux workstation
#
# allow a max of 4 clients to connect to this font server
client-limit = 10
# when a font server reaches its limit, start up a new one
clone-self = off
# alternate font servers for clients to use
#alternate-servers = foo:7101,bar:7102
# where to look for fonts
# Some of these are commented out, i.e. the TrueType and Type1
# directories in /usr/share, because they arent forced to be
# installed alongside X.
#
catalogue = /usr/X11R6/lib/X11/fonts/misc:unscaled,
/usr/X11R6/lib/X11/fonts/75dpi:unscaled,
/usr/X11R6/lib/X11/fonts/100dpi:unscaled,
/usr/X11R6/lib/X11/fonts/misc:unscaled,
/usr/X11R6/lib/X11/fonts/Type1,
/usr/X11R6/lib/X11/fonts/Speedo,
/usr/X11R6/lib/X11/fonts/mdk:unscaled,
/usr/share/fonts/default/Type1,
/usr/share/fonts/ttf/big5,
/usr/share/fonts/ttf/gb2312,
/usr/share/fonts/ttf/decoratives,
/usr/share/fonts/ttf/western
# in 12 points, decipoints
default-point-size = 120
# 100 x 100 and 75 x 75
default-resolutions = 75,75,100,1
# how to log errors
use-syslog = on
# don't listen to TCP ports by default for security reasons
#no-listen = tcp
========================================
原文件的内容可以按照实际修改,也可以基本不做修改,但是注意,一定要把最后一行“no-listen = tcp”注释掉,否则xfs服务就不会监听TCP端口了,xfs默认的端口号的7100,可以在/etc/services文件中看到。
使用下面的命令来启动xfs:
/etc/init.d/xfs start
xfs启动成功后,可以使用命令
netstat -ln
来确认7100端口已绑定:
tcp 0 0 0.0.0.0:7100 0.0.0.0:* LISTEN
(2)配置xdm(“X Display Manager”,由它来启动X Window服务器,并管理图形客户端程序的登录、会话、启动窗口管理器KDE等。KDE的xdm叫kdm,目前红旗的产品使用的Xwindows都是 KDE)
xdm的配置文件都放在/etc/X11/xdm目录下。
首先修改xdm-config文件,找到一行:DisplayManager.requestPort: 0
注释这行:!DisplayManager.requestPort: 0
使xdm能够监听XDMCP连接。
lfree
发表于:2007.07.20 15:57
::分类:
(
linux
)
::阅读:(89次)
::
评论
(0)
===========================================================
linux下简单的传送与接受文件
===========================================================
建立两个小的shell程序:
#cat ss
#! /bin/bash
tar cvf - $* | nc -l -p 5555
#cat tt
#! /bin/bash
nc 192.168.$1 5555 | tar xvkf -
在A机器上执行:
ss <file> or <dir>
在B机器上执行:
tt 10.22
注意: B机器的IP我做了简写,前面192.168不需要输入。另外tar命令我加入v参数,如果不想显示可以关闭。tt命令中加入k参数,避免文件覆盖。
如果想压缩传送,可以在两边加z参数,如果传送目录中包含小文件,这样会更加快一些。当然要没有防火墙限制。
lfree
发表于:2007.07.18 16:52
::分类:
(
linux
)
::阅读:(186次)
::
评论
(0)
===========================================================
如何使用squid禁止下载.exe 文件
===========================================================
关键字: sqluid 禁止下载 .exe
前一阵,想通过squid代理实现禁止一些用户下载.exe 文件的功能,检索了一些网站,自己犯了一个小小的错误,记录下来:
查看全文
lfree
发表于:2007.05.02 10:56
::分类:
(
linux
)
::阅读:(407次)
::
评论
(0)
===========================================================
在线unix man page
===========================================================
关键字: unix man soalris
http://bama.ua.edu/cgi-bin/man-cgi
这个仅仅作为solaris的man在线man手册。
lfree
发表于:2007.04.28 08:20
::分类:
(
linux
)
::阅读:(266次)
::
评论
(0)
===========================================================
grep的问题
===========================================================
http://www.itpub.net/739188,1.html
itpub有人遇到grep的问题,可能是字符集的问题。我的测试在rhel4上出现,其他版本没有遇到。
# export LANG=zh_CN
# grep '[A-Z]om' aa
Anyway, Tom, I need your help. I'd like to make the test up
think you could help me? After work, about 7 PM,come to
# export LANG=en_US
# grep '[A-Z]om' aa
Anyway, Tom, I need your help. I'd like to make the test up
# export LANG=
# grep '[A-Z]om' aa
Anyway, Tom, I need your help. I'd like to make the test up
lfree
发表于:2007.03.19 17:03
::分类:
(
linux
)
::阅读:(141次)
::
评论
(0)
===========================================================
如何将man与info文档转换为文本方式
===========================================================
1.man文档,例子:
man cat | col -b > cat.txt
2. info grub -s -o grub.txt
lfree
发表于:2007.03.12 15:02
::分类:
(
linux
)
::阅读:(214次)
::
评论
(0)
===========================================================
Linux内核2.6.20增加虚拟化解决方案KVM
===========================================================
http://www.linuxeden.com/doc/25082.html
Linus Torvalds已经增加虚拟化环境KVM(基于Linux内核的虚构机)到Linux内核2.6.20中. 简单来说, 内核加载一个特别的模块后(KVM), 内核自身充当虚拟机管理程序(hypervisor). 该方法是在Intel推出VT(虚拟化技术)和AMD推出SVM(安全虚拟机)后宣布的. KVM旧内核补丁的描述中提到仅支持Intel的CPU, 现在最新补丁已经支持AMD处理器.
感谢KVM技术能够运行在当前的内核上, 无需反复提交补丁, 编译内核, 只需简单加载到运行的内核中. 虚拟机运行在没有修改的操作系统上, 这意味着虚拟机在主机上是一个简单进程, 虚拟机的运行跟主机内核是分开的. 与Xen比较起来, Xen是一个修改过的QEMU(QEMU用于支持虚拟机通常PC组件的模拟).
KVM, 大概在2个月前发布到网上, 然后很容易就赶上其它的虚拟化解决方案如Xen, OpenVZ和Vserver, 它们都基于其它的方法, 都在努力集成到linux内核之中. 比如, Xen在两年前就希望添加到内核中, 直到现在才添加到linux 2.6.20内核.
参考:
Virtualization solution KVM will be in the next version of Linux
更多:
虚拟化技术更多的网站资源
dir.iventor.org/Projects/Virtualization/
原文链接:http://blog.zhaoke.com/34.html
lfree
发表于:2006.12.18 16:51
::分类:
(
linux
)
::阅读:(185次)
::
评论
(0)
===========================================================
ZT:Linux BIOS赢来了它发展的最好时机
===========================================================
http://www.linuxeden.com/doc/25038.html
经过7年的努力,LinuxBIOS项目组现在已经为正式产品作好了准备,即将成为一项计算机业界的标准。虽然前途困难重重,包括缺少那些专利芯片制造商和OEM厂商的支持,但是来自LinuxBIOS的优势显示,未来的几个月里,在普通用户的电脑上采用LinuxBIOS指日可待。
LinuxBIOS项目的目的是为了提供一份可以替代驱动芯片中的专利固件软件,比如BIOS,目前的LinuxBIOS只包含相对较少的代码用来启动主板上的相应设备,然后进入LinuxBIOS驱动的核心,比如Etherboot等等。就像LinuxBIOS名字显示的一样,目前的工作专著于 Linux内核,但是同样的技术也可以用来支持安装有windows或者安装GRUB启动管理器的电脑。
LinuxBIOS项目起始于1999年,创始人是来自美国Los Alamos国家实验室的Ron Minnich,开始的时候该项目的主要关注对象是那些嵌入式系统和集群产品,然后该项目迅速将服务器和工作站纳入其中。根据Minnich的表述,该项目历经沉浮,但是影响力逐年增加,特别是自由软件基金会(FSF)在2005年的时候,将该项目列入了高等级的自由软件项目中,LinuxBIOS的发展有了一个质的飞跃。最近,LinuxBIOS项目组加入了OLPC计划(每个孩子一台笔记本电脑),更是使得他得到了更好的发展,走的更远。
lfree
发表于:2006.12.09 10:35
::分类:
(
linux
)
::阅读:(184次)
::
评论
(0)
===========================================================
注意放在/tmp目录下的文件
===========================================================
前一阵子,由于要导入数据库,我将dmp文件放在一台linux机器的/tmp目录,导入后数据库后一直没有理它,没有作任何操作。
今天我想看看当时导出的log,发现这些文件包括dmp文件已经消失,一般情况下很少有人动linux的机器,为什么呢?
仔细检查才发现原来cron会执行一个tmpwatch的命令,会定时的清除一些临时目录下的文件,具体看/etc/cron.daily/tmpwatch文件,我作了一个例子测试了一下,情况确实如此:
cp /etc/passwd /var/tmp
/usr/sbin/tmpwatch 1 /var/tmp
过1个小时,在执行如下命令:
/usr/sbin/tmpwatch 1 /var/tmp
lfree
发表于:2006.12.01 10:16
::分类:
(
linux
)
::阅读:(636次)
::
评论
(2)
===========================================================
在soalris 建立交换型文件
===========================================================
http://docs.sun.com/app/docs/doc/817-5093/6mkisoq86?l=zh&a=view
1.mkfile 512m /foo/swapfile
2.swap -a /foo/swapfile
3.# vi /etc/vfstab
(An entry is added for the swap file):
/files/swapfile - - swap - no -
lfree
发表于:2006.11.07 16:22
::分类:
(
linux
)
::阅读:(172次)
::
评论
(0)
===========================================================
Ext2fs Undeletion of Directory Structures mini-HOWTO
===========================================================
这是一篇我以前翻译的文章,虽然现在很少人在使用ext2fs文件系统,我还是把它记录在我的bolg,包括我写的日期。
文章太长,我把它放入我的“资源中心”的undelete文件夹。
查看全文
lfree
发表于:2006.09.01 15:26
::分类:
(
linux
)
::阅读:(253次)
::
评论
(0)
===========================================================
zt:理解Linux中进程,线程等概念
===========================================================
http://www.linuxeden.com/doc/24482.html
查看全文
lfree
发表于:2006.08.30 08:58
::分类:
(
linux
)
::阅读:(243次)
::
评论
(0)
===========================================================
firefox 升级到Firefox/1.5.0.6
===========================================================
firefox 升级到Firefox/1.5.0.6。
记录下来。
查看全文
lfree
发表于:2006.08.03 16:18
::分类:
(
linux
)
::阅读:(360次)
::
评论
(0)
===========================================================
ZT:Reiserfs filesystem recovery
===========================================================
http://martian.org/marty/2003/09/05/reiserfs-filesystem-recovery
Cleaning up after disk crashing season hasn’t been fun, but I am pleased with what I’ve managed to recover from the worst crash.
I wanted to get the latest data from the dead webserver. It was in MySQL, and stored in /var/lib/mysql. Unfortunately, the /var/lib directory no longer existed.
I didn’t want to try to recover it in place — with so many bad
blocks, things can only get worse — so I copied the entire partition to
a file on my laptop (the one with the shiny new disk): ssh deadserver dd if=/dev/hda1 conv=noerror > hda1.img (You need the conv=noerror or else dd will stop when it hits the first bad block.)
So, then I had most of a corrupt filesystem image. To make it useful I used the loop driver: losetup /dev/loop0 hda1.img
Now I could try reiserfsck to see what I could recover. I started with reiserfsck –rebuild-sb /dev/loop0
to rebuild the superblock: even it if hadn’t been affected by the
physical disk corruption, it would certainly be confused by it new home
in a looped image that probably wasn’t the same size as the original
partition. Next step was reiserfsck –rebuild-tree /dev/loop0 to try to find the contents of the missing directories. I finished it off with reiserfsck –check /dev/loop0 to make sure it was happy.
Now I can just mount /dev/loop0 /mnt and have a look in /mnt/lost+found. The data is there!
lfree
发表于:2006.07.19 11:28
::分类:
(
linux
)
::阅读:(250次)
::
评论
(0)
===========================================================
ZT:reiserfs文件系统反删除(Undelete)操作的实践
===========================================================
http://www.chinalinuxpub.com/read.php?wid=1232
一、关于Linux的文件系统(Filesystem)
请参考: 《Linux 文件系统概述》
二、reiserfs 文件系统是否支持undelete操作来恢复数据;
一般删除数据有两种情况,一种是通过rm 命令来删除的;另一种是通过格式化销毁数据的,在reiserfs 文件系统中,恢复这两种误操作而引起的数据损失的情况还是有点区别;
1、由于误操作rm 删除命令而造成数据的丢失的恢复情况;
通过实践来看,通过rm 删除数据,我们能通过reiserfs的修复检测工具来恢复,如果存储设备没有任何问题,或者文件系统没有坏块(bad block)的情况下是百分之百的恢复;
2、由于格式化硬盘所带来的数据损失的恢复情况;
我
测试了格式化存储备来测试恢复reiserfs
文件系统所丢失的数据,我是在移动硬盘上做的实践;比如我的移动硬盘上只有一分区,并且是基于reiserfs
文件系统的;我存放了一百多M的数据,然后再用mkreiserfs或mkfs.reiserfs
工具来格式化这个硬盘分区。如果这时我们发现重建了硬盘分区的文件系统是误操作。这时想通过reiserfs的修复工具来修复,能挽回大多数数据;但并不
是百分百,有时也会是百分百的成功,就看你的运气了;
如果我是把这有reiserfs 文件系统的分区,格式化为其它的文件系统了,这时如果发现是误操作,成功几率就极低了;或者说大多是不能成功;
如果我们把硬盘的分区表也重建了,如果这时再想起是误操作,恢复的reiserfs文件系统的可能性也是极低的,或者说想通过reiserfs 文件系统工具的恢复成功率为零;但有时或多或少也能恢复出一点,或者恢复的是很久很久以前的数据。呵,这事是有点怪;
如果您是由于重新分区导致的数据损失,首先可能您要恢复分区表到以前状态,可能Windows中有这方面的工具;在Linux系统下也应该有这样的工具,但都是商业的。Windows中好的数据恢复工具也应该是商业性的。
3、在reiserfs 文件系统中,undelete恢复数据情况的约定;
我
们前面已经说过了,由于rm
指令的误操作而引起的数据损失,是能恢复大多数,或百分之百,也就是第一种情况;另外如果原来的硬盘分区是reiserfs 的,由于您误操作使用
mkreiserfs 或mkfs.reiserfs 格式化致使数据的损失也应该划在这个约定之内,也是可以恢复大多数数据,但这种情况应该比较少;
三、reiserfs 文件系统恢复数据流程;
1、准备修复盘和大容量存储设备;
1)支持reiserfs 文件系统的livecd 或系统修复盘;
如果您用的是移动存储,是reiserfs文件系统上的损失,您就直接用您当前用的linux系统就能修复,但得支持reiserfs 文件系统才行。呵,这不是废话吗?不支持reiserfs 文件系统的Linux,我的移动硬盘用reiserfs 有什么用。
livecd 是最好的,只要支持reiserfs文件系统的livecd 就OK;另外我发现slackware 安装盘中的第一张是也是可以用;当然不排除其它发行版的安装盘和修复盘,只要能用就行;
2)存储设备;
比如您损失数据的硬盘分区是 9G,所以您得找个最少得找个未使用空间是10G的硬盘(或硬盘分区)吧;否则怎么能容得下数据损失的镜像呢?所以最好找一个大容量的硬盘或硬盘分区做准备;
如果您只是在几百M的移动硬盘上的损失,是不是找个地方就容下了;这种情况就好办多了;
2、恢复数据的过程;
1)用livecd 开机进入系统,或者用修复盘进入系统;
livecd 比较好办,他本来就是一个在光盘上运行的系统;您可以找一个发行版本下载;
请到: http://www.frozentech.com/content/livecd.php
可以选择slax 或 Knoppix ;
您也可以用slackware的第一张盘,一路enter后,就出现 bash#
字样,这样就OK了;当然您也可以把硬盘挂在有Linux的机器上来恢复,总之方法多的是;我们无非是借助一个支持reiserfs
文件系统的Linux系统来恢复数据,这个道理我们应该理解;
2)用dd 工具来做硬盘分区的镜像;
为什么数据损失的硬盘分区的镜像,能不能直接修复?直接修复也是可以的,但如果出现错误,恢复数据的可能性就很低了。除非我们能保证损失数据的硬盘
分区没有任何bad block
,或者在此硬盘分区上没有任何物理和逻辑坏道;另外我们还要确保百分之百不会再次操作失误;所以对硬盘分区镜像是极为重要的,也就是说用镜像盘来恢复数
据,以保证原有数据的安全性和可靠性;
还有一点值得一说的是,请不要挂载有数据损失的硬盘分区,也不要再次向其写入数据;否则恢复数据的成功率会降低;查看是否有自动挂载分区,请用df -h 来查看;如果发现已经挂载了,就用 umount 卸载;
我们要弄明白是哪个分区的数据损失了,您可以用fdisk -l 来查看分区表;比如我十分明确的认为 /dev/sda1 的数据损失了;这时我们就要做/dev/sda1的镜像;
然后我们得准备一个有空间的分区,是linux的文件系统的,比如ext3或reiserfs都行;只是为了保存dd出来的分区镜像;我们用
mount 来挂载用来存储镜像文件的分区;这在准备工作中已经提到了;比如我想用 文件系统为reiserfs
的硬盘分区/dev/hda8来存放/dev/sda1的镜像,那就挂载/dev/hda8;
bash# mkdir hda8 注:创建一个目录
bash# mount -t reiserfs /dev/hda8 hda8 注:把/dev/hda8 挂载到hda8目录上;
bash# df -h 注:查看/dev/hda8是否挂载上了;
bash# cd hda8 注:进入hda8目录;
bash# dd if=/dev/sda1 conv=noerror > sda1.img 注:做 /dev/sda1 的整个分区的镜像;
3)通过reiserfsck或fsck.reiserfs 镜像来恢复数据;
bash# losetup -f 注:查询哪个loop设备是空的;
/dev/loop0 注:发现有一个空的是/dev/loop0 ;
bash# losetup /dev/loop0 sda1.img
注:把sda1.img 镜象关联到/dev/loop0的设备中;
bash# reiserfsck --rebuild-tree -S -l undelete.log /dev/loop0
注:
通过reiserfsck 来修复,-S 表示整个分区,-l 后面是接日志输出,最后是/dev/loop0设备;因为我们前面把sda1.img
关联到了/dev/loop0设备中,这样/dev/loop0就拥有了sda1.img的所有属性;这和直接通过下面命令修复的效果是一样的;但这样通
过镜像装载修复的方法主要是为了安全;
bash# reiserfsck --rebuild-tree -S -l undelete.log /dev/sda1
注:这样直接操作也行,如果 /dev/sda1上有bad block就麻烦了;可能会损伤到/dev/sda1 数据的安全,明白了吧;
然后会出现类似如下的提示:
reiserfsck 3.6.19 (2003 www.namesys.com)
*************************************************************
** Do not run the program with --rebuild-tree unless **
** something is broken and MAKE A BACKUP before using it. **
** If you have bad sectors on a drive it is usually a bad **
** idea to continue using it. Then you probably should get **
** a working hard drive, copy the file system from the bad **
** drive to the good one -- dd_rescue is a good tool for **
** that -- and only then run this program. **
** If you are using the latest reiserfsprogs and it fails **
** please email bug reports to reiserfs-list@namesys.com, **
** providing as much information as possible -- your **
** hardware, kernel, patches, settings, all reiserfsck **
** messages (including version), the reiserfsck logfile, **
** check the syslog file for any related information. **
** If you would like advice on using this program, support **
** is available for $25 at www.namesys.com/support.html. **
*************************************************************
Will rebuild the filesystem (/dev/loop0) tree
Will put log info to 'undelete.log'
Do you want to run this program?[N/Yes] (note need to type Yes if you do): Yes
注:请输入Yes,这样就进行修复了;
详细情况如下:
Replaying journal..
Reiserfs journal '/dev/loop0' in blocks [18..8211]: 0 transactions replayed
###########
reiserfsck --rebuild-tree started at Thu Dec 1 21:01:53 2005
###########
Pass 0:
The whole partition (251984 blocks) is to be scanned
Skipping 8218 blocks (super block, journal, bitmaps) 243766 blocks will be read
0%....20%....40%....60%....80%....100% left 0, 6588 /sec
"r5" hash is selected
Flushing..finished
Read blocks (but not data blocks) 243766
Leaves among those 56
Objectids found 77
Pass 1 (will try to insert 56 leaves):
Looking for allocable blocks .. finished
0%....20%....40%....60%....80%....100% left 0, 56 /sec
Flushing..finished
56 leaves read
45 inserted
11 not inserted
non-unique pointers in indirect items (zeroed) 633
Pass 2:
0%....20%....40%....60%....80%....100% left 0, 0 /sec
Flushing..finished
Leaves inserted item by item 11
Pass 3 (semantic):
Flushing..finished
Files found: 42
Directories found: 12
Pass 3a (looking for lost dir/files):
Looking for lost directories:
Looking for lost files:0 /sec
Flushing..finished 48, 0 /sec
Objects without names 16
Dirs linked to /lost+found: 1
Files linked to /lost+found 15
Pass 4 - finished done 44, 0 /sec
Flushing..finished
Syncing..finished
###########
reiserfsck finished at Thu Dec 1 21:02:31 2005
###########
4)挂载loop 设备,查看数据恢复情况;
bash# mkdir recoversda1 注:创建一个目录;
bash# mount /dev/loop0 recoversda1 注:把/dev/loop0挂载到 recoversda1 上;
bash# more undelete.log 注:查看恢复日志;
bash# cd recoversda1 注:进入recoversda1目录查看数据恢复情况;
一般的情况下,如果您是rm 删除的东西,大多会百分之百的恢复了,有些内容可能会恢复到lost+found的目录中,要通过恢复日志来对比查看;
如果您认为您的数据恢复的差不多了,这时就可以把损失数据的硬盘分区挂载上,然后拷贝已经恢复的数据过去;
bash# cd .. 注:从 recoversda1 退出,返回上级目录;
bash# mkdir sda1 注:创建sda1目录;
bash# mount /dev/sda1 sda1 注:挂载 /dev/sda1 到sda1目录上;
下面的就是从recoversda1目录中,把已经恢复的数据复制到数据损失的硬盘分区上;这个工作就简单了吧;cp命令应该会用吧,如果真的不会,那我也没有办法了,看来你和我的水平真的差不多;哈哈。。。。
5)恢复好数据的扫尾工作;
要正常卸载一系列挂载的盘;
bash# umount /dev/hda8
bash# umount /dev/sda1
bash# umount /dev/loop1
bash# losetup -d /dev/loop0
... ...
如果出现设备忙的提示,可能是您正处于挂载目录中;退出就好了;
四、关于本文;
这篇实践文档是根据洋人提供的方法实践而来,如果您认为北南在抄袭,那您也一样可以抄袭;
五、参考文档;
http://www.martian.org/marty/archives/000888.html
http://marc.theaimsgroup.com/?l= ... 61318421306&w=2
http://www.antrix.net/journal/te ... recovery_howto.html
lfree
发表于:2006.07.19 11:03
::分类:
(
linux
)
::阅读:(420次)
::
评论
(0)
===========================================================
转载:关于Linux和Windows拷贝或覆盖文件机制的不同 ?
===========================================================
http://www.itpub.net/showthread.php?s=c79b896434fbbd12e51e46ebf7acb913&postid=4531554#post4531554
Linux 系统下如果拷贝一个文件,一般拷贝了多少字节,就是多少,而且文件名已经生成 。
Windows 下拷贝一个文件,直到成功文件才会存在于目标目录下,不成功就没有这个文件名 。
同样覆盖相同文件也是,比如Linux 下新文件覆盖一个1G的文件,如果开始覆盖,那么1G的旧文件就好像被删除,新文件拷贝到多少就是多少,如果出现问题,文件存在了,但是不完整;
由于出现问题不会覆盖旧文件,那么新文件在拷贝的过程中存放在什么地方 ? 它的中转缓冲区在哪里?
lfree
发表于:2006.06.12 09:47
::分类:
(
linux
)
::阅读:(364次)
::
评论
(0)
===========================================================
令人大跌眼镜:Linux 不如 Windows 可靠
===========================================================
http://www.linuxeden.com/doc/24061.html
很滑稽的理论,调查显示,但是,与 Windows 或 Unix 相比,标准的 Red Hat Enterprise Linux,以及来自其它小开放源代码厂商的 Linux 版本当机的次数和时间更多。原因是:Linux 和开放源代码文档缺乏。
开放源码缺乏文档简直是滑稽之谈。
也许又是ms新一轮的攻击。
lfree
发表于:2006.06.09 10:02
::分类:
(
linux
)
::阅读:(392次)
::
评论
(0)
===========================================================
关于磁带机的使用(solaris)
===========================================================
1. 倒带: mt -f /dev/rmt/0n rewind
2. 前进并倒带: mt -f /dev/rmt/0n retension
3. 脱机: mt -f /dev/rmt/0n offline
4. 前进一格: mt -f /dev/rmt/0n fsf 1
5. 后退格: mt -f /dev/rmt/0n bsf 2
注意要在原来基础上+1
6. 后退格: mt -f /de