Пользовательский режим ЦП для домена x86_64 kvm на хосте x86_64 не поддерживается гипервизором

Может быть, что-то вроде:

sed 'H;/#$/!d;s/^/\
/;x;/\n%/!d;s/.//;x;s/.*//;x'

Поскольку вы хотите, чтобы приглашение было перед ошибкой и после ошибки, оно включает в себя оба, за исключением подсказок, которые в противном случае появлялись бы как подсказка после одной ошибки, так и как подсказка перед следующей ошибкой. соответствовать вашему образцу вывода.

Намного проще, если мы включим оба приглашения, независимо от того, следуют ли ошибки друг за другом или нет:

sed 'H;/#$/!d;x;/\n%/!d'

Если бы вы хотели, чтобы перед ошибкой отображалось только приглашение, это также было бы намного проще:

sed '/#$/!{H;d;}
     x;/\n%/!d'

Вероятно, лучший способ чтобы объяснить это, нужно перевести на более подробный язык, например perl . В sed пространство удержания похоже на статическую переменную, которая инициализируется пустой строкой, а пространство шаблонов - это переменная, которую sed по очереди назначает каждой строке ввода. Примерно так:

$hold_space = "\n";
LINE: while ($pattern_space = <>) {

  <sed commands go here>

  print $pattern_space; # unless -n option is passed
}

Команда H преобразуется в:

$hold_space .= $pattern_space;

Команда d преобразуется в:

next LINE;

То есть прекратить выполнение команд, отбросить пространство шаблонов и начать заново со следующей строкой ввода.

x меняет местами шаблон и удерживает пробел:

($pattern_space, $hold_space) = ($hold_space, $pattern_space);

Таким образом, последняя команда sed преобразуется в:

$hold_space = "\n";
LINE: while ($pattern_space = <>) {

  if (! ($pattern_space =~ /#$/)) { # anything other than a prompt
    $hold_space .= $pattern_space;
    next LINE;
  }

  ($pattern_space, $hold_space) = ($hold_space, $pattern_space);

  if (! ($pattern_space =~ /\n%/)) {
    next LINE;
  }

  print $pattern_space;
}

Что может быть переписано более разборчиво как:

LINE: while ($pattern_space = <>) {

  if ($pattern_space =~ /#$/)) {
    if ($hold_space =~ /\n%/)) {
      print $hold_space;
    }
    $hold_space = $pattern_space;
  } else {
    $hold_space .= $pattern_space;
  }
}

Rename $ pattern_space в $ line и $ hold_space в $ current_block , и он становится еще более разборчивым.

1
14.03.2018, 00:40
2 ответа

Попробуйте перезагрузить хост-компьютер.

Это кажется странным, но это только что случилось со мной. Я использую Debian Stretch, и при установке ОС gust (некоторого дистрибутива Ubuntu )на KVM в первый раз после установки я получил такое же предупреждение. Я выключил хост-компьютер, оставив проблему нерешенной, и на следующий день, пытаясь снова, я не получил никакой ошибки. При этом я абсолютно ничего не делал. Существует вероятность того, что KVM потребуется перезагрузка для полной установки или для сбора необходимых данных. Хотя я не уверен насчет арки, но вы можете попробовать, прежде чем переходить к другому решению.

5
27.01.2020, 23:18

У меня была та же проблема, и проблема заключалась в том, что libvirt не мог получить доступ к /dev/kvm. Поэтому вам нужно убедиться, что у пользователя есть права доступа к узлу устройства, например, запустив chown root.kvm /dev/kvm;chmod 660 /dev/kvm.

Я предполагаю, что он просто пытается настроить конфигурацию машины и возвращает эту ошибку, когда что-то не работает, поскольку считает, что проблема заключается в конфигурации.

2
27.01.2020, 23:18

Теги

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