16 Şubat 2021 Salı

UEFI Dual Boot ile Fedora Linux ve Windows'u Aynı Diske Kurmak


Merhaba. Bir gün dual boot konusunda yazacağım aklımın ucuna gelmezdi, taa ki yine aklımın ucuna gelmeyecek bir sorunla karşılaşana kadar. Dual boot'un ne olduğunu bilenler vardır ama kısaca tekrarlamak gerekirse, diskin birden fazla bölüme ayrılıp, birden çok işletim sistemi kurulmasına dual boot denir. Bu durumda doğal olarak işletim sistemlerinden yalnız biri çalışabilir.

Linux'u ilk duyduğum yıllarda, diski bölümünü FIPS ile küçültüp yeni oluşturduğumuz bölüme linux'u yüklerdik. Sanal makinalar yaygınlaştıktan sonra ikinci işletim sistemini sanal olarak çalıştırmak bana daha pratik geldiğinden daha az dual boot kullanmaya başladım. Üstelik SSD kullanmaya başladıktan sonra, bir işletim sistemini diğerine göre hep daha az kullandığımdan, disk yıpranması (wear out) konusunda kaygılarım oldu ama bir sorun yaşamadım. En sonunda ucuz yollu ikinci bilgisayarımı aldıktan sonra dual boot'a (neredeyse) gerek kalmadı; bir kaç deneme için Windows 7 kurmam gerekene kadar.

Aslında dual boot gayet kolay. En az iki disk bölümü ve bir ön yükleyici (boot loader) ile hemen hemen her işletim sistemi yüklenebilir. Buraya kadar sorun yok ancak yeni bilgisayarlarda işletim sistemini UEFI ile kurmak için fazladan bir kaç adım gerekiyor çünkü diskte ayrı bir EFI boot bölümü oluşturmak gerek. Bu yazıda amacım, diski en etkin şekilde kullanarak işletim sistemlerini yüklemek. Bu kurulumu daha önce fiziksel makinamda yaptım ama herşeyi tekrar kurmak istemediğimden, bu kez sanal makinada yapacağım.

Kuracağım işletim sistemi Fedora 33 ve Win7 olacak ama aynı işlemi Win10'la da yaptım. Adımlar zaten hemen hemen aynı. Linux kurulumunda /boot'un ayrı bir bölümde olmasını tercih ediyorum çünkü diskin geri kalanında LVM kullanacağım. Bu biraz alışkanlıktan dolayı, olmazsa olmaz değil. /boot dışında, her iki işletim sistemine bir bölüm ayıracağım.

Meraklısına ek okuma:
Is a /boot partition necessary anymore?
Is a /boot partition always necessary?
What's your recommendation on drive partitioning ... ?

Yeri gelmişken Fedora 33'ten itibaren artık varsayılan dosya sistemi btrfs. Yazının en sonunda btrfs'e de bir bölüm ayırdım. Kurulumda btrfs kullanmayacağım. Nedenini sondaki bölümde açıkladım.


