You can build your own kernel on Amazon EC2, so long as you pick the appropriate PV Grub kernel image.

Types of pv-grub kernel

There are two types of pv-grub kernel image:

  • hd0 - for boot disk images that are unpartitioned (as most on the cloud are)
  • hd00 - for boot disk images that are partitioned (as most physical servers are)

Configuration file

hd0

pv-grub looks for /boot/grub/menu.lst on the first partition of the hard drive. If you have just one partition for the whole root device, you’ll use the hd0 pv-grub kernel AKI, and the configuration file will be located at /boot/grub/menu.lst.

/boot/grub/menu.lst

1
2
3
4
5
6
# Sample /boot/grub/menu.lst for hd0
default 0
timeout 3
title EC2
root (hd0)
kernel /boot/bzImage root=/dev/xvda1 rootfstype=ext4

hd00 multi-partition

If you partitioned the root device, you need to use the hd00 pv-grub AKI. As before, pv-grub looks for /boot/grub/menu.lst on the first partition of the hard drive.

If the first partition is a dedicated boot partition and the second partition is the root partition, the configuration file will be /boot/boot/grub/menu.lst. This is because it is looking for /boot/grub/menu.lst in the first partition, which is /boot.

/boot/boot/grub/menu.lst

1
2
3
4
5
6
# Sample /boot/boot/grub/menu.lst for hd00
default 0
timeout 3
title EC2
root (hd0,0)
kernel /boot/bzImage root=/dev/xvda2 rootfstype=ext4

hd00 single-partition

However, if for example there is only one partition on the root device (thus making it the root partition), the configuration file will be /boot/grub/menu.lst.

/boot/grub/menu.lst

1
2
3
4
5
6
# Sample /boot/grub/menu.lst for hd00
default 0
timeout 3
title EC2
root (hd0,0)
kernel /boot/bzImage root=/dev/xvda1 rootfstype=ext4

Supported File Systems

The following file systems are supported for the partition with /boot:

  • ext2
  • ext3
  • ext4
  • xfs
  • reiserfs
  • btrfs

How to find pv-grub kernel

Note: change region as appropriate

Example API Request

1
2
3
4
5
6
7
8
https://ec2.us-east-1.amazonaws.com/
?Action=DescribeImages
&Owner.1=amazon
&Filter.1.Name=image-type
&Filter.1.Value.1=kernel
&Filter.2.Name=manifest-location
&Filter.2.Value.1=*pv-grub*
&*AUTHPARAMS*

Using AWS CLI:

Console - user@hostname ~ $

1
2
3
4
5
6
7
8
9
10
11
12
13
aws --region=us-east-1 ec2 \
describe-images \
--owners "[\"amazon\"]" \
--filters "[
    {
        \"Name\": \"image-type\",
        \"Values\": [\"kernel\"]
    },
    {
        \"Name\": \"manifest-location\",
        \"Values\": [\"*pv-grub*\"]
    }
]"

