Menyiapkan Linux untuk pencitraan di Azure

Berlaku untuk: ✔️ Mesin Virtual Linux ✔️ Set skala fleksibel

Perjanjian tingkat layanan platform Azure (SLA) berlaku untuk komputer virtual (VM) yang menjalankan sistem operasi Linux hanya saat Anda menggunakan salah satu distribusi yang didukung. Untuk distribusi yang didukung, Marketplace Azure menyediakan gambar Linux yang telah dikonfigurasi sebelumnya. Untuk informasi selengkapnya, lihat:

Semua distribusi lain yang berjalan di Azure, termasuk distribusi yang didukung komunitas dan tidak didukung, memiliki beberapa prasyarat.

Artikel ini berfokus pada panduan umum untuk menjalankan distribusi Linux Anda di Azure. Artikel ini tidak boleh komprehensif, karena setiap distribusi berbeda. Bahkan jika Anda memenuhi semua kriteria yang dijelaskan artikel ini, Anda mungkin perlu mengubah sistem Linux Anda secara signifikan agar berjalan dengan benar.

Catatan penginstalan Linux umum

Important

Langkah-langkah persiapan NVMe jarak jauh dalam artikel ini bersifat opsional. Lengkapi bagian tersebut hanya jika Anda membuat image yang ingin di-deploy dengan pengontrol disk NVMe jarak jauh. Jika VM target menggunakan SCSI, lewati setiap langkah berlabel untuk NVMe jarak jauh dan pertahankan pengaturan standar. NVMe jarak jauh memerlukan image Gen2 dan versi sistem operasi yang didukung. Verifikasi kapabilitas ukuran VM target yang dimaksud DiskControllerTypes dan tinjau image OS yang didukung untuk NVMe jarak jauh. Jangan menyimpulkan jenis pengontrol hanya berdasarkan generasi seri VM.

  • Azure tidak mendukung format hard disk virtual (VHDX) Hyper-V. Azure hanya mendukung VHD tetap. Anda dapat mengonversi disk ke format VHD dengan menggunakan Hyper-V Manager atau cmdlet Convert-VHD . Jika Anda menggunakan VirtualBox, pilih Ukuran tetap daripada default (Dialokasikan secara dinamis) saat Anda membuat disk.

  • Azure mendukung komputer virtual Gen1 (boot BIOS) dan Gen2 (boot UEFI).

  • Modul kernel tabel alokasi file virtual (VFAT) harus diaktifkan di kernel.

  • Ukuran maksimum yang diperbolehkan untuk VHD adalah 1.023 GB.

  • Saat Anda menginstal sistem Linux, kami sarankan Anda menggunakan partisi standar daripada Logical Volume Manager (LVM). LVM adalah default untuk banyak penginstalan.

    Menggunakan partisi standar akan menghindari konflik nama LVM dengan VM kloning, terutama jika disk OS pernah dilampirkan ke VM identik lainnya untuk pemecahan masalah. Anda dapat menggunakan LVM atau RAID pada disk data.

  • Dukungan kernel untuk memasang sistem file fungsi yang ditentukan pengguna (UDF) diperlukan. Pada boot pertama di Azure, konfigurasi provisi diteruskan ke VM Linux melalui media berformat UDF yang dilampirkan ke tamu. Agen Linux Azure harus memasang sistem file UDF untuk membaca konfigurasinya dan menyediakan VM.

  • Versi kernel Linux yang lebih lama dari 2.6.37 tidak mendukung Akses Memori Non-Seragam (NUMA) pada Hyper-V dengan ukuran VM yang lebih besar. Masalah ini terutama memengaruhi distribusi lama yang menggunakan kernel Red Hat 2.6.32 upstram. Itu diperbaiki di Red Hat Enterprise Linux (RHEL) 6.6 (kernel-2.6.32-504).

    Sistem yang menjalankan kernel kustom yang lebih lama dari 2.6.37, atau kernel berbasis RHEL yang lebih lama dari 2.6.32-504, harus mengatur parameter numa=off boot pada baris perintah kernel di grub.conf. Untuk informasi selengkapnya, lihat Red Hat KB 436883.

  • Jangan mengonfigurasi partisi swap pada disk OS. Anda dapat mengonfigurasi agen Linux untuk membuat file swap pada disk sumber daya sementara, seperti yang dijelaskan nanti di artikel ini.

  • Semua VHD di Azure harus memiliki ukuran virtual yang selaras dengan 1 MB (1024 x 1024 byte). Saat Anda mengonversi dari disk mentah ke VHD, pastikan bahwa ukuran disk mentah adalah kelipatan 1 MB sebelum konversi, seperti yang dijelaskan nanti di artikel ini.

  • Gunakan versi distribusi, paket, dan perangkat lunak terbaru.

  • Hapus pengguna dan akun sistem, kunci publik, data sensitif, perangkat lunak yang tidak perlu, dan aplikasi.

Catatan

Cloud-init versi 21.2 atau yang lebih baru menghapus persyaratan UDF. Namun, jika modul udf tidak diaktifkan, CD-ROM tidak akan dimuat selama proses provisi, sehingga data khusus tidak dapat diterapkan. Solusinya adalah menerapkan data pengguna. Namun, tidak seperti data kustom, data pengguna tidak dienkripsi. Untuk informasi selengkapnya, lihat Format data pengguna dalam dokumentasi cloud-init.

Menginstal modul kernel tanpa Hyper-V

Azure berjalan pada hypervisor Hyper-V, sehingga Linux memerlukan modul kernel tertentu untuk dijalankan di Azure. Jika Anda memiliki VM yang dibuat di luar Hyper-V, penginstal Linux mungkin tidak menyertakan driver untuk Hyper-V dalam disk RAM awal (initrd atau initramfs), kecuali VM mendeteksi bahwa itu berjalan di lingkungan Hyper-V.

Saat Anda menggunakan sistem virtualisasi yang berbeda (seperti VirtualBox atau KVM) untuk menyiapkan citra Linux, Anda mungkin perlu membangun kembali initrd sehingga setidaknya hv_vmbus modul kernel dan hv_storvsc tersedia pada disk RAM awal. Masalah yang diketahui ini berlaku pada sistem yang berbasis pada distribusi upstream Red Hat, dan mungkin juga sistem lainnya.

Mekanisme untuk membangun kembali gambar initrd atau initramfs dapat bervariasi, tergantung pada distribusinya. Konsultasikan dokumentasi atau dukungan distribusi Anda untuk prosedur yang tepat. Berikut adalah salah satu contoh untuk membangun kembali initrd dengan menggunakan mkinitrd utilitas:

  1. Cadangkan citra initrd yang sudah ada:

    cd /boot
    sudo cp initrd-`uname -r`.img  initrd-`uname -r`.img.bak
    
  2. Bangun ulang initrd dengan menggunakan modul kernel hv_vmbus dan hv_storvsc:

    sudo mkinitrd --preload=hv_storvsc --preload=hv_vmbus -v -f initrd-`uname -r`.img `uname -r`
    

Mengubah ukuran VHD

Image VHD di Azure harus memiliki ukuran virtual yang sejajar dengan 1 MB. Biasanya, VHD yang dibuat melalui Hyper-V diselaraskan dengan benar. Jika VHD tidak diratakan dengan benar, Anda mungkin mendapatkan pesan kesalahan yang mirip dengan contoh berikut saat mencoba membuat gambar dari VHD Anda:

The VHD http://<mystorageaccount>.blob.core.windows.net/vhds/MyLinuxVM.vhd has an unsupported virtual size of 21475270656 bytes. The size must be a whole number (in MBs).

Dalam hal ini, mengubah ukuran VM dengan menggunakan konsol Hyper-V Manager atau cmdlet PowerShell Resize-VHD . Jika Anda tidak berjalan di lingkungan Windows, sebaiknya gunakan qemu-img untuk mengonversi (jika diperlukan) dan mengubah ukuran VHD.

Catatan

Ada bug yang diketahui dalam qemu-img untuk QEMU versi 2.2.1 dan beberapa versi yang lebih baru yang menghasilkan VHD yang diformat dengan tidak benar. Masalah ini diperbaiki di QEMU 2.6. Sebaiknya gunakan versi 2.2.0 atau yang lebih lama, atau menggunakan versi 2.6 atau yang lebih baru.

  1. Mengubah ukuran VHD secara langsung dengan menggunakan alat seperti qemu-img atau vbox-manage mungkin mengakibatkan VHD yang tidak dapat dibootakan. Sebaiknya konversi VHD terlebih dahulu ke gambar disk mentah dengan menggunakan kode berikut.

    Jika gambar VM dibuat sebagai gambar disk mentah, Anda dapat melewati langkah ini. Membuat gambar VM sebagai gambar disk mentah adalah default di beberapa hypervisor, seperti KVM.

    sudo qemu-img convert -f vpc -O raw MyLinuxVM.vhd MyLinuxVM.raw
    
  2. Hitung ukuran gambar disk yang diperlukan sehingga ukuran virtual diratakan ke 1 MB. Skrip shell Bash berikut menggunakan qemu-img info untuk menentukan ukuran virtual gambar disk, lalu menghitung ukuran ke 1 MB berikutnya:

    rawdisk="MyLinuxVM.raw"
    vhddisk="MyLinuxVM.vhd"
    
    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "$rawdisk" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    
    rounded_size=$(((($size+$MB-1)/$MB)*$MB))
    
    echo "Rounded Size = $rounded_size"
    
  3. Mengubah ukuran disk mentah dengan menggunakan $rounded_size:

    sudo qemu-img resize MyLinuxVM.raw $rounded_size
    
  4. Konversikan kembali disk mentah ke VHD ukuran tetap:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc MyLinuxVM.raw MyLinuxVM.vhd
    

    Atau, dengan versi QEMU sebelum 2.6, hapus force_size opsi:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc MyLinuxVM.raw MyLinuxVM.vhd
    

Persyaratan kernel Linux

Driver Linux Integration Services (LIS) untuk Hyper-V dan Azure dikontribusikan langsung ke kernel Linux hulu. Banyak distribusi yang menyertakan versi kernel Linux yang baru (seperti 3.x) sudah memiliki driver ini, atau menyediakan versi hasil backport dari driver ini bersama kernelnya.

Driver LIS terus diperbarui di kernel upstream dengan perbaikan dan fitur baru. Jika memungkinkan, sebaiknya jalankan distribusi yang didukung yang mencakup perbaikan dan pembaruan ini.

Jika Anda menjalankan varian RHEL versi 6.0 hingga 6.3, Anda perlu menginstal driver LIS terbaru untuk Hyper-V. Dimulai dengan RHEL 6.4+ (dan turunannya), driver LIS sudah disertakan dengan kernel, sehingga Anda tidak memerlukan paket penginstalan tambahan.

Jika diperlukan kernel kustom, kami merekomendasikan versi kernel terbaru (seperti 3.8+). Untuk distribusi atau vendor yang mempertahankan kernel mereka sendiri, Anda perlu secara teratur mem-backport driver LIS dari kernel hulu ke kernel kustom Anda.

Bahkan jika Anda sudah menjalankan versi kernel yang relatif baru, kami sangat menyarankan untuk melacak perbaikan upstream apa pun di driver LIS dan mendukungnya sesuai kebutuhan. Lokasi file sumber driver LIS ditentukan dalam file MAINTAINERS di pohon sumber kernel Linux:

    F:    arch/x86/include/asm/mshyperv.h
    F:    arch/x86/include/uapi/asm/hyperv.h
    F:    arch/x86/kernel/cpu/mshyperv.c
    F:    drivers/hid/hid-hyperv.c
    F:    drivers/hv/
    F:    drivers/input/serio/hyperv-keyboard.c
    F:    drivers/net/hyperv/
    F:    drivers/scsi/storvsc_drv.c
    F:    drivers/video/fbdev/hyperv_fb.c
    F:    include/linux/hyperv.h
    F:    tools/hv/

Kernel aktif VM harus menyertakan patch berikut. Daftar ini tidak bisa lengkap untuk semua distribusi.

Agen Linux Azure

Azure Linux Agent (waagent) menyediakan komputer virtual Linux di Azure. Anda bisa mendapatkan versi terbaru, melaporkan masalah, atau mengirimkan permintaan pull di repositori Linux Agent GitHub.

Berikut adalah beberapa pertimbangan untuk menggunakan Agen Linux Azure:

  • Agen Linux dirilis di bawah lisensi Apache 2.0. Banyak distribusi sudah menyediakan paket .rpm atau .deb untuk agen. Anda dapat dengan mudah menginstal dan memperbarui paket ini.
  • Azure Linux Agent memerlukan Python v2.6+.
  • Agen juga memerlukan python-pyasn1 modul. Sebagian besar distribusi menyediakan modul ini sebagai paket terpisah yang akan diinstal.
  • Dalam beberapa kasus, Agen Linux Azure mungkin tidak kompatibel dengan NetworkManager. Banyak paket (.rpm atau .deb) yang disediakan oleh distribusi mengonfigurasi NetworkManager sebagai konflik dengan waagent paket. Dalam kasus ini, agen akan mencopot NetworkManager saat Anda menginstal paket agen Linux.
  • Agen Linux Azure harus berada di atau di atas versi minimum yang didukung.

Catatan

Pastikan udf modul dan vfat diaktifkan. Menonaktifkan modul udf akan menyebabkan kegagalan provisi. Menonaktifkan modul vfat akan menyebabkan kegagalan provisi dan boot. Cloud-init versi 21.2 atau yang lebih baru dapat menyediakan VM tanpa memerlukan UDF jika kedua kondisi ini ada:

  • Anda membuat VM dengan menggunakan kunci publik SSH dan bukan kata sandi.
  • Anda tidak menyediakan data kustom apa pun.

Persyaratan sistem Linux umum

  1. Ubah garis boot kernel di GRUB atau GRUB2 untuk menyertakan parameter berikut, sehingga semua pesan konsol dikirim ke port serial pertama. Pesan ini dapat membantu dukungan Azure dengan men-debug masalah apa pun.

    GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    Sebaiknya hapus parameter berikut jika ada:

    rhgb quiet crashkernel=auto
    

    Boot grafis dan boot senyap tidak berguna di lingkungan cloud, karena semua log sebaiknya dikirim ke port serial. Anda dapat membiarkan opsi crashkernel tetap dikonfigurasi jika diperlukan, tetapi parameter ini mengurangi kapasitas memori yang tersedia di VM setidaknya sebesar 128 MB. Mengurangi memori yang tersedia mungkin bermasalah untuk ukuran VM yang lebih kecil.

  2. Setelah Anda selesai mengedit /etc/default/grub, bangun ulang konfigurasi GRUB. Jalankan hanya perintah yang sesuai untuk distribusi Anda.

    Untuk distro berdasarkan Debian atau Ubuntu, jalankan:

    sudo update-grub
    

    Untuk distribusi yang menyediakan grub2-mkconfig, seperti RHEL, Oracle Linux, dan SUSE, jalankan:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    Pada distribusi yang menyediakan grub-mkconfig sebagai gantinya, jalankan:

    sudo grub-mkconfig -o /boot/grub/grub.cfg
    

    Jalur konfigurasi GRUB dapat berbeda untuk penginstalan UEFI. Jika distribusi Anda menggunakan jalur lain, gunakan jalur yang didokumenkan untuk distribusi tersebut.

  3. Tambahkan modul Hyper-V ke disk RAM awal. Jalankan hanya prosedur yang cocok dengan alat yang digunakan oleh distribusi Anda.

    1. Untuk distribusi berbasis dracut, jalankan:
    cd /boot
    sudo cp initramfs-<kernel-version>.img <kernel-version>.img.bak
    sudo dracut -f -v initramfs-<kernel-version>.img <kernel-version> --add-drivers "hv_vmbus hv_netvsc hv_storvsc"
    
    1. Untuk distribusi yang menggunakan mkinitramfs, jalankan prosedur ini alih-alih prosedur dracut:
    cd /boot
    sudo cp initrd.img-<kernel-version> initrd.img-<kernel-version>.bak
    sudo mkinitramfs -o initrd.img-<kernel-version> <kernel-version> --with=hv_vmbus,hv_netvsc,hv_storvsc
    
  4. Hanya jika Anda membuat image untuk pengontrol disk NVMe jarak jauh, konfigurasikan dan verifikasi dukungan boot NVMe. Jika tidak, lewati langkah ini. Perintah yang tepat dapat bervariasi menurut distribusi.

    1. Bangun kembali initramfs dengan driver NVMe menggunakan metode yang sesuai untuk distribusi Anda.

      Untuk distribusi berbasis dracut, pastikan driver NVMe tetap ada dalam image initramfs yang akan datang dan bangun ulang initramfs saat ini:

      sudo mkdir -p /etc/dracut.conf.d
      printf '%s\n' 'add_drivers+=" nvme nvme_core "' | sudo tee /etc/dracut.conf.d/azure-nvme.conf
      sudo dracut --force
      

      Untuk distribusi berbasis alat initramfs, buat driver NVMe persisten dan bangun ulang initramfs:

      printf '%s\n' nvme nvme_core | sudo tee -a /etc/initramfs-tools/modules
      sudo update-initramfs -u -k all
      
    2. Tambahkan nvme_core.io_timeout=240 ke baris perintah kernel yang ada di /etc/default/grub, lalu bangun kembali konfigurasi GRUB dengan menggunakan perintah yang sesuai untuk distribusi Anda.

    3. Verifikasi bahwa kedua modul driver NVMe tersedia pada sistem. Jalankan kedua perintah:

      modinfo nvme
      modinfo nvme_core
      

      Setiap perintah harus mengembalikan informasi tentang modulnya. Jika salah satu modul tidak ditemukan, instal atau aktifkan dengan mengikuti dokumentasi distribusi Anda sebelum Melanjutkan.

    4. Pastikan bahwa kedua driver NVMe disertakan dalam initramfs. Jalankan hanya perintah untuk distribusi Anda.

      Untuk distribusi berbasis dracut, jalankan:

      sudo lsinitrd /boot/initramfs-$(uname -r).img | grep -E 'nvme(_core)?\.ko'
      

      Untuk distribusi yang berbasis initramfs-tools, jalankan:

      sudo lsinitramfs /boot/initrd.img-$(uname -r) | grep -E 'nvme(_core)?\.ko'
      

      Output harus menunjukkan driver nvme dan nvme_core . Jika tidak, konsultasikan dengan dokumentasi distribusi Anda dan bangun kembali disk RAM awal sebelum Anda melanjutkan.

  5. Pastikan server SSH diinstal dan dikonfigurasi untuk memulai pada saat boot. Konfigurasi ini biasanya merupakan default.

  6. Instal Agen Azure Linux.

    Azure Linux Agent diperlukan untuk menyediakan gambar Linux di Azure. Banyak distribusi menyediakan agen sebagai paket .rpm atau .deb. Paket biasanya disebut WALinuxAgent atau walinuxagent. Anda juga dapat menginstal agen secara manual dengan mengikuti langkah-langkah dalam panduan Agen Linux Azure.

    Catatan

    Pastikan udf modul dan vfat diaktifkan. Menghapus atau menonaktifkannya akan menyebabkan kegagalan provisi atau boot. Cloud-init versi 21.2 atau yang lebih baru menghapus persyaratan UDF.

    Instal Azure Agen Linux, cloud-init, dan utilitas lain yang diperlukan. Jalankan hanya perintah untuk manajer paket yang tersedia di sistem Anda.

    Untuk dnf, jalankan:

     sudo dnf install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Jika sistem Anda menyediakan yum alih-alih dnf, ganti dnf dengan yum di perintah sebelumnya.

    Untuk apt, jalankan:

    sudo apt install walinuxagent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Untuk zypper, jalankan:

    sudo zypper install python-azure-agent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    

    Kemudian aktifkan agen dan cloud-init pada semua distribusi:

    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  7. Jangan membuat ruang swap pada disk OS.

    Anda dapat menggunakan Azure Linux Agent atau cloud-init untuk mengonfigurasi ruang pertukaran melalui disk sumber daya lokal. Azure memasang disk sumber daya ini ke VM setelah proses provisi selesai. Disk sumber daya lokal bersifat sementara dan dapat dikosongkan saat VM dibatalkan penyediaannya.

    Important

    Instruksi ini berlaku apakah pengontrol disk jarak jauh adalah SCSI atau NVMe. Mereka memerlukan ukuran VM yang menyertakan disk sumber daya sementara lokal. Jenis pengontrol disk jarak jauh tidak menentukan apakah disk sumber daya tersedia atau tidak.

    1. Pilih dan konfigurasikan satu metode untuk mengelola ruang pertukaran.

      Untuk menggunakan Azure Linux Agent, ubah parameter berikut di /etc/waagent.conf:

      ResourceDisk.Format=y
      ResourceDisk.Filesystem=ext4
      ResourceDisk.MountPoint=/mnt/resource
      ResourceDisk.EnableSwap=y
      ResourceDisk.SwapSizeMB=2048    ## NOTE: Set this to your desired size.
      

      Untuk menggunakan cloud-init sebagai gantinya, konfigurasikan cloud-init agar menangani penyediaan dan mencegah Agen Linux Azure memformat disk sumber daya atau membuat ruang swap:

      sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
      
    2. Jika Anda memilih cloud-init, pilih cara menyediakan konfigurasi pertukaran.

      Anda dapat memberikan konfigurasi cloud-init melalui customdata setiap kali membuat VM. Gunakan metode ini.

      Atau, tambahkan direktif cloud-init ke image agar ruang swap dikonfigurasi setiap kali VM dibuat. Untuk menggunakan metode ini, buat file .cfg:

      echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' | sudo tee -a /etc/systemd/system.conf
      cat << EOF | sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg
      #cloud-config
      # Generated by Azure cloud image build
      disk_setup:
        ephemeral0:
          table_type: mbr
          layout: [66, [33, 82]]
          overwrite: True
      fs_setup:
        - device: ephemeral0.1
          filesystem: ext4
        - device: ephemeral0.2
          filesystem: swap
      mounts:
        - ["ephemeral0.1", "/mnt/resource"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
      EOF
      
  8. Konfigurasikan cloud-init untuk menangani penyediaan:

    1. Konfigurasikan waagent untuk cloud-init:

      sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
      

      Jika Anda memigrasikan komputer virtual tertentu dan tidak ingin membuat gambar umum, atur Provisioning.Agent=disabled dalam konfigurasi /etc/waagent.conf .

    2. Konfigurasikan pemasangan:

      echo "Adding mounts and disk_setup to init stage"
      sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
      sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
      sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
      sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
      
      
    3. Konfigurasikan sumber data Azure:

      echo "Allow only Azure datasource, disable fetching network setting via IMDS"
      cat << EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg
      datasource_list: [ Azure ]
      datasource:
         Azure:
           apply_network_config: False
      EOF
      
    4. Hapus file swap yang ada jika Anda mengonfigurasinya:

      if [[ -f /mnt/resource/swapfile ]]; then
      echo "Removing swapfile" #RHEL uses a swap file by default
      swapoff /mnt/resource/swapfile
      rm /mnt/resource/swapfile -f
      fi
      
    5. Konfigurasikan pengelogan cloud-init:

      echo "Add console log file"
      cat << EOF | sudo tee -a /etc/cloud/cloud.cfg.d/05_logging.cfg
      
      # This tells cloud-init to redirect its stdout and stderr to
      # 'tee -a /var/log/cloud-init-output.log' so the user can see output
      # there without needing to look on the console.
      output: {all: '| tee -a /var/log/cloud-init-output.log'}
      EOF
      
  9. Validasi konfigurasi pemasangan disk sebelum Anda mendeprovisi komputer virtual. Validasi ini berlaku untuk citra SCSI dan NVMe jarak jauh.

    1. Tinjau ./etc/fstab Jangan gunakan nama perangkat seperti /dev/sd* atau /dev/nvme*, karena nama perangkat dapat berubah di seluruh boot ulang atau ketika pengontrol disk berubah. Gunakan UUID sistem file atau pengidentifikasi persisten lainnya sebagai gantinya.

      Cantumkan perangkat blok dan pengidentifikasi persistennya sehingga Anda dapat membandingkannya dengan entri di /etc/fstab:

      sudo blkid
      
    2. Periksa /etc/fstab untuk kesalahan sintaks, opsi pemasangan yang tidak valid, dan referensi yang tidak dapat diuraikan:

      sudo findmnt --verify --verbose
      
    3. Hanya jika Anda membuat image untuk pengontrol disk NVMe jarak jauh, pastikan batas waktu I/O yang dikonfigurasi. Jika VM sumber saat ini menggunakan NVMe, jalankan:

      cat /sys/module/nvme_core/parameters/io_timeout
      

      Nilainya harus 240. VM sumber SCSI mungkin tidak mengekspos parameter runtime ini; dalam hal ini, verifikasi bahwa nvme_core.io_timeout=240 ada dalam konfigurasi GRUB dan bahwa konfigurasi pembangunan ulang berisinya.

  10. Jalankan perintah berikut untuk menghapus provisi mesin virtual.

    Perhatian

    Jika Anda memigrasikan komputer virtual tertentu dan tidak ingin membuat image umum, lewati langkah deprovisi. Menjalankan perintah waagent -force -deprovision+user akan membuat komputer sumber tidak dapat digunakan. Langkah ini hanya dimaksudkan untuk membuat gambar umum.

    sudo rm -f /var/log/waagent.log
    sudo cloud-init clean
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    

    Di VirtualBox, Anda mungkin melihat pesan kesalahan setelah menjalankan waagent -force -deprovision yang mengatakan [Errno 5] Input/output error. Pesan kesalahan ini tidak penting, dan Anda dapat mengabaikannya.

  11. Matikan komputer virtual dan unggah VHD ke Azure.

Langkah berikutnya

Membuat VM Linux dari disk kustom dengan menggunakan Azure CLI

Untuk VM Azure yang ada yang perlu Anda pindahkan dari SCSI ke NVMe, gunakan Convert Linux dan Windows VM dari SCSI ke NVMe. Untuk informasi arsitektur dan dukungan, lihat Gambaran umum NVMe.