38
Konuya ait anahtar kelimeler : Usb bellek format atma scripti(Fat32) Arkadaşlar bazen Usb belleklerinizi Unix/Linux üzerinden formatlamak istediğiniz zaman düzgün format atamama sorunu ile karşılaşabilirsiniz. Öyle ki bazen usb yi formatlıyorsunuz(örneğin Usb belleğinize virüs bulaşmış ise) fakat format işleminden sonra bellek içerisindeki dosya/klasörlerin silinmediğini görüyorsunuz. Yada bazen Usb belleği formatladıktan sonra belleğin yazmaya karşı korumalı olduğunu(Readonly) görebilirsiniz. Bu durumda flash belleğe birşey kopyalayamaz yada bellekteki bir dosya/klasörü değiştiremezsiniz. En sık karşılaşılan sorunlardan bir diğeri Gparted vb. programlar ile Usb belleği formatlamak istediğiniz zaman hata ile karşılaşılıp format işlemini gerçekleştiremediğiniz durumlar olabilir. Herkes farklı şekillerde sorunlar ile karşılaşabilir. Bu dersimizde kendi format scriptimizi yazarak başka birşeye ihtiyaç duymadan Usb belleklere format işlemini gerçekleştireceğiz. Not: Format atma işlemi disk içerisindeki bütün herşeyi silecektir. Yanlışlıkla Hard diskinize format atmak gibi ölümcül hatalarla karşılaşmamak için lütfen dikkatli olunuz. Öncelikle format atma işlemini gerçekleştirebilmeniz için sisteminizde aşağıdaki programların kurulu olması gerekmektedir.
  • parted
  • mkdosfs
  • fdisk
Evet herşey hazır ise scripti yazmaya başlayalım. Script çalışma algoritmasını aşağıdaki şekilde oluşturalım.
  • İşlemler root yetkisi ile gerçekleştirileceğinden dolayı öncelikle kullanıcı kontrolü yapılsın ve eğer o an scripti çalıştıran kullanıcı root değilse bir hata mesajı vererek çıkış yapsın.
  • Sistemimizdeki diskleri listeleyelim ve yanlış bir seçim yapmaktan kurtulalım. Bu kısım en önemli kısım.
  • Kullanıcı doğru disk adını(/dev/sdb, /dev/sdc vb..) yazacak ve ENTER a basacak, burada dikkat edilmesi gereken nokta disk adının sonunda herhangi bir rakam olmayacaktır.
  • Bu aşamada kullanıcıya devam etmek istediği sorulacak ve verilen cevaba göre format atma işlemi başlayacak yada işlem iptal edilecek.
Şimdi script kodlarımızı hazırlayalım. Aşağıda kodların üzerinde hangi kodun nerede ne yaptığı yorum olarak belirtilmiştir. İstediğiniz kısımları değiştirebilir silebilir yada yeni özellikler ekleyebilirsiniz. Scriptimiz belirtilen diski FAT32 türünde formatlayacaktır. Script içeriği aşağıdaki gibi olacaktır.
#!/bin/bash # Usb format atma scripti echo #Root kullanıcı kontrolü if [ ! "$USER" == "root" ]; then echo "Üzgünüm \"root\" kullanıcısı değilsiniz.. " exit 0 fi echo echo "Sistemde bulunan diskler aşağıda listelenmiştir." echo fdisk -l | grep "Disk /dev/" | awk '{print $2 " "$3" "$4}' echo echo echo -n "Disk adını yazınız. <örneğin /dev/sdc yada /dev/sdd vb...>: " read diks echo echo echo "$diks diski FAT32 olarak formatlanacaktır.. Bu işlem disk üzerindeki bütün verileri silecektir. " echo echo echo -n "Devam etmek istiyormusunuz? [\"E\"/\"H\"]: " read oku echo if [ "$oku" == "E" -o "$oku" == "e" ]; then # Usb diski sistemde mount edilmişse unmount ediliyor.. # Ayrıca yeni mount noktası ayarlanıyor. if mount -l | grep "$diks"1 ; then echo "$diks unmount ediliyor....." mount_yolu=`mount | grep "$diks" | awk '{print $3}'` umount -f "$diks"1 else mount_yolu="/run/media/$USER/shellskript" fi #Diskin mbr kaydı ve partition kaydı hepsi temizleniyor.. dd if=/dev/zero of=$diks bs=1k count=2048 sleep 1 # parted ile yeni bir msdos partition yapısı oluşturuluyor.. # Burada msdos kısmını bilginiz olmadan sakın değiştirmeyin.. /usr/sbin/parted "$diks" mklabel msdos <<EOF yes EOF sleep 1 echo # yeni bir tane fat32 formatında partition oluşturuluyor.. type=b şeklinde.. /sbin/fdisk "$diks" <<EOF n p 1 t b w EOF sleep 1 #oluşturulan partition formatlanıyor... /sbin/mkdosfs -F32 -n "shellskript" "$diks"1 #Oluşturulan partiiton a "boot" flag yani bootable özelliği vermek istiyorsanız #aşağıdaki kodun önündeki # kare işaretini kaldırınız. #/sbin/sfdisk -A $diks 1 # diskin mount edileceği klasör hazırlanıyor, eğer varsa içeriği siliniyor # yok ise yeni bir tane oluşturuluyor... if [ ! -d "$mount_yolu" ]; then mkdir -p "$mount_yolu" else rm -rf "$mount_yolu"/* fi # diskimiz oluşturulan klasöre mount ediliyor.. mount -t vfat -o users,umask=000 "$diks"1 "$mount_yolu" if [ $? -eq 0 ] ; then echo echo "İşlem BAŞARILI !!" exit else echo "İşlem başarısız.." exit fi else echo "İşlem iptal edildi.........." exit 1 fi
Evet arkadaşlar yukarıdaki kodları istediğiniz bir yerde oluşturduğunuz "formatusb.sh" dosyasına kaydediniz ve scripte çalıştırılma izni veriniz, tabi bu işlemleri "root" kullanıcısı ile yapmalısınız aksi halde script içerisinde kullanılan programlar "root" yetkisi ile çalıştırılabilir. Standart kullanıcı ile format işlemini normal şartlar altında gerçekleştiremezsiniz. Aynı zamanda bu şekilde bir güvenlik önlemi alınmış olur. Son olarak "./formatusb.sh" yazarak scripti deneyebilirsiniz.