78 lines
1.5 KiB
Plaintext
78 lines
1.5 KiB
Plaintext
|
_add_pstore_log() {
|
||
|
if [ $# -le 3 ]; then
|
||
|
return
|
||
|
fi
|
||
|
|
||
|
local backend="$1"
|
||
|
local event="$2"
|
||
|
local date="$3"
|
||
|
|
||
|
yesno "Include log of $event at $(date -d @$date +%c) stored by $backend?" yep
|
||
|
if [ $REPLY != yep ]; then
|
||
|
return
|
||
|
fi
|
||
|
|
||
|
echo >&3
|
||
|
echo "*** Log of $event at $(date -d @$date -Iseconds) from $backend" >&3
|
||
|
|
||
|
shift 3
|
||
|
for file in "$@"; do
|
||
|
tail -n +2 "$file" | sed 's/^<.>//' >&3
|
||
|
done
|
||
|
}
|
||
|
|
||
|
add_pstore() {
|
||
|
local backend
|
||
|
local i
|
||
|
local j
|
||
|
local file
|
||
|
local date
|
||
|
local head
|
||
|
local event
|
||
|
local log_files
|
||
|
|
||
|
if ! mountpoint -q /sys/fs/pstore; then
|
||
|
return 0
|
||
|
fi
|
||
|
|
||
|
set -- /sys/fs/pstore/dmesg-*-1
|
||
|
backend=${1#*/dmesg-}
|
||
|
backend=${backend%-1}
|
||
|
if [ "$backend" = '*' ]; then
|
||
|
return 0
|
||
|
fi
|
||
|
|
||
|
i=1
|
||
|
while [ -f /sys/fs/pstore/dmesg-$backend-$i ]; do
|
||
|
file=/sys/fs/pstore/dmesg-$backend-$i
|
||
|
head="$(head -1 "$file")"
|
||
|
|
||
|
# Is this the first part of a log?
|
||
|
if [ "x${head% Part1}" != "x$head" ]; then
|
||
|
# Flush previous log, if any
|
||
|
_add_pstore_log "$backend" "$event" "$date" $log_files
|
||
|
|
||
|
event="${head% Part1}"
|
||
|
date=$(stat -c %Y $file)
|
||
|
log_files=
|
||
|
j=1
|
||
|
fi
|
||
|
|
||
|
if [ "x$head" = "x$event Part$j" ]; then
|
||
|
# Each part is prepended to the list, because they're numbered
|
||
|
# backward in log history
|
||
|
log_files="$file $log_files"
|
||
|
j=$((j + 1))
|
||
|
fi
|
||
|
|
||
|
i=$((i + 1))
|
||
|
done
|
||
|
|
||
|
# Flush last log, if any
|
||
|
_add_pstore_log "$backend" "$event" "$date" $log_files
|
||
|
}
|
||
|
|
||
|
ask_pstore() {
|
||
|
add_pstore
|
||
|
}
|