I have no problems deploying a single cloud-init resource. But when I attempt to deploy more than one, I get Error: 400 Parameter verification failed.
When I try to deploy a second resource (stage-01) with the first, TF trace logs show:
2020-07-08T21:52:51.500-0400 [DEBUG] plugin.terraform-provider-proxmox: 2020/07/08 21:52:51 <<<<<<<<<< RESULT:
2020-07-08T21:52:51.500-0400 [DEBUG] plugin.terraform-provider-proxmox: HTTP/1.1 400 Parameter verification failed.
2020-07-08T21:52:51.500-0400 [DEBUG] plugin.terraform-provider-proxmox: Connection: close
2020-07-08T21:52:51.500-0400 [DEBUG] plugin.terraform-provider-proxmox: Content-Length: 97
2020-07-08T21:52:51.500-0400 [DEBUG] plugin.terraform-provider-proxmox: Cache-Control: max-age=0
2020-07-08T21:52:51.500-0400 [DEBUG] plugin.terraform-provider-proxmox: Content-Type: application/json;charset=UTF-8
2020-07-08T21:52:51.500-0400 [DEBUG] plugin.terraform-provider-proxmox: Date: Thu, 09 Jul 2020 01:52:51 GMT
2020-07-08T21:52:51.500-0400 [DEBUG] plugin.terraform-provider-proxmox: Expires: Thu, 09 Jul 2020 01:52:51 GMT
2020-07-08T21:52:51.500-0400 [DEBUG] plugin.terraform-provider-proxmox: Pragma: no-cache
2020-07-08T21:52:51.500-0400 [DEBUG] plugin.terraform-provider-proxmox: Server: pve-api-daemon/3.0
2020-07-08T21:52:51.500-0400 [DEBUG] plugin.terraform-provider-proxmox:
**2020-07-08T21:52:51.500-0400 [DEBUG] plugin.terraform-provider-proxmox: {"data":null,"errors":{"storage":"invalid format - storage ID '' contains illegal charactersn"}}**
2020/07/08 21:52:51 [DEBUG] proxmox_vm_qemu.stage-01: apply errored, but we're indicating that via the Error pointer rather than returning it: 400 Parameter verification failed.
2020/07/08 21:52:51 [TRACE] <root>: eval: *terraform.EvalMaybeTainted
2020/07/08 21:52:51 [TRACE] EvalMaybeTainted: proxmox_vm_qemu.stage-01 encountered an error during creation, so it is now marked as tainted
2020/07/08 21:52:51 [TRACE] <root>: eval: *terraform.EvalWriteState
2020/07/08 21:52:51 [TRACE] EvalWriteState: removing state object for proxmox_vm_qemu.stage-01
2020/07/08 21:52:51 [TRACE] <root>: eval: *terraform.EvalApplyProvisioners
2020/07/08 21:52:51 [TRACE] EvalApplyProvisioners: proxmox_vm_qemu.stage-01 has no state, so skipping provisioners
2020/07/08 21:52:51 [TRACE] <root>: eval: *terraform.EvalMaybeTainted
2020/07/08 21:52:51 [TRACE] EvalMaybeTainted: proxmox_vm_qemu.stage-01 encountered an error during creation, so it is now marked as tainted
2020/07/08 21:52:51 [TRACE] <root>: eval: *terraform.EvalWriteState
2020/07/08 21:52:51 [TRACE] EvalWriteState: removing state object for proxmox_vm_qemu.stage-01
2020/07/08 21:52:51 [TRACE] <root>: eval: *terraform.EvalIf
2020/07/08 21:52:51 [TRACE] <root>: eval: *terraform.EvalIf
2020/07/08 21:52:51 [TRACE] <root>: eval: *terraform.EvalWriteDiff
2020/07/08 21:52:51 [TRACE] <root>: eval: *terraform.EvalApplyPost
2020/07/08 21:52:51 [ERROR] <root>: eval: *terraform.EvalApplyPost, err: 400 Parameter verification failed.
2020/07/08 21:52:51 [ERROR] <root>: eval: *terraform.EvalSequence, err: 400 Parameter verification failed.
2020/07/08 21:52:51 [TRACE] [walkApply] Exiting eval tree: proxmox_vm_qemu.stage-01
2020/07/08 21:52:51 [TRACE] vertex "proxmox_vm_qemu.stage-01": visit complete
2020-07-08T21:52:51.527-0400 [DEBUG] plugin.terraform-provider-proxmox: 2020/07/08 21:52:51 <<<<<<<<<< RESULT:
2020-07-08T21:52:51.527-0400 [DEBUG] plugin.terraform-provider-proxmox: HTTP/1.1 200 OK
2020-07-08T21:52:51.527-0400 [DEBUG] plugin.terraform-provider-proxmox: Connection: close
I’m not sure how «storage ID containers illegal characters» when both resources are practically the same with necessary changes:
resource "proxmox_vm_qemu" "test-01" {
name = "docker-test-01"
target_node = "vhost1"
desc = "A Docker VM for testing service containers"
clone = "generic-ubuntu.bionic"
agent = 1
os_type = "cloud-init"
cores = "2"
sockets = "1"
cpu = "host"
vcpus = "0"
memory = "4096"
scsihw = "lsi"
disk {
id = 0
size = 25
type = "virtio"
storage = "local-lvm"
storage_type = "lvmthin"
iothread = true
}
network {
id = 0
model = "virtio"
bridge = "vmbr0"
}
ipconfig0 = "ip=192.168.2.230/24,gw=192.168.2.1"
}
resource "proxmox_vm_qemu" "stage-01" {
name = "minikube-stage-01"
target_node = "vhost1"
desc = "A Minikube VM"
clone = "generic-ubuntu.bionic"
agent = 1
os_type = "cloud-init"
cores = "2"
sockets = "1"
cpu = "host"
vcpus = "0"
memory = "8192"
scsihw = "lsi"
disk {
id = 1
size = 50
type = "virtio"
storage = "local-lvm"
storage_type = "lvmthin"
iothread = true
}
network {
id = 0
model = "virtio"
bridge = "vmbr0"
}
ipconfig0 = "ip=192.168.2.225/24,gw=192.168.2.1"
}
-
#1
I just configured hotplug for CPUs and RAM on one of my VMs and have been testing it. Hotplug for the CPU and RAM work but unplug fails every time with the error:
Code:
Parameter verification failed. (400)
vcpus: hotplug problem - 400 Parameter verification failed. vcpus: error unplugging cpu4
Parameter verification failed. (400)
memory: hotplug problem - 400 Parameter verification failed. dimm9: error unplug memory module
Simultaneously the VM hangs and I lose the ability to interact with the console and SSH.
NUMA is enabled, Hotplug is obviously enabled, VM has hotplug modules added as per wiki.
I’ve been trying to figure out what this might mean and if it’s possible to fix it but so far I haven’t even found a thread mentioning this error let alone a way to fix it. Any help would be appreciated. Software versions below.
One thing I’ve noticed that seems off though is that it keeps saying «vcpus: error unplugging cpu4» or «cpu3» when I only have 4 or 3 CPUs in the system. I’m not sure if it’s saying this for human readability or if it’s a flaw in the code because there is no cpu4/3 in the system. CPU counts start at cpu0 and if it’s actually trying to remove cpu4/3 when there is 4 or 3 CPUs respectively then it will always fail.
Code:
QEMU emulator version 4.1.1 (pve-qemu-kvm_4.1.1)
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
pve-manager/6.1-8/806edfe1 (running kernel: 5.3.18-3-pve)
Linux scylla 5.3.18-3-pve #1 SMP PVE 5.3.18-3 (Tue, 17 Mar 2020 16:33:19 +0100) x86_64 GNU/Linux
VM OS:
Linux 4.9.0-12-amd64 #1 SMP Debian 4.9.210-1 (2020-01-20) x86_64 GNU/Linux
Last edited: Apr 29, 2020
oguz
Proxmox Retired Staff
-
#2
hi,
could you post:
* qm config VMID
* pveversion -v
-
#3
Code:
root@scylla:~# qm config 104
agent: 1
balloon: 0
bootdisk: scsi0
cores: 8
cpu: qemu64
hotplug: disk,network,usb,memory,cpu
ide2: none,media=cdrom
memory: 6144
name: TCR-Refined
net0: virtio=XX:XX:XX:XX:XX:XX,bridge=vmbr0,tag=10
numa: 1
ostype: l26
parent: BeforeIBreakIt
scsi0: Mnemosyne:104/vm-104-disk-0.qcow2,size=32G
scsihw: virtio-scsi-pci
smbios1: uuid=724c76fe-f920-4142-837a-b659e464df5c
sockets: 1
vcpus: 2
vga: qxl
vmgenid: c2dd2463-e79b-4c98-8db0-f05ac3023467
Code:
root@scylla:~# pveversion -v
proxmox-ve: 6.1-2 (running kernel: 5.3.18-3-pve)
pve-manager: 6.1-8 (running version: 6.1-8/806edfe1)
pve-kernel-helper: 6.1-7
pve-kernel-5.3: 6.1-6
pve-kernel-5.0: 6.0-11
pve-kernel-5.3.18-3-pve: 5.3.18-3
pve-kernel-5.3.18-2-pve: 5.3.18-2
pve-kernel-5.0.21-5-pve: 5.0.21-10
pve-kernel-5.0.21-4-pve: 5.0.21-9
pve-kernel-5.0.21-3-pve: 5.0.21-7
pve-kernel-5.0.15-1-pve: 5.0.15-1
ceph-fuse: 12.2.11+dfsg1-2.1+b1
corosync: 3.0.3-pve1
criu: 3.11-3
glusterfs-client: 5.5-3
ifupdown: residual config
ifupdown2: 2.0.1-1+pve8
ksm-control-daemon: 1.3-1
libjs-extjs: 6.0.1-10
libknet1: 1.15-pve1
libpve-access-control: 6.0-6
libpve-apiclient-perl: 3.0-3
libpve-common-perl: 6.0-17
libpve-guest-common-perl: 3.0-5
libpve-http-server-perl: 3.0-5
libpve-storage-perl: 6.1-5
libqb0: 1.0.5-1
libspice-server1: 0.14.2-4~pve6+1
lvm2: 2.03.02-pve4
lxc-pve: 3.2.1-1
lxcfs: 4.0.1-pve1
novnc-pve: 1.1.0-1
proxmox-mini-journalreader: 1.1-1
proxmox-widget-toolkit: 2.1-3
pve-cluster: 6.1-4
pve-container: 3.0-23
pve-docs: 6.1-6
pve-edk2-firmware: 2.20200229-1
pve-firewall: 4.0-10
pve-firmware: 3.0-6
pve-ha-manager: 3.0-9
pve-i18n: 2.0-4
pve-qemu-kvm: 4.1.1-4
pve-xtermjs: 4.3.0-1
qemu-server: 6.1-7
smartmontools: 7.1-pve2
spiceterm: 3.1-1
vncterm: 1.6-1
zfsutils-linux: 0.8.3-pve1
-
#4
hi,
could you post:
*
qm config VMID*
pveversion -v
Is there anything else you would like me to provide?
oguz
Proxmox Retired Staff
-
#5
hi,
thank you
we’ll try reproducing the error and get back to you if we need more info
maybe you know when it started happening. was it after some change in the config? any details you can give?
-
#6
hi,
thank you
we’ll try reproducing the error and get back to you if we need more info
maybe you know when it started happening. was it after some change in the config? any details you can give?
Unfortunately I have no idea on a possible timeline. I started testing out this feature the day before I made the first posting. I actually didn’t know it was possible to hotplug CPU and RAM on a VM until I spoke with a friend of mine. Since I’ve found very little information on it other than the documentation I thought it was more likely that it was a bug since it would be less likely to be found if it was rarely used. Combine that with the «error unplugging cpu4» which made me suspicious from a programming standpoint as there is no «CPU4» in the system.
If you need anything from me to debug let me know. I can even provide the VM disk file if that will help.
oguz
Proxmox Retired Staff
-
#7
If you need anything from me to debug let me know. I can even provide the VM disk file if that will help.
which iso did you use? it’d be useful if you could link it here.
-
#8
which iso did you use? it’d be useful if you could link it here.
I believe it was this one. It hash matches the only version I have in my NAS at the moment and I don’t see why I would have deleted any other images.
It has been a few months since I made this VM though. I use it to run a Minecraft server and decided to test hotplug on it because it was already configured, backed up and I would use hotplug on it if I could get it working anyway.
https://cdimage.debian.org/cdimage/archive/9.9.0/amd64/iso-cd/debian-9.9.0-amd64-netinst.iso
-
#9
Hi,
cpu hot-unplug should works 100%.
do you have any kernel message in your vm ?
memory hot-unplug is not working fine (because of linux kernel memory management). you can simulate hot-unplug, with memory balloning. Setting shared=0 will force memory value to min, so you can play with min memory to hotplug/unplug memory. (up to maxmemory).
-
#10
I’m not sure, but hotplug cpu method has changed recently
https://git.proxmox.com/?p=qemu-ser…;hpb=485449e37b3e864523a693c946e08ea46650b927
Code:
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -4504,7 +4504,7 @@ sub qemu_cpu_hotplug {
my $retry = 0;
my $currentrunningvcpus = undef;
while (1) {
- $currentrunningvcpus = mon_cmd($vmid, "query-cpus");
+ $currentrunningvcpus = mon_cmd($vmid, "query-cpus-fast");
last if scalar(@{$currentrunningvcpus}) == $i-1;
raise_param_exc({ vcpus => "error unplugging cpu$i" }) if $retry > 5;
$retry++;
maybe the new qemu-cpus-fast method return different list of cpus (vcpus/cores) than previous method.
That could explain why it’s try to unplug the cpu3/4 ?
(cpu here, is the number of cores currently plugged)
-
#11
Hi,
cpu hot-unplug should works 100%.
do you have any kernel message in your vm ?memory hot-unplug is not working fine (because of linux kernel memory management). you can simulate hot-unplug, with memory balloning. Setting shared=0 will force memory value to min, so you can play with min memory to hotplug/unplug memory. (up to maxmemory).
It was my understanding that hot-unplug worked which is why it surprised me when it didn’t. As for kernel messages, I just checked and there are no messages as far as I can tell. The entire OS seems to hang the moment the memory or CPU are unplugged so I’m not surprised.
As for the code, I’m still reading it but depending on what is stored in these variables this might be the faulty line.
I don’t know enough about this code to say for sure, but just currentvcpus should be the value in the VM config file which is a 1-starting count.
I’m not sure about what qemu_devicedel will take but if it’s looking for a 0-starting count then it will fail.
Code:
4503 qemu_devicedel($vmid, "cpu$i");
«query-cpus-fast» vs «query-cpus» is because the command «query-cpus» is deprecated. I don’t know if that could cause an issue somehow but perhaps. The change was made on the 6th of February and if no one else found it yet I could see that being the cause of the issue.
https://git.proxmox.com/?p=qemu-server.git;a=commit;h=65af8c312e685eaf50ca2e6d2f733231873a22c5
EDIT: I just edited the code the adjust the CPU value and it doesn’t seem to have any effect, so that doesn’t seem to be the issue. I’m going to keep testing.
Last edited: May 6, 2020
oguz
Proxmox Retired Staff
-
#12
hi,
i was able to reproduce the issue (still going through the code to find where it happens).
i was also able to find a workaround for the meantime, please verify this:
— debian 9.9.0 guest
— i try first 2 cores and 2 sockets, enable numa and cpu hotplugging in the options
— start vm
vm should start normally. if we go to the cpu settings now:
— VCPUs will say 4 but greyed out
— set vcpus to 1
Code:
Parameter verification failed. (400)
vcpus: hotplug problem - 400 Parameter verification failed. vcpus: error unplugging cpu4
comes up.
press OK and stop the vm.
start the vm again.
go to settings and change vcpus, it should work…
while looking for the cause i found this in the journal:
Code:
May 06 17:00:33 solar-jupiter pvedaemon[1049]: <root@pam> update VM 10000: -cores 2 -delete cpulimit,cpuunits,cpu -numa 1 -sockets 2 -vcpus 1
May 06 17:00:33 solar-jupiter pvedaemon[1049]: cannot delete 'cpulimit' - not set in current configuration!
May 06 17:00:33 solar-jupiter pvedaemon[1049]: cannot delete 'cpuunits' - not set in current configuration!
May 06 17:00:33 solar-jupiter pvedaemon[1049]: cannot delete 'cpu' - not set in current configuration!
seems like cpulimit,cpuunits,cpu options are being deleted in each update of vcpus (so the errors can be a symptom or a cause)
let me know if the workaround solves the issue for now, it should be patched soon with the new versions
oguz
Proxmox Retired Staff
-
#13
also i got some kernel messages in the vm right after ‘Parameter verification failed’. could you check that as well, and post it here?
-
#14
press OK and stop the vm.
start the vm again.
go to settings and change vCPU, it should work…
Not sure exactly what you mean by that.
I followed what you said and the VM froze after I got the error. When I stopped it and started it again the VM only had 1 vCPU like I had told it to set itself to.
This is basically the same as shutting the VM down and adding or removing cores though which I could do before.
As for the errors, I stupidly didn’t even think to check it before but I’m getting the same errors in the syslog. Knowing this now I have been playing with config settings.
I changed the CPU configuration from the dual socket 2 core config you mentioned to a single socket 8 core and started with 2 vCPUs.
Next, I added a vCPU to make sure that I detected the change in the VM.
Finally, I went to remove a vCPU but ALSO changed the value of cpulimit and cpuunits. This resulted in this error.
Code:
May 06 18:00:46 scylla pvedaemon[8856]: <root@pam> update VM 122: -cores 8 -cpulimit 128 -cpuunits 1023 -delete cpu -numa 1 -sockets 1 -vcpus 2
May 06 18:00:46 scylla pvedaemon[8856]: cannot delete 'cpu' - not set in current configuration!
If I do not change the value of cpuunits from 1024 to something else then it will give me the error
Code:
May 06 18:07:02 scylla pvedaemon[8856]: <root@pam> update VM 122: -cores 8 -cpulimit 128 -delete cpuunits,cpu -numa 1 -sockets 1 -vcpus 2
May 06 18:07:02 scylla pvedaemon[8856]: cannot delete 'cpuunits' - not set in current configuration!
May 06 18:07:02 scylla pvedaemon[8856]: cannot delete 'cpu' - not set in current configuration!
Next I tried changing the CPU to qemu64 instead of kvm64 which adds the ‘cpu’ value to the config file. This allowed me to clear all of the errors from the log.
Code:
May 06 18:15:22 scylla pvedaemon[15871]: <root@pam> update VM 122: -cores 8 -cpu qemu64 -cpulimit 128 -cpuunits 1023 -numa 1 -sockets 1 -vcpus 3
May 06 18:15:44 scylla pvedaemon[15871]: <root@pam> update VM 122: -cores 8 -cpu qemu64 -cpulimit 128 -cpuunits 1023 -numa 1 -sockets 1 -vcpus 2
Unfortunately, the error is still happening. Whatever is actually causing the issue I don’t believe it is directly related to the config file errors as even once they are gone it still errors out.
oguz
Proxmox Retired Staff
-
#15
Not sure exactly what you mean by that.
I followed what you said and the VM froze after I got the error. When I stopped it and started it again the VM only had 1 vCPU like I had told it to set itself to.
yes, and then you should be able to change the amount of vcpus after the vm starts running, and hotplug should work (at least here it does)
VM freezing sounds like there has to be a kernel panic or similar.
please check /var/log/syslog in the vm.
also switch to a console with ctrl-alt-f[1-9] and then try triggering the error. this will show us any kernel messages in the vm
-
#16
I’m not getting any errors in the syslog and the console froze just like the desktop.
When I do what you described the VM will start with 1 vCPU and I can add them, but I still can’t removed them. The VM will hang if I try to remove a CPU at any point after this. I tested this on a second server just in case and the issue still happens there.
I’m fairly sure I have everything right but I’ve never tested this before and have thus never had it working, so it’s definitely possible I made a mistake somewhere.
I created a file under: /lib/udev/rules.d/80-hotplug-cpu-mem.rules
containing
Code:
SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online}="1"
I added the kernel boot parameter
Code:
memhp_default_state=online
And I added
and
as kernel config and kernel boot parameters respectively.
This is all I saw mentioned in the Wiki. Is there anything else I might be missing VM config wise?
Though it was not mentioned in the wiki I also installed the QEMU guest agent just in case it was required.
oguz
Proxmox Retired Staff
-
#17
okay it seems like the kernel of debian 9.9 doesn’t fully support cpu hotplugging. i was able to get it working on a stock debian buster (newer kernel) and it worked fine. try that and let me know (debian 10.2 to be specific)
-
#18
okay it seems like the kernel of debian 9.9 doesn’t fully support cpu hotplugging. i was able to get it working on a stock debian buster (newer kernel) and it worked fine. try that and let me know (debian 10.2 to be specific)
It seems like that is the answer.
Wow now I feel kind of dumb. I updated my VM to Debian 10 and the issue is completely gone. Proxmox still throws errors if I remove the CPU, cpuunits or cpulimit fields but other than that the issue is gone. Memory hotunplug is working flawlessly now too.
I’m super glad it works now. I can definitely use this feature.
Thanks so much for your help.
oguz
Proxmox Retired Staff
-
#19
glad to be of help!
please mark the thread as [SOLVED] so others know what to expect
Снова столкнулся с тем, что в достаточно широко распространенном программном продукте не работает из коробки та функция, которая по логике должна бы работать.
На этот раз речь пойдет о среде виртуализации Proxmox и загрузке бэкапов виртуальных машин через веб-интерфейс. Итак, имеем следующие входные данные: на машине свежеустановленный Proxmox версии 3.2, на нем развернуто помимо хранилища Local еще и хранилище Backup с типом контента ISO, Backups, Templates. Задача — перенести бэкапы виртуальных машин с другого гипервизора. Естественно, руки потянулись для этой цели использовать веб-интерфейс: выбираем наше хранилище Backup, жмем Upload, выбираем тип контента VZDump backup file, выбираем нужный файл, жмем Upload, смотрим на проценты загрузки и по итогу получаем сообщение об ошибке:
Error 400: Parameter verification failed.
content: upload content type ‘backup’ not allowed
Собственно, я сразу не стал разбираться, почему так, и воспользовался консолью и самбой для решения этой задачи. Примерно то же самое(пойти обходным путем) рекомендует баг-трекер Proxmox’а(use scp to copy the file to the right directory). Но обсуждение этой проблемы вывело меня на верное решение.
Открываем для редактирования следующий скрипт: /usr/share/perl5/PVE/API2/Storage/Status.pm.
Находим там следующий фрагмент:
if ($content eq ‘iso’) {
if ($filename !~ m![^/]+.[Ii][Ss][Oo]$!) {
raise_param_exc({ filename => «missing ‘.iso’ extension» });
}
$path = PVE::Storage::get_iso_dir($cfg, $param->{storage});
} elsif ($content eq ‘vztmpl’) {
if ($filename !~ m![^/]+.tar.gz$!) {
raise_param_exc({ filename => «missing ‘.tar.gz’ extension» });
}
$path = PVE::Storage::get_vztmpl_dir($cfg, $param->{storage});
} else {
raise_param_exc({ content => «upload content type ‘$content’ not allowed» });
}
Как видим, по дефолту доступны для загрузки только ISO образы и шаблоны, при загрузке отличного от этих типов контента получаем знакомое сообщение об ошибке.
Исправляем:
if ($content eq ‘iso’) {
if ($filename !~ m![^/]+.[Ii][Ss][Oo]$!) {
raise_param_exc({ filename => «missing ‘.iso’ extension» });
}
$path = PVE::Storage::get_iso_dir($cfg, $param->{storage});
} elsif ($content eq ‘vztmpl’) {
if ($filename !~ m![^/]+.tar.gz$!) {
raise_param_exc({ filename => «missing ‘.tar
.gz’ extension» });
}
$path = PVE::Storage::get_vztmpl_dir($cfg, $param->{storage});
} elsif ($content eq ‘backup’) {
if ($filename !~ m![^/]+.vma.lzo$!) {
raise_param_exc({ filename => «missing ‘.vma.lzo’ extension» });
}
$path = PVE::Storage::get_backup_dir($cfg, $param->{storage});
} else {
raise_param_exc({ content => «upload content type ‘$content’ not allowed» });
}
Я добавил для себя проверку на расширение vma.lzo, поскольку все мои бэкапы были сделаны именно в этом формате, но при желании можно добавить и vma.gz, а можно и вообще отказаться от проверки на расширение.
Перезагружаем Proxmox — и таки да, загрузка бэкапов через веб-интерфейс работает.
Не понимаешь, что default gateway может быть только один. Да, это может быть балансировка нескольких аплинков вида «ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1», но всё равно соотв. строчка в основной таблице маршрутов только одна.
selivan ★★★
(09.06.14 14:01:45 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от selivan 09.06.14 14:01:45 MSK
Тогда подскажите плз как мне быть? Провайдер дал вторую подсеть айпи адресов, и в ней гейтвей отличается от первой. Как мне в проксмоксе добавить эту подсеть?
Ruslan
(09.06.14 18:50:39 MSK)
- Показать ответы
- Ссылка
Ответ на:
комментарий
от Ruslan 09.06.14 18:50:39 MSK
В чём состоит задача? Надо иметь второго провайдера как резервного, надо ходить в интернет через обоих провайдеров?
З.Ы. Записей default gateway, т. е. 0.0.0.0/0.0.0.0 может быть много, но с разными метриками. Использоваться будет с наименьшей. Настраивать надо будет через консоль, Proxmox специализирован для работы с виртуалками, хитрые сетевые конфигурации в нём через веб-морду не накрутишь. По идеологии этим должно заниматься активное сетевое оборудование.
selivan ★★★
(09.06.14 21:17:20 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от Ruslan 09.06.14 18:50:39 MSK
Ну не задавай ему айпишник и шлюз.
чтобы назначать IP контейнерам с другой подсети
Вот виртуалкам это все и назначишь, а сам хост пусть ходит, как и до сих пор ходил.
thesis ★★★★★
(09.06.14 21:51:41 MSK)
- Показать ответы
- Ссылка
Ответ на:
комментарий
от selivan 09.06.14 21:17:20 MSK
Задача состоит создавать openvz контейнеры в разных подсетях. Тоесть нужно контейнерам назначать разные IP, из разных подсетей.
Все подсети от одного провайдеры, в одной сетевухе по одному проводу, в одном влане.
Ruslan
(10.06.14 05:22:39 MSK)
- Ссылка
Ответ на:
комментарий
от thesis 09.06.14 21:51:41 MSK
Не едут лыжи…
Как я могу все это назначит виртуалкам в проксмоксе? Виртуалкам там можно назначить лишь IP.
Ruslan
(10.06.14 05:23:39 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от Ruslan 10.06.14 05:23:39 MSK
Хз, никогда не трогал OpenVZ. Что, если в самой виртуалке сказать:
ip route del default
ip route add default via …
selivan ★★★
(10.06.14 13:05:03 MSK)
- Ссылка
Ответ на:
комментарий
от thesis 09.06.14 21:51:41 MSK
Вот виртуалкам это все и назначишь, а сам хост пусть ходит, как и до сих пор ходил.
+1
ничего не трогай на проксмоксе. создай контейнер с существующим бриджем. зайди в него и ручками пропиши:
вторую подсеть айпи адресов, и в ней гейтвей отличается от первой.
nerve ★★
(10.06.14 13:58:29 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от nerve 10.06.14 13:58:29 MSK
Ответ на:
комментарий
от Ruslan 11.06.14 02:16:08 MSK
это как?
там в диалоге создания контейнера нет опции для назначения ИП, выбираешь только бридж который будет использоваться.
nerve ★★
(11.06.14 11:07:38 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от nerve 11.06.14 11:07:38 MSK
Ответ на:
комментарий
от Ruslan 11.06.14 21:20:20 MSK
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Need assistance. trying to use Terraform to spin up a few VM instance and keep getting the error 400 error. Note: terraform was run on ubuntu and fedora workstations. Havent tried this with Windows, but it shouldn’t really matter
building of template:
qm importdisk 6007 /mnt/pve/iso/template/iso/focal-server-cloudimg-amd64.img ZFS
qm set 6007 --scsihw virtio-scsi-pci --scsi0 ZFS:vm-6007-disk-0
qm set 6007 --boot c --bootdisk scsi0
qm set 6007 --ide2 ZFS:cloudinit
qm set 6007 –-agent enabled=1
qm clone 6007 6066 --name test-clone-cloud-init
qm set 6066 --ipconfig0 ip=x.x.x.x``/24,gw=``x.x.x.x --nameserver x.x.x.x
below is the main.tf (I had a variables file, but did away with that when I couldn’t get this working)
terraform {
required_providers {
proxmox = {
source = "telmate/proxmox"
version = "2.9.4"
}
}
}
provider "proxmox" {
pm_api_url = "https://"IP of Server":8006/api2/json"
# pm_api_token_id = "svc_tfe@pam!key_stonepedal_token"
# pm_api_token_secret = "Key"
pm_user = "root@pam"
pm_password = "***********"
pm_log_enable = true
pm_tls_insecure = true
pm_debug = true
pm_log_levels = {
_default = "trace"
_capturelog = ""
}
}
resource "proxmox_vm_qemu" "cloudinit-test" {
name = "tf-test"
desc = "testing terraform proxmox plugin"
target_node = "IP of PVE Server"
clone = "ubuntu-2004-cloudinit-template"
cores = 2
sockets = 1
memory = 2048
ipconfig0 = "gw=x.x.x.x,ip=x.x.x.x/24"
ssh_user = "ubuntu"
sshkeys = <<EOF
ssh-rsa somekey user@host
EOF
network {
model = "virtio"
bridge = "vmbr0"
}
disk {
type = "scsi"
storage = "ZFS"
size = "20G"
format = "raw"
}
}
Provider works at terraform init. Run the plan by terraform plan, all good. but when I try to apply the code, I get the following :
│ Error: 400 Parameter verification failed.
│
│ with proxmox_vm_qemu.cloudinit-test,
│ on main.tf line 24, in resource "proxmox_vm_qemu" "cloudinit-test":
│ 24: resource "proxmox_vm_qemu" "cloudinit-test" {
│
I originally was trying to use an API key, but after the same issues, I went to using elevated user, and then to root. nothing seems to get passed Error 400. Ive gone to users and given API and elevated user Administrator role to drives.
Раздражает, когда какой-то сайт не загружается и отзывается непонятными ошибками. Обычно они сопровождаются одним из десятков HTTP-кодов, которые как раз намекают на характер сбоя, а также его вероятные причины.
В этом материале поговорим об ошибке 400 Bad Request. Почему она появляется и как ее исправить.
Чуть подробнее об ошибке 400
Как и другие коды, начинающиеся на четверку, 400 Bad Request говорит о том, что возникла проблема на стороне пользователя. Зачастую сервер отправляет ее, когда появившаяся неисправность не подходит больше ни под одну категорию ошибок.
Стоит запомнить — код 400 напрямую связан с клиентом (браузером, к примеру) и намекает на то, что отправленный запрос со стороны пользователя приводит к сбою еще до того, как его обработает сервер (вернее, так считает сам сервер).
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться
Из-за чего всплывает Bad Request?
Есть 4 повода для возникновения ошибки сервера 400 Bad Request при попытке зайти на сайт:
- Некорректно настроенные HTTP-заголовки в запросе со стороны клиента. Некоторые приложения и сайты мониторят заголовки на предмет наличия в них чего-нибудь подозрительного. Если ваш запрос не соответствует ожиданиям сервера, то высока вероятность появления ошибки 400 (но это не всегда вина пользователя).
- Такой же сбой появляется, если клиент пытается загрузить на сервер файл слишком большого размера. Это происходит, потому что на большинстве сайтов есть ограничения по размеру загружаемых данных. Причем ограничение может быть как в 2 гигабайта, так и в 600 килобайт.
- Еще ошибка 400 появляется, когда пользователь пытается получить доступ к несуществующей странице. То есть в браузер банально ввели ссылку с опечаткой, некорректным доменом или поддоменом.
- Устаревшие или измененные куки-файлы. Сервер может воспринять подмену куки-файлов как попытку атаковать или воспользоваться дырой в безопасности. Поэтому такие запросы сходу блокируются.
Читайте также
Исправляем ошибку 400 Bad Request на стороне клиента
Так как ошибка 400 в 99 случаев из 100 возникает на стороне клиента, начнем с соответствующих методов. Проверим все элементы, участвующие в передаче запроса со стороны клиента (браузера).
Проверяем адрес сайта
Банальщина, но необходимая банальщина. Перед тем как бежать куда-то жаловаться и предпринимать более серьезные шаги, повнимательнее взгляните на ссылку в адресной строке. Может, где-то затесалась опечатка или вы случайно написали большую букву вместо маленькой. Некоторые части адреса чувствительны к регистру.
А еще стоит поискать запрашиваемую страницу через поисковик, встроенный в сайт. Есть вероятность, что конкретная страница куда-то переехала, но сервер не может показать подходящий HTTP-код в духе 404 Not Found. Если, конечно, сам сайт работает.
Сбрасываем параметры браузера
Этот метод срабатывает, если сервер отказывается принимать запросы из-за «битых» куки или других данных. Дело в том, что сайт использует куки-файлы, чтобы хранить информацию о пользователе у него же в браузере. При входе конкретного человека на ресурс, он пытается распознать куки и сравнить информацию с той, что уже есть на сервере.
Иногда случается, что куки-файлы одного или нескольких пользователей вступают в конфликт. В таком случае надо открыть настройки браузера, а потом удалить весь кэш, куки и прочие связанные элементы.
В зависимости от браузера процесс удаления куки-файлов может немного отличаться. В Chrome это работает так:
- Открываем настройки браузера.
- Переходим в раздел «Конфиденциальность и безопасность».
- Выбираем «Файлы cookie и другие данные».
- Нажимаем на кнопку «Удалить все».
Для чистки cookies можно использовать стороннюю программу в духе CCleaner или CleanMyPC.
Загружаем файл подходящего размера
Если ошибка 400 Bad Request появляется при попытке загрузить на сайт какой-нибудь файл, то стоит попробовать загрузить файл поменьше. Иногда вебмастера ленятся грамотно настроить ресурс, и вместо понятного объяснения вроде «Загружаемые файлы не должны быть размером больше 2 мегабайт» люди получают Bad Request. Остается только гадать, какой там у них лимит.
Устраняем проблемы, связанные с Windows и сторонним софтом
Помимо браузера, на работу сети могут влиять другие программные продукты (экраны, защищающие от «непонятных подключений»). И вирусы. Да и сама Windows может стать проблемой. Почти любой ее компонент. Поэтому надо бы проделать следующее:
- Повторно установить NET.Framework. Желательно перед этим удалить предыдущую версию.
- Установить какой-нибудь приличный антивирус (а лучше два) и запустить глубокую проверку систему. Возможно, подключению и входу на ресурс мешает вредоносная программа.
- Если у вас уже установлен антивирус, то, наоборот, попробуйте его отключить. Иногда встроенные в них экраны проверки подключений блокируют работу браузера целиком или отдельных страниц. Лучше выдать браузеру больше прав на выполнение своих задач или установить антивирус, который более лояльно относится к установленному на компьютере софту.
- Еще надо поменять параметры брандмауэра. Его можно разыскать в панели управления Windows. Там надо добавить в список исключений ваш браузер. Тогда брандмауэр не будет мешать подключению к запрашиваемому сайту.
- Почистить Windows от программного мусора. Можно пройтись приложением CCleaner.
- Обновить драйверы для сетевых устройств.
- Обновить Windows или просканировать систему на наличие погрешностей в системных компонентах.
Ищем проблему на стороне сервера
Если что-то происходит на стороне ресурса, то это редко заканчивается ошибкой 400. Но все-таки есть несколько сценариев, при которых клиента обвиняют в сбое зря, а настоящая вина лежит на сервере.
Проверяем требования к HTTP-заголовкам
Пока настраиваешь сайт, несложно допустить ошибку или даже парочку. Возможно, требования к HTTP-заголовком указаны некорректно, и сервер ожидает запросы с ошибками, которые по объективным причинам не может распознать адекватно. Тогда администратору стоит перепроверить ожидаемые заголовки на своем сайте или в приложении.
Удаляем свежие обновления и плагины
Иногда ошибка 400 Bad Request появляется после обновления CMS или установки новых плагинов. Если у вас она появилась из-за этого, то наиболее логичное решение — откатиться до более ранней версии CMS и удалить все новые плагины.
Главное, перед этим сделать резервную копию данных. И перед установкой обновлений тоже стоило бы.
Проверяем состояние базы данных
Некоторые сторонние расширения для того же WordPress получают полный доступ к ресурсу и имеют право вносить изменения даже в подключенную базу данных. Если после удаления свежих плагинов ошибка 400 никуда не исчезла и появляется у всех, кто пытается зайти на сайт, стоит проверить, в каком состоянии находится база данных. Нужно вручную проверить все записи на наличие подозрительных изменений, которые могли быть сделаны установленными расширениями.
Исправляем ошибки в коде и скриптах
Ничего из вышеперечисленного не помогло? Тогда осталось проверить свой код и работающие скрипты. Лучше провести дебаггинг вручную и не надеяться на помощь компьютера. Сделать копию приложения или сайта, потом пошагово проверить каждый отрезок кода в поисках ошибок.
В крайнем случае придется кричать «полундра» и звать на помощь техподдержку хостинга. Возможно, возникли сложности на их стороне. Тогда вообще ничего не надо будет делать. Просто ждать, пока все исправят за вас.
На этом все. Основные причины появления 400 Bad Request разобрали. Как ее лечить — тоже. Теперь дело за вами. Пользуйтесь полученной информацией, чтобы больше не пришлось мучиться в попытках зайти на нужный ресурс.
SUMMARY
When trying to create a VM using the sample in the proxmox_kvm module, I get the following error message:
MSG:
creation of qemu VM test with vmid 1234 failed with exception=400 Bad Request: Parameter verification failed. — b'{«data»:null,»errors»:{«archive»:»missing property — ‘force’ requires this property»}}’
ISSUE TYPE
- Bug Report
COMPONENT NAME
proxmox_kvm
ANSIBLE VERSION
«`paste below
ansible 2.9.13
config file = /Volumes/Data/Users/rob/CloudStation/My Files/Development/proxmox/k8s/ansible.cfg
configured module search path = [‘/Volumes/Data/Users/rob/.ansible/plugins/modules’, ‘/usr/share/ansible/plugins/modules’]
ansible python module location = /Volumes/Data/Users/rob/opt/anaconda3/envs/ansible/lib/python3.8/site-packages/ansible
executable location = /Volumes/Data/Users/rob/opt/anaconda3/envs/ansible/bin/ansible
python version = 3.8.5 (default, Sep 4 2020, 02:22:02) [Clang 10.0.0 ]
##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below
COLLECTIONS_PATHS(/Volumes/Data/Users/rob/CloudStation/My Files/Development/proxmox/k8s/ansible.cfg) = ['/Volumes/Data/Users/rob/CloudStation/My Files
DEFAULT_KEEP_REMOTE_FILES(/Volumes/Data/Users/rob/CloudStation/My Files/Development/proxmox/k8s/ansible.cfg) = False
DEFAULT_LOG_PATH(/Volumes/Data/Users/rob/CloudStation/My Files/Development/proxmox/k8s/ansible.cfg) = /Volumes/Data/Users/rob/CloudStation/My Files/De
DEFAULT_STDOUT_CALLBACK(/Volumes/Data/Users/rob/CloudStation/My Files/Development/proxmox/k8s/ansible.cfg) = debug
OS / ENVIRONMENT
Running Ansible on MacOS:
Software:
System Software Overview:
System Version: OS X 10.11.6 (15G22010)
Kernel Version: Darwin 15.6.0
PVE versions:
[email protected]:~# pveversion —verbose
proxmox-ve: 6.2-2 (running kernel: 5.4.65-1-pve)
pve-manager: 6.2-12 (running version: 6.2-12/b287dd27)
pve-kernel-5.4: 6.2-7
pve-kernel-helper: 6.2-7
pve-kernel-5.4.65-1-pve: 5.4.65-1
pve-kernel-5.4.60-1-pve: 5.4.60-2
pve-kernel-5.4.55-1-pve: 5.4.55-1
pve-kernel-5.4.41-1-pve: 5.4.41-1
pve-kernel-5.4.34-1-pve: 5.4.34-2
ceph-fuse: 12.2.11+dfsg1-2.1+b1
corosync: 3.0.4-pve1
criu: 3.11-3
glusterfs-client: 5.5-3
ifupdown: residual config
ifupdown2: 3.0.0-1+pve3
ksm-control-daemon: 1.3-1
libjs-extjs: 6.0.1-10
libknet1: 1.16-pve1
libproxmox-acme-perl: 1.0.5
libpve-access-control: 6.1-3
libpve-apiclient-perl: 3.0-3
libpve-common-perl: 6.2-2
libpve-guest-common-perl: 3.1-3
libpve-http-server-perl: 3.0-6
libpve-storage-perl: 6.2-8
libqb0: 1.0.5-1
libspice-server1: 0.14.2-4~pve6+1
lvm2: 2.03.02-pve4
lxc-pve: 4.0.3-1
lxcfs: 4.0.3-pve3
novnc-pve: 1.1.0-1
proxmox-backup-client: 0.9.0-2
proxmox-mini-journalreader: 1.1-1
proxmox-widget-toolkit: 2.3-1
pve-cluster: 6.2-1
pve-container: 3.2-2
pve-docs: 6.2-6
pve-edk2-firmware: 2.20200531-1
pve-firewall: 4.1-3
pve-firmware: 3.1-3
pve-ha-manager: 3.1-1
pve-i18n: 2.2-1
pve-qemu-kvm: 5.1.0-3
pve-xtermjs: 4.7.0-2
qemu-server: 6.2-15
smartmontools: 7.1-pve2
spiceterm: 3.1-1
vncterm: 1.6-2
zfsutils-linux: 0.8.4-pve2
STEPS TO REPRODUCE
Executing the playbook below results in the error
tasks:
- name: Create new VM with minimal options
community.general.proxmox_kvm:
api_host: '{{ pve_host }}'
api_user: '{{ pve_user }}'
api_password: '{{ pve_pass }}'
vmid: 1234
name: test
node: pve
EXPECTED RESULTS
Creation of the new VM
ACTUAL RESULTS
The attribute ‘force’ is set the default value of false in proxmox_kvm.py in function main():
force=dict(type=’bool’, default=False)
This seems to create an issue because the API expects that the ‘archive’ attribute is set as well. However, ‘archive’ is not a valid attribute.
When removing the default value assignment, it works:
force=dict(type=’bool’)
«`paste below
ansible-playbook 2.9.13
config file = /Volumes/Data/Users/rob/CloudStation/My Files/Development/proxmox/k8s/ansible.cfg
configured module search path = [‘/Volumes/Data/Users/rob/.ansible/plugins/modules’, ‘/usr/share/ansible/plugins/modules’]
ansible python module location = /Volumes/Data/Users/rob/opt/anaconda3/envs/ansible/lib/python3.8/site-packages/ansible
executable location = /Volumes/Data/Users/rob/opt/anaconda3/envs/ansible/bin/ansible-playbook
python version = 3.8.5 (default, Sep 4 2020, 02:22:02) [Clang 10.0.0 ]
Using /Volumes/Data/Users/rob/CloudStation/My Files/Development/proxmox/k8s/ansible.cfg as config file
setting up inventory plugins
host_list declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
script declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
auto declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
yaml declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
ini declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
toml declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Loading callback plugin debug of type stdout, v2.0 from /Volumes/Data/Users/rob/opt/anaconda3/envs/ansible/lib/python3.8/site-packages/ansible/plugins/callback/debug.py
PLAYBOOK: k8s.yaml ************************************
Positional arguments: k8s.yaml
verbosity: 4
connection: smart
timeout: 10
become_method: sudo
tags: (‘vm_create’,)
inventory: (‘/etc/ansible/hosts’,)
forks: 5
1 plays in k8s.yaml
PLAY [localhost] **************************************
META: ran handlers
TASK [Create new VM with minimal options] ****************************
task path: /Volumes/Data/Users/rob/CloudStation/My Files/Development/proxmox/k8s/k8s.yaml:14
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: rob
<127.0.0.1> EXEC /bin/sh -c ‘echo ~rob && sleep 0’
<127.0.0.1> EXEC /bin/sh -c ‘( umask 77 && mkdir -p «echo /Volumes/Data/Users/rob/.ansible/tmp«&& mkdir «echo /Volumes/Data/Users/rob/.ansible/tmp/ansible-tmp-1602279498.9265301-14700-203120890427993» && echo ansible-tmp-1602279498.9265301-14700-203120890427993=»echo /Volumes/Data/Users/rob/.ansible/tmp/ansible-tmp-1602279498.9265301-14700-203120890427993» ) && sleep 0′
Using module file /Volumes/Data/Users/rob/CloudStation/My Files/Development/proxmox/ansible/collections/ansible_collections/community/general/plugins/modules/proxmox_kvm.py
<127.0.0.1> PUT /Volumes/Data/Users/rob/.ansible/tmp/ansible-local-14696r3s_8h8t/tmp4x0i_w2a TO /Volumes/Data/Users/rob/.ansible/tmp/ansible-tmp-1602279498.9265301-14700-203120890427993/AnsiballZ_proxmox_kvm.py
<127.0.0.1> EXEC /bin/sh -c ‘chmod u+x /Volumes/Data/Users/rob/.ansible/tmp/ansible-tmp-1602279498.9265301-14700-203120890427993/ /Volumes/Data/Users/rob/.ansible/tmp/ansible-tmp-1602279498.9265301-14700-203120890427993/AnsiballZ_proxmox_kvm.py && sleep 0’
<127.0.0.1> EXEC /bin/sh -c ‘/Volumes/Data/Users/rob/opt/anaconda3/envs/ansible/bin/python /Volumes/Data/Users/rob/.ansible/tmp/ansible-tmp-1602279498.9265301-14700-203120890427993/AnsiballZ_proxmox_kvm.py && sleep 0’
<127.0.0.1> EXEC /bin/sh -c ‘rm -f -r /Volumes/Data/Users/rob/.ansible/tmp/ansible-tmp-1602279498.9265301-14700-203120890427993/ > /dev/null 2>&1 && sleep 0’
The full traceback is:
File «/var/folders/hd/lwc_f7xs3xq_z6974f1523mr0000gn/T/ansible_community.general.proxmox_kvm_payload_kp6vi0p6/ansible_community.general.proxmox_kvm_payload.zip/ansible_collections/community/general/plugins/modules/proxmox_kvm.py», line 1031, in main
File «/var/folders/hd/lwc_f7xs3xq_z6974f1523mr0000gn/T/ansible_community.general.proxmox_kvm_payload_kp6vi0p6/ansible_community.general.proxmox_kvm_payload.zip/ansible_collections/community/general/plugins/modules/proxmox_kvm.py», line 809, in create_vm
File «/Volumes/Data/Users/rob/opt/anaconda3/envs/ansible/lib/python3.8/site-packages/proxmoxer/core.py», line 117, in create
return self.post(args, **data)
File «/Volumes/Data/Users/rob/opt/anaconda3/envs/ansible/lib/python3.8/site-packages/proxmoxer/core.py», line 108, in post
return self(args)._request(«POST», data=data)
File «/Volumes/Data/Users/rob/opt/anaconda3/envs/ansible/lib/python3.8/site-packages/proxmoxer/core.py», line 90, in _request
raise ResourceException(«{0} {1}: {2} — {3}».format(
fatal: [localhost]: FAILED! => {
«changed»: false,
«invocation»: {
«module_args»: {
«acpi»: true,
«agent»: null,
«api_host»: «pve.disseldorp.home»,
«api_password»: «VALUE_SPECIFIED_IN_NO_LOG_PARAMETER»,
«api_user»: «[email protected]«,
«args»: null,
«autostart»: false,
«balloon»: 0,
«bios»: null,
«boot»: «cnd»,
«bootdisk»: null,
«clone»: null,
«cores»: 1,
«cpu»: «kvm64»,
«cpulimit»: null,
«cpuunits»: 1000,
«delete»: null,
«description»: null,
«digest»: null,
«force»: false,
«format»: «qcow2»,
«freeze»: null,
«full»: true,
«hostpci»: null,
«hotplug»: null,
«hugepages»: null,
«ide»: null,
«keyboard»: null,
«kvm»: true,
«localtime»: null,
«lock»: null,
«machine»: null,
«memory»: 512,
«migrate_downtime»: null,
«migrate_speed»: null,
«name»: «test»,
«net»: null,
«newid»: null,
«node»: «pve»,
«numa»: null,
«numa_enabled»: null,
«onboot»: true,
«ostype»: «l26»,
«parallel»: null,
«pool»: null,
«protection»: null,
«reboot»: null,
«revert»: null,
«sata»: null,
«scsi»: null,
«scsihw»: null,
«serial»: null,
«shares»: null,
«skiplock»: null,
«smbios»: null,
«snapname»: null,
«sockets»: 1,
«startdate»: null,
«startup»: null,
«state»: «present»,
«storage»: null,
«tablet»: false,
«target»: null,
«tdf»: null,
«template»: false,
«timeout»: 30,
«update»: false,
«validate_certs»: false,
«vcpus»: null,
«vga»: «std»,
«virtio»: null,
«vmid»: 1234,
«watchdog»: null
}
}
}
MSG:
creation of qemu VM test with vmid 1234 failed with exception=400 Bad Request: Parameter verification failed. — b'{«errors»:{«archive»:»missing property — ‘force’ requires this property»},»data»:null}’
PLAY RECAP ****************************************
localhost : ok=0 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
«`
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
Ошибка 400 Bad Request – это код ответа HTTP, который означает, что сервер не смог обработать запрос, отправленный клиентом из-за неверного синтаксиса. Подобные коды ответа HTTP отражают сложные взаимоотношения между клиентом, веб-приложением, сервером, а также зачастую сразу несколькими сторонними веб-сервисами. Из-за этого поиск причины появления ошибки может быть затруднён даже внутри контролируемой среды разработки.
В этой статье мы разберём, что значит ошибка 400 Bad Request (переводится как «Неверный запрос»), и как ее исправить
- На стороне сервера или на стороне клиента?
- Начните с тщательного резервного копирования приложения
- Диагностика ошибки 400 Bad Request
- Исправление проблем на стороне клиента
- Проверьте запрошенный URL
- Очистите соответствующие куки
- Загрузка файла меньшего размера
- Выйдите и войдите
- Отладка на распространённых платформах
- Откатите последние изменения
- Удалите новые расширения, модули или плагины
- Проверьте непреднамеренные изменения в базе данных
- Поиск проблем на стороне сервера
- Проверка на неверные заголовки HTTP
- Просмотрите логи
- Отладьте код приложения или скриптов
Все коды ответа HTTP из категории 4xx считаются ошибками на стороне клиента. Несмотря на это, появление ошибки 4xx не обязательно означает, что проблема как-то связана с клиентом, под которым понимается веб-браузер или устройство, используемое для доступа к приложению. Зачастую, если вы пытаетесь диагностировать проблему со своим приложением, можно сразу игнорировать большую часть клиентского кода и компонентов, таких как HTML, каскадные таблицы стилей (CSS), клиентский код JavaScript и т.п. Это также применимо не только к сайтам. Многие приложения для смартфонов, которые имеют современный пользовательский интерфейс, представляют собой веб-приложения.
С другой стороны, ошибка 400 Bad Request означает, что запрос, присланный клиентом, был неверным по той или иной причине. Пользовательский клиент может попытаться загрузить слишком большой файл, запрос может быть неверно сформирован, заголовки HTTP запроса могут быть неверными и так далее.
Мы рассмотрим некоторые из этих сценариев (и потенциальные решения) ниже. Но имейте в виду: мы не можем однозначно исключить ни клиент, ни сервер в качестве источника проблемы. В этих случаях сервер является сетевым объектом, генерирующим ошибку 400 Bad Request и возвращающим её как код ответа HTTP клиенту, но возможно именно клиент ответственен за возникновение проблемы.
Важно сделать полный бэкап вашего приложения, базы данных и т.п. прежде, чем вносить какие-либо правки или изменения в систему. Ещё лучше, если есть возможность создать полную копию приложения на дополнительном промежуточном сервере, который недоступен публично.
Подобный подход обеспечит чистую тестовую площадку, на которой можно отрабатывать все возможные сценарии и потенциальные изменения, чтобы исправить или иную проблему без угрозы безопасности или целостности вашего «живого» приложения.
Ошибка 400 Bad Request означает, что сервер (удалённый компьютер) не может обработать запрос, отправленный клиентом (браузером), вследствие проблемы, которая трактуется сервером как проблема на стороне клиента.
Существует множество сценариев, в которых ошибка 400 Bad Request может появляться в приложении. Ниже представлены некоторые наиболее вероятные случаи:
- Клиент случайно (или намеренно) отправляет информацию, перехватываемую маршрутизатором ложных запросов. Некоторые веб-приложения ищут особые заголовки HTTP, чтобы обрабатывать запросы и удостовериться в том, что клиент не предпринимает ничего зловредного. Если ожидаемый заголовок HTTP не найден или неверен, то ошибка 400 Bad Request – возможный результат.
- Клиент может загружать слишком большой файл. Большинство серверов или приложений имеют лимит на размер загружаемого файла, Это предотвращает засорение канала и других ресурсов сервера. Во многих случаях сервер выдаст ошибку 400 Bad Request, когда файл слишком большой и поэтому запрос не может быть выполнен.
- Клиент запрашивает неверный URL. Если клиент посылает запрос к неверному URL (неверно составленному), это может привести к возникновению ошибки 400 Bad Request.
- Клиент использует недействительные или устаревшие куки. Это возможно, так как локальные куки в браузере являются идентификатором сессии. Если токен конкретной сессии совпадает с токеном запроса от другого клиента, то сервер/приложение может интерпретировать это как злонамеренный акт и выдать код ошибки 400 Bad Request.
Устранение ошибки 400 Bad Request (попробуйте позже) лучше начать с исправления на стороне клиента. Вот несколько советов, что следует попробовать в браузере или на устройстве, которые выдают ошибку.
Наиболее частой причиной ошибки 400 Bad Request является банальный ввод некорректного URL. Доменные имена (например, internet-technologies.ru) нечувствительны к регистру, поэтому ссылка, написанная в смешанном регистре, такая как interNET-technologies.RU работает так же, как и нормальная версия в нижнем регистре internet-technologies.ru. Но части URL, которые расположены после доменного имени, чувствительными к регистру. Кроме случаев, когда приложение/сервер специально осуществляет предварительную обработку всех URL и переводит их в нижний регистр перед исполнением запроса.
Важно проверять URL на неподходящие специальные символы, которых в нем не должно быть. Если сервер получает некорректный URL, он выдаст ответ в виде ошибки 400 Bad Request.
Одной из потенциальных причин возникновения ошибки 400 Bad Request являются некорректные или дублирующие локальные куки. Файлы куки в HTTP – это небольшие фрагменты данных, хранящиеся на локальном устройстве, которые используются сайтами и веб-приложениями для «запоминания» конкретного браузера или устройства. Большинство современных веб-приложений использует куки для хранения данных, специфичных для браузера или пользователя, идентифицируя клиента и позволяя делать следующие визиты быстрее и проще.
Но куки, хранящие информацию сессии о вашем аккаунте или устройстве, могут конфликтовать с другим токеном сессии от другого пользователя, выдавая кому-то из вас (или вам обоим) ошибку 400 Bad Request.
В большинстве случаев достаточно рассматривать только ваше приложение в отношении файлов куки, которые относятся к сайту или веб-приложению, выдающему ошибку 400 Bad Request.
Куки хранятся по принципу доменного имени веб-приложения, поэтому можно удалить только те куки, которые соответствуют домену сайта, сохранив остальные куки не тронутыми. Но если вы не знакомы с ручным удалением определённых файлов куки, гораздо проще и безопаснее очистить сразу все файлы куки.
Это можно сделать разными способами в зависимости от браузера, который вы используете:
- Google Chrome;
- Internet Explorer;
- Microsoft Edge;
- Mozilla Firefox;
- Safari.
Если вы получаете ошибку 400 Bad Request при загрузке какого-либо файла, попробуйте корректность работы на меньшем по размеру файле, Это включает в себя и «загрузки» файлов, которые не загружаются с вашего локального компьютера. Даже файлы, отправленные с других компьютеров, считаются «загрузками» с точки зрения веб-сервера, на котором работает ваше приложение.
Попробуйте выйти из системы и войти обратно. Если вы недавно очистили файлы куки в браузере, это приводит к автоматическому выходу из системы при следующей загрузке страницы. Попробуйте просто войти обратно, чтобы посмотреть, заработала ли система корректно.
Также приложение может столкнуться с проблемой, связанной с вашей предыдущей сессией, являющейся лишь строкой, которую сервер посылает клиенту, чтобы идентифицировать клиента при будущих запросах. Как и в случае с другими данными, токен сессии (или строка сессии) хранится локально на вашем устройстве в файлах куки и передаётся клиентом на сервер при каждом запросе. Если сервер решает, что токен сессии некорректен или скомпрометирован, вы можете получить ошибку 400 Bad Request.
В большинстве веб-приложений выход повторный вход приводит к перегенерации локального токена сессии.
Если вы используете на сервере распространённые пакеты программ, которые выдают ошибку 400 Bad Request, изучите стабильность и функциональность этих платформ. Наиболее распространённые системы управления контентом, такие как WordPress, Joomla! и Drupal, хорошо протестированы в своих базовых версиях. Но как только вы начинаете изменять используемые ими расширения PHP, очень легко спровоцировать непредвиденные проблемы, которые выльются в ошибку 400 Bad Request.
Если вы обновили систему управления контентом непосредственно перед появлением ошибки 400 Bad Request, рассмотрите возможность отката к предыдущей версии, которая была установлена, как самый быстрый и простой способ убрать ошибку 400 bad request.
Аналогично, любые расширения или модули, которые были обновлены, могут вызывать ошибки на стороне сервера, поэтому откат к предыдущим версиям этих расширений также может помочь.
Но в некоторых случаях CMS не предоставляют возможности отката к предыдущим версиям. Так обычно происходит с популярными платформами, поэтому не бойтесь, если вы не можете найти простой способ вернуться к использованию старой версии той или иной программной платформы.
В зависимости от конкретной CMS, которую использует приложение, имена этих компонентов будут различаться. Но во всех системах они служат одной и той же цели: улучшение возможностей платформы относительно её стандартной функциональности.
При этом имейте в виду, что расширения могут так или иначе получать полный контроль над системой, вносить изменения в код PHP, HTML, CSS, JavaScript или базу данных. Поэтому мудрым решением может быть удаление любых новых расширений, которые были недавно добавлены.
Даже если удалили расширение через панель управления CMS, это не гарантирует, что внесенные им изменения были полностью отменены. Это касается многих расширений WordPress, которым предоставляется полный доступ к базе данных.
Расширение может изменить записи в базе данных, которые «не принадлежат» ему, а созданы и управляются другими расширениями (или даже самой CMS). В подобных случаях модуль может не знать, как откатить назад изменения, внесенные в записи базы данных.
Я лично сталкивался с такими случаями несколько раз. Поэтому лучшим путём будет открыть базу данных и вручную просмотреть таблицы и записи, которые могли быть изменены расширением.
Если вы уверены, что ошибка 400 Bad Request не связана с CMS, вот некоторые дополнительные советы, которые могут помочь найти проблему на стороне сервера.
Ошибка, которую вы получаете от приложения, является результатом недостающих или некорректных специальных заголовков HTTP, которые ожидает получить приложение или сервер. В подобных случаях нужно проанализировать заголовки HTTP, которые отправляются на сторону сервера.
Почти любое веб-приложение будет вести логи на стороне сервера. Они представляют собой историю того, что делало приложение. Например, какие страницы были запрошены, к каким серверам оно обращалось, какие результаты предоставлялись из базы данных и т.п.
Логи сервера относятся к оборудованию, на котором выполняется приложение, и зачастую представляют собой детали о статусе подключённых сервисов или даже о самом сервере. Поищите в интернете “логи [ИМЯ_ПЛАТФОРМЫ]”, если вы используете CMS, или “логи [ЯЗЫК_ПРОГРАММИРОВАНИЯ]” и “логи [ОПЕРАЦИОННАЯ_СИСТЕМА]”, если у вас собственное приложение, чтобы получить подробную информацию по поиску логов.
Если это не помогло, проблема может быть в исходном коде, который выполняется внутри приложения. Попытайтесь диагностировать, откуда может исходить проблема, отлаживая приложение вручную и параллельно просматривая логи приложения и сервера.
Создайте копию всего приложения на локальном устройстве для разработки и пошагово повторите тот сценарий, который приводил к возникновению ошибки 400 Bad Request. А затем просмотрите код приложения в тот момент, когда что-то пойдёт не так.
Независимо от причины возникновения ошибки, даже если вам удалось исправить её в этот раз, появление в вашем приложении такой проблемы — это сигнал для того, чтобы внедрить инструмент обработки ошибок, который поможет автоматически обнаруживать их и оповещать в момент возникновения.
Что это такое? Олдскулы наверняка помнят, с каким звуком ошибка 400 отображалась на старых устройствах. А в «Записках невесты программиста» под Bad Request Denied открывалась входная дверь главного героя. На самом деле, все коды, которые начинаются с 4, означают, что проблему надо искать на стороне пользователя.
Как устранить? Прежде чем писать гневные посты в чат вашего провайдера, когда нет сети, стоит для начала разобраться в причинах ошибки 400. Именно они подскажут, как убрать код ответа со страницы.
В статье рассказывается:
- 6 основных причин появления ошибки 400 Bad Request
- Как исправить ошибку 400 на стороне пользователя
- Что делать, если ошибка 400 на стороне сервера
- Профилактика возникновения ошибки 400
-
Пройди тест и узнай, какая сфера тебе подходит:
айти, дизайн или маркетинг.Бесплатно от Geekbrains
6 основных причин появления ошибки 400 Bad Request
Когда сервер не может обработать входящий от пользователя запрос из-за неправильного синтаксиса, HTTP выдает ошибку 400 Bad Request. Найти причину возникновения ошибки зачастую трудно даже внутри управляемой среды разработки, так как код ответа HTTP определяет непростые взаимоотношения между клиентом, сервером и веб-приложением. Часто конфликт возникает сразу с несколькими сторонними веб-сервисами.
Ошибка 400 возникает по следующим причинам:
- Допущена опечатка в ссылке. Это может произойти как по вине пользователя при некорректном вводе, так и со стороны владельца сайта, который разместил ссылку на ресурсе. В таком случае сайт выдаст ошибку 404: «Страница не найдена».
- Файлы cookies устарели.
- Посетитель сайта загружает файл слишком большого объема.
- Блокировка ресурса антивирусной системой или брандмауэром.
- Доступ блокируется вирусом.
- Со стороны провайдера интернет-услуг наблюдаются проблемы.
Проверьте, правильно ли введен адрес сайта
Неверно указанный URL – самая частая проблема ошибки 400 BAD Request. Рассмотрим на примере доменного имени internet-technologies.ru. Домен второго уровня нечувствителен к регистру, поэтому при написании адреса в формате interNET-technologies.ru страница будет работать идентично с прописанной нижним регистром ссылкой.
Скачать файл
Доменная зона первого уровня (ru) чувствительна к регистру, и, если браузер или приложение не переводит символы в нижний регистр перед исполнением запроса, выйдет ошибка HTTP-запроса 400.
Если адрес прописан верно, переходите к поиску других причин. Список подготовили ниже.
Произведите очистку кэша и файлов cookies
Ошибка 400 в ряде случаев возникает из-за некорректных или повторяющихся локальных файлов cookies. Простым языком – это отдельные фрагменты данных, которые хранятся в памяти гаджета и используются для идентификации сайтами или приложениями определенного браузера или устройства. Хранение данных позволяет приложениям опознать клиента для упрощения и ускорения дальнейших посещений пользователем этого ресурса.
Ошибка 400 может возникать из-за конфликта файлов cookies, хранящимися на вашем устройстве или аккаунте, с токеном сессии другого пользователя. В таком случае она всплывает у одного из клиентов.
Однако наиболее часто хватает почистить кэш файлов cookies только на вашем приложении или браузере, который выдает ошибку запроса 400.
Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда
Подборка 50+ ресурсов об IT-сфере
Только лучшие телеграм-каналы, каналы Youtube, подкасты, форумы и многое другое для того, чтобы узнавать новое про IT
ТОП 50+ сервисов и приложений от Geekbrains
Безопасные и надежные программы для работы в наши дни
Уже скачали 18731
Файлы, содержащие в себе информацию о пользователе, сохраняются на вашем устройстве по принципу доменного имени. Просто и безопасно можно очистить все фалы cookies. Но если вы не хотите чистить кэш полностью и знакомы с ручным удалением, можно почистить только те сессии, которые соответствуют домену сайта с ошибкой.
Очистка кэша DNS
Для ускорения связи с сервером ваше устройство сохраняет IP-адреса сайтов с наиболее частым посещением. Такая временная база носит название DNS-кэш.
При изменении DNS данные буду отправляться на прошлый IP-адрес. Очистка сведений поможет направить запрос на новый IP. Зачастую при несоответствии DNS файлов всплывает ошибка 502, но также можно увидеть, что произошла ошибка 400.

Читайте также
Ниже мы описали 3 простых действия, которые помогут очистить кэш:
- В поиске на панели задач введите запрос «Командная строка» и откройте появившееся приложение.
- Наберите команду ipconfig /flushdns
- При успешной очистке всплывёт сообщение: = 932×270.
- Настройка антивируса и брандмауэра
Ошибка установки связи 400 может возникать из-за блокировки сайта антивирусом или брандмауэром. Для проверки необходимо временно отключить программы. Если страница загрузилась, следует поменять настройки защиты вашего устройства.
Сканирование устройства на вирусы
Отсканируйте устройство антивирусом, ведь связь с сайтами может нарушать вредоносная программа. При обнаружении вируса удалите его и перезагрузите устройство. Если ничего не обнаружено попробуйте другой способ.
Обновление сетевых драйверов
Посылать неверные запросы может устаревшее на сетевых устройствах ПО. Для исключения этой ошибки необходимо обновить драйверы для сетевого соединения.
Откат последних изменений системы
Любые обновлённые расширения или модули могут быть причиной появления ошибки на стороне сервера. Здесь может помочь откат к более ранним версиям.
Если ошибка 400 возникла после обновления системы управления контентом, необходимо попробовать выполнить откат к предыдущей версии. Это будет самым лёгким и простым способом её устранения.
Стоит учесть, что на некоторых популярных платформах CMS невозможно откатить до предыдущей версии. Если вы не можете вернуться к использованию более раннего варианта программы, стоит поискать другие методы.
Уменьшение веса файла
Проблема с сервером возникает не только на стороне пользователя. Например, слишком большой файл, загруженный на ресурс, может привести к обрыву соединения.
Для того чтобы не занимать много места на своем сервере, на некоторых сайтах стоят ограничения по объёму файлов, которые загружают пользователи. Если на этапе загрузки вы увидели такой код, скорее всего, файл больше, чем требуется. Для устранения ошибки необходимо уменьшить размер до рекомендуемого.
Удаление новых расширений и модулей
Имена компонентов могут отличаться в зависимости от системы создания и управления сайтом (модули, плагины и т.д.). Все новые расширения улучшают возможности стандартной функциональности используемой платформы.
Однако при ошибке запроса следует удалить недавно установленные модули, так как наряду с улучшением функциональности все расширения могут в полной степени иметь контроль над системой и возможность вносить изменения в базу данных или код PHP, HTML, CSS, JavaScript.
Точный инструмент «Колесо компетенций»
Для детального самоанализа по выбору IT-профессии
Список грубых ошибок в IT, из-за которых сразу увольняют
Об этом мало кто рассказывает, но это должен знать каждый
Мини-тест из 11 вопросов от нашего личного психолога
Вы сразу поймете, что в данный момент тормозит ваш успех
Регистрируйтесь на бесплатный интенсив, чтобы за 3 часа начать разбираться в IT лучше 90% новичков.
Только до 13 февраля
Осталось 17 мест
Проверка корректной работы со стороны провайдера интернет-услуг
Если ошибка сохраняется даже при посещении другого веб-сайта, стоит учесть возможное нарушение работы сетевого оборудования. Для исправления ситуации необходимо перезагрузить маршрутизатор или модем и само устройство, с которого производится выход в сеть.
При неудачных попытках обратитесь к вашему провайдеру: подробное описание ситуации поможет решить проблему. Досконально расскажите о всех предпринятых действиях с указанием операционной системы устройства, используемого браузера, включена ли защита (антивирус и брандмауэр), выполняли ли сканирование на вирусы, производили или нет очистку кэша и куки файлов.
Что делать, если ошибка 400 на стороне сервера
Если проблема не связана с CMS, это значит, что ошибка 400 возникла на стороне сервера. Вот некоторые дополнительные пункты, которые помогут найти решение.
- Проверить на корректность заголовки HTTP
Если приложение или сервер получают отличные от ожидаемых неверные или недостающие заголовки HTTP, то вы получите ошибку. В таком случае следует выполнить анализ заголовков, которые отправляются на сторону сервера.

Читайте также
- Просмотр логов
Ведение логов на стороне сервера осуществляется практически любым интернет – приложением. Логи – это файлы, которые содержат в себе информацию об истории приложения: на какие страницы был отправлен запрос, к каким серверам и какие результаты выдавала база данных.
Для того чтобы получить данные по поиску логов вашего собственного приложения, можно воспользоваться поиском в интернете, воспользовавшись запросом “логи [ОПЕРАЦИОННАЯ_СИСТЕМА]”. При использовании CMS вбейте “логи [ИМЯ_ПЛАТФОРМЫ]” или “логи [ЯЗЫК_ПРОГРАММИРОВАНИЯ]”.
- Отладка скриптов и кода приложения
Если всё вышеперечисленное не дало положительного результата, ещё одной проблемой, почему ошибка 400 не даёт загрузить сайт, может быть исходный код. Он выполняется внутри самого приложения. Для диагностики необходимо будет проверить настройки вручную, одновременно с этим просмотреть логи сервера и приложения.
Ещё раз воспроизведите сценарий шагов, который приводил к появлению ошибки, создав на локальном устройстве копию всего приложения, а после посмотрите код в момент её возникновения.
Исключить повторное появление сбоя соединения поможет инструмент обработки ошибок, который сможет автоматически обнаружить и подать сигнал в момент возникновения таковых. Его внедрение позволит быстро распознать этап появления и ускорить время устранения неполадок.
Профилактика возникновения ошибки 400
Мы подробно рассмотрели, что означает ошибка 400, и дали максимум вариантов для её исключения. Если все перечисленные способы не сработали, то не лишним будет выполнить шаг по очистке системы от мусора, включая реестр. В этом вам поможет программа CCleaner.
- Для поиска ошибки в реестре запустите программу, далее, после нажатия кнопки «Реестр», выделите все пункты и начните сканирование кнопкой «Поиск проблем».
- По завершению программа предложит посмотреть выбранные проблемы. Нажмите на эту кнопку. Перед внесением изменений вам будет предложено создать резервную копию реестра. Для перестраховки нажмите «Да». Далее нажимаем на «Исправить отмеченные» после чего ошибки реестра будут успешно исправлены.
- Для очистки программ от мусора, необходимо открыть раздел «Стандартная очистка» и отметить все пункты компонентов Windows, которые необходимо почистить. Время процесса может отличаться, всё зависит от объема внутреннего хранилища. Обычно это занимает несколько минут. По завершению сканирования нажмите на кнопку «Очистка», выбрав необходимые программы во вкладке «Приложения».
Надеемся, что наш материал вам помог исключить ошибку соединения 400. В любом случае вы проверили все возможные причины её появления и попутно произвели очистку системы от мусора, что позволит избежать появления других проблем на вашем устройстве.









