Если вы хотите навсегда уничтожить том bcache, вам необходимо стереть суперблок bcache с нижележащего устройства. Эта операция не предоставляется через интерфейс sysfs. Итак:
Остановите устройство bcache, как обычно, с помощью echo 1> / sys / block /
. На более новых ядрах это может привести к ошибке «Permission denied». В таком случае вам нужно будет остановить устройство по его UUID, как объяснено здесь :
ls -la / sys / block / / bcache / set
# lrwxrwxrwx 1 root root 0 19 июня, 18:42 / sys / block / / bcache / set -> ../../../../../../../../fs/bcache /
# Примечание. UUID - это что-то вроде "89f4c92a-7fae-4d04-ab3c-7c1dd41fa1a5"
echo 1> / sys / fs / bcache / / stop
Удалите суперблок с помощью head -c 1M / dev / zero> / dev /
. (Если у вас достаточно новая версия util-linux
, вы можете использовать вместо нее wipefs
, что более точно подходит для очистки подписи bcache: wipefs -a / dev /
.) Очевидно, вам нужно быть осторожным, чтобы выбрать правильное устройство, потому что это деструктивная операция, которая сотрет заголовок устройства. Обратите внимание, что у вас больше не будет доступа к каким-либо данным в томе bcache!
Вы можете легко сделать это в bash:
input='2.6.4.0-91'
input=${input%-*}
input=${input//./}
echo "$input"
2640
Это решение подходит для тех, кто знает регулярные выражения и не знает sed
или awk
.
expr
и tr
взяты из "GNU Core Utilities". К сожалению, expr
использует основное регулярное выражение , и каждое регулярное выражение привязано к ^
.
expr "$(hdp-select)" : '.*oop-client - \(\([0-9]\+\.\?\)\+\)-[0-9]\+' | tr -d '.'
Результат:
2640
Это можно сделать прямо в оболочке (bash):
$ re='hadoop-client - ([0-9]+).([0-9]+).([0-9]+).([0-9]+)-'
$ a=$(hdp-select)
$ (IFS='' ; [[ $a =~ $re ]] && echo "${BASH_REMATCH[*]:1}" )
2640
Если вы ограничены более старыми оболочками, используйте аналогичное регулярное выражение сexpr
:
$ expr "$(hdp-select)" : '.*client - \([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)-.*' | sed 's/\.//g'