Add tags like these to your server:
KEXEC_KERNEL=http://mirror.scaleway.com/kernel/armv7l-mainline-lts-4.9-4.9.93-rev1/vmlinuz
KEXEC_INITRD=http://mirror.scaleway.com/initrd/uInitrd-Linux-armv7l-v3.14.6
KEXEC_APPEND=vmalloc=512M
The ScaleWay's "BareMetal" "C1" instance is a cheap EUR 3 / month cloud infrastructure instance. It has:
ScaleWay offers two lines of servers:
One important difference between the two is that:
Another important difference is that currently in ScaleWay infrastructure, contra-logically:
Thus a problem arises you need to change something.
My case was that I wanted to use ZFS and it is not included in the official Linux kernel. It is rather build as a module. On standard Debian it is done easily by installing the zfs-dkms package.
It is possible to build the module for the C1 instance kernel by preparing the build env like described here:
The problem was, that ZFS on 32bit Linux:
which is officially stated here:
I'm stil about to see the former but hit the latter quite fast, and as recommended
I had to add the vmalloc=512M
boot parameter.
Unfortunately Scaleway does not support passing parameters to their kernels.
They however support KEXEC via the KEXEC_KERNEL
and KEXEC_INITRD
params as
documented here:
and they support parameters to the KEXEC-ed kernel via the KEXEC_APPEND param.
So as I just needed to boot the same kernel and pass the parameter. So first I had to find where the current kernel and initrd are. This is done by installing "scaleway-cli":
I've just grabbed the pre-built amd64 deb packages, and then used the "scw" command to get info about the instance:
# list servers
$ scw ps
# Show instance details
$ scw inspect SERVER_ID
"bootscript": {
"bootcmdargs": "LINUX_COMMON scaleway boot=local nbd.max_part=16",
"initrd": "initrd/uInitrd-Linux-armv7l-v3.14.6",
"kernel": "kernel/armv7l-mainline-lts-4.9-4.9.93-rev1",
"dtb": "dtb/c1-armv7l-mainline-lts-4.9-4.9.93-rev1",
...
If you inspect a VM instance you will see that the kernel and initrd are referred by IP:
"bootscript": {
"bootcmdargs": "LINUX_COMMON scaleway boot=local nbd.max_part=16",
"initrd": "http://169.254.42.24/initrd/initrd-Linux-x86_64-v3.14.6.gz",
"kernel": "http://169.254.42.24/kernel/x86_64-mainline-lts-4.4-4.4.127-rev1/vmlinuz-4.4.127"
And a google search showed me that the kernel and the initrd were available at:
I've had a problem by trying to use the image referred in the params above:
# DO NOT USE THIS ONE
KEXEC_INITRD=http://mirror.scaleway.com/initrd/uInitrd-Linux-armv7l-v3.14.6
and I've wasted a couple of hours until I realized that this image was in a different format, not usable for the KEXEC_INITRD . Then I've changed it to:
KEXEC_INITRD=http://mirror.scaleway.com/initrd/initrd-Linux-armv7l-v3.14.6.gz
and this time it worked fine.
The kernel can be found via at least two different URLs:
KEXEC_KERNEL=http://mirror.scaleway.com/kernel/armv7l-mainline-lts-4.9-4.9.93-rev1/vmlinuz
http://mirror.scaleway.com/kernel/armv7l/4.9.93-mainline-rev1/vmlinuz
And after the successfull boot I've just had to add:
KEXEC_APPEND=vmalloc=512M
And my ZFS module was no longer complaining about lack of virtual memory.
Let me add a few articles that were helpful:
I've wasted about a day while investigating this stuff. If you find it helpful and you think that I might have saved you a couple of hours you can decide to send me a small donation on this PayPal e-mail: krustev-paypal@krustev.net