3月 16

linux 系统数据恢复

[整理人:张子萌 2011-03-14]

linux管理员不小心rm了数据,会很郁闷,所以需要数据恢复。我记录个人的恢复实验结果。如果可以把硬盘拿下里挂载windows上可以试试Raise Data Recovery for Ext2/Ext3/Ext4、r-linux工具,其它工具也很多,但是收费的居多。用windows恢复后容易造成使用权限错误等问题,所以不能直接恢复到linux盘上使用。据说winpe里也可以用,但是我没有做实验,毕竟用winpe在服务器上也挺怪的。主要实验一下在linux上实际操作。TestDisk、PhotoRec、ext3grep。TestDisk主要用来恢复损坏的分区以及拯救无法引导的磁盘。PhotoRec 主要用于恢复损坏的数据文件和文档等。Ext3grep恢复大部分数据文件。

PhotoRec 下载地址

http://www.cgsecurity.org/wiki/PhotoRec

ext3grep下载地址

http://ext3grep.googlecode.com/files/ext3grep-0.10.2.tar.gz

软件主站

http://www.xs4all.nl/~carlo17/howto/undelete_ext3.html

先看ext3grep效果,我的分区如下

linux 系统数据恢复 - simon-zzm - simon个人观点

在program下随便放了一个文档pdf。并且见了3个目录abc,在a目录下放了一个txt文件。

# rm -rf 2011.pdf a/

把a目录和2011.pdf删除,删除完毕卸载/program分区,准备测试恢复。

首先安装或升级一下e2fsprogs、e2fslibs库,在CentOS中安装e2fsprogs库。如果是Ubuntu需要安装两个库,命令sudo apt-get install e2fsprogs e2fslibs-dev。我的实验环境是Centos。(任何恢复都需要安装此库)

#yum install –y e2fsprogs

# wget http://ext3grep.googlecode.com/files/ext3grep-0.10.2.tar.gz

# tar zxvf ext3grep-0.10.2.tar.gz

# cd ext3grep-0.10.2

# ./configure

# make && make install

ext3grep主要参数:

–print 打印块、inode和所有信息

–ls 打印目录、过滤信息

–inode 从某个indoechazhao

–block 从某个块查找

–group 只找某个组

–after 找在某点时间后删除的数据

–before 找在某点时间前删除的数据

–restore-file 恢复文件到某个目录

–restore-all 恢复所有删除,删除的数据会在当前的RESTORED_FILES目录中

开始从第二个inode扫描删除的文件

# ext3grep /dev/sda4 –ls –inode 2

扫描完成如下图

linux 系统数据恢复 - simon-zzm - simon个人观点

在第四列为inode值,第五列中写有D的就是被删除的文件。

使用一下命令我看看a目录下有什么东西,a目录的inode值为75777

# # ext3grep /dev/sda4 –ls –deteled –inode 75777

linux 系统数据恢复 - simon-zzm - simon个人观点

# ext3grep /dev/sda4 –restore-file a/123.txt

linux 系统数据恢复 - simon-zzm - simon个人观点

看到Restoring 已经恢复成功,查看123.txt文件文件内容没有问题,但是pdf的没有成功,不知道为什么。又测试删除mysql数据库的数据,经过恢复的数据也可以使用。总体说效果挺好。

然后试试PhotoRec,官方说明能恢复格式如下:

– RIFF audio/video (.avi/.wav)

– BMP bitmap (.bmp)

– bzip2 compressed data (.bz2)

– Source code written in C (.c)

– Canon Raw picture (.crw)

– Canon catalog (.ctg)

– FAT subdirectory

– Microsoft Office Document (.doc)

– Nikon dsc (.dsc)

– HTML page (.html)

– JPEG picture (.jpg)

– MOV video (.mov)

– MP3 audio (MPEG ADTS, layer III, v1) (.mp3)

– Moving Picture Experts Group video (.mpg)

– Minolta Raw picture (.mrw)

– Olympus Raw Format picture (.orf)

– Portable Document Format (.pdf)

– Perl script (.pl)

– Portable Network Graphics (.png)

– Raw Fujifilm picture (.raf)

– Contax picture (.raw)

– Rollei picture (.rdc)

