1 ============================================== 1 ================================================================ 2 Documentation for Kdump - The kexec-based Cras 2 Documentation for Kdump - The kexec-based Crash Dumping Solution 3 ============================================== 3 ================================================================ 4 4 5 This document includes overview, setup, instal !! 5 This document includes overview, setup and installation, and analysis 6 information. 6 information. 7 7 8 Overview 8 Overview 9 ======== 9 ======== 10 10 11 Kdump uses kexec to quickly boot to a dump-cap 11 Kdump uses kexec to quickly boot to a dump-capture kernel whenever a 12 dump of the system kernel's memory needs to be 12 dump of the system kernel's memory needs to be taken (for example, when 13 the system panics). The system kernel's memory 13 the system panics). The system kernel's memory image is preserved across 14 the reboot and is accessible to the dump-captu 14 the reboot and is accessible to the dump-capture kernel. 15 15 16 You can use common commands, such as cp, scp o !! 16 You can use common commands, such as cp and scp, to copy the 17 the memory image to a dump file on the local d !! 17 memory image to a dump file on the local disk, or across the network to 18 to a remote system. !! 18 a remote system. 19 19 20 Kdump and kexec are currently supported on the !! 20 Kdump and kexec are currently supported on the x86, x86_64, ppc64, ia64, 21 s390x, arm and arm64 architectures. 21 s390x, arm and arm64 architectures. 22 22 23 When the system kernel boots, it reserves a sm 23 When the system kernel boots, it reserves a small section of memory for 24 the dump-capture kernel. This ensures that ong 24 the dump-capture kernel. This ensures that ongoing Direct Memory Access 25 (DMA) from the system kernel does not corrupt 25 (DMA) from the system kernel does not corrupt the dump-capture kernel. 26 The kexec -p command loads the dump-capture ke 26 The kexec -p command loads the dump-capture kernel into this reserved 27 memory. 27 memory. 28 28 29 On x86 machines, the first 640 KB of physical !! 29 On x86 machines, the first 640 KB of physical memory is needed to boot, 30 regardless of where the kernel loads. For simp !! 30 regardless of where the kernel loads. Therefore, kexec backs up this 31 low 1M is reserved to avoid any later kernel o !! 31 region just before rebooting into the dump-capture kernel. 32 data into this area. Like this, the low 1M can !! 32 33 by kdump kernel without extra handling. !! 33 Similarly on PPC64 machines first 32KB of physical memory is needed for 34 !! 34 booting regardless of where the kernel is loaded and to support 64K page 35 On PPC64 machines first 32KB of physical memor !! 35 size kexec backs up the first 64KB memory. 36 regardless of where the kernel is loaded and t << 37 kexec backs up the first 64KB memory. << 38 36 39 For s390x, when kdump is triggered, the crashk 37 For s390x, when kdump is triggered, the crashkernel region is exchanged 40 with the region [0, crashkernel region size] a 38 with the region [0, crashkernel region size] and then the kdump kernel 41 runs in [0, crashkernel region size]. Therefor 39 runs in [0, crashkernel region size]. Therefore no relocatable kernel is 42 needed for s390x. 40 needed for s390x. 43 41 44 All of the necessary information about the sys 42 All of the necessary information about the system kernel's core image is 45 encoded in the ELF format, and stored in a res 43 encoded in the ELF format, and stored in a reserved area of memory 46 before a crash. The physical address of the st 44 before a crash. The physical address of the start of the ELF header is 47 passed to the dump-capture kernel through the 45 passed to the dump-capture kernel through the elfcorehdr= boot 48 parameter. Optionally the size of the ELF head 46 parameter. Optionally the size of the ELF header can also be passed 49 when using the elfcorehdr=[size[KMG]@]offset[K 47 when using the elfcorehdr=[size[KMG]@]offset[KMG] syntax. 50 48 >> 49 51 With the dump-capture kernel, you can access t 50 With the dump-capture kernel, you can access the memory image through 52 /proc/vmcore. This exports the dump as an ELF- 51 /proc/vmcore. This exports the dump as an ELF-format file that you can 53 write out using file copy commands such as cp !! 52 write out using file copy commands such as cp or scp. Further, you can 54 makedumpfile utility to analyze and write out !! 53 use analysis tools such as the GNU Debugger (GDB) and the Crash tool to 55 options, e.g with '-d 31' it will only write o !! 54 debug the dump file. This method ensures that the dump pages are correctly 56 you can use analysis tools such as the GNU Deb !! 55 ordered. 57 tool to debug the dump file. This method ensur !! 56 58 correctly ordered. << 59 57 60 Setup and Installation 58 Setup and Installation 61 ====================== 59 ====================== 62 60 63 Install kexec-tools 61 Install kexec-tools 64 ------------------- 62 ------------------- 65 63 66 1) Login as the root user. 64 1) Login as the root user. 67 65 68 2) Download the kexec-tools user-space package 66 2) Download the kexec-tools user-space package from the following URL: 69 67 70 http://kernel.org/pub/linux/utils/kernel/kexec 68 http://kernel.org/pub/linux/utils/kernel/kexec/kexec-tools.tar.gz 71 69 72 This is a symlink to the latest version. 70 This is a symlink to the latest version. 73 71 74 The latest kexec-tools git tree is available a 72 The latest kexec-tools git tree is available at: 75 73 76 - git://git.kernel.org/pub/scm/utils/kernel/ke 74 - git://git.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git 77 - http://www.kernel.org/pub/scm/utils/kernel/k 75 - http://www.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git 78 76 79 There is also a gitweb interface available at 77 There is also a gitweb interface available at 80 http://www.kernel.org/git/?p=utils/kernel/kexe 78 http://www.kernel.org/git/?p=utils/kernel/kexec/kexec-tools.git 81 79 82 More information about kexec-tools can be foun 80 More information about kexec-tools can be found at 83 http://horms.net/projects/kexec/ 81 http://horms.net/projects/kexec/ 84 82 85 3) Unpack the tarball with the tar command, as 83 3) Unpack the tarball with the tar command, as follows:: 86 84 87 tar xvpzf kexec-tools.tar.gz 85 tar xvpzf kexec-tools.tar.gz 88 86 89 4) Change to the kexec-tools directory, as fol 87 4) Change to the kexec-tools directory, as follows:: 90 88 91 cd kexec-tools-VERSION 89 cd kexec-tools-VERSION 92 90 93 5) Configure the package, as follows:: 91 5) Configure the package, as follows:: 94 92 95 ./configure 93 ./configure 96 94 97 6) Compile the package, as follows:: 95 6) Compile the package, as follows:: 98 96 99 make 97 make 100 98 101 7) Install the package, as follows:: 99 7) Install the package, as follows:: 102 100 103 make install 101 make install 104 102 105 103 106 Build the system and dump-capture kernels 104 Build the system and dump-capture kernels 107 ----------------------------------------- 105 ----------------------------------------- 108 There are two possible methods of using Kdump. 106 There are two possible methods of using Kdump. 109 107 110 1) Build a separate custom dump-capture kernel 108 1) Build a separate custom dump-capture kernel for capturing the 111 kernel core dump. 109 kernel core dump. 112 110 113 2) Or use the system kernel binary itself as d 111 2) Or use the system kernel binary itself as dump-capture kernel and there is 114 no need to build a separate dump-capture ke 112 no need to build a separate dump-capture kernel. This is possible 115 only with the architectures which support a 113 only with the architectures which support a relocatable kernel. As 116 of today, i386, x86_64, ppc64, arm and arm6 !! 114 of today, i386, x86_64, ppc64, ia64, arm and arm64 architectures support 117 relocatable kernel. 115 relocatable kernel. 118 116 119 Building a relocatable kernel is advantageous 117 Building a relocatable kernel is advantageous from the point of view that 120 one does not have to build a second kernel for 118 one does not have to build a second kernel for capturing the dump. But 121 at the same time one might want to build a cus 119 at the same time one might want to build a custom dump capture kernel 122 suitable to his needs. 120 suitable to his needs. 123 121 124 Following are the configuration setting requir 122 Following are the configuration setting required for system and 125 dump-capture kernels for enabling kdump suppor 123 dump-capture kernels for enabling kdump support. 126 124 127 System kernel config options 125 System kernel config options 128 ---------------------------- 126 ---------------------------- 129 127 130 1) Enable "kexec system call" or "kexec file b !! 128 1) Enable "kexec system call" in "Processor type and features.":: 131 "Processor type and features.":: << 132 << 133 CONFIG_KEXEC=y or CONFIG_KEXEC_FILE=y << 134 129 135 And both of them will select KEXEC_CORE:: !! 130 CONFIG_KEXEC=y 136 << 137 CONFIG_KEXEC_CORE=y << 138 131 139 2) Enable "sysfs file system support" in "File 132 2) Enable "sysfs file system support" in "Filesystem" -> "Pseudo 140 filesystems." This is usually enabled by de 133 filesystems." This is usually enabled by default:: 141 134 142 CONFIG_SYSFS=y 135 CONFIG_SYSFS=y 143 136 144 Note that "sysfs file system support" might 137 Note that "sysfs file system support" might not appear in the "Pseudo 145 filesystems" menu if "Configure standard ke !! 138 filesystems" menu if "Configure standard kernel features (for small 146 is not enabled in "General Setup." In this !! 139 systems)" is not enabled in "General Setup." In this case, check the 147 itself to ensure that sysfs is turned on, a !! 140 .config file itself to ensure that sysfs is turned on, as follows:: 148 141 149 grep 'CONFIG_SYSFS' .config 142 grep 'CONFIG_SYSFS' .config 150 143 151 3) Enable "Compile the kernel with debug info" 144 3) Enable "Compile the kernel with debug info" in "Kernel hacking.":: 152 145 153 CONFIG_DEBUG_INFO=Y 146 CONFIG_DEBUG_INFO=Y 154 147 155 This causes the kernel to be built with deb 148 This causes the kernel to be built with debug symbols. The dump 156 analysis tools require a vmlinux with debug 149 analysis tools require a vmlinux with debug symbols in order to read 157 and analyze a dump file. 150 and analyze a dump file. 158 151 159 Dump-capture kernel config options (Arch Indep 152 Dump-capture kernel config options (Arch Independent) 160 ---------------------------------------------- 153 ----------------------------------------------------- 161 154 162 1) Enable "kernel crash dumps" support under " 155 1) Enable "kernel crash dumps" support under "Processor type and 163 features":: 156 features":: 164 157 165 CONFIG_CRASH_DUMP=y 158 CONFIG_CRASH_DUMP=y 166 159 167 And this will select VMCORE_INFO and CRASH_ << 168 CONFIG_VMCORE_INFO=y << 169 CONFIG_CRASH_RESERVE=y << 170 << 171 2) Enable "/proc/vmcore support" under "Filesy 160 2) Enable "/proc/vmcore support" under "Filesystems" -> "Pseudo filesystems":: 172 161 173 CONFIG_PROC_VMCORE=y 162 CONFIG_PROC_VMCORE=y 174 163 175 (CONFIG_PROC_VMCORE is set by default when 164 (CONFIG_PROC_VMCORE is set by default when CONFIG_CRASH_DUMP is selected.) 176 165 177 Dump-capture kernel config options (Arch Depen 166 Dump-capture kernel config options (Arch Dependent, i386 and x86_64) 178 ---------------------------------------------- 167 -------------------------------------------------------------------- 179 168 180 1) On i386, enable high memory support under " 169 1) On i386, enable high memory support under "Processor type and 181 features":: 170 features":: 182 171 183 CONFIG_HIGHMEM64G=y 172 CONFIG_HIGHMEM64G=y 184 173 185 or:: 174 or:: 186 175 187 CONFIG_HIGHMEM4G 176 CONFIG_HIGHMEM4G 188 177 189 2) With CONFIG_SMP=y, usually nr_cpus=1 need s !! 178 2) On i386 and x86_64, disable symmetric multi-processing support 190 command line when loading the dump-capture !! 179 under "Processor type and features":: 191 CPU is enough for kdump kernel to dump vmco << 192 180 193 However, you can also specify nr_cpus=X to !! 181 CONFIG_SMP=n 194 in kdump kernel. << 195 182 196 With CONFIG_SMP=n, the above things are not !! 183 (If CONFIG_SMP=y, then specify maxcpus=1 on the kernel command line >> 184 when loading the dump-capture kernel, see section "Load the Dump-capture >> 185 Kernel".) 197 186 198 3) A relocatable kernel is suggested to be bui !! 187 3) If one wants to build and use a relocatable kernel, 199 enable "Build a relocatable kernel" support !! 188 Enable "Build a relocatable kernel" support under "Processor type and 200 features":: 189 features":: 201 190 202 CONFIG_RELOCATABLE=y 191 CONFIG_RELOCATABLE=y 203 192 204 4) Use a suitable value for "Physical address 193 4) Use a suitable value for "Physical address where the kernel is 205 loaded" (under "Processor type and features 194 loaded" (under "Processor type and features"). This only appears when 206 "kernel crash dumps" is enabled. A suitable 195 "kernel crash dumps" is enabled. A suitable value depends upon 207 whether kernel is relocatable or not. 196 whether kernel is relocatable or not. 208 197 209 If you are using a relocatable kernel use C 198 If you are using a relocatable kernel use CONFIG_PHYSICAL_START=0x100000 210 This will compile the kernel for physical a 199 This will compile the kernel for physical address 1MB, but given the fact 211 kernel is relocatable, it can be run from a 200 kernel is relocatable, it can be run from any physical address hence 212 kexec boot loader will load it in memory re 201 kexec boot loader will load it in memory region reserved for dump-capture 213 kernel. 202 kernel. 214 203 215 Otherwise it should be the start of memory 204 Otherwise it should be the start of memory region reserved for 216 second kernel using boot parameter "crashke 205 second kernel using boot parameter "crashkernel=Y@X". Here X is 217 start of memory region reserved for dump-ca 206 start of memory region reserved for dump-capture kernel. 218 Generally X is 16MB (0x1000000). So you can 207 Generally X is 16MB (0x1000000). So you can set 219 CONFIG_PHYSICAL_START=0x1000000 208 CONFIG_PHYSICAL_START=0x1000000 220 209 221 5) Make and install the kernel and its modules 210 5) Make and install the kernel and its modules. DO NOT add this kernel 222 to the boot loader configuration files. 211 to the boot loader configuration files. 223 212 224 Dump-capture kernel config options (Arch Depen 213 Dump-capture kernel config options (Arch Dependent, ppc64) 225 ---------------------------------------------- 214 ---------------------------------------------------------- 226 215 227 1) Enable "Build a kdump crash kernel" support 216 1) Enable "Build a kdump crash kernel" support under "Kernel" options:: 228 217 229 CONFIG_CRASH_DUMP=y 218 CONFIG_CRASH_DUMP=y 230 219 231 2) Enable "Build a relocatable kernel" suppo 220 2) Enable "Build a relocatable kernel" support:: 232 221 233 CONFIG_RELOCATABLE=y 222 CONFIG_RELOCATABLE=y 234 223 235 Make and install the kernel and its modules 224 Make and install the kernel and its modules. 236 225 >> 226 Dump-capture kernel config options (Arch Dependent, ia64) >> 227 ---------------------------------------------------------- >> 228 >> 229 - No specific options are required to create a dump-capture kernel >> 230 for ia64, other than those specified in the arch independent section >> 231 above. This means that it is possible to use the system kernel >> 232 as a dump-capture kernel if desired. >> 233 >> 234 The crashkernel region can be automatically placed by the system >> 235 kernel at run time. This is done by specifying the base address as 0, >> 236 or omitting it all together:: >> 237 >> 238 crashkernel=256M@0 >> 239 >> 240 or:: >> 241 >> 242 crashkernel=256M >> 243 >> 244 If the start address is specified, note that the start address of the >> 245 kernel will be aligned to 64Mb, so if the start address is not then >> 246 any space below the alignment point will be wasted. >> 247 237 Dump-capture kernel config options (Arch Depen 248 Dump-capture kernel config options (Arch Dependent, arm) 238 ---------------------------------------------- 249 ---------------------------------------------------------- 239 250 240 - To use a relocatable kernel, 251 - To use a relocatable kernel, 241 Enable "AUTO_ZRELADDR" support under "Boot 252 Enable "AUTO_ZRELADDR" support under "Boot" options:: 242 253 243 AUTO_ZRELADDR=y 254 AUTO_ZRELADDR=y 244 255 245 Dump-capture kernel config options (Arch Depen 256 Dump-capture kernel config options (Arch Dependent, arm64) 246 ---------------------------------------------- 257 ---------------------------------------------------------- 247 258 248 - Please note that kvm of the dump-capture ker 259 - Please note that kvm of the dump-capture kernel will not be enabled 249 on non-VHE systems even if it is configured. 260 on non-VHE systems even if it is configured. This is because the CPU 250 will not be reset to EL2 on panic. 261 will not be reset to EL2 on panic. 251 262 252 crashkernel syntax !! 263 Extended crashkernel syntax 253 =========================== 264 =========================== 254 1) crashkernel=size@offset << 255 << 256 Here 'size' specifies how much memory to re << 257 and 'offset' specifies the beginning of thi << 258 "crashkernel=64M@16M" tells the system kern << 259 starting at physical address 0x01000000 (16 << 260 << 261 The crashkernel region can be automatically << 262 kernel at run time. This is done by specify << 263 or omitting it all together:: << 264 << 265 crashkernel=256M@0 << 266 << 267 or:: << 268 << 269 crashkernel=256M << 270 265 271 If the start address is specified, note tha !! 266 While the "crashkernel=size[@offset]" syntax is sufficient for most 272 kernel will be aligned to a value (which is !! 267 configurations, sometimes it's handy to have the reserved memory dependent 273 start address is not then any space below t !! 268 on the value of System RAM -- that's mostly for distributors that pre-setup 274 wasted. !! 269 the kernel command line to avoid a unbootable system after some memory has >> 270 been removed from the machine. 275 271 276 2) range1:size1[,range2:size2,...][@offset] !! 272 The syntax is:: 277 273 278 While the "crashkernel=size[@offset]" synta !! 274 crashkernel=<range1>:<size1>[,<range2>:<size2>,...][@offset] 279 configurations, sometimes it's handy to hav !! 275 range=start-[end] 280 on the value of System RAM -- that's mostly << 281 the kernel command line to avoid a unbootab << 282 been removed from the machine. << 283 276 284 The syntax is:: !! 277 For example:: 285 278 286 crashkernel=<range1>:<size1>[,<range2>: !! 279 crashkernel=512M-2G:64M,2G-:128M 287 range=start-[end] << 288 280 289 For example:: !! 281 This would mean: 290 282 291 crashkernel=512M-2G:64M,2G-:128M !! 283 1) if the RAM is smaller than 512M, then don't reserve anything >> 284 (this is the "rescue" case) >> 285 2) if the RAM size is between 512M and 2G (exclusive), then reserve 64M >> 286 3) if the RAM size is larger than 2G, then reserve 128M 292 287 293 This would mean: << 294 288 295 1) if the RAM is smaller than 512M, the << 296 (this is the "rescue" case) << 297 2) if the RAM size is between 512M and << 298 3) if the RAM size is larger than 2G, t << 299 << 300 3) crashkernel=size,high and crashkernel=size, << 301 << 302 If memory above 4G is preferred, crashkerne << 303 fulfill that. With it, physical memory is a << 304 so could be above 4G if system has more tha << 305 memory region will be allocated below 4G if << 306 << 307 When crashkernel=X,high is passed, kernel c << 308 region above 4G, low memory under 4G is nee << 309 three ways to get low memory: << 310 << 311 1) Kernel will allocate at least 256M me << 312 if crashkernel=Y,low is not specified << 313 2) Let user specify low memory size inst << 314 3) Specified value 0 will disable low me << 315 << 316 crashkernel=0,low << 317 289 318 Boot into System Kernel 290 Boot into System Kernel 319 ----------------------- !! 291 ======================= >> 292 320 1) Update the boot loader (such as grub, yaboo 293 1) Update the boot loader (such as grub, yaboot, or lilo) configuration 321 files as necessary. 294 files as necessary. 322 295 323 2) Boot the system kernel with the boot parame !! 296 2) Boot the system kernel with the boot parameter "crashkernel=Y@X", >> 297 where Y specifies how much memory to reserve for the dump-capture kernel >> 298 and X specifies the beginning of this reserved memory. For example, >> 299 "crashkernel=64M@16M" tells the system kernel to reserve 64 MB of memory >> 300 starting at physical address 0x01000000 (16MB) for the dump-capture kernel. 324 301 325 On x86 and x86_64, use "crashkernel=Y[@X]". !! 302 On x86 and x86_64, use "crashkernel=64M@16M". 326 start address 'X' is not necessary, kernel << 327 area. Unless an explicit start address is e << 328 303 329 On ppc64, use "crashkernel=128M@32M". 304 On ppc64, use "crashkernel=128M@32M". 330 305 >> 306 On ia64, 256M@256M is a generous value that typically works. >> 307 The region may be automatically placed on ia64, see the >> 308 dump-capture kernel config option notes above. >> 309 If use sparse memory, the size should be rounded to GRANULE boundaries. >> 310 331 On s390x, typically use "crashkernel=xxM". 311 On s390x, typically use "crashkernel=xxM". The value of xx is dependent 332 on the memory consumption of the kdump syst 312 on the memory consumption of the kdump system. In general this is not 333 dependent on the memory size of the product 313 dependent on the memory size of the production system. 334 314 335 On arm, the use of "crashkernel=Y@X" is no 315 On arm, the use of "crashkernel=Y@X" is no longer necessary; the 336 kernel will automatically locate the crash 316 kernel will automatically locate the crash kernel image within the 337 first 512MB of RAM if X is not given. 317 first 512MB of RAM if X is not given. 338 318 339 On arm64, use "crashkernel=Y[@X]". Note th 319 On arm64, use "crashkernel=Y[@X]". Note that the start address of 340 the kernel, X if explicitly specified, must 320 the kernel, X if explicitly specified, must be aligned to 2MiB (0x200000). 341 321 342 Load the Dump-capture Kernel 322 Load the Dump-capture Kernel 343 ============================ 323 ============================ 344 324 345 After booting to the system kernel, dump-captu 325 After booting to the system kernel, dump-capture kernel needs to be 346 loaded. 326 loaded. 347 327 348 Based on the architecture and type of image (r 328 Based on the architecture and type of image (relocatable or not), one 349 can choose to load the uncompressed vmlinux or 329 can choose to load the uncompressed vmlinux or compressed bzImage/vmlinuz 350 of dump-capture kernel. Following is the summa 330 of dump-capture kernel. Following is the summary. 351 331 352 For i386 and x86_64: 332 For i386 and x86_64: 353 333 354 - Use bzImage/vmlinuz if kernel is rel << 355 - Use vmlinux if kernel is not relocat 334 - Use vmlinux if kernel is not relocatable. >> 335 - Use bzImage/vmlinuz if kernel is relocatable. 356 336 357 For ppc64: 337 For ppc64: 358 338 359 - Use vmlinux 339 - Use vmlinux 360 340 >> 341 For ia64: >> 342 >> 343 - Use vmlinux or vmlinuz.gz >> 344 361 For s390x: 345 For s390x: 362 346 363 - Use image or bzImage 347 - Use image or bzImage 364 348 365 For arm: 349 For arm: 366 350 367 - Use zImage 351 - Use zImage 368 352 369 For arm64: 353 For arm64: 370 354 371 - Use vmlinux or Image 355 - Use vmlinux or Image 372 356 373 If you are using an uncompressed vmlinux image 357 If you are using an uncompressed vmlinux image then use following command 374 to load dump-capture kernel:: 358 to load dump-capture kernel:: 375 359 376 kexec -p <dump-capture-kernel-vmlinux-image 360 kexec -p <dump-capture-kernel-vmlinux-image> \ 377 --initrd=<initrd-for-dump-capture-kernel> - 361 --initrd=<initrd-for-dump-capture-kernel> --args-linux \ 378 --append="root=<root-dev> <arch-specific-op 362 --append="root=<root-dev> <arch-specific-options>" 379 363 380 If you are using a compressed bzImage/vmlinuz, 364 If you are using a compressed bzImage/vmlinuz, then use following command 381 to load dump-capture kernel:: 365 to load dump-capture kernel:: 382 366 383 kexec -p <dump-capture-kernel-bzImage> \ 367 kexec -p <dump-capture-kernel-bzImage> \ 384 --initrd=<initrd-for-dump-capture-kernel> \ 368 --initrd=<initrd-for-dump-capture-kernel> \ 385 --append="root=<root-dev> <arch-specific-op 369 --append="root=<root-dev> <arch-specific-options>" 386 370 387 If you are using a compressed zImage, then use 371 If you are using a compressed zImage, then use following command 388 to load dump-capture kernel:: 372 to load dump-capture kernel:: 389 373 390 kexec --type zImage -p <dump-capture-kernel 374 kexec --type zImage -p <dump-capture-kernel-bzImage> \ 391 --initrd=<initrd-for-dump-capture-kernel> \ 375 --initrd=<initrd-for-dump-capture-kernel> \ 392 --dtb=<dtb-for-dump-capture-kernel> \ 376 --dtb=<dtb-for-dump-capture-kernel> \ 393 --append="root=<root-dev> <arch-specific-op 377 --append="root=<root-dev> <arch-specific-options>" 394 378 395 If you are using an uncompressed Image, then u 379 If you are using an uncompressed Image, then use following command 396 to load dump-capture kernel:: 380 to load dump-capture kernel:: 397 381 398 kexec -p <dump-capture-kernel-Image> \ 382 kexec -p <dump-capture-kernel-Image> \ 399 --initrd=<initrd-for-dump-capture-kernel> \ 383 --initrd=<initrd-for-dump-capture-kernel> \ 400 --append="root=<root-dev> <arch-specific-op 384 --append="root=<root-dev> <arch-specific-options>" 401 385 >> 386 Please note, that --args-linux does not need to be specified for ia64. >> 387 It is planned to make this a no-op on that architecture, but for now >> 388 it should be omitted >> 389 402 Following are the arch specific command line o 390 Following are the arch specific command line options to be used while 403 loading dump-capture kernel. 391 loading dump-capture kernel. 404 392 405 For i386 and x86_64: !! 393 For i386, x86_64 and ia64: 406 394 407 "1 irqpoll nr_cpus=1 reset_devices" !! 395 "1 irqpoll maxcpus=1 reset_devices" 408 396 409 For ppc64: 397 For ppc64: 410 398 411 "1 maxcpus=1 noirqdistrib reset_device 399 "1 maxcpus=1 noirqdistrib reset_devices" 412 400 413 For s390x: 401 For s390x: 414 402 415 "1 nr_cpus=1 cgroup_disable=memory" !! 403 "1 maxcpus=1 cgroup_disable=memory" 416 404 417 For arm: 405 For arm: 418 406 419 "1 maxcpus=1 reset_devices" 407 "1 maxcpus=1 reset_devices" 420 408 421 For arm64: 409 For arm64: 422 410 423 "1 nr_cpus=1 reset_devices" !! 411 "1 maxcpus=1 reset_devices" 424 412 425 Notes on loading the dump-capture kernel: 413 Notes on loading the dump-capture kernel: 426 414 427 * By default, the ELF headers are stored in EL 415 * By default, the ELF headers are stored in ELF64 format to support 428 systems with more than 4GB memory. On i386, 416 systems with more than 4GB memory. On i386, kexec automatically checks if 429 the physical RAM size exceeds the 4 GB limit 417 the physical RAM size exceeds the 4 GB limit and if not, uses ELF32. 430 So, on non-PAE systems, ELF32 is always used 418 So, on non-PAE systems, ELF32 is always used. 431 419 432 The --elf32-core-headers option can be used 420 The --elf32-core-headers option can be used to force the generation of ELF32 433 headers. This is necessary because GDB curre 421 headers. This is necessary because GDB currently cannot open vmcore files 434 with ELF64 headers on 32-bit systems. 422 with ELF64 headers on 32-bit systems. 435 423 436 * The "irqpoll" boot parameter reduces driver 424 * The "irqpoll" boot parameter reduces driver initialization failures 437 due to shared interrupts in the dump-capture 425 due to shared interrupts in the dump-capture kernel. 438 426 439 * You must specify <root-dev> in the format co 427 * You must specify <root-dev> in the format corresponding to the root 440 device name in the output of mount command. 428 device name in the output of mount command. 441 429 442 * Boot parameter "1" boots the dump-capture ke 430 * Boot parameter "1" boots the dump-capture kernel into single-user 443 mode without networking. If you want network 431 mode without networking. If you want networking, use "3". 444 432 445 * We generally don't have to bring up a SMP ke 433 * We generally don't have to bring up a SMP kernel just to capture the 446 dump. Hence generally it is useful either to 434 dump. Hence generally it is useful either to build a UP dump-capture 447 kernel or specify maxcpus=1 option while loa 435 kernel or specify maxcpus=1 option while loading dump-capture kernel. 448 Note, though maxcpus always works, you had b 436 Note, though maxcpus always works, you had better replace it with 449 nr_cpus to save memory if supported by the c 437 nr_cpus to save memory if supported by the current ARCH, such as x86. 450 438 451 * You should enable multi-cpu support in dump- 439 * You should enable multi-cpu support in dump-capture kernel if you intend 452 to use multi-thread programs with it, such a 440 to use multi-thread programs with it, such as parallel dump feature of 453 makedumpfile. Otherwise, the multi-thread pr 441 makedumpfile. Otherwise, the multi-thread program may have a great 454 performance degradation. To enable multi-cpu 442 performance degradation. To enable multi-cpu support, you should bring up an 455 SMP dump-capture kernel and specify maxcpus/ !! 443 SMP dump-capture kernel and specify maxcpus/nr_cpus, disable_cpu_apicid=[X] >> 444 options while loading it. 456 445 457 * For s390x there are two kdump modes: If a EL 446 * For s390x there are two kdump modes: If a ELF header is specified with 458 the elfcorehdr= kernel parameter, it is used 447 the elfcorehdr= kernel parameter, it is used by the kdump kernel as it 459 is done on all other architectures. If no el 448 is done on all other architectures. If no elfcorehdr= kernel parameter is 460 specified, the s390x kdump kernel dynamicall 449 specified, the s390x kdump kernel dynamically creates the header. The 461 second mode has the advantage that for CPU a 450 second mode has the advantage that for CPU and memory hotplug, kdump has 462 not to be reloaded with kexec_load(). 451 not to be reloaded with kexec_load(). 463 452 464 * For s390x systems with many attached devices 453 * For s390x systems with many attached devices the "cio_ignore" kernel 465 parameter should be used for the kdump kerne 454 parameter should be used for the kdump kernel in order to prevent allocation 466 of kernel memory for devices that are not re 455 of kernel memory for devices that are not relevant for kdump. The same 467 applies to systems that use SCSI/FCP devices 456 applies to systems that use SCSI/FCP devices. In that case the 468 "allow_lun_scan" zfcp module parameter shoul 457 "allow_lun_scan" zfcp module parameter should be set to zero before 469 setting FCP devices online. 458 setting FCP devices online. 470 459 471 Kernel Panic 460 Kernel Panic 472 ============ 461 ============ 473 462 474 After successfully loading the dump-capture ke 463 After successfully loading the dump-capture kernel as previously 475 described, the system will reboot into the dum 464 described, the system will reboot into the dump-capture kernel if a 476 system crash is triggered. Trigger points are 465 system crash is triggered. Trigger points are located in panic(), 477 die(), die_nmi() and in the sysrq handler (ALT 466 die(), die_nmi() and in the sysrq handler (ALT-SysRq-c). 478 467 479 The following conditions will execute a crash 468 The following conditions will execute a crash trigger point: 480 469 481 If a hard lockup is detected and "NMI watchdog 470 If a hard lockup is detected and "NMI watchdog" is configured, the system 482 will boot into the dump-capture kernel ( die_n 471 will boot into the dump-capture kernel ( die_nmi() ). 483 472 484 If die() is called, and it happens to be a thr 473 If die() is called, and it happens to be a thread with pid 0 or 1, or die() 485 is called inside interrupt context or die() is 474 is called inside interrupt context or die() is called and panic_on_oops is set, 486 the system will boot into the dump-capture ker 475 the system will boot into the dump-capture kernel. 487 476 488 On powerpc systems when a soft-reset is genera 477 On powerpc systems when a soft-reset is generated, die() is called by all cpus 489 and the system will boot into the dump-capture 478 and the system will boot into the dump-capture kernel. 490 479 491 For testing purposes, you can trigger a crash 480 For testing purposes, you can trigger a crash by using "ALT-SysRq-c", 492 "echo c > /proc/sysrq-trigger" or write a modu 481 "echo c > /proc/sysrq-trigger" or write a module to force the panic. 493 482 494 Write Out the Dump File 483 Write Out the Dump File 495 ======================= 484 ======================= 496 485 497 After the dump-capture kernel is booted, write 486 After the dump-capture kernel is booted, write out the dump file with 498 the following command:: 487 the following command:: 499 488 500 cp /proc/vmcore <dump-file> 489 cp /proc/vmcore <dump-file> 501 490 502 or use scp to write out the dump file between << 503 << 504 scp /proc/vmcore remote_username@remote_ip: << 505 << 506 You can also use makedumpfile utility to write << 507 with specified options to filter out unwanted << 508 << 509 makedumpfile -l --message-level 1 -d 31 /pr << 510 491 511 Analysis 492 Analysis 512 ======== 493 ======== 513 494 514 Before analyzing the dump image, you should re 495 Before analyzing the dump image, you should reboot into a stable kernel. 515 496 516 You can do limited analysis using GDB on the d 497 You can do limited analysis using GDB on the dump file copied out of 517 /proc/vmcore. Use the debug vmlinux built with 498 /proc/vmcore. Use the debug vmlinux built with -g and run the following 518 command:: 499 command:: 519 500 520 gdb vmlinux <dump-file> 501 gdb vmlinux <dump-file> 521 502 522 Stack trace for the task on processor 0, regis 503 Stack trace for the task on processor 0, register display, and memory 523 display work fine. 504 display work fine. 524 505 525 Note: GDB cannot analyze core files generated 506 Note: GDB cannot analyze core files generated in ELF64 format for x86. 526 On systems with a maximum of 4GB of memory, yo 507 On systems with a maximum of 4GB of memory, you can generate 527 ELF32-format headers using the --elf32-core-he 508 ELF32-format headers using the --elf32-core-headers kernel option on the 528 dump kernel. 509 dump kernel. 529 510 530 You can also use the Crash utility to analyze 511 You can also use the Crash utility to analyze dump files in Kdump 531 format. Crash is available at the following UR 512 format. Crash is available at the following URL: 532 513 533 https://github.com/crash-utility/crash 514 https://github.com/crash-utility/crash 534 515 535 Crash document can be found at: 516 Crash document can be found at: 536 https://crash-utility.github.io/ 517 https://crash-utility.github.io/ 537 518 538 Trigger Kdump on WARN() 519 Trigger Kdump on WARN() 539 ======================= 520 ======================= 540 521 541 The kernel parameter, panic_on_warn, calls pan 522 The kernel parameter, panic_on_warn, calls panic() in all WARN() paths. This 542 will cause a kdump to occur at the panic() cal 523 will cause a kdump to occur at the panic() call. In cases where a user wants 543 to specify this during runtime, /proc/sys/kern 524 to specify this during runtime, /proc/sys/kernel/panic_on_warn can be set to 1 544 to achieve the same behaviour. 525 to achieve the same behaviour. 545 526 546 Trigger Kdump on add_taint() 527 Trigger Kdump on add_taint() 547 ============================ 528 ============================ 548 529 549 The kernel parameter panic_on_taint facilitate 530 The kernel parameter panic_on_taint facilitates a conditional call to panic() 550 from within add_taint() whenever the value set 531 from within add_taint() whenever the value set in this bitmask matches with the 551 bit flag being set by add_taint(). 532 bit flag being set by add_taint(). 552 This will cause a kdump to occur at the add_ta 533 This will cause a kdump to occur at the add_taint()->panic() call. 553 534 554 Contact 535 Contact 555 ======= 536 ======= 556 537 557 - kexec@lists.infradead.org !! 538 - Vivek Goyal (vgoyal@redhat.com) >> 539 - Maneesh Soni (maneesh@in.ibm.com) 558 540 559 GDB macros 541 GDB macros 560 ========== 542 ========== 561 543 562 .. include:: gdbmacros.txt 544 .. include:: gdbmacros.txt 563 :literal: 545 :literal:
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.