KVM và Libvirt - Làm cách nào để tôi cắm một đĩa virtio mới?


24

Tôi đang cố gắng thêm một đĩa dựa trên tệp vào máy chủ ảo KVM đang chạy. Tôi đã tạo một đĩa mới từ đầu bằng cách sử dụng lệnh

dd of=/home/cloud/vps_59/test.img bs=1 seek=5G count=0

và tôi đã hy vọng làm cho nó được thêm nóng cho khách bằng cách làm điều này trong vỏ virsh:

virsh # attach-disk vps_59 /home/cloud/vps_59/test.img \
        vdd --driver=file --subdriver=raw

Định nghĩa XML của miền sau đó trở thành:

<disk type='file' device='disk'>
  <driver name='qemu' type='raw'/>
  <source file='/home/cloud/vps_59/root.img'/>
  <target dev='vda' bus='virtio'/>
</disk>
<disk type='file' device='disk'>
  <driver name='file' type='raw'/>
  <source file='/home/cloud/vps_59/test.img'/>
  <target dev='vdd' bus='virtio'/>
</disk>

Như bạn có thể thấy, tên trình điều khiển trở nên sai, nó phải driver name='qemu'vdađĩa hiện có . Tôi đã thử với --drive=qemunhưng nó nói rằng nó không được hỗ trợ.

Thứ hai, tôi chỉ "nhìn thấy" ổ đĩa mới được thêm vào khi tôi khởi động lại máy ảo chạy Ubuntu 10.04.4 LTS. Làm thế nào tôi có thể làm cho ổ đĩa "hotplug"? Tôi muốn máy ảo "nhìn thấy" ổ đĩa mới ngay lập tức mà không cần khởi động lại.


1
Đề xuất không liên quan, sử dụng qemu-imgthay vì dd- các đối số của nó trở nên tự nhiên hơn và thực hiện điều tương tự:qemu-img create test.img 5G
chutz

Câu trả lời:


31

Tôi muốn bắt đầu với một lưu ý rằng bạn nên tránh sử dụng virsh attach-diskvới số lượng tùy chọn hạn chế. Thay vào đó, tôi khuyên bạn nên chỉ định định dạng đĩa chính xác mà bạn thích trong một tệp XML tạm thời, riêng biệt hoặc bằng cách sử dụng ứng dụng GUI của trình quản lý (đối với phần sau, bỏ qua bước đầu tiên).

  1. Tạo một tệp tạm thời với định nghĩa đĩa như thế này dưới đây.

    điều chỉnh các thuộc tính để phù hợp với tình huống của bạn

    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/path/to/disk-image.img'/>
      <target dev='vdb' bus='virtio'/>
    </disk>
    

    Mẹo: Xem qua cấu hình miền XML hiện tại của bạn và sao chép một <disk>phần từ đó.

    virsh dumpxml <domainname>
    
  2. Bây giờ, trước khi thêm đĩa vào một miền hiện tại, hãy đảm bảo các mô-đun hạt nhân hotplug cần thiết được tải trong máy khách.

    Một số bản phân phối Linux như CentOS / RHEL / Fedora gần đây có tích hợp sẵn trong kernel này. Trong trường hợp này, kiểm tra cho CONFIG_HOTPLUG_PCI_ACPI. Nếu vậy y, bạn đã hoàn tất và bạn có thể bỏ qua bước này.

    modprobe acpiphp
    modprobe pci_hotplug
    

    Xem xét thêm hai mô-đun này vào /etc/modulesnếu bạn muốn chúng được tải khi khởi động theo mặc định.

  3. Thêm đĩa vào VM đang chạy bằng

    virsh attach-device <domain name> /path/to/disk.xml
    

    Tùy chọn, thêm --persistenttùy chọn để cho phép Libvirt cập nhật định nghĩa XML miền 'liên tục'.

  4. Cuối cùng, kiểm tra bên trong khách nếu đĩa thực sự được cắm nóng. Hạt nhân nên được kích hoạt, như có thể được kiểm tra với dmesg:

    [  321.946440] virtio-pci 0000:00:06.0: using default PCI settings
    [...]
    [  321.952782]  vdb: vdb1 vdb2
    

    Trong ví dụ trên tôi đã thêm một đĩa như vdbvới hai phân vùng trong bảng phân vùng.

Tài liệu tham khảo


Bạn cũng không nên thêm --persistentđể đảm bảo cấu hình này không bị mất khi tắt nguồn máy ảo?
chutz
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.