blkid устройства не выводит информацию, когда скрипт запускается автоматически - PullRequest
0 голосов
/ 07 марта 2019

Скрипт работает в хранилище Qnap. Я создал это правило udev:

ACTION=="add", KERNEL=="sd*", RUN+="/bin/sh /share/MD0_DATA/Images/scripts/usb.sh /dev/%k"

Я знаю, что в данный момент он в грязном состоянии, но работает.

usb.sh - это:

# CONFIGURATION
DEBUG=1 # set to 1 for debugging output
DEST="/share/MD0_DATA/Images/" # destination for files
BEEP=0 # do we beep?

DEVICE="$1" # the device name
NAME="$2"
#echo "$DEVICE $NAME" >> /share/MD0_DATA/Images/scripts/test.log

#LOGFACILITY="kernel.info" # for debugging output
LOGFILE="/share/MD0_DATA/Images/scripts/action.log"
#sleep 4

# won't work currently, TODO: fix
#LABEL=$(blkid $DEVICE -s LABEL | awk -F '"' '{print $2}')
#LABEL=$(echo -e "${LABEL}" | tr -d '[:space:]')

DATE=$(date '+%Y-%m-%d-%H.%M.%S')
PRINTDATE=$(date '+%d.%m.%Y %H:%M:%S')

if [ $BEEP == 1 ]; then /sbin/hal_app --se_buzzer enc_id=0,mode=101; fi
echo "$PRINTDATE Starting USB script for $DEVICE $LABEL" >> $LOGFILE

sleep 5

mount | grep "$DEVICE"
FOO="$?"

if [ $FOO == 0 ];
then
    PRINTDATE=$(date '+%d.%m.%Y %H:%M:%S')
    echo "$PRINTDATE $DEVICE is mounted, trying to unmount..." >> $LOGFILE
    umount $DEVICE
fi

# won't work
USB_NAME=$(blkid | grep -oP '(?<=LABEL=").+?(?=")')
echo "blkid $DEVICE -s LABEL -> $USB_NAME" >> /share/MD0_DATA/Images/scripts/test.log

LABEL=$(echo -e "${LABEL}" | tr -d '[:space:]')
FILE="$DEST$DATE-$LABEL.img"

PRINTDATE=$(date '+%d.%m.%Y %H:%M:%S')
echo "$PRINTDATE Writing image of $DEVICE to $FILE" >> $LOGFILE
dd if=$DEVICE of=$FILE
DD_EXIT_STATUS=$?
#echo $DD_EXIT_STATUS >> $LOGFILE

# check if overall dd operation worked
if [ $DD_EXIT_STATUS gt 0 ]; 
then
    PRINTDATE=$(date '+%d.%m.%Y %H:%M:%S')
    echo "$PRINTDATE ERROR: creating image for $DEVICE failed!" >> $LOGFILE
else
    PRINTDATE=$(date '+%d.%m.%Y %H:%M:%S')
    echo "$PRINTDATE SUCCESS: image for $DEVICE created." >> $LOGFILE
fi

MD5_DEVICE=$(dd if=$DEVICE status=none | md5sum)
MD5_IMAGE=$(dd if=$FILE status=none | md5sum)

# check if md5sum of created image and device match
if [ $MD5_DEVICE != $MD5_IMAGE ]; 
then
    if [ $BEEP == 1 ];
    then
        /sbin/hal_app --se_buzzer enc_id=0,mode=101
        /sbin/hal_app --se_buzzer enc_id=0,mode=101
        /sbin/hal_app --se_buzzer enc_id=0,mode=101
        /sbin/hal_app --se_buzzer enc_id=0,mode=101
    fi
    PRINTDATE=$(date '+%d.%m.%Y %H:%M:%S')
    echo "$PRINTDATE ERROR: md5 hashes of $DEVICE and $FILE don't match!" >> $LOGFILE
else
    if [ $BEEP == 1 ];
        then
        /sbin/hal_app --se_buzzer enc_id=0,mode=101
        /sbin/hal_app --se_buzzer enc_id=0,mode=101
    fi
    PRINTDATE=$(date '+%d.%m.%Y %H:%M:%S')
    echo "$PRINTDATE SUCCESS: md5 hashes of $DEVICE and $FILE match" >> $LOGFILE
fi

Моя ошибка в том, что blklist не даст мне никакого контента. Когда я запускаю скрипт вручную, blklist дает значение.

Вопрос: Почему я не получаю никакого значения blklist, когда скрипт запускается по правилу udev?

...