Поскольку вы используете LVM, нет необходимости изменять разделы. Кроме того, вы используете виртуализацию, поэтому шаги:
pvcreate /dev/sdb
(предположим, что /dev/sdb
ваш новый диск)vgextend centos /dev/sdb
lvresize -L<amount of space you want to add>
/dev/mapper/centos-home
/home
resize2fs /dev/mapper/centos-home
П.С. Если вы хотите использовать пространство из корневого LV, вы должны перезапустить с каким-нибудь live CD, потому что процесс сжатия должен иметь LV для размонтирования
Вам не нужно sed
для удаления не -буквенных символов из значения переменной в bash
. Простая замена переменной сделает то же самое:
PROJECT_DB_NAME=${var//[![:alpha:]]}
Если вы хотите использовать [!a-zA-Z]
вместо [![:alpha:]
, то это, конечно, также возможно.
Если вы действительно хотите использовать внешнюю команду для удаления этих символов, используйте более легкий -вес tr
, а не sed
. Задача tr
как раз и состоит в том, чтобы делать такие вещи, как эти (односимвольные транслитерации ).
PROJECT_DB_NAME=$( tr -dc '[:alpha:]' <<<"$var" )
или,
PROJECT_DB_NAME=$( printf '%s\n' "$var" | tr -dc '[:alpha:]' )
См. руководство по команде tr
.
Обратите внимание, что использование echo
может изменить содержимое переменной до того, как sed
ее увидит. См. вопрос "Почему printf лучше, чем echo? ".
Ваш первый фрагмент кода,
PROJECT_DB_NAME=`sed -i "${var}"'s/[^a-zA-Z]//g'`
запустит sed
без имени файла. Это заставляет sed
предположить, что данные поступают через стандартный ввод. Опция -i
, как говорится в сообщении об ошибке, не может использоваться со стандартным вводом. Кроме того, вы добавляете перед кодом sed
значение переменной. Это заставит значение переменной интерпретироваться как команды редактирования sed
.
Ваш второй фрагмент кода,
PROJECT_DB_NAME=`"$var" | sed -n 's/[^a-zA-Z]//g'`
Это пытается запустить "$var"
как команду на левой стороне конвейера. Кроме того, вы используете sed -n
, что приведет к тому, что sed
- , а не будут выводить измененные данные по умолчанию.
Хорошо, я нашел ответ здесь :Как присвоить результат sed переменной
Я просмотрел этот ответ, но неправильно реализовал его. Вот что у меня получилось:
PROJECT_DB_NAME=$( echo "$var" | sed 's/[^a-zA-Z]//g')