Прочитав комментарии telcoM и покопавшись в журналах и справочных страницах, я теперь могу ответить на свой вопрос.
По какой-то причине информация о VG, к которой принадлежит PV /dev/sdc, была потеряна во время перезагрузки и больше не возвращалась.
Я не совсем понимаю решение (возможно, кто-то, кто понимает, может добавить некоторые детали ),но сработало следующее. Первый
> vgscan --cache Found volume group "r3vg" using metadata type lvm2
возвращает мою конфигурацию VG. Теперь PV снова известен
> pvs /dev/sdc r3vg lvm2 a-- 72.76t 26.39t
LV также снова известен, но неактивен
> lvscan inactive '/dev/r3vg/p0' [46.37 TiB] inherit
И, наконец,
> lvchange -ay r3vg/p0
возвращает его.
Почему при перезагрузке не подхватывается конфигурация ВГ мне непонятно. Если у кого-то есть какие-либо предложения, добавьте их в комментарии, пожалуйста.
FWIW Я думаю, что это самый быстрый способ сделать это в сценарии оболочки:
$ cat tst.sh
#!/usr/bin/env bash
for file in "$@"; do
while IFS='"' read -ra a; do
sha=$(printf '%s' "${a[1]}" | sha1sum)
sha="${sha% *}"
printf '%s"%s"%s"%s"%s"%s"%s"\n' "${a[0]}" "$sha" "${a[2]}" "${a[3]}" "${a[4]}" "$sha" "${a[6]}"
done < "$file"
done
$./tst.sh file
$ cat file
"e8bb6adbb44a2f4c795da6986c8f008d05938fac" : ["200000", "e8bb6adbb44a2f4c795da6986c8f008d05938fac"]"
"aaac41fe0491d5855591b849453a58c206d424df" : ["200000", "aaac41fe0491d5855591b849453a58c206d424df"]"
но, как я упоминал в комментариях, для скорости выполнения лучше использовать инструмент со встроенной функциональностью sha1sum, например. питон.
По совету Эда Мортона, с небольшой помощью Python.
Создайте скрипт Python /tmp/sha1.py и сделайте его исполняемым
#! /usr/local/bin/python -u
import hashlib
import sys
for line in sys.stdin:
words = line.split()
str_hash=hashlib.sha1(words[0].encode())
words[0] = str_hash.hexdigest()
print(" ".join(words))
Первая строка должна содержать правильное местоположение вашего питона, но не удаляйте «-u».
Затем ksh-скрипт, который тоже нужно сделать исполняемым.
#! /usr/bin/ksh
/tmp/sha1.py |&
for y in files*
do
while read A B
do
eval "echo $A" >&p
read A <&p
echo \"$A\" $B
done < $y > TMP.$y
mv TMP.$y $y
done
# terminate sha1.py
exec 3>&p
exec 3>&-
Теперь, если вам нужна производительность, вы должны позволить python обрабатывать сразу весь файл. Следующие скрипты обрабатывают каждую строку ввода как имя файла и выполняют вашу грязную работу:
#! /usr/local/bin/python
import hashlib
import os
import sys
for IFileNmX in sys.stdin:
IFileNm = IFileNmX.strip()
IFile = open(IFileNm,'r')
OFileNm = ".".join(["TMP",IFileNm])
OFile = open(OFileNm,'w')
for line in IFile.readlines():
words = line.split()
word1 = words[0].strip('"')
str_hash=hashlib.sha1(word1.encode())
words[0] = "".join(['"',str_hash.hexdigest(),'"'])
OFile.write("".join([" ".join(words),'\n']))
OFile.close()
IFile.close()
os.rename(OFileNm,IFileNm)
Если вы назовете этот скрипт /tmp/sha1f.py и сделаете его исполняемым, интересно, сколько минут
ls files* | /tmp/sha1f.py
возьмет. Моей системе потребовалось 12 секунд, чтобы обработать 400-мегабайтный файл из миллиона строк. Но это хвастовство, конечно.