Динамический привод Hotswaps

Мое подключение к Интернету отключилось, когда я собирался опубликовать этот вопрос, поэтому мне пришлось попробовать еще кое-что самостоятельно и в конце концов придумать, как это сделать. Но поскольку я уже написал вопрос, я чувствую, что могу поделиться своими новыми знаниями. Я также призываю другие ответы, которые дают больше понимания.

Мое решение заключалось в том, чтобы изменить file.gp на

set terminal dumb
plot '

, а затем скорректировать цепь труб, как это

cat file.txt |
grep CU | #I put an identifier in the file 
perl -ne 'print +(split)[3], "\n"' | #strip the identifier
cat | #this makes gnuplot accept the output from the pipe
gnuplot file.gp 

-121--111212-

Идея сокета - старый почтенный протокол времени, документированный в RFC 868 . Утилита, синхронизирующая системное время на основе этого протокола, называется rdate .

Лучше использовать NTP, потому что NTP отслеживает, как часы двух систем естественным образом расходятся во времени, и исправляет их. Протокол времени должен быть зарезервирован для ситуаций, когда NTP неосуществим, таких как встроенные системы, которые слишком ограничены ресурсами, чтобы запустить что-то такое же сложное, как NTP (которым rpi не является).

-121--122950-

Вы сравнивали их содержимое сразу после записи дублированного содержимого? Если да, они должны выйти точно такими же . Например,

# Duplicate
dd bs=16M if=/dev/sdg of=/dev/sdk

# Comparing should produce no output
cmp /dev/sdg /dev/sdk
# Compare, listing each byte difference; also no output
cmp -l /dev/sdg /dev/sdk

Это верно, только если карты имеют точно такой же размер. Иногда даже разные партии карт, которые являются одним и тем же производителем и моделью, выходят с несколько разными размерами. Используйте blockdev --getsize64 для получения точного размера устройства.

Кроме того, если обе карты имеют точно одинаковые размеры, но вы написали изображение на обе карты, которое было меньше, чем емкость карт, то мусор, который приходит после окончания изображения, может привести к возникновению различий.

После установки какой-либо файловой системы на устройстве вы начнете видеть различия. Реализация файловой системы будет записывать в файловую систему различные данные, такие как пустой журнал или флаг/метка времени, чтобы пометить файловую систему как чистую, и тогда вы больше не увидите идентичное содержимое. Я считаю, что это может быть так при некоторых обстоятельствах, даже если вы монтируете файловую систему только для чтения.

1
06.08.2018, 00:27
1 ответ

Мне нужно было решить несколько проблем. Во-первых, for block in $(...)дал 4 строки данных, а не одну. Строка также была крайне скупа на то, как я добавил переменную, и пропускала ее, если она не была идеальной. При получении BLK и UUID важно отметить, что апостроф 'не считывает переменные.

#!/bin/sh
echo "New Drive Detected" >> /plex/log.txt
echo "\tLABEL: ${ID_SERIAL_SHORT}" >> /plex/log.txt
echo "\tNAME: ${DEVNAME}" >> /plex/log.txt

#fixed to collect output line, instead of arguments
for block in "$( blkid -t TYPE=ntfs | grep ${DEVNAME} )";
do
    echo "\tPartition Found: $block" >> /plex/log.txt
    BLK=$(echo "$block" | sed -rn 's/^(\/dev\/sd[a-z][0-9]):.*\bUUID\b[=]["]([^"]*)["].*$/\1/p')
    UUID=$(echo "$block" | sed -rn 's/^(\/dev\/sd[a-z][0-9]):.*\bUUID\b[=]["]([^"]*)["].*$/\2/p')
    echo "\tMounting Point: $BLK > /media/$UUID" >> /plex/log.txt
    mkdir -p "/media/$UUID"
    #repair in case of exclusivity
    #ntfsfix "$BLK"
    mount -t ntfs-3g -U "$UUID" "/media/$UUID"
    if [ -d "/media/$UUID/movies" ]; then
        echo "\tMovie Directory Found" >> /plex/log.txt
        mkdir -p "/plex/movies"
        ln -s "/media/$UUID/movies" "/plex/movies/$UUID"
    fi
    if [ -d "/media/$UUID/tvseries" ]; then
        echo "\tTV Directory Found" >> /plex/log.txt
        mkdir -p "/plex/tvseries"
        ln -s "/media/$UUID/tvseries" "/plex/tvseries/$UUID"
    fi
    if [ -d "/media/$UUID/anime" ]; then
        echo "\tAnime Directory Found" >> /plex/log.txt
        mkdir -p "/plex/anime"
        ln -s "/media/$UUID/anime" "/plex/anime/$UUID"
    fi
    if [ -d "/media/$UUID/music" ]; then
        echo "\tMusic Directory Found" >> /plex/log.txt
                mkdir -p "/plex/music"
                ln -s "/media/$UUID/music" "/plex/music/$UUID"
    fi
    if [ -d "/media/$UUID/audiobooks" ]; then
        echo "\tAudio Book Directory Found" >> /plex/log.txt
        mkdir -p "/plex/audiobooks"
        ln -s "/media/$UUID/audiobooks" "/plex/audiobooks/$UUID"
    fi
done

Этот скрипт работает до тех пор, пока на диске нет флага «Windows Protected», исправленного NTFSFIX "$BLK", но как бы я ни старался, я не могу заставить его исправляться синхронно с активностью скрипта (новая проблема, которую мне нужно исследовать ). Я подтвердил, что он ВЫПОЛНЯЕТСЯ, но последующее монтирование, похоже, выполняется до его завершения. Я предполагаю это, потому что мне нужно сначала размонтировать диск, затем запустить NTFSFIX, а затем снова смонтировать диск. Я также обнаружил небольшую проблему, связанную с тем, что диск не размонтировался автоматически, и каждый последующий раз он подключался с новой буквой диска. Это было решено другим скриптом с другим аргументом UDEV:

UDEV :/etc/udev/rules.d/sata -rackmount.rules

ACTION=="add", KERNEL=="sd?", RUN+="/plex/new_drive.sh"
ACTION=="remove", KERNEL=="sd??", RUN+="/plex/rem_drive.sh"

/plex/rem _drive.sh

#!/bin/sh

echo "Drive Lost" >> /plex/log.txt
echo "\tLABEL: ${ID_SERIAL_SHORT}" >> /plex/log.txt
echo "\tNAME: ${DEVNAME}" >> /plex/log.txt

echo "\tDismounting..." >> /plex/log.txt
umount "${DEVNAME}"
echo "\tDone!" >> /plex/log.txt
0
28.01.2020, 00:31

Теги

Похожие вопросы