initrd.img Dosyasının Oluşturulması
Önceki X Terminal Sisteminin Yapılması Sonraki
initrd.img Dosyasının Oluşturulması
Burada, önce kurulum sırasında ayırdığımız ek disk bölümü üzerinde bir dosya sistemi oluşturacağız sonra da onu kök dosya sistemine bağlayacağız. Kök dosya sisteminizin /dev/hda1 disk bölümünde olduğunu, takas alanının /dev/hda2 bölümünde olduğunu, ayırdığınız ek disk bölümünün de /dev/hda3 olduğunu varsayacağım. Hangi disk bölümlerinin ne için kullanıldığını sfdisk komutu ile öğrenebilirsiniz:
# /sbin/sfdisk -l

Disk /dev/hda: 4870 silindir, 255 kafa, 63 sektör/iz
birimler = 8225280 baytlık silindir, 1024 baytlık blok, 0'den başlayarak

                              silindir   blok
   Aygıt Önykl Balangıç Bitiş sayısı   sayısı
/dev/hda1   *      0+   1200    1200-   9647001+  83  Linux
/dev/hda2       1201    1324     123-    987966   82  Linux takas
/dev/hda3       1325+   2525    1200-   9647001       Boş
  ...
Siz tam böyle olmasa da benzer bir liste alacaksınız. Şimdi /dev/hda3 üzerinde bir ext3 dosya sistemi oluşturalım:
# /sbin/mke2fs -b 1024 -O sparse_super,filetype,has_journal /dev/hda3
Bu komut ile blok boyu 1024 bayt olan bir dosya sistemi oluşturduk. Blok boyunu özellikle 1024 bayt olarak seçtim. Çünkü çekirdek ramdiski 1024 baytlık bloklarla oluşturur. Ramdiskin bir örneğini bu disk bölümü üzerinde oluşturacağımızdan doğru boyut raporu alabilmek için 1024 bayt blok boyuna sahip bir dosya sistemine ihtiyacımız var. Kök disk bölümü genelde 4096 baytlık blok boyunda oluştururlur. Onun için kök disk bölümünde bu işi yapmamız doğru olmazdı.
Oluşturduğumuz dosya sisteminini kök dizine bağlamadan kullanamayız. Onun için /a3 isminde bir dizin oluşturacağız, sonra da /dev/hda3'ü buraya bağlayacağız. Disk bölümünü bağlamadan önce bu disk bölümü ile ilgili bilgiyi /etc/fstab dosyasına ek bir satır olarak girelim ki, sistemi her yeniden başlattığınızda bu disk bölümü açılış sırasında /a3 altına bağlansın:
# echo "/dev/hda3    /a3     ext3    defaults  1 2" >> /etc/fstab
# mount /a3
İlk komutta /dev/hda3 ile ilgili bilgiyi /etc/fstab dosyasının sonuna bir satır olarak ekledik. Bu komutta dikkat edeceğini şey /etc/fstab'dan önce iki tane > konulması gerektiğidir. Bir tane > koyarsanız dosya silinir va dosyaya sadece bu satır yazılır. Halbuki biz dosya sonuna ek bir satır girmek istiyoruz. Onun için > işaretinden peşpeşe 2 tane kullanmamız gerekiyor. Dikkatli olun!
İkinci satırda ise /dev/hda3/a3 dizinine bağladık. Nereden belli? mount komutu böyle tek parametreli kullanıldığında diğer parametreleri almak için /etc/fstab dosyasına bakar. Bu komutu bir daha kullanmayacağız. Bundan sonra sistemi her açtığınızda /a3 bağlı olacak.
/a3 dizinine geçip, bir dizin açıyoruz (ramdisk dizini) ve ramdisk dizinine giriyoruz:
# cd /a3
# mkdir ramdisk
# cd ramdisk
Bu dizine initrdyap isminde bir dosya açıyoruz ve bu dosyayı çalıştırılabilir bir dosya yapıyoruz:
# touch initrdyap
# chmod +x initrdyap
Sonra da bu dosyanın içine aşağıdakileri yazıyoruz:
#!/bin/bash

compress=1
target="/export/netlogon/autoboot/initrd.img"
rc=0

IMAGESIZE=12000

MNTIMAGE="/a3/ramdisk/initrd"
IMAGE="/a3/ramdisk/initrd.rd"
MNTPOINT="/a3/ramdisk/initrd.mnt"

dd if=/dev/zero of=$IMAGE bs=1k count=$IMAGESIZE 2> /dev/null || exit 1

LODEV=$(echo findlodev | /sbin/nash --quiet)

if [ -z "$LODEV" ]; then
    echo "loopback aygıtlarının hepsi kullanılmış." >&2
    exit 1
fi

/sbin/losetup ${LODEV} $IMAGE || exit 1

echo y | /sbin/mke2fs $LODEV $IMAGESIZE >/dev/null 2>/dev/null
/sbin/tune2fs -i0 $LODEV >/dev/null

if [ -n "$verbose" ]; then
    echo "$LODEV aygıtı kullanılıyor"
fi

mount -t ext2 $LODEV $MNTPOINT || {
        echo "Loopback aygıtı yok"
        exit 1
}

(cd $MNTIMAGE; tar cf - .) | (cd $MNTPOINT; tar xf -) || exit 1

umount $MNTPOINT
/sbin/losetup -d $LODEV

if [ -n "$compress" ]; then
    gzip -9 < $IMAGE > $target || rc=1
else
    cp -a $IMAGE $target || rc=1
fi

exit $rc
Bu betiği adından da anlaşılacağı üzere initrd.img dosyasını oluşturmakta kullanacağız. Şimdi bu betiğin çalışması için gereken dizinleri oluşturalım:
# mkdir initrd
# mkdir initrd.mnt
Ramdiski oluşturacağımız dizin initrd dizini; initrd.mnt dizini boş kalacak. Orayı betik kullanacak. Betiği şimdi çalıştıracağız ve betik 12000 kB'lık /a3/ramdisk/initrd.rd dosyası ile bu dosyanın sıkıştırılmış hali olan /export/netlogon/autoboot/initrd.img dosyasını oluşturacak:
# ./initrdyap
Komut, herşey yolunda giderse konsolda hiçbir çıktı vermeyecek ve bahsettiğim 2 dosyayı oluşturacak. Konsola bir çıktı veriyorsa bu bir hata iletisidir. Birşeyleri eksik ya da yanlış yapmış olabilirsiniz. Bu betiği kendim yazmadım, /sbin/mkinitrd betiğinden bizim için gereksiz satırları temizledim ve kalan kodu biraz değiştirdim. (Amerika'yı yeniden keşfetmenin alemi yok). /sbin/mkinitrd'nin kullandığı yöntem bize /a3/ramdisk/initrd dizininde normal bir dizin gibi çalışma imkanı veriyor. Yani oraya yerleştireceğimiz ve kaldıracağımız dosyalar initrd.img dosyasında değişiklik bilgisi olarak görünmeyecek. Diğer yöntemlerde görünür ve dosya gereksiz yere şişer.
Önceki Üst Ana Başlık Sonraki
X Terminal Sisteminin Yapılması Başlangıç Çekirdeğin derlenmesi
Bir Linux Kitaplığı Sayfası