# VMware Ortamında Sanal Makine İsim Uyuşmazlıklarını Düzenleyen Bash Script
VMware altyapısı kullanırken bazen sanal makine klasör isimleri ile `.vmx` dosyalarındaki “displayName” değerleri birbiriyle uyuşmaz hale gelebiliyor. Bu da özellikle yedekleme ya da otomasyon işlemlerinde sorunlara yol açabiliyor.
Bu durumu çözmek için basit bir bash script hazırladım. Bu script sayesinde klasör isimleri ve displayName değerleri otomatik olarak karşılaştırılır ve gerekiyorsa düzeltilir.
—
## Neden Bu Script?
– VM klasörü ile sanal makinenin adı farklıysa karışıklık olur.
– Bazı yedekleme yazılımları bu farktan dolayı hata verebilir.
– Manuel düzeltmek zahmetli olabilir.
– Bu script ile her şey otomatik yapılır.
—
## Script Ne Yapıyor?
1. Belirttiğiniz datastore’ları tarıyor.
2. Her klasördeki `.vmx` dosyasını buluyor.
3. İçindeki `displayName` ile klasör adını karşılaştırıyor.
4. Uyuşmazlık varsa:
– `.vmx` ve `.vmdk` dosya adlarını düzeltiyor,
– `.vmx` içeriğini güncelliyor,
– Klasörü yeni isme göre yeniden adlandırıyor.
Kullanım Talimatı
- SH ile ESXi sunucunuza bağlanın.
2. Aşağıdaki komutla script dosyasını oluşturun:
nano vm-folder-fix.sh
3. Script içeriğini dosyaya yapıştırın ve kaydedin: (CTRL + O → Enter → CTRL + X ile çıkabilirsiniz)
4. Script’i çalıştırılabilir hale getirin:
chmod +x vm-folder-fix.sh
5. Script başındaki DATASTORES= satırına, kendi datastore UUID’lerinizi tanımlayın. UUID tanımlamazsanız
6. Script’i çalıştırın:
./vm-folder-fix.sh
—
## Script Kodu
“`bash
#!/bin/sh
# İşlenecek datastore UUID’lerini tanımlayın
DATASTORES=”640921be-f50e0e1c-1e54-5c6f6984efa0 64092137-43ee15e8-a0bb-5c6f6984efa0″
for DATASTORE_UID in $DATASTORES; do
BASE_PATH=”/vmfs/volumes/$DATASTORE_UID”
echo “🔍 Datastore: $BASE_PATH”
cd “$BASE_PATH” || continue
for folder in *; do
if [ -d “$folder” ]; then
VMX_FILE=$(find “$folder” -maxdepth 1 -name “*.vmx” | head -n 1)
if [ -n “$VMX_FILE” ]; then
DISPLAY_NAME=$(grep -i ‘^displayName’ “$VMX_FILE” | awk -F ‘”‘ ‘{print $2}’)
if [ -n “$DISPLAY_NAME” ] && [ “$DISPLAY_NAME” != “$folder” ]; then
echo “⚠️ Uyuşmazlık bulundu:”
echo ” Klasör: $folder”
echo ” VMX DisplayName: $DISPLAY_NAME”
NEW_FOLDER=”$DISPLAY_NAME”
echo “➡️ Yeniden adlandırılıyor: $folder -> $NEW_FOLDER”
OLD_VMX_PATH=”$folder/$folder.vmx”
OLD_VMDK_PATH=”$folder/$folder.vmdk”
NEW_VMX_PATH=”$folder/$DISPLAY_NAME.vmx”
NEW_VMDK_PATH=”$folder/$DISPLAY_NAME.vmdk”
if [ -f “$OLD_VMX_PATH” ]; then
mv “$OLD_VMX_PATH” “$NEW_VMX_PATH”
fi
if [ -f “$OLD_VMDK_PATH” ]; then
mv “$OLD_VMDK_PATH” “$NEW_VMDK_PATH”
fi
if [ -f “$NEW_VMX_PATH” ]; then
sed -i “s/displayName = \”.*\”/displayName = \”$DISPLAY_NAME\”/g” “$NEW_VMX_PATH”
sed -i “s/$folder.vmdk/$DISPLAY_NAME.vmdk/g” “$NEW_VMX_PATH”
fi
mv “$folder” “$NEW_FOLDER”
echo “✅ Tamamlandı: $NEW_FOLDER”
echo “—————————–”
fi
fi
fi
done
done