Chinaunix首页 | 论坛 | 博客
  • 博客访问: 197347
  • 博文数量: 22
  • 博客积分: 1696
  • 博客等级: 上尉
  • 技术积分: 336
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-06 21:22
文章分类

全部博文(22)

文章存档

2011年(4)

2010年(18)

分类: LINUX

2010-09-12 20:48:38

三:设置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。系统重启后即可看到!


阅读(3876) | 评论(1) | 转发(3) |
给主人留下些什么吧!~~

hamasisn2013-11-07 10:46:23

你好,读了你的kdump文档,收获颇多。
有几个问题想请教一下。
1.启用kdump功能后,会有什么后台的进程吗,还只是kexec -p capture-kernel .....
我试了一下,capture-kernel可以是任意的linux kernel.
2./etc/dump.conf配置信息,是给哪个进程使用的,这些信息是在production-kernel中配置的,能在capture-kernel中读到吗?
3.在发生内核崩溃时,先完成转储放到特定内存空间,再启动capture-kernel;capture-kernel 把在内存中的转储信息映射到/proc/vmcore。capture-kernel调用makedumpfile 并配合/etc/dump.conf的参数完成转储的保存工作。整个过程是这样的吗?