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"
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.
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).
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?
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?
Diski en baştaki haline getirip şu çıktıyı aktarabilir misin?
fdisk -l | grep '/dev/sdb'
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.
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"
Hayir hata vermiyor.