2 # Filename: forensic-mark-readonly
3 # Purpose: force device to readonly mode when booting with bootoption forensic/readonly
4 # Authors: grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
5 # Bug-Reports: see http://grml.org/bugs/
6 # License: This file is licensed under the GPL v2 or any later version.
7 ################################################################################
9 function get_blockdev_dir() {
10 for dir in /sys/subsystem/block/ /sys/class/block/ /sys/block/ ; do
11 [ -d $dir ] && echo $dir && return
23 [ "$(blockdev --getro $1)" = "1" ] && return 0 || return 1
27 # check for forensic/readonly bootoption
29 # we get $DEVNAME via udev's environment
30 if [ -n "$DEVNAME" ] ; then
32 SYS_DIR=$(get_blockdev_dir)
34 if [ -n $SYS_DIR ] && [ -n $NAME ] ; then
35 DEVICE=$SYS_DIR/*/$NAME
36 if [ -d $DEVICE ] ; then
38 PARENT=$(base $PARENT)
43 if is_ro "$DEVNAME" ; then
44 logger "forensic mode: device $DEVNAME already set to readonly mode, nothing to do"
45 elif [ -n "$PARENT" ] && ! is_ro "$PARENT" ; then
46 logger "forensic mode: parent device $PARENT is set readwrite, not modifying"
47 logger "forensic mode: use blockdev --setro $DEVNAME to set it manually"
49 logger "forensic mode: setting $DEVNAME [$ID_SERIAL] to readonly"
50 if blockdev --setro "$DEVNAME" ; then
51 logger "|-> done; execute 'blockdev --setrw $DEVNAME' to unlock"
53 logger "|-> error while executing blockdev: $(blockdev --setro $DEVNAME 2>&1)"
59 ## END OF FILE #################################################################