Output

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
{
    "Images": [
        {
            "VirtualizationType": "paravirtual",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-407d9529",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "i386",
            "ImageLocation": "ec2-public-images/pv-grub-hd0-V1.01-i386.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "206029621532",
            "Public": true,
            "ImageType": "kernel"
        },
        {
            "VirtualizationType": "paravirtual",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-427d952b",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "x86_64",
            "ImageLocation": "ec2-public-images/pv-grub-hd0-V1.01-x86_64.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "206029621532",
            "Public": true,
            "ImageType": "kernel"
        },
        {
            "VirtualizationType": "paravirtual",
            "Name": "pv-grub-hd00_1.04-x86_64.gz",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-499ccb20",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "x86_64",
            "ImageLocation": "amzn-ami-us-east-1/pv-grub-hd00_1.04-x86_64.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "137112412989",
            "Public": true,
            "ImageType": "kernel",
            "Description": "PV-GRUB release 1.04, 64-bit, configured for (hd0,0)/boot/grub/menu.lst"
        },
        {
            "VirtualizationType": "paravirtual",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-4c7d9525",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "i386",
            "ImageLocation": "ec2-public-images/pv-grub-hd00-V1.01-i386.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "206029621532",
            "Public": true,
            "ImageType": "kernel"
        },
        {
            "VirtualizationType": "paravirtual",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-4e7d9527",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "x86_64",
            "ImageLocation": "ec2-public-images/pv-grub-hd00-V1.01-x86_64.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "206029621532",
            "Public": true,
            "ImageType": "kernel"
        },
        {
            "VirtualizationType": "paravirtual",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-525ea73b",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "i386",
            "ImageLocation": "ec2-public-images/pv-grub-hd00_1.02-i386.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "206029621532",
            "Public": true,
            "ImageType": "kernel"
        },
        {
            "VirtualizationType": "paravirtual",
            "Name": "pv-grub-hd00_1.04-i386.gz",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-659ccb0c",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "i386",
            "ImageLocation": "amzn-ami-us-east-1/pv-grub-hd00_1.04-i386.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "137112412989",
            "Public": true,
            "ImageType": "kernel",
            "Description": "PV-GRUB release 1.04, 32-bit, configured for (hd0,0)/boot/grub/menu.lst"
        },
        {
            "VirtualizationType": "paravirtual",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-805ea7e9",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "i386",
            "ImageLocation": "ec2-public-images/pv-grub-hd0_1.02-i386.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "206029621532",
            "Public": true,
            "ImageType": "kernel"
        },
        {
            "VirtualizationType": "paravirtual",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-825ea7eb",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "x86_64",
            "ImageLocation": "ec2-public-images/pv-grub-hd0_1.02-x86_64.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "206029621532",
            "Public": true,
            "ImageType": "kernel"
        },
        {
            "VirtualizationType": "paravirtual",
            "Name": "pv-grub-hd0_1.03-x86_64.gz",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-88aa75e1",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "x86_64",
            "ImageLocation": "ec2-public-images/pv-grub-hd0_1.03-x86_64.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "206029621532",
            "Public": true,
            "ImageType": "kernel",
            "Description": "PV-GRUB release 1.03, 64-bit, configured for (hd0)/boot/grub/menu.lst"
        },
        {
            "VirtualizationType": "paravirtual",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-8e5ea7e7",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "x86_64",
            "ImageLocation": "ec2-public-images/pv-grub-hd00_1.02-x86_64.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "206029621532",
            "Public": true,
            "ImageType": "kernel"
        },
        {
            "VirtualizationType": "paravirtual",
            "Name": "pv-grub-hd0_1.04-i386.gz",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-8f9dcae6",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "i386",
            "ImageLocation": "amzn-ami-us-east-1/pv-grub-hd0_1.04-i386.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "137112412989",
            "Public": true,
            "ImageType": "kernel",
            "Description": "PV-GRUB release 1.04, 32-bit, configured for (hd0)/boot/grub/menu.lst"
        },
        {
            "VirtualizationType": "paravirtual",
            "Name": "pv-grub-hd0_1.04-x86_64.gz",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-919dcaf8",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "x86_64",
            "ImageLocation": "amzn-ami-us-east-1/pv-grub-hd0_1.04-x86_64.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "137112412989",
            "Public": true,
            "ImageType": "kernel",
            "Description": "PV-GRUB release 1.04, 64-bit, configured for (hd0)/boot/grub/menu.lst"
        },
        {
            "VirtualizationType": "paravirtual",
            "Name": "pv-grub-hd00_1.03-i386.gz",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-b2aa75db",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "i386",
            "ImageLocation": "ec2-public-images/pv-grub-hd00_1.03-i386.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "206029621532",
            "Public": true,
            "ImageType": "kernel",
            "Description": "PV-GRUB release 1.03, 32-bit, configured for (hd0,0)/boot/grub/menu.lst"
        },
        {
            "VirtualizationType": "paravirtual",
            "Name": "pv-grub-hd00_1.03-x86_64.gz",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-b4aa75dd",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "x86_64",
            "ImageLocation": "ec2-public-images/pv-grub-hd00_1.03-x86_64.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "206029621532",
            "Public": true,
            "ImageType": "kernel",
            "Description": "PV-GRUB release 1.03, 64-bit, configured for (hd0,0)/boot/grub/menu.lst"
        },
        {
            "VirtualizationType": "paravirtual",
            "Name": "pv-grub-hd0_1.03-i386.gz",
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "ImageId": "aki-b6aa75df",
            "State": "available",
            "BlockDeviceMappings": [],
            "Architecture": "i386",
            "ImageLocation": "ec2-public-images/pv-grub-hd0_1.03-i386.gz.manifest.xml",
            "RootDeviceType": "instance-store",
            "OwnerId": "206029621532",
            "Public": true,
            "ImageType": "kernel",
            "Description": "PV-GRUB release 1.03, 32-bit, configured for (hd0)/boot/grub/menu.lst"
        }
    ]
}

Using ec2-api-tools:

Console - user@hostname ~ $

1
2
3
4
5
ec2-describe-images \
--owner amazon \
--filter image-type=kernel \
--filter manifest-location=*pv-grub* \
--region us-east-1

Output

1
2
3
4
5
6
7
8
IMAGE   aki-407d9529    ec2-public-images/pv-grub-hd0-V1.01-i386.gz.manifest.xml        amazon  available       public          i386    kernel                          instance-store  paravirtual     xen
IMAGE   aki-427d952b    ec2-public-images/pv-grub-hd0-V1.01-x86_64.gz.manifest.xml      amazon  available       public          x86_64  kernel                          instance-store  paravirtual     xen
IMAGE   aki-4c7d9525    ec2-public-images/pv-grub-hd00-V1.01-i386.gz.manifest.xml       amazon  available       public          i386    kernel                          instance-store  paravirtual     xen
IMAGE   aki-4e7d9527    ec2-public-images/pv-grub-hd00-V1.01-x86_64.gz.manifest.xml     amazon  available       public          x86_64  kernel                          instance-store  paravirtual     xen
IMAGE   aki-525ea73b    ec2-public-images/pv-grub-hd00_1.02-i386.gz.manifest.xml        amazon  available       public          i386    kernel                          instance-store  paravirtual     xen
IMAGE   aki-8e5ea7e7    ec2-public-images/pv-grub-hd00_1.02-x86_64.gz.manifest.xml      amazon  available       public          x86_64  kernel                          instance-store  paravirtual     xen
IMAGE   aki-805ea7e9    ec2-public-images/pv-grub-hd0_1.02-i386.gz.manifest.xml         amazon  available       public          i386    kernel                          instance-store  paravirtual     xen
IMAGE   aki-825ea7eb    ec2-public-images/pv-grub-hd0_1.02-x86_64.gz.manifest.xml       amazon  available       public          x86_64  kernel                          instance-store  paravirtual     xen

For more info