三:设置Dump Target
首先说说Kdump支持的Dump Target种类,基本有以下几种:
1) RAW
2) Net (NFS)
3) Net (SSH)
4) File System
一个一个说,从RAW开始。如果希望将vmcore,也就是崩溃的第一个内核的上下文保存至一个RAW设备,只需要修改/etc/kdump.conf,添加:
raw /dev/sda5
在Crash Kernel启动后会使用dd将vmcore拷贝至该设备。
如果希望将Crash Kernel保存至NFS服务器,这在很多情况下是非常重要的。比如说服务器不可达、没有本地磁盘等等情况下,可以将vmcore保存至NFS服务器,加以分析。写法如下:
net my.server.com:/export/tmp
在NFS服务器上会以/var/crash/%HOST-%DATE/的格式保存,这样方便查找管理。同时也可以提供一台服务器作为固定的Dump Target,集中管理、分析。并且NFS方式保存vmcore时支持DNS!
除了NFS之外,Kdump还可以将vmcore通过SSH保存。使用scp方式将vmcore拷贝至远程机器,写法如下:
net user@my.server.com
除了以上三种,Kdump还可以将vmcore保存至本地的文件系统。写法如下:
#ext3 /dev/sda3
#ext3 LABEL=/boot
#ext3 UUID=03138356-5e61-4ab3-b58e-27507ac41937
关于文件系统有很多知识,一时说不过来。仅仅作为简要的介绍,以下的几个命令较为常用:
1) 首先就是df了,可以查看当前系统的文件系统使用情况:
[root@Derek-Laptop derek]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/vg_dereklaptop-lv_root
51606140 5724412 43260288 12% /
tmpfs 899408 13112 886296 2% /dev/shm
/dev/sda1 495844 49343 420901 11% /boot
/dev/mapper/vg_dereklaptop-lv_home
20738676 2426876 17258312 13% /home
/dev/sdb1 976760000 825519688 151240312 85% /media/MediaCenter
2) 其次就是获取UUID了,很多情况下,基于UUID比/dev/sda1这种表达更为安全,本人就碰到过一个Bug,因为在Crash Kernel中,原先的/dev/sda1变成了/dev/sdb1而导致Dump失败的情况。
因为第一个内核在启动的时候有udev来保证设备的顺序问题,从而不会有错把/dev/sda1识别为/dev/sdb1的情况。但是Crash Kernel并没有这个机制,所以,某些情况下,会失败。
因为UUID是唯一的,所以基于以上情况,就不难理解UUID为什么要相对安全了。
[root@Derek-Laptop derek]# ll /dev/disk/by-uuid/
总用量 0
lrwxrwxrwx. 1 root root 10 9月 12 17:27 226C9C376C9C0825 -> ../../sdb1
lrwxrwxrwx. 1 root root 10 9月 12 17:26 5917e100-df53-4f35-a61f-1e7b18e16554 -> ../../dm-1
lrwxrwxrwx. 1 root root 10 9月 12 17:26 7feb85e4-a5f1-447a-87ca-d811785cafd2 -> ../../dm-0
lrwxrwxrwx. 1 root root 10 9月 12 17:26 93957ad0-9ad6-4dd5-90bf-e0be6135b6ba -> ../../sda1
lrwxrwxrwx. 1 root root 10 9月 12 17:26 b3f1d832-7075-4921-8051-0abc8cb0020d -> ../../dm-2
3) 这个并不是必须,但是/proc里面真的有很多很好很强大的东西,比如说这个文件/proc/mounts。详细告诉你所有的文件系统。红色的是可以通过df命令看到的,其他的,就只能通过这个文件来看了!
[root@Derek-Laptop derek]# cat /proc/mounts
rootfs / rootfs rw 0 0
/proc /proc proc rw,relatime 0 0
/sys /sys sysfs rw,seclabel,relatime 0 0
udev /dev devtmpfs rw,seclabel,relatime,size=893068k,nr_inodes=149348,mode=755 0 0
devpts /dev/pts devpts rw,seclabel,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /dev/shm tmpfs rw,seclabel,relatime 0 0
/dev/mapper/vg_dereklaptop-lv_root / ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
none /selinux selinuxfs rw,relatime 0 0
/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
/dev/sda1 /boot ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
/dev/mapper/vg_dereklaptop-lv_home /home ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
gvfs-fuse-daemon /home/derek/.gvfs fuse.gvfs-fuse-daemon rw,nosuid,nodev,relatime,user_id=500,group_id=500 0 0
/dev/sdb1 /media/MediaCenter fuseblk rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096 0 0
4) 有一个经验希望分享一下,就是关于只读根文件系统的。这个相当难搞,在此我只提供我的经历。我的步骤是这样的:
在grub启动的时候,添加
3到kernel行,即启动级别为3!以启动级别2启动应该也可以的,这里只是我的经历!关于Linux启动级别,略作介绍:
0 停机
1 单用户
2 多用户,无网络连接
3 多用户,启动网络连接
4 用户自定义
5 多用户带图形界面
6 重启
以root登录,停止所有服务。可以采用如下方式停止:
for i in /etc/init.d/* ;do $i stop ;done
这时,所有的服务都应该停止了!运行init 1,启动到单用户模式。运行以下命令:
mount / -o remount,ro
再次查看
/proc/mounts,应该可以看到/挂载为rw了,可以试试:
touch /test
提示只读文件系统就说明成功了,如果需要重新挂载为读写根文件系统,则运行:
mount / -o remount,rw
回到正题,如果Dump Target为本地磁盘,则可以与
path /var/crash
一起使用,用来指定存放vmcore的目录,例如kdump.conf的内容为:
ext4 UUID=93957ad0-9ad6-4dd5-90bf-e0be6135b6ba
path /var/kdump
时,Crash Kernel会将vmcore保存至/boot/var/kdump/vmcore。系统重启后即可看到!
阅读(3861) | 评论(1) | 转发(3) |