Linux VM cihaz adı değişiklikleriyle ilgili sorunları giderme

Bu makalede, Linux VM'sini yeniden başlattıktan veya veri disklerini yeniden ekledikten sonra cihaz adlarının neden değiştiği açıklanır. Makalede bu soruna yönelik çözümler de sağlanır.

Belirtiler

Microsoft Azure'da Linux VM'lerini çalıştırırken aşağıdaki sorunlarla karşılaşabilirsiniz:

  • Vm yeniden başlatıldıktan sonra önyüklenemiyor.
  • Veri diskleri ayrılıp yeniden eklendiğinde, disk cihazı adları değiştirilir.
  • Cihaz adı değiştiğinden, cihaz adını kullanarak diske başvuran bir uygulama veya betik başarısız olur.

Neden

Linux'taki cihaz yollarının yeniden başlatmalar arasında tutarlı olduğu garanti edilmemektedir. Cihaz adları ana sayılardan (harfler) ve küçük sayılardan oluşur. Linux depolama cihazı sürücüsü yeni bir cihaz algıladığında, sürücü kullanılabilir aralıktan cihaza ana ve ikincil numaralar atar. Bir cihaz kaldırıldığında, cihaz numaraları yeniden kullanılmak üzere serbesttir.

Linux'ta cihaz taramasının SCSI alt sistemi tarafından zaman uyumsuz olarak gerçekleşmesi zamanlandığı için sorun oluşur. Sonuç olarak, bir cihaz yolu adı yeniden başlatmalar arasında farklılık gösterebilir.

Çözüm

Bu sorunu çözmek için kalıcı adlandırmayı kullanın. Kalıcı adlandırmayı kullanmanın dört yolu vardır: dosya sistemi etiketine, UUID'ye, kimliğine veya yola göre. Azure Linux VM'leri için dosya sistemi etiketini veya UUID'yi kullanmanızı öneririz.

Çoğu dağıtım nofailfstab veya nobootwait parametrelerini sağlar. Bu parametreler, başlangıçta disk bağlanamazsa sistemin önyüklenmesini sağlar. Bu parametreler hakkında daha fazla bilgi için dağıtım belgelerinize bakın. Veri diski eklerken UUID kullanmak üzere Linux VM'sini yapılandırma hakkında bilgi için bkz. Yeni diski bağlamak için Linux VM'sine bağlanma.

Azure Linux aracısı bir VM'ye yüklendiğinde aracı, /dev/disk/azure yolu altında bir dizi sembolik bağlantı oluşturmak için Udev kurallarını kullanır. Uygulamalar ve betikler, SANAL makineye bağlı diskleri, disk türü ve disk LUN'ları ile birlikte tanımlamak için Udev kurallarını kullanır.

Fstab'ınızı zaten VM'nizin önyüklenmediği şekilde düzenlediyseniz ve VM'nizde SSH yapamıyorsanız, tek kullanıcı moduna geçmek ve fstab'ınızı değiştirmek için VM Seri Konsolu'nu kullanabilirsiniz.

Disk LUN'larını tanımlama

Uygulamalar, tüm ekli diskleri bulmak ve sembolik bağlantılar oluşturmak için LUN'ları kullanır. Azure Linux aracısı, lun'dan cihazlara sembolik bağlantılar ayarlayan Udev kuralları içerir:

$ tree /dev/disk/azure

/dev/disk/azure
├── resource -> ../../sdb
├── resource-part1 -> ../../sdb1
├── root -> ../../sda
├── root-part1 -> ../../sda1
└── scsi1
    ├── lun0 -> ../../../sdc
    ├── lun0-part1 -> ../../../sdc1
    ├── lun1 -> ../../../sdd
    ├── lun1-part1 -> ../../../sdd1
    ├── lun1-part2 -> ../../../sdd2
    └── lun1-part3 -> ../../../sdd3

Linux konuk hesabından LUN bilgileri veya benzer bir araç kullanılarak lsscsi alınır:

$ sudo lsscsi

[1:0:0:0] cd/dvd Msft Virtual CD/ROM 1.0 /dev/sr0

[2:0:0:0] disk Msft Virtual Disk 1.0 /dev/sda

[3:0:1:0] disk Msft Virtual Disk 1.0 /dev/sdb

[5:0:0:0] disk Msft Virtual Disk 1.0 /dev/sdc

[5:0:0:1] disk Msft Virtual Disk 1.0 /dev/sdd

Konuk LUN bilgileri, Azure depolamada bölüm verilerini içeren VHD'yi bulmak için Azure aboneliği meta verileriyle birlikte kullanılır. Örneğin, CLI'yı az kullanabilirsiniz:

$ az vm show --resource-group testVM --name testVM | jq -r .storageProfile.dataDisks
[
{
"caching": "None",
  "createOption": "empty",
"diskSizeGb": 1023,
  "image": null,
"lun": 0,
"managedDisk": null,
"name": "testVM-20170619-114353",
"vhd": {
  "uri": "https://testVM.blob.core.windows.net/vhd/testVM-20170619-114353.vhd"
}
},
{
"caching": "None",
"createOption": "empty",
"diskSizeGb": 512,
"image": null,
"lun": 1,
"managedDisk": null,
"name": "testVM-20170619-121516",
"vhd": {
  "uri": "https://testVM.blob.core.windows.net/vhd/testVM-20170619-121516.vhd"
  }
  }
]

blkid kullanarak dosya sistemi UUID'lerini bulma

Uygulamalar ve betikler, /dev yolunda sembolik bağlantılar oluşturmak için çıktısını veya benzer bilgi kaynaklarını okur blkid. Çıkış, VM'ye bağlı tüm disklerin UUID'lerini ve ilişkili cihaz dosyasını gösterir:

$ sudo blkid -s UUID

/dev/sr0: UUID="120B021372645f72"
/dev/sda1: UUID="52c6959b-79b0-4bdd-8ed6-71e0ba782fb4"
/dev/sdb1: UUID="176250df-9c7c-436f-94e4-d13f9bdea744"
/dev/sdc1: UUID="b0048738-4ecc-4837-9793-49ce296d2692"

Azure Linux aracısı Udev kuralları /dev/disk/azure yolu altında bir dizi sembolik bağlantı oluşturur:

$ ls -l /dev/disk/azure

total 0
lrwxrwxrwx 1 root root  9 Jun  2 23:17 resource -> ../../sdb
lrwxrwxrwx 1 root root 10 Jun  2 23:17 resource-part1 -> ../../sdb1
lrwxrwxrwx 1 root root  9 Jun  2 23:17 root -> ../../sda
lrwxrwxrwx 1 root root 10 Jun  2 23:17 root-part1 -> ../../sda1

Uygulamalar, önyükleme diski cihazını ve kaynak (kısa ömürlü) diski tanımlamak için bağlantıları kullanır. Azure'da uygulamaların bu bölümleri bulmak için /dev/disk/azure/root-part1 veya /dev/disk/azure-resource-part1 yollarına bakması gerekir.

Listedeki tüm ek bölümler blkid bir veri diskinde bulunur. Uygulamalar bu bölümler için UUID'yi korur ve çalışma zamanında cihaz adını bulmak için bir yol kullanır:

$ ls -l /dev/disk/by-uuid/b0048738-4ecc-4837-9793-49ce296d2692

lrwxrwxrwx 1 root root 10 Jun 19 15:57 /dev/disk/by-uuid/b0048738-4ecc-4837-9793-49ce296d2692 -> ../../sdc1

En son Azure Depolama kurallarını alma

En son Azure Depolama kurallarını almak için aşağıdaki komutları çalıştırın:

# sudo curl -o /etc/udev/rules.d/66-azure-storage.rules https://raw.githubusercontent.com/Azure/WALinuxAgent/master/config/66-azure-storage.rules
# sudo udevadm trigger --subsystem-match=block

Ayrıca bkz.

Daha fazla bilgi için aşağıdaki makalelere bakın:

Yardım için bize ulaşın

Sorularınız veya yardıma ihtiyacınız varsa bir destek isteği oluşturun veya Azure topluluk desteği isteyin. Ürün geri bildirimini Azure geri bildirim topluluğuna da gönderebilirsiniz.