> For the complete documentation index, see [llms.txt](https://docs.verge.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.verge.io/knowledge-base/vi/virtual-machines/import-rhel-centos-vm.md).

# Cách nhập một máy ảo Linux (RHEL, CentOS, SUSE, Debian, Ubuntu)

## Tổng quan

{% hint style="info" %}
**Các điểm chính**

* Các bản phân phối Linux chỉ cài đặt trình điều khiển cho phần cứng được phát hiện trong quá trình cài đặt.
* Các VM được nhập vào có thể không khởi động được do thiếu trình điều khiển virtio cho phần cứng VergeOS.
* Bạn có thể khắc phục sự cố khởi động bằng cách điều chỉnh cấu hình VM và tạo lại initramfs.
* Hướng dẫn này bao gồm RHEL, CentOS, Fedora, SUSE, openSUSE, Debian và Ubuntu.
  {% endhint %}

Hướng dẫn này giải thích cách nhập các máy ảo Linux từ các hypervisor khác vào VergeOS. Hướng dẫn đề cập đến các vấn đề tiềm ẩn như VM không khởi động được hoặc thiếu kết nối mạng sau khi di chuyển, và cung cấp hướng dẫn riêng cho từng bản phân phối để tạo lại initramfs.

## Điều kiện tiên quyết

* Quyền truy cập vào VergeOS và giao diện người dùng VergeOS.
* Quen thuộc với môi trường hypervisor và cấu hình VM.
* Các tệp VM đã nhập phải có sẵn trong môi trường VergeOS.

## Các bước

### 1. Cập nhật cấu hình phần cứng VM

1. **Đổi tất cả ổ đĩa cứng thành `virtio-scsi`**:
   * Trong giao diện VergeOS, đi tới cài đặt của VM.
   * Đối với mỗi ổ đĩa cứng, đổi giao diện thành `virtio-scsi` để đạt hiệu suất và khả năng tương thích tối ưu.
2. **Đổi tất cả NIC thành `virtio`**:
   * Đảm bảo rằng tất cả các card giao diện mạng (NIC) được đặt thành `virtio` để hỗ trợ mạng tốt hơn.
3. **Điều chỉnh thứ tự khởi động**:
   * Đảm bảo rằng đĩa hệ điều hành được liệt kê là **ID 0** trong thứ tự khởi động.

### 2. Khởi động vào chế độ cứu hộ

1. **Khởi động VM**:
   * Bật VM lên, và trong quá trình khởi động, giữ phím **Shift trái** để truy cập menu khởi động GRUB.
2. **Chọn Chế độ cứu hộ**:
   * Trong menu GRUB, chọn chế độ cứu hộ để khởi động vào một môi trường khôi phục tối thiểu.

{% hint style="success" %}
**Phương án thay thế cho SUSE/openSUSE**

Nếu bạn không thể khởi động vào chế độ cứu hộ từ GRUB (thường gặp với SLES15 và openSUSE Leap 15), hãy gắn một ISO cài đặt vào VM và khởi động từ đó. ISO sẽ cung cấp tùy chọn "Rescue System".
{% endhint %}

### 3. Gắn hệ thống tệp gốc và chroot

{% hint style="success" %}
**RHEL phiên bản 9+**

Theo mặc định, các VM dòng RHEL 9 (ví dụ: RHEL, AlmaLinux 9, Rocky Linux 9, CentOS Stream 9) sử dụng tệp cấu hình LVM để liệt kê rõ ràng các thiết bị được cho phép dựa trên ID phần cứng. Nếu một VM được nhập vào mà không giữ nguyên ID phần cứng/số sê-ri của ổ đĩa, hãy chạy `pvscan --cache` và `vgchange -ay` để buộc LVM quét lại tất cả các thiết bị khối. Xem bài viết KB: [VM thuộc họ RHEL 9 không khởi động được sau khi sao chép hoặc khôi phục snapshot](/knowledge-base/vi/backup-dr/rhel9-boot-failure-clone-snapshot-restore.md) để có thêm thông tin.
{% endhint %}

Sau khi khởi động vào chế độ cứu hộ, đăng nhập với quyền root và gắn hệ thống tệp gốc.

1. **Tìm phân vùng gốc**:

   Nếu bạn không biết phân vùng nào chứa hệ thống tệp gốc, hãy liệt kê tất cả các phân vùng khả dụng:

   ```bash
   cat /proc/partitions
   ```

   Đối với hệ thống dùng LVM, liệt kê tất cả các volume logic:

   ```bash
   lvdisplay
   ```
2. **Gắn phân vùng gốc**:

   Gắn phân vùng gốc hoặc volume logic vào `/mnt`:

   ```bash
   mount /dev/<device_name> /mnt
   ```

   Thay thế `<device_name>` với phân vùng gốc của bạn (ví dụ, `sda2`, `mapper/vg0-root`).
3. **Xác minh việc gắn**:

   Kiểm tra rằng bạn đã gắn đúng hệ thống tệp bằng cách liệt kê nội dung của nó:

   ```bash
   ls /mnt
   ```

   Bạn sẽ thấy các thư mục như `/root`, `/boot`, `/home`, `/etc`, và `/var`.
4. **Liên kết các hệ thống tệp ảo**:

   Dùng vòng lặp for sau để bind các filesystem ảo cần thiết:

   ```bash
   for i in proc sys dev run; do mount --rbind /$i /mnt/$i; done
   ```

   Hoặc, gắn từng cái riêng lẻ:

   ```bash
   mount --rbind /proc /mnt/proc
   mount --rbind /sys /mnt/sys
   mount --rbind /dev /mnt/dev
   mount --rbind /run /mnt/run
   ```

   Đối với hệ thống EFI/UEFI, cũng hãy gắn phân vùng EFI:

   ```bash
   mount /dev/sdX1 /mnt/boot/efi
   ```

   Thay /dev/sdX1 bằng phân vùng EFI thực tế của bạn (kiểm tra bằng lsblk hoặc fdisk -l).
5. **Chroot vào hệ thống tệp đã gắn**:

   ```bash
   chroot /mnt
   ```
6. **Gắn các hệ thống tệp còn lại**:

   Sau khi chroot, gắn bất kỳ phân vùng bổ sung nào được định nghĩa trong fstab:

   ```bash
   mount -a
   ```

### 4. Xây dựng lại initramfs

Sau khi chroot vào hệ thống, tạo lại initramfs với các trình điều khiển virtio cần thiết.

#### RHEL / CentOS / Fedora / SUSE (dùng dracut)

Chạy lệnh sau để tạo lại initramfs:

```bash
dracut -f --regenerate-all --add-drivers "virtio_blk virtio_net virtio_pci"
```

Điều này thêm trình điều khiển cho `virtio_blk` (thiết bị khối), `virtio_net` (thiết bị mạng), và `virtio_pci` (bus PCI) vào initramfs.

#### Debian / Ubuntu (dùng update-initramfs)

Nếu `dracut` không khả dụng (thường gặp trên Debian 10 và Ubuntu), hãy dùng `update-initramfs` thay thế:

1. Thêm các mô-đun virtio vào cấu hình initramfs:

   ```bash
   cat >> /etc/initramfs-tools/modules << EOF
   virtio_pci
   virtio_blk
   virtio_net
   EOF
   ```
2. Tạo lại initramfs:

   ```bash
   update-initramfs -u
   ```

### 5. Khởi động lại và xác minh

1. **Thoát khỏi môi trường chroot**:

   ```bash
   exit
   ```
2. **Khởi động lại VM**:

   ```bash
   reboot
   ```
3. **Xác minh khởi động và kết nối mạng**:
   * Xác nhận rằng VM khởi động thành công và kết nối mạng hoạt động thông qua `virtio` NIC.

## Khắc phục sự cố

{% hint style="warning" %}
**Các sự cố thường gặp**

* **VM không khởi động được**:
  * **Giải pháp**: Kiểm tra lại thứ tự khởi động trong cài đặt VM. Đĩa hệ điều hành phải được đặt là **ID 0**.
* **Không có kết nối mạng**:
  * **Giải pháp**: Đảm bảo các NIC được đặt thành `virtio` và initramfs đã được xây dựng lại với các trình điều khiển mạng phù hợp.
    {% endhint %}

## Tài nguyên bổ sung

* [Di chuyển VM](/run-the-platform/virtual-machines/vm-migration-overview.md)
* [Các phương pháp hay nhất cho VM](/run-the-platform/virtual-machines/vm-best-practices.md)
* [Wiki Dracut](https://github.com/dracutdevs/dracut/wiki/)

## Phản hồi

{% hint style="info" %}
**Cần trợ giúp?**

Nếu bạn có bất kỳ câu hỏi nào hoặc gặp sự cố khi nhập một VM, vui lòng liên hệ với đội hỗ trợ của chúng tôi để được trợ giúp.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.verge.io/knowledge-base/vi/virtual-machines/import-rhel-centos-vm.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
