Возможный обходной путь, предложенный ниже @frostschutz, состоит в изменении размера байта на число, кратное смещению (, в данном случае 4096 ), т.е.
# cryptsetup -b 377520128 resize cryptdisk
Это было обнаружено, потому что в dmseg была строка, в которой говорилось, что «не выровнено по размеру логического блока h/w 4096 (диска )». Вы также можете отметить смещение в статусе cryptsetup.
Тем не менее, это было зарегистрировано как ошибка в cryptsetup здесь(опять же благодаря frostschutz ), так как проверка размера должна происходить заранее.
Надеемся, что это работает для всех, кто столкнулся с проблемой. Обратите внимание, что после того, как я выполнил первую команду с неизмененным размером байта, я все еще получал сообщения об ошибках после изменения размера байта. Только когда я закрыл и снова открыл устройство, решение frostscutz сработало.
т.е.:
# vgchange -an
# cryptsetup luksClose cryptdisk
Затем снова откройте его и перезапустите процесс с измененным размером байта;
# cryptsetup luksOpen /dev/device cryptdisk
# vgchange -ay
# cryptsetup -b 377520128 resize cryptdisk
Скрипт с подробными комментариями:
#!/bin/bash
#using the template variable is redundant, but
#I assume you want to use that lateron
template="A.tsv"
#write header from template and create file "output.txt"
#overwrites old version of "output.txt" if existing
head -n 1 ${template} > output.txt
#loop over files:
for bla in data/*.txt ; do
#get basename without file suffix, add result to "output.txt"
basename -s ".txt" ${bla} >> output.txt
done
Обратите внимание, что вы должны предпочесть использовать ${variable}
или "$varaible"
, особенно для имен файлов, иначе сценарий сломается в случае файлов с, например. пробелы в имени.
Почему подходawk
-не удался?
awk
запускается на основе -строк. В вашем коде было это:
awk -v variable=$r '{print variable}' ${file}
Итак, если у вас есть файл с 10 строками, приведенная выше команда будет выполнена 10 раз и приведет к 10 строкам переменной. Для остановки awk
после одного запуска используйте exit
или укажите строку, в которой должна выполняться команда:
#execute command only on line no. 1
awk 'NR == 1 { print $1 }' file
#execute command and quit awk
awk '{ print 1 ; exit }'
Где еще оригинальный сценарий потерпел неудачу?
>>
добавит вывод в файл, где >
перезапишет его. В вашем сценарии у вас был цикл с этим содержимым:
( head -n 1 $template
awk [...] $bla ) > test_name.tsv
Случилось так, что для каждого совпадения в data/*txt
эта команда будет выполняться, таким образом перезаписывая предыдущие версии test_name.tsv
и оставляя вам только последний запуск. Обратите внимание, как вы также переписывали заголовок при каждом запуске цикла.