在mkfs.ext3上在亚马逊上创buildec2映像失败

我正在尝试在Amazon云中创build一个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 

没有指定任何东西。

那么…有什么帮助? 我错过了什么?

那么,我没有弄清楚是什么原因导致了错误,但我确实find了一个更好的方法。

而不是从命令行使用ec2-bundle-vol来创build映像,事实certificate,您可以从AWS控制台执行此操作。

右键单击EC2选项卡中的实例下面列出的实例,创build图像是一个选项(如果亚马逊在他们的文档中提到过,那么会很好)。 这没有错误的工作,虽然它最终停止并重新启动实例,我没有料到。

经过一番研究,我发现标签参数缺less,因为它是一个空string(并不是如预期的那样)。 我不知道是谁的责任,但我find了解决办法。

注意 :我从来没有写过ruby单行。

/usr/lib/ec2-ami-tools/lib/ec2/platform/linux/image.rb文件的第141行周围replace:

 mkfs += [ '-L', label ] if label 

通过

 mkfs += [ '-L', label ] if !label.to_s.empty? 

然后它应该工作!

尝试标记你的根分区:

 $ sudo e2label /dev/sda1 root 

它为我工作。