– Rich Text Format (.rtf)

– Shell script (.sh)

– Tar archive (.tar )

– Tag Image File Format (.tiff)

– Microsoft ASF (.wma)

– Sigma/Foveon X3 raw picture (.x3f)

– zip archive (.zip)

支持的磁盘格式如下:

– DOS/Windows FAT12, FAT16 and FAT32

– NTFS ( Windows NT/2K/XP )

– Linux Ext2 and Ext3

– BeFS ( BeOS )

– BSD disklabel ( FreeBSD/OpenBSD/NetBSD )

– CramFS (Compressed File System)

– HFS and HFS+, Hierarchical File System

– JFS, IBM’s Journaled File System

– Linux Raid

– Linux Swap (versions 1 and 2)

– LVM and LVM2, Linux Logical Volume Manager

– Netware NSS

– ReiserFS 3.5, 3.6 and 4

– Sun Solaris i386 disklabel

– UFS and UFS2 (Sun/BSD/…)

– XFS, SGI’s Journaled File System

试试看

# wget http://www.cgsecurity.org/testdisk-6.11.3.linux26.tar.bz2

# bunzip2 testdisk-6.11.3.linux26.tar.bz2

# tar xvf testdisk-6.11.3.linux26.tar

# cd /root/testdisk-6.11.3/linux

# ./testdisk_static

linux 系统数据恢复 - simon-zzm - simon个人观点

英文提示很简。测试了一下图片格式恢复没有问题,其它格式没有试,但是名称都变成索引名了,有点不方便。

还存在一个问题就是ext4格式。ext4在rehdat5中已经支持,但是需要安装e4fsprogs,在redhat6中已经是默认安装,所以将来使用ext4的几率也很大。Ext3grep工具在ext4下已经无能为力,所以需要其它工具的支持。上网上找找是否会有ext4grep,发现了http://tjworld.net/wiki/Linux/Ext4Undelete,没有搞清楚。

介绍较多的是extundelete。

extundelete的下载地址

http://extundelete.sourceforge.net/

linux 系统数据恢复 - simon-zzm - simon个人观点

首先安装e2fsprogs和e2fslibs,然后编译

# cd extundelete-0.2.0

# ./configure

# make

不安装了直接用

#cd src

# /extundelete /dev/sda9 –restore-all

应该是我系统内核版本太低,虽然支持ext4,但软件恢复却没有成功。内核2.6.28以上的应该没有问题。Fedora上有人测试过没有问题,redhat和centos就应该没有问题。

试试PhotoRec是否可以恢复ext4的盘。步骤抓图如下:

启动

linux 系统数据恢复 - simon-zzm - simon个人观点

选择磁盘

linux 系统数据恢复 - simon-zzm - simon个人观点

选择好分区类型

linux 系统数据恢复 - simon-zzm - simon个人观点

选择要恢复的盘

linux 系统数据恢复 - simon-zzm - simon个人观点

不知道为什么支持了,和介绍里说的不一样,选第一项

linux 系统数据恢复 - simon-zzm - simon个人观点

选第一项

linux 系统数据恢复 - simon-zzm - simon个人观点

选择恢复后的路径,直接点y,保存到当前目录的recup_dir.1目录中

linux 系统数据恢复 - simon-zzm - simon个人观点
进入recup_dir.1目录查看jpg文件恢复了,并且可以使用,但是名称有变化了。pdf的好像没有成功。
linux 系统数据恢复 - simon-zzm - simon个人观点

照目前看txt等文本类和图片类的恢复也没有问题,但是只能靠grep在去找那个是需要的文件了。

经验总结:

使用rm需要格外小心(会出人命的)。在不小心删除后,最好及时卸载分区,避免数据覆盖写入。如果必须挂载,可以使用只读模式。

7月 03

linux iptables 我的例子

[整理人:张子萌 2010-7]
  服务器为内网服务器,对外提供web服务器需要解析DNS,所以对外开通80、53端口。服务器登陆需要连接连接到VPN服务器后,才能连接服务器。服务器使用eth0网卡.
  打开iptables文件
