我正在尝试在 Amazon 云中创建我的 ec2 实例的映像。到目前为止,这有点冒险。我确实设法安装了 Amazon 的 ec2-api-tools,这比看起来要难。然后我运行:
ec2-bundle-vol -d /mnt -k pk-{key}.pem -c cert-{cert}.pem -u {uid} -s 1536
返回:
正在将 / 复制到映像文件 /mnt/image... 不包括:
/sys/kernel/debug /sys/kernel/security /sys /proc /dev/pts /dev /dev /media /mnt /proc /sys /etc/udev/rules.d/70-persistent-net.rules /etc/udev/rules.d/z25_persistent-net.rules /mnt/image /mnt/img-mnt 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.00677357 s, 155 MB/s mkfs.ext3: option requires an argument -- 'L' Usage: mkfs.ext3 [-c|-l filename] [-b block-size] [-f fragment-size] [-i bytes-per-inode] [-I inode-size] [-J journal-options] [-G meta group size] [-N number-of-inodes] [-m reserved-blocks-percentage] [-o creator-os] [-g blocks-per-group] [-L volume-label] [-M last-mounted-directory] [-O feature[,...]] [-r fs-revision] [-E extended-option[,...]] [-T fs-type] [-U UUID] [-jnqvFKSV] device [blocks-count] ERROR: execution failed: "mkfs.ext3 -F /mnt/image -U 1c001580-9118-4a50-9a25-dcf02be6d25f -L "
因此 mkfs.ext3 需要 -L,即卷名。但 ec2-bundle-vol 似乎不接受卷名作为参数,文档 (http://docs.amazonwebservices.com/AmazonEC2/gsg/2006-06-26/creating-an-image.html) 似乎不认为应该需要它。当然他们的示例命令:
# ec2-bundle-vol -d /mnt -k ~root/pk-HKZYKTAIG2ECMXYIBH3HXV4ZBZQ55CLO.pem -u 495219933132 -s 1536
没有指定任何内容。
那么...有什么帮助吗?我遗漏了什么?
答案1
好吧,我没能弄清楚导致错误的原因,但我确实找到了更好的方法。
事实证明,您可以从 AWS 控制台执行此操作,而不必从命令行使用 ec2-bundle-vol 来创建映像。
右键单击 EC2 选项卡中实例下列出的实例,然后会出现创建映像选项(如果 Amazon 在其文档中提到这一点就好了……)。此操作没有任何错误,但最终停止并重新启动了实例,这是我没有想到的。
答案2
经过一番研究,我发现缺少标签参数,因为它是一个空字符串(而不是预期的空值)。我不知道该怪谁,但我找到了一个解决方法。
笔记:我从来没有用 ruby 写过一行代码。
大约在文件第 141 行/usr/lib/ec2-ami-tools/lib/ec2/platform/linux/image.rb代替:
mkfs += [ '-L', label ] if label
经过
mkfs += [ '-L', label ] if !label.to_s.empty?
然后它就可以工作了!
答案3
尝试标记你的根分区:
$ sudo e2label /dev/sda1 root
它对我有用。
答案4
使用较新版本的 ec2-ami-tools (1.3.49953)。可以从此处获取:
https://launchpad.net/ubuntu/lucid/amd64/ec2-ami-tools/1.3.49953-0ubuntu1~lucid1 (适用于 64 位)
和
https://launchpad.net/ubuntu/lucid/i386/ec2-ami-tools/1.3.49953-0ubuntu1~lucid1 (适用于 32 位)