Хост KVM, добавьте LV к гостю

Возможности замены

awk весьма ограничены. gawk имеет gensub () , который может, по крайней мере, включать части согласованной части в замену, но с ними нельзя выполнять операции.

Это возможно с awk , но вам нужно использовать другой подход:

awk '{
  text = $0
  $0 = ""
  while (match(text, /[0-9]+/)) {
    $0 = $0 substr(text, 1, RSTART-1) \
         (substr(text, RSTART, RLENGTH) - 1)
    text = substr(text, RSTART+RLENGTH)
  }
  $0 = $0 text
  print}'

Или с GNU awk в качестве варианта подхода @ jofel:

gawk -v 'RS=[0-9]+' '{printf "%s", $0 (RT==""?"":RT-1)}'

или

gawk -v 'RS=[^0-9]+' '{printf "%s",($0==""?"":$0 - 1)RT}'

] Однако с perl здесь все намного проще:

perl -pe 's/\d+/$&-1/ge'

perl может использовать группы захвата (например, $ 1 , $ 2 ... и $ & для всей согласованной части) и с флагом e может запускать с ними произвольные выражения perl .

1
06.08.2015, 18:34
1 ответ

Я не думаю, что есть способ пропустить запуск LVM в госте и просто lvextend на хосте, а затем resize2fs в госте?

Нет абсолютно никакого требования использовать LVM в госте. Вы можете просто использовать блочное устройство напрямую. Использование LVM внутри гостя почти ничего не дает (поскольку вы уже используете LVM на хосте для управления своим пространством).

Если под "KVM" вы подразумеваете "libvirt", вы можете использовать команду virsh blockresize, чтобы заставить вашего гостя распознать дополнительное пространство после изменения размера блочного устройства. То есть, если у меня есть гость с подключенным LV:

</disk><disk type="block" device="disk">
  <driver name="qemu" type="raw"/>
  <source dev="/dev/tank/foobar"/>
  <backingStore/>
  <target dev="vdb" bus="virtio"/>
  <alias name="virtio-disk1"/></disk>

Где:

# lvs
  foobar                                      tank           -wi-ao----   4.00g                                                              

Я могу добавить место на LV на хосте:

# lvresize -L +2G /dev/tank/foobar

Скажите libvirt обновить размер:

# virsh blockresize myguest /dev/tank/foobar --size 0

А затем внутри гостя измените размер файлового хранилища:

guest# resize2fs 1.42.12 (29-Aug-2014)
Resizing the filesystem on /dev/vdb to 1572864 (4k) blocks.
The filesystem on /dev/vdb is now 1572864 (4k) blocks long.
2
29.04.2021, 00:25

Теги

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