#vi /etc/sysconf/iptables
添加如下内容:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
[0:0] -A INPUT -s 192.168.1.0/255.255.255.0 -p icmp -m icmp –icmp-type any -j ACCEPT
[0:0] -A INPUT -p icmp -m icmp –icmp-type any -j DROP
[0:0] -A INPUT -p udp -m udp –sport 53 -j ACCEPT
[0:0] -A INPUT -p udp -m udp –dport 53 -j ACCEPT
[0:0] -A INPUT -p tcp -m tcp –sport 80 -j ACCEPT
[0:0] -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
[0:0] -A INPUT -p tcp -m tcp –sport 25 -j ACCEPT
[0:0] -A INPUT -s ! 192.168.1.0/255.255.255.0 -p udp -j ACCEPT
[0:0] -A INPUT -s ! 192.168.1.0/255.255.255.0 -p tcp -j ACCEPT
[0:0] -A INPUT -p tcp -m tcp –dport 110 -j DROP
[0:0] -A FORWARD -p tcp -m tcp –tcp-flags SYN,RST,ACK SYN -m limit –limit 1/sec -j ACCEPT
[0:0] -A FORWARD -p tcp -m tcp –tcp-flags FIN,SYN,RST,ACK RST -m limit –limit 1/sec -j ACCEPT
[0:0] -A FORWARD -p icmp -m icmp –icmp-type 8 -m limit –limit 1/sec -j ACCEPT
[0:0] -N syn-flood
[0:0] -A syn-flood -m limit –limit 1/s –limit-burst 4 -j RETURN
[0:0] -A syn-flood -j DROP
[0:0] -A OUTPUT -d 192.168.1.0/255.255.255.0 -p udp -j ACCEPT
[0:0] -A OUTPUT -d 192.168.1.0/255.255.255.0 -p tcp -j ACCEPT
[0:0] -A OUTPUT -p udp -m udp –sport 53 -j ACCEPT
[0:0] -A OUTPUT -p udp -m udp –dport 53 -j ACCEPT
[0:0] -A OUTPUT -p tcp -m tcp –sport 80 -j ACCEPT
[0:0] -A OUTPUT -p tcp -m tcp –dport 80 -j ACCEPT
[0:0] -A OUTPUT -p tcp -m tcp –dport 25 -j ACCEPT
[0:0] -A OUTPUT -d ! 192.168.1.0/255.255.255.0 -o eth0 -p udp -j DROP
[0:0] -A OUTPUT -d ! 192.168.1.0/255.255.255.0 -o eth0 -p tcp -j DROP
COMMIT
  保存内容,重启防火墙。
# /etc/init.d/iptables restart
注:在远程调试防火墙时,为了避免调试失败,自己都进不去,最好把防火墙设置为不随操作系统启动。命令如下:

# chkconfig –level 0123456 iptables off

个人配置仅供参考
参考网站:http://www.hudong.com/wiki/iptables%E5%AE%9E%E4%BE%8B

5月 10

系统资源收集工具

【整理人:张子萌 2010-5-10】

系统性能收集工具Dstat。官方网站http://dag.wieers.com/rpm/packages/dstat/

可以下相应版本的rpm包,安装比较简单那,收集参数如下:

Dstat options:
-c, –cpu 显示CPU情况
-C 0,3,total include cpu0, cpu3 and total
-d, –disk 显示磁盘情况
-D total,hda include hda and total
-g, –page enable page stats
-i, –int enable interrupt stats
-I 5,eth2 include int5 and interrupt used by eth2
-l, –load enable load stats
-m, –mem 显示内存情况
-n, –net 显示网络情况
-N eth1,total 可以指定网络接口
-p, –proc enable process stats
-s, –swap 显示swap情况
-S swap1,total 可以指定多个swap
-t, –time enable time counter
-y, –sys enable system stats
–ipc 报告IPC消息队列和信号量的使用情况
–lock enable lock stats
–raw enable raw stats
–tcp enable tcp stats
–udp enable udp stats
–unix enable unix stats

-M stat1,stat2 enable external stats
–mods stat1,stat2

-a, –all 使用-cdngy 缺省的就是这样显示
-f, –full 使用 -C, -D, -I, -N and -S 显示
-v, –vmstat 使用-pmgdsc -D 显示

