Tạo AWS HVM Linux AMI từ Paravirtual Linux AMI hiện có


38

Có thể tạo một máy ảo phần cứng (HVM) AMI từ một paravirtual (PV) hiện có.

Suy nghĩ ban đầu của tôi là bắt đầu một cá thể PV mới và sử dụng ec2-create-imagelệnh để tạo một hình ảnh mới trong khi chỉ định HVM là loại virutalization. Tuy nhiên, ec2-create-imagekhông có tham số dòng lệnh để chỉ định loại ảo hóa.

Có cách nào khác để làm điều này?

Câu trả lời:


22

Cập nhật

AWS đã kích hoạt tính năng này trong API EC2. Nó có sẵn như là --virtualization-typetùy chọn aws ec2 register-imagetrong awscli dựa trên Boto mới.

Câu trả lời gốc

Vâng! Thật không may, không có một cách trực tiếp để làm như vậy. Ngoài ra, một số phiên bản PV có thể cần sửa đổi kernel và bootloader.

  1. Tạo một khối lượng từ PV AMI hiện tại của bạn. Nếu đó là PV AMI của riêng bạn, bạn có thể tạo một âm lượng từ ảnh chụp nhanh. Nếu đó là AMI của bên thứ 3, bạn sẽ cần khởi chạy một thể hiện và chụp ảnh nhanh.
  2. Khởi chạy một thể hiện HVM với bất kỳ AMI nào.
  3. Dừng ví dụ HVM đó.
  4. Tách khối lượng gốc từ trường hợp đó.
  5. Đính kèm âm lượng PV dưới dạng âm lượng gốc (/ dev / sda1 hoặc / dev / sda nếu nó được phân vùng) với thể hiện HVM.
  6. Chạy ec2-create-imagetrên ví dụ HVM.
  7. Khởi chạy các phiên bản khác với HVM AMI mới của bạn.

Nếu điều đó không hoạt động, thì trước bước 5, bạn sẽ cần phải gắn âm lượng đó vào một phiên bản đang chạy, thiết lập một chroot và cài đặt kernel và bộ nạp khởi động cho bản phân phối của bạn. Bạn cũng có thể muốn xóa nhật ký và mọi bộ đệm đám mây.


2
Tôi đã thử các bước 1-5 và nó không hoạt động với tôi, vì ví dụ dừng lại sau vài giây. Ai đó có thể giải thích cách thiết lập một chroot, và cài đặt kernel và bootloader không? Cả hai phiên bản cũ và mới đều là AMI Linux. Cảm ơn.
tolgamorf

Nếu bạn có một cá thể PV hoạt động, bạn có thể chuyển đổi nó thành HVM bằng cách chạy aws ec2 register-imagevới cờ loại --virtualization trên ảnh chụp nhanh của hình ảnh PV. Xem aws ec2 register-image helpđể biết chi tiết.
Jeff Strunk

2
Tôi đã tạo một hình ảnh HVM từ ví dụ PV của tôi bằng cách sử dụng aws ec2 register-image. Sau đó, tôi đã đưa ra một ví dụ HVM mới từ hình ảnh đó. Tuy nhiên, hệ thống sẽ không khởi động.
tolgamorf

Sau khi đào qua diễn đàn aws ec2, tôi đã tìm ra một giải pháp trong đó việc chuyển đổi được thực hiện bằng cách thay thế các tệp theo cách thủ công. Tôi sẽ viết lên một câu trả lời sớm.
tolgamorf

@tolgamorf bạn có nhớ gì về những gì bạn đã làm không? Tôi đang có cùng một vấn đề.
Dmitry Minkovsky

13

Trong trường hợp của tôi, tôi đã phải thực hiện chuyển đổi theo cách thủ công vì trường hợp mà tôi tạo bằng cách aws ec2 register-imagekhông khởi động. Giải pháp của tôi dựa trên bài đăng này trên Diễn đàn AWS EC2 .

Chuẩn bị