Sanal Makinanın Oluşturulması
Sanallaştırma için VMware Workstation v15.5 kullandım (VirtualBox EFI'yi emule edebiliyor mu bilmiyorum). Sanal makina en az iki çekirdekli olmalı ve bellek kesinlikle 2 GB'den az olmamalı, aksi halde anlamsız hatalar çıkıyor. Sanal makina oluşturmayı Vmware ESXi Lab yazısında anlatmıştım, bu nedenle yalnız farklı olan adımlara değineceğim.

Makinayı "Custom (advanced)" seçeneğiyle oluşturdum ve "I will install the operating system later."ı seçtim. "Guest Operating System", Windows 7 x64 olacak. Bu, iki adım sonra "Firmware type"ta UEFI seçmeme imkan veriyor (yanda). Bu adımda UEFI seçeneği yoksa da sorun değil. Makina oluşturulduktan sonra .vmx dosyayı açıp, "firmware" ifadesini firmware = "efi" olarak değiştirmek; bu ifade yoksa bu satırı ekleyip vmware workstation'ı kapatıp açmak gerekiyor. Win10 için "Windows 10 x64" seçeneği seçilmeli. Bildiğim kadarıyla zaten 32-bit Win10 yok (Düzeltme: varmış). VMware'de neden ayrı ayrı "Windows 10" ve "Windows 10 x64" seçeneği var anlamadım.

İşlemci olarak iki çekirdek veya iki soket ve RAM olarak 3072 MB ayarladım. Win7 için önerilen zaten 2 GB, o anki fiziksel boş belleği (mavi üçgen) geçmediği sürece sanal makinanın belleği ne kadar çoksa o kadar iyi. Ağ bağlantısı NAT ve GÇ denetleyicisi "LSI Logic SAS" olacak. Win7, "LSI Logic"i desteklese de Win10 desteklemiyor (vmware seçmenize izin vermiyor). Win10 için önerilen, NVMe disk ama Linux'a etkisini bilmediğimden SCSI seçtim (bu arada Fedora NVMe diske kurulabiliyor). 120 GB'lik bir SCSI disk oluşturdum. Fiziksel diskimde 120GB boş yer olmadığından "Allocate all disk space now."u işaretlemedim. Bu noktada sihirbazı tamamlayıp makinayı oluşturdum.


Diski Bölümlendirmek
Disk bölümleme, dikkat edilmesi gereken konulardan ilki. Şu seçeneklerim var:
  1. Fedora KDE'de KDE partition manager
  2. Diğer Fedora spinlerinde (Workstation, Cinnamon vs.) "disks" (bunu kullanmayı beceremedim)
  3. gparted: Bu ubuntu'yla kurulu geliyor. Yani makinayı ubuntu ile açabilirim veya Fedora Live çalışırken sudo dnf install gparted ile kurabilirim.
  4. fdisk: fdisk bütün dağıtımlarda bulunuyor ve güncel sürümüyle GPT bölümler de oluşturabiliyor.
Fedora 32'den beri KDE sanal makinada sorunlu çalışıyor. Bu yüzden bölümlendirme için makinayı KDE ile açmadan önce, sanal makinanın ekran ayarlarında 3B grafik hızlandırmanın kapatılması gerek (Kaynak: KDE spin issues in VMWare).

Disk bölümlemede sorun, Windows'ların EFI disk bölümünü otomatik oluşturmak istemesi. Bundan ötürü Win7 kurulumundan önce yaklaşık 256MB'lık bir boş alan bırakmak gerekiyor. Bunun 128 MB'ı EFI bölümü, 100 MB'ı da sanırım geçici dosyalar için veya windows kurtarma bölümü. Eğer boş alan 128 MB olursa, 100MB'ı EFI bölümünde kullanılıyor ve diğer bölüm oluşturulmuyor. Win 10 kurulumu için normalde 100MB'lık bir EFI bölümüyle 16MB'lik gizli bir bölüm oluşturuluyor dolayısıyla Win 10 için 128 MB bırakmak yeterli.

Diski gparted'la bölümlemek için makinayı ubuntu'yla açıp gparted'ı başlattım (ubuntu şart değil, bkz: üçüncü madde. Aşağıda KDE partition manager ile de yapılışını açıkladım). Sağ üstte doğru diskin seçili olduğuna emin oldum (fiziksel makinalar için) ve önce Device -> Create Partition Table menüsünden 'gpt' türünde bir bölümleme tablosu oluşturdum. Sonra 'unallocated' yazan alana sağ tıklayıp New'a bastım, "New size" olarak 1024 verip bir bölüm ekledim.

Sonra tekrar New'a bastım, "Free space following" olarak 41216 ve "Free space preceeding" olarak 256 girdim (bunu girince "Free space following" 40960'ya düşecek. Win10 için 40960+128 = 41088). "File system" olarak listenin en altından "unformatted"ı seçip ikinci bölümü de oluşturdum. Son olarak kalan alanda bir NTFS bölümü daha oluşturdum (en sonda 1MB'lik alan kalıyor, bu normal). Bu adımda bölümler aşağıdaki gibi görünmeli:


Ardından yeşil "tick" tuşuna basıp, bölümlemeyi diske yazdım. Bu arada disk bölümlerini oluşturma sırası GPT'de önemli. Örn. üçüncü bölümü ikinciden önce oluştursaydım, üçüncü bölümün (40 GB) GPT girdisi tabloda ikinci sırada olacağından sda2 ve ikinci bölüm (78.75 GB) sda3 olacaktı. Bölümlerin diskteki sırada değil GPT'teki sırada numaralandırılması oldukça kafa karıştırıcı.

Bölümlemeden sonra linux için LVM bölümlerini oluşturdum. Bunun için şu komutları konsoldan verdim:

sudo su -
pvcreate /dev/sda2
vgcreate vg_fedora /dev/sda2
lvcreate -L 30G -n lv_root vg_fedora
lvcreate -L 25G -n lv_home vg_fedora
lvcreate -L 2G  -n lv_swap vg_fedora
lvcreate -L 6G  -n lv_tmp  vg_fedora
lvcreate -L 10G -n lv_var  vg_fedora

Bu şablonu kendi ihtiyacıma göre oluşturdum ve 5.75GB'lık boş bir alan bıraktım. Bunu gerektiğinde eklemek için tutuyorum. Tümünü lv_var'a eklemek isteseydim:

lvcreate -l 100%FREE -n lv_var vg_fedora

komutunu kullanmam gerekirdi.

Aynı işlemi KDE Partition Manager'da yapabilirim: Makinayı Fedora KDE ile başlatırım, Applications -> System -> KDE Partition Manager'la uygulamayı başlatıp sol taraftan bölümlendireceğim diski seçerim. Yukarıda "New Partition Table"a basıp "GPT"yi seçerim. Tekrar aynı sırayla 1024 MB'lik bir bölüm oluştururum; önünde 256 MB ve arkasında 40960 MB boş olan ikinci bölümü ve son olarak kalan alanda NTFS olarak üçüncü bölümü oluştururum.


Yukarıda, bölümlemesi tamamlanmış disk görülüyor. Apply'a basıp bunu diske yazar ve yukarıda verilen komutlarla Linux için gerekli bölümlemeyi yaparım.


İşletim Sisteminin Kurulumu #1: Windows
İşletim sisteminin kurulma sırası dikkat edilecek ikinci önemli konu. Windows 10'da denemedim ama Win XP ve Win 7 her zaman mevcut ön yükleyiciyi siliyor. Diskte GRUB veya başka ön yükleyici varsa üzerine Windows MBR kodu yazılıyor. Bu yüzden kuruluma Windows'tan başlamak gerek.

Bunun için sanal makinayı Win 7 DVD'siyle başlattım. Ağ bağlantısını da bu sırada kaldırdım çünkü kurulum sırasında sanırım güncellemeler için internete bağlanmaya çalışıyor, bu da kurulumu biraz uzatıyor. Fiziksel makinada kurulum için, kalıp dosyası UNetbootin veya UUI ile USB diske yazılabilir. Bir de fiziksel makinaya kurarken, normalde Win 7 tarafından sorunsuz tanınan kızıl ötesi fare ve klavyem sorun çıkardı. O yüzden bunları önceden söküp kurmak daha iyi.


Kurulumun "type of installation" adımında "Custom (advanced)" seçip, disk seçme ekranında 40GB'lik üçüncü bölümü seçerek kurulumu tamamladım.


Kullanıcı adı ve parola gibi adımların ayrıntısına değinmeyeceğim.

Windows 10 kurulumunda, ürün anahtarı sorulacak. Bunu "I don't have a product key"e basıp geçtim ama bir ürün anahtarı almayı düşünenlerin bir sonraki adımda uygun "edition"ı seçmeleri gerek. Sonunda "N" olanlar AB yasaları gereği bazı programları bulundurmuyorlar. Ben Win 10 Pro seçtim ama sanal makinaya kurduğum için önemli değil. Win 7'deki gibi burada da "Custom Install"ı ve disk olarak üçüncü bölümü seçmek gerek.


Geri kalanlar kişisel ayarlar olduğundan yine ayrıntısına değinmeyeceğim.


İşletim Sisteminin Kurulumu #2: Linux
Kurulumdan önce, fiziksel makinalar için dikkatli olunması gereken bir konu var: Linux'un 64 bit UEFI modda başlatılması gerekiyor. Bu nasıl olacak?

Örn. Fedora'da GRUB menüleri biraz farklı. Menü renkli görünüyorsa IA32, renksiz görünüyorsa x64 modda açılıyordur:

  
UEFI x64
  
IA32 mod

Fedora'nın olduğu USB diski fiziksel makinama taktığımda, USB disk BIOS boot seçeneklerinde iki farklı şekilde görünüyordu. Doğru seçenek, deneyerek bulunabilir veya EFI kabuğunu açıp, USB'deki BOOTX64.EFI elle çalıştırılabilir. Sanal makinada herhangi birşey yapmaya gerek kalmadan doğru modda açılıyor.

Yukarıdaki görsellerden de anlaşılacağı gibi ben KDE'yi tercih ediyorum. Fedora açıldıktan sonra, masaüstündeki "Install to Hard Drive"a basmak kurulum için yeterli. Live dağıtım kurulumlarının en eğlenceli yanı, kurulum sırasında arkaplanda başka programları çalıştırabilmek ve hatta birden fazla monitör varsa, birinde kurulum sürerken aynı anda internette gezinebilmek. Bu arada Windows kurulumundan önce ağ bağlantısını kapatmıştım, bu sefer açacağım. Aksi halde kurulumdan sonra bağlantıyı elle yapılandırmak gerekiyor.

Kurulumu başlattıktan sonra dil, zaman dilimi vb. ayarları seçtim. Bunların ayrıntısına girmeyeceğim. Tek önemli konu disk bölümleri. Disk kullanımını ayarlamak üzere "Installation Destination"a basıp "Storage Configuration" altında "Custom" seçtim. Ardından, daha önce oluşturulan /boot bölümü ve diğer LVM bölümleri ilgili "mount point"lere atadım.

1- "Unknown" altındaki sda1'e (en üstte) tıklayıp, sağ tarafta "Mount Point" /boot, "File System" ext4 seçtim. "Reformat"a ve ardından "Update Settings"e bastım.


2- "EFI System Partition" (sda2, 100 MB) diskine tıklayıp "Mount Point" olarak /boot/efi seçtim ve "Update Settings"e bastım. Bu adımda kesinlikle "Reformat"a basmadan diski eklemek gerek. Bu da, kurulumda dikkat edilmesi gereken son önemli nokta. Aksi halde Windows'u yeniden kurmak gerekir. Oysa, normalde Anaconda'nın disk bölümünü formatlamadan eklediği nadir görülen bir durum.

3- Diğer disk bölümleri adlarına karşılık gelen "mount point"lere bağlanır. Bunun için önce "Reformat" işaretlenir ve "Mount Point" kutucuğuna ilgili mount point girilir. Dosya sistemi tercihe bağlı. Ben genelde /var için ext4, diğerleri için xfs tercih ediyorum. Btrfs'le ilgili düşüncelerimi yazının sonunda ayrı bir bölümde ele aldım. Aşağıda, "mount point"ler tamamlandıktan sonraki ekran görüntüsü var.


Diskler ayarlanıp, yönetici haklarına sahip bir kullanıcı oluşturulur ve kurulum başlatılır. Kurulumun güzel bir özelliği de diskteki Windows kurulumunu tanıyıp bunu GRUB menüsüne otomatik eklemesi. En son, Centos 7 kurduğumda böyle bir özellik olmadığından, Windows'u grub.cfg'ye elle eklemek gerekiyordu.

Bütün adımlar tamamlanıp makina yeniden başlatıldığında artık iki işletim sistemi de kullanıma hazırdır.


Ek: Btrfs
Fedora 33'ün, btrfs'i varsayılan dosya sistemi olarak sunması ve benim Fedora'yı fiziksel makinaya kuracak olmamdan dolayı btrfs'i bir hayli inceledim.

Öncelikle btrfs, ext ve xfs'e göre oldukça fazla özellik içeriyor. Diskin bir bölümü, snapshot özelliği sayesinde o anki haliyle saklanabiliyor. Bu oldukça güzel bir özellik. Snapshot ext'te olmadığından, bu özellik LVM ile sağlanıyordu. Subvolume özelliği sayesinde, diski bölümlere ayırmaya gerek kalmıyor. Bunun bir getirisi daha var: btrfs tekilleştirme'yi (deduplication) destekliyor. Dosyalar parçalara (chunk) ayrılıyor ve hash'leri aynı olan parçalar tek kopya olarak tutuluyor. Dolayısıyla btrfs'te bütün diski tek bölüm olarak kullanmak, dosya/veri havuzunu genişleterek tekilleştirme oranını arttırıyor ve subvolume'lar kullanılarak, dizinleri ayrı ayrı yönetmek mümkün oluyor. Son olarak RAID'in kısıtlayıcı yapısını tamamen kaldırarak farklı büyüklükteki disklerle, gruplar oluşturulmasına olanak sağlıyor. Bu son özellik masaüstü kullanıcıları için çok şey ifade etmese de sunucu diskleri için RAID'e çok daha esnek ve güzel bir alternatif sunuyor.

Öte yandan, RedHat üç yıl önce btrfs desteğini kaldırdı. SuSe, eskiden btrfs'i öneriyordu ama şu anda durum nasıl bilmiyorum. Ben o zaman btrfs'in olgunlaşmış olmadığını düşünüyordum ancak RedHat'in bu kararının arkasında ticari kaygıların da olabileceği iddiası da var: Oracle allergy could be why...

Bence btrfs, geleceğin teknolojisi ve şu an hayli stabil ama RedHat desteklese bile üretim ortamında kullanmak için erken. Bunun bir nedeni, zamanında çıkar çıkmaz FAT32'ye geçip, veri kaybettiğimde kurtaracak program bulamamış olan benim, yeni dosya sistemlerine mesafeli durmam. Diğer nedeni de mevcut sistemlerden geçiş süreci. Bu arada perfomans konusunda, Phoronix'in testleri bir fikir verecektir:

Masaüstündeyse, ben alışkanlıktan btrfs kullanmak istemedim. Yukarıdaki bölümlemenin benzerini kişisel bilgisayarımda kullanıyorum ve bu bölümlemenin tekilleştirmeden dolayı verimli olup olmayacağı benim için bir sorun. Btrfs FAQ'ya göre tek disk bölümü, tekilleştirmeden değil ama yazma optimizasyonlarından ötürü tavsiye ediliyor. Kafa karıştırıcı bir konu da boş alan hesaplaması. Örneğin unutulmuş bir snapshot önemli ölçüde yer kaplayacağı gibi, 120 GB'lik bir diskte tekilleştirmeyle 300 GB dosya bulunup yine de 40 GB boş alan olabilir. Bir diğer konu, yıllardır kullandığım için LVM komutlarını iyi biliyorum ve btrfs için konfor zonundan çıkmak istemedim.