–integer show integer values
–nocolor disable colors (implies –noupdate)
–noheaders 只显示一次表头以后就不显示了,使用重定向写入文件时很有用
–noupdate disable intermediate updates
–output file 写入到CVS文件中

常用命令:date && dstat -tclmdny 5

打印收集时间,每5秒钟收集一次

4月 11

linux kill 信号 说明

$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1
36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5
40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9
44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13
52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9
56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5
60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1
64) SIGRTMAX

列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。
下面我们对编号小于SIGRTMIN的信号进行讨论。
1) SIGHUP
本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。
登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个 Session。当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终止进程,因此前台进 程组和后台有终端输出的进程就会中止。不过可以捕获这个信号,比如wget能捕获SIGHUP信号,并忽略它,这样就算退出了Linux登录,wget也 能继续下载。
此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。
2) SIGINT
程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。
3) SIGQUIT
和SIGINT类似, 但由QUIT字符(通常是Ctrl-)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。
4) SIGILL
执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号。
5) SIGTRAP
由断点指令或其它trap指令产生. 由debugger使用。
6) SIGABRT
调用abort函数生成的信号。
7) SIGBUS
非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。它与SIGSEGV的区别在于后者是由于对合法存储地址的非法访问触发的(如访问不属于自己存储空间或只读存储空间)。
8) SIGFPE
在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误。
9) SIGKILL
用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可尝试发送这个信号。
10) SIGUSR1
留给用户使用
11) SIGSEGV
试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据.
12) SIGUSR2
留给用户使用
13) SIGPIPE
管道破裂。这个信号通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读管道没打开或者意外终止就往管道写,写进程会收到SIGPIPE信号。此外用Socket通信的两个进程,写进程在写Socket的时候,读进程已经终止。
14) SIGALRM
时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使用该信号.
15) SIGTERM
程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL。
17) SIGCHLD
子进程结束时, 父进程会收到这个信号。
如果父进程没有处理这个信号,也没有等待(wait)子进程,子进程虽然终止,但是还会在内核进程表中占有表项,这时的子进程称为僵尸进程。这种情 况我们应该避免(父进程或者忽略SIGCHILD信号,或者捕捉它,或者wait它派生的子进程,或者父进程先终止,这时子进程的终止自动由init进程来接管)。
18) SIGCONT
让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作. 例如, 重新显示提示符…
19) SIGSTOP
停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.
20) SIGTSTP
停止进程的运行, 但该信号可以被处理和忽略. 用户键入SUSP字符时(通常是Ctrl-Z)发出这个信号
21) SIGTTIN
当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN信号. 缺省时这些进程会停止执行.
22) SIGTTOU
类似于SIGTTIN, 但在写终端(或修改终端模式)时收到.
23) SIGURG
有”紧急”数据或out-of-band数据到达socket时产生.
24) SIGXCPU
超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/改变。
25) SIGXFSZ
当进程企图扩大文件以至于超过文件大小资源限制。
26) SIGVTALRM
虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间.
27) SIGPROF
类似于SIGALRM/SIGVTALRM, 但包括该进程用的CPU时间以及系统调用的时间.
28) SIGWINCH
窗口大小改变时发出.
29) SIGIO
文件描述符准备就绪, 可以开始进行输入/输出操作.
30) SIGPWR
Power failure
31) SIGSYS
非法的系统调用。
在以上列出的信号中,程序不可捕获、阻塞或忽略的信号有:SIGKILL,SIGSTOP
不能恢复至默认动作的信号有:SIGILL,SIGTRAP
默认会导致进程流产的信号有:SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGIOT,SIGQUIT,SIGSEGV,SIGTRAP,SIGXCPU,SIGXFSZ
默认会导致进程退出的信号有:SIGALRM,SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGPOLL,SIGPROF,SIGSYS,SIGTERM,SIGUSR1,SIGUSR2,SIGVTALRM
默认会导致进程停止的信号有:SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU
默认进程忽略的信号有:SIGCHLD,SIGPWR,SIGURG,SIGWINCH
此外,SIGIO在SVR4是退出,在4.3BSD中是忽略;SIGCONT在进程挂起时是继续,否则是忽略,不能被阻塞。