Đảm bảo rằng tất cả các khối lượng nằm trong cùng một vùng khả dụng.

  1. SSH vào máy PV của bạn mà bạn muốn di chuyển từ và áp dụng tất cả các bản cập nhật, sau đó đăng xuất.

  2. Chuyển đến Bảng điều khiển AWS và khởi chạy phiên bản HVM mới bằng cách chọn cùng AMI cơ sở mà hệ thống PV được tạo từ (trong trường hợp của tôi là Amazon AMI 64 bit của Amazon).

  3. SSH vào trường hợp mới này và áp dụng tất cả các bản cập nhật, sau đó đăng xuất.

  4. Chuyển đến Bảng điều khiển AWS và dừng phiên bản PV. Chụp ảnh nhanh của thiết bị gốc và tạo một âm lượng mới ( SOURCE VOLUME) từ ảnh chụp nhanh này.

  5. Dừng ví dụ HVM. Chụp ảnh nhanh của thiết bị gốc trên phiên bản mới và tạo một âm lượng mới ( TARGET VOLUME) từ ảnh chụp nhanh này.

  6. Sử dụng Bảng điều khiển AWS:

    • Đính kèm SOURCE VOLUMEví dụ mới như /dev/xvdf.
    • Đính kèm TARGET VOLUMEví dụ mới như /dev/xvdg.

Quá trình chuyển đổi

  1. SSH đến phiên bản mới và nhận quyền truy cập root:

    sudo su
    
  2. Gắn ổ đĩa nguồn và đích.

    mkdir -p /mnt/source && mount /dev/xvdf /mnt/source
    mkdir -p /mnt/target && mount /dev/xvdg1 /mnt/target
    

    Trong trường hợp của tôi, các thiết bị là /dev/xvdf(nguồn) và /dev/xvdg1(đích). Chúng có thể thay đổi trong cấu hình của bạn dựa trên số lượng phân vùng và nơi bạn đính kèm chúng (xem bước 6 trong Chuẩn bị). Sử dụng ls -al /dev/xvd*để xem các ổ đĩa.

  3. Sao lưu /lib/modules/*(Nếu kernel của PV ami khác với máy HVM mới. Mô-đun này được sử dụng bởi một số dịch vụ của AWS.)

  4. Xóa mọi thứ nhưng /boottrên khối lượng đích:

    cd /mnt/target && ls | grep -v boot | xargs rm -Rf
    
  5. Xóa /boottrên ổ đĩa nguồn:

    rm -Rf /mnt/source/boot
    
  6. Sao chép dữ liệu của khối lượng nguồn vào ổ đĩa đích bảo toàn tất cả các thuộc tính:

    rsync -aAXHPv /mnt/source/ /mnt/target
    
  7. Chỉnh sửa /mnt/target/etc/fstabcho /phân vùng, để nó tham chiếu TARGET VOLUMEkhi được gắn vào vị trí cuối cùng của nó trong bước (8). Sử dụng nhãn hoặc đơn giản là một cái gì đó cùng:

    /dev/xvda1 /     ext4    defaults,barrier=0 1 1
    

Sau đó, khôi phục /lib/modules/đã được sao lưu trong Bước 3. (Nếu hạt nhân của PV ami khác với máy HVM mới.)

  1. Dừng hệ thống và tách tất cả các ổ đĩa bằng bàn điều khiển AWS. Đính kèm TARGET VOLUMEví dụ mới như /dev/xvda.

    Hãy chắc chắn lưu ý nơi thiết bị gốc được gắn kết. Trong hầu hết các trường hợp, nó nên được /dev/xvda.

  2. Bắt đầu ví dụ HVM của bạn. Bây giờ nó phải là một bản sao chính xác của hệ thống PV của bạn. Nếu mọi thứ đều ổn, bây giờ bạn có thể xóa cá thể PV của mình và cả SOURCE VOLUME.


1
Tại sao bạn không đơn giản làm một rm -f /bootcp -a /mnt/source/boot /mnt/target?
michelem

@Michelem nếu tôi nhớ chính xác, tôi đã thử làm điều đó ngay từ đầu. Máy không khởi động được.
tolgamorf

1
@tolgamorf Bất kỳ cơ hội cập nhật câu trả lời để phản ánh điều này?
Dan Tenenbaum

2
Các hướng dẫn này thực sự hữu ích (và hiệu quả với tôi !!) nhưng tôi có một đề nghị cuối cùng. Vì câu hỏi ban đầu là về việc tạo ra HVM AMI, đừng bỏ qua bước đó, hãy thêm bước cuối cùng để dừng cá thể và tạo AMI từ đó (sau đó chấm dứt thể hiện). Ngoài ra, tôi có các vấn đề chính xác giống như @DanGravell và tôi không sử dụng bộ lưu trữ từ tính, vì vậy đây có thể là những cạm bẫy phổ biến có thể được giải quyết trong câu trả lời.
Dan Tenenbaum

1
Cảm ơn nhiều! Điều này giúp tôi tiết kiệm rất nhiều thời gian, chỉnh sửa nó để xóa phần fstab làm tôi bối rối một chút. Cẩn thận trong bước (4), bằng cách nào đó tôi đã xóa gốc của âm lượng tạm thời chứ không phải các mục tiêu, phá vỡ âm lượng đó và phải khởi động lại quá trình.
Zar

10

TLDR:

ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI'  --sriov simple --virtualization-type hvm -s snap-b44feb18 --root-device-name /dev/sda1 

Các bước chi tiết:

Trả lời thêm dựa trên phản hồi của Jeff Strunk để đơn giản hóa các bước và cung cấp thêm một chút chi tiết về hình ảnh đăng ký ec2:

  1. Tạo sơ thẩm bằng PV Image. Thực hiện / cập nhật bất kỳ thay đổi bạn muốn.

  2. Tạo hình ảnh từ ví dụ trên.

  3. Tìm id ảnh chụp nhanh được sử dụng bởi AMI ở trên trong EC2> Lưu trữ khối đàn hồi> Ảnh chụp nhanh trong Bảng điều khiển EC2.

    hoặc nếu bạn có thiết lập công cụ api ec2:

    ec2-description-hình ảnh ami-id_of_above_created_ami

    và tìm id snapshot cho ami

    .. Giả định cho các bước tiếp theo: Các khóa ec2 và công cụ api của bạn đã được đặt và sẵn sàng để sử dụng:

  4. Đăng ký một HVM AMI mới bằng cách sử dụng ảnh chụp nhanh ở trên: ví dụ:

ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI' --sriov đơn giản - loại ảo -vv

Ở đâu

  • -d là mô tả AMI
  • -n là tên AMI
  • -s là id snapshot từ bước 3.
  • -a là kiến ​​trúc
  • --virtualization-type là cần thiết để làm cho nó hvm
  • --sriov là để cho phép tăng cường kết nối mạng, mặc dù nó có thể là dự phòng, không chắc chắn.

Để biết thêm thông tin:


2
Trừ khi tôi làm sai, điều này sẽ không hoạt động đối với các AMI trên thị trường hạn chế các loại thể hiện. Đã thử chuyển đổi AMI paravirtual AMI chính thức sang HVM và trong khi tôi có thể tạo HVM AMI, nó sẽ không khởi chạy một thể hiện HVM với nó.
Matt Beckman

@MattBeckman Tôi nghĩ rằng đó là về hỗ trợ kernel / bootloader cơ bản hơn là hạn chế AMI. Ở trên hoạt động cho fedora nhưng không cho amazon linux. Ở đó bạn phải đi theo đề xuất của Jeff Strunk nguyên bản.
Anshu Prateek

1
Nó hoạt động @AnshuPrateek
Atmesh Mishra

2

Bạn có thể làm điều này từ bên trong giao diện web AWS. Điều hướng đến ảnh chụp nhanh , nhấp vào ảnh chụp nhanh bạn muốn chuyển đổi sang hvm và nhấp vào hành động và sau đó tạo hình ảnh . Trong danh sách thả xuống trong trình hướng dẫn tạo ảnh, chọn HVM .


9
Tôi mới thử cái này, nhưng nó không giống như ví dụ sẽ không khởi động đúng cách. Nó chỉ tự dừng lại ở trạng thái dừng, vài phút sau khi tôi khởi động nó.
ovi

1

Sau khi thử tất cả các đề xuất trong tài liệu này, không có gợi ý nào phù hợp với tôi, tôi đã tìm thấy một mục blog tuyệt vời về chủ đề này, tại https://www.opswat.com/blog/aws-2015-why-you-need-switch- pv-hvm .

Các yếu tố (chi tiết) của thủ tục là:

  1. Cài đặt grubtrên phiên bản PV sẽ được di chuyển (ví dụ nguồn).

  2. Tạo ảnh chụp nhanh phòng ngừa âm lượng gốc trên thể hiện nguồn (âm lượng nguồn, SV).

  3. Tạo một thể hiện HVM tạm thời sẽ di chuyển âm lượng.

    1. Tôi đã sử dụng một ví dụ Amazon Linux
  4. Tạo một khối lượng đích (DV) và đính kèm cả cái này và SV vào ví dụ tạm thời.

    1. DV ít nhất phải lớn bằng SV.

    2. Đính kèm SV như /dev/{sd,xvd}f, và DV là /dev/{sd,xvd}g.

    3. Phân vùng DV:

    parted /dev/xvdg --script 'mklabel msdos mkpart primary 1M -1s print quit'

    partprobe /dev/xvdg

    udevadm settle

  5. Thay đổi kích thước đến kích thước tối thiểu FS của SV và sử dụng ddhình ảnh trên DV.

    1. Làm sạch FS của khối lượng nguồn: e2fsck -f /dev/xvdf

    2. Giảm thiểu giống nhau: resize2fs -M /dev/xvdf

    3. Quan sát đầu ra từ resize2fs (ví dụ Resizing the file system on /dev/xvdf to 269020 (4k) blocks) và ghi chú lại cho bước tiếp theo.

    4. Sao chép SV thành DV: dd if=/dev/xvdf of=/dev/xvdg1 bs=<block size from previous step, here 4k> count=<use block count from last step, here 269020>

    5. Mở rộng FS trên phân vùng mới: resize2fs /dev/xvdg1

  6. Cài đặt grubvào khối khởi động của DV

    1. Tạm thời tạo tập tin thiết bị trên DV: mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/

    2. Cài đặt tập tin grub:

    rm -f /mnt/boot/grub/*stage*

    cp /mnt/usr/*/grub/*/*stage* /mnt/boot/grub/

    rm -f /mnt/boot/grub/device.map

    1. Cài đặt grub trong môi trường chroot:

    cat << ARNIE | chroot /mnt grub --batch

    device (hd0) /dev/xvdg

    root (hd0,0)

    setup (hd0)

    ARNIE

  7. Đã thực hiện một số thay đổi nhỏ khác trên âm lượng đích, chụp âm lượng và tạo AMI từ nó.

    1. Dọn dẹp các tập tin thiết bị tạm thời: rm -f /mnt/dev/xvdg /mnt/dev/xvdg1

    2. Trong /mnt/boot/grub/grub.conf, thay đổi root (hd0)để root (hd0,0), thêm (hoặc thay thế console=*) console=ttyS0vào dòng hạt nhân, và nếu cần thiết thay thế root=*với root=LABEL=/trong dòng hạt nhân

    3. Trong /mnt/etc/fstab, đảm bảo rằng dòng của FS gốc chứa tham chiếu có nhãn, ví dụ:

    LABEL=/ / ext4 defaults,noatime 1 1

    1. Dán nhãn cho FS gốc mới với e2label /dev/xvdg1 /

    2. Ngắt kết nối DV khỏi phiên bản tạm thời, tách cả SV và DV khỏi phiên bản tạm thời.

    3. Chụp DV và từ snap đó tạo ra hình ảnh AMI.

  8. Khởi chạy một thể hiện HVM từ HMI đó. Đó là trường hợp di chuyển của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.