[Çözüldü] Bash script beceremedigim bir konu mevcut

Başlatan gokhanyildiz, 19 Haziran 2017 - 12:46:11

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

gokhanyildiz

Merhabalar,


Asagidaki kodlarla iscsi target ve sistem kullanimi icin gerekli paketleri kurup ayarlarini yapiyorum. Normalde tek target oldugu zaman problem yoktu fakat suanda 2 adet target yapip her birine 1 adet ip atamam gerekiyor. Dolayisiyla disk kapasitesini 2 ye bolup yarisini target1 digerini de target2 ye tanimlamam gerekiyor. Asagidaki gibi kodlarimi hazirladim fakat test islemi yapacagim yerde sorun yasarsam tekrar internete baglanmam mumkun olmadigi icin sizlere sormak istedim.




kodlar:




#!/bin/bash


dpkg -i *.deb
systemctl start lvm2-lvmetad.socket
syteamctl start lvm2-lvmetad.service
systemctl enable lvm2-lvmetad.socket
systemctl enable lvm2-lvmerad.service


sdbsize=$(fdisk -l | grep -n '/dev/sdb' | awk '{print $3}');
sizegb=`echo "$sdbsize*1024" | bc`;
echo -e "$sizegb"


partprobe /dev/sdb


/etc/init.d/lvm2 restart


pvcreate /dev/sdb


vgcreate iscsi /dev/sdb




# Olusturulacak LUN'larin GB cinsinden default boyutu
default_lun="1900"




echo "SUPERDOCTOR5 Kuruluyor"


chmod +x ./SuperDoctor5Installer_5.4.0_build.703_linux_x64_20160629131648.bin


./SuperDoctor5Installer_5.4.0_build.703_linux_x64_20160629131648.bin -i silent


echo "SUPERDOCTOR5 Kuruldu"


echo "ISCSI Target Ayarlaniyor"


# ISCSI config1
echo "ISCSITARGET_ENABLE=true" > /etc/default/iscsitarget
echo "ISCSITARGET_MAX_SLEEP=3" >> /etc/default/iscsitarget
echo "ISCSITARGET_OPTIONS=\"\"" >> /etc/default/iscsitarget




pv=`pvscan | grep -v lvm2`




diskspace=`pvscan | grep lvm2 | cut -d'/' -f4 | cut -d' ' -f2 | xargs | tr , .`
unit=`pvscan | grep lvm2 | cut -d'/' -f4 | cut -d' ' -f3 | xargs`






# Eger PhysicalVolume TB Cinsinden ise GB'a ceviriyoruz.
if [[ $unit == *"TiB"* ]]
then
        diskspace=`echo "($diskspace*1024) / 1" | bc`
fi


diskspace=`echo "$diskspace / 1" | bc`


echo "ISCSI Target1 Ayarlaniyor"


echo "DISKSPACE:($diskspace)"
read -p 'Target-1 IP Address: ' target1ip


# ISCSI config2
echo "Target iqn.2017-06.local.cctv:storage.target1" > /etc/iet/ietd.conf
echo "IncomingUser" >> /etc/iet/ietd.conf
echo "OutgoingUser" >> /etc/iet/ietd.conf
echo "initiator-address $target1ip" >> /etc/iet/ietd.conf




i=0


finaldisk=`echo "$diskspace / 2" | bc`


while [[ $finaldisk != 0 ]]
do
    if [ "$finaldisk" -lt "$default_lun" ]; then
        lastLUN=`echo "$finaldisk-1" | bc`
        lvcreate -L "$lastLUN"G -n iscsi$i iscsi
        finaldisk=0
    else
        finaldisk=`echo "($finaldisk-$default_lun) / 1" | bc`
        lvcreate -L "$default_lun"G -n iscsi$i iscsi
    fi
    echo "Lun $i Path=/dev/iscsi/iscsi$i,Type=blockio" >> /etc/iet/ietd.conf
    i=$((i+1))
done


echo "Alias TARGET1" >> /etc/iet/ietd.conf


echo "ISCSI TARGET 2  Ayarlaniyor"


read -p 'Target-2 IP Address: ' target2ip


# ISCSI config2
echo "Target iqn.2017-06.local.cctv:storage.target2" > /etc/iet/ietd.conf
echo "IncomingUser" >> /etc/iet/ietd.conf
echo "OutgoingUser" >> /etc/iet/ietd.conf
echo "initiator-address $target2ip" >> /etc/iet/ietd.conf


while [[ $diskspace != 0 ]]
do
    if [ "$diskspace" -lt "$default_lun" ]; then
        lastLUN=`echo "$diskspace-1" | bc`
        lvcreate -L "$lastLUN"G -n iscsi$i iscsi
        diskspace=0
    else
        diskspace=`echo "($diskspace-$default_lun) / 1" | bc`
        lvcreate -L "$default_lun"G -n iscsi$i iscsi
    fi
    echo "Lun $i Path=/dev/iscsi/iscsi$i,Type=blockio" >> /etc/iet/ietd.conf
    i=$((i+1))
done


echo "Alias TARGET2" >> /etc/iet/ietd.conf


echo "ISCSI Target Yeniden Baslatiliyor"


service iscsitarget restart


echo "Kurulum Tamamlandi"



mhmtkrktr

Nerede ne amaçla kullanılacağını bilmeden yorumlaması zor. Baştan birkaç şey dikkatimi çekti.

/dev/sdb nedir? Daha doğrusu neye, kime göre sdb?

echo "SUPERDOCTOR5 Kuruldu"
Nereden biliyoruz bunu? Belki bir hata olmuş kurulmamıştır.

echo "SUPERDOCTOR5 Kuruldu"
echo "ISCSI Target Ayarlaniyor"


Kabuğun çalışma hızında, eğer aralarına bekleme komutu vermemişsen, bunlar okuyamayacağın kadar hızlı geçer. Amaç geriye dönüp kontrol etmekse sorun yok tabii.



gokhanyildiz

2 disk mevcut. Biri isletim sistemi digeri de storage icin kullanilan alan. Sadece 2 disk alani mevcut oldugu icinde standart olarak sda ve sdb olarak geliyor. Storage alanim da sdb olmus oluyor. echo ciktilarini en son okumak icin kullaniyorum.


Olay su. iscsi, teamviewer, superdoctor gibi uygulamalari offline ortamda kurmaya calisiyorum. Daha sonrada iscsi konfigurasyonuna geciyorum. iscsi kisminda daha onceden 1 adet target olusturup bunun altinda her biri 1900 GB olacak sekilde target lunlarini olusturuyordum. Simdi benden 2 adet target olusturmami ve bu 2 target in kendi ip adresleriyla calistirmami istiyorlar. Yani 50 TB lik bir storage alaninda target 1 25 TB target 2 25TB olacak sekilde 2 ye bolup 1900 GB lik lunlar olusturmak. (Kusuratli kalan alani da oldugu gibi son lun olarak olusturuyorum).

mhmtkrktr

Sadece kendine ait, değerleri sabit ve önceden bildiğin konumlarsa sorun yok o zaman.
Yapılan işlemlerde doğruluk sağlaması göremedim ben. Sanki herşey, verilen komutlarda hiç sorun oluşmamış gibi işliyor. Örneğin bir tanesini yukarıda belirtmiştim. Kuruldu diyor ama gerekten kurulduğunu kontrol eden bir işlem yok. Örneğin:
if which falanca &>/dev/null; then
echo "falanca kuruldu
else
echo "bir hata oluştu, işlem sonlandırılıyor"
exit
fi
gibi. Bu şekilde kendisi olmadığı için sorun çıkartabilecek bir alt işlem riskini ortadan kaldırmış olursun.
Bu betiği hatalı çalışsa bile sana sorun çıkartmayacak başka bir sistem üzerinde kontrol etme şansın yok mu?

gokhanyildiz

kurulan dosyalari kurulumdan sonra calistirdigim icin problem olup olmadigi gorebiliyorum hemen lakin bu zamana kadar kurulan paketlerle ilgili bir problem yasamadim. Scriptte yaptigim degisiklikleri bugun test etme sansim oldu ve sorunlu olan tek kisim iscsi target lunlari ile ilgili.  Diski 2 ye bolup yarisini target1 kalanini da target2 ye atmak istedim. Mantiken koddaki dongu calisti fakat haddinden fazla lun olusturuyor. target 1 icin 0 dan 15 e kadar toplam 16 lun, target2 icin de 16 dan 44 e kadar olusturuyor. Hesapladigimda bu 80TB gibi bir alan yapar. Benim 55TB lik alanim mevcut. Nerede hata yapiyorum?

mhmtkrktr

Diski en baştaki haline getirip şu çıktıyı aktarabilir misin?
fdisk -l | grep '/dev/sdb'

gokhanyildiz


while [[ $finaldisk != 0 ]]do    if [ "$finaldisk" -lt "$default_lun" ]; then        lastLUN=`echo "$finaldisk-1" | bc`        lvcreate -L "$lastLUN"G -n iscsi$i iscsi        finaldisk=0    else        diskspace=`echo "($diskspace-$default_lun) /1" | bc`        finaldisk=`echo "($finaldisk-$default_lun) / 1" | bc`        lvcreate -L "$default_lun"G -n iscsi$i iscsi    fi    echo "Lun $i Path=/dev/iscsi/iscsi$i,Type=blockio" >> /etc/iet/ietd.conf    i=$((i+1))done


Su sekilde sorunumu cozdum.

mhmtkrktr

Geçmiş olsun diyelim o zaman. Peki şurası hata vermiyor mu?
sdbsize=$(fdisk -l | grep -n '/dev/sdb' | awk '{print $3}');
sizegb=`echo "$sdbsize*1024" | bc`;
echo -e "$sizegb"


Bunun doğrusu şu şekilde olmalı gibi geldi bana.
sdbsize=$(fdisk -l | grep '/dev/sdb' | awk '{print $3}'|head -1);
sizegb=`echo "$sdbsize*1024" | bc`;
echo -e "$sizegb"

gokhanyildiz