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:
- Ubuntu: UUID kullanma
- Red Hat: Kalıcı adlandırma
- Linux: UUID'ler sizin için neler yapabilir?
- Udev: Modern linux sisteminde cihaz yönetimine giriş
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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin