feat(bootloader): varsayılan aygıt artık mevcut işletim sistemi olan disk

Kullanıcı kararı: "zaten işletim sistemi olan diski seç".

## Neden kök diski değil

BIOS modunda `grub-install` seçilen diskin MBR'sine yazar ve MBR'yi
okuyan aygıt firmware'in açılış sırasındaki ilk diski olmak ZORUNDA:

    sda: Windows    sdb: PisiLinux (kök burada)
    GRUB → sdb      firmware sdb'yi açmaz, PisiLinux HİÇ GÖRÜNMEZ
    GRUB → sda      firmware GRUB'a düşer, GRUB ikisini de listeler

Salt kök diski varsayılan tutmak dual-boot'ta sistemi açılmaz
bırakıyordu. `selected_disk` ise manuel modda "aktif düzenleme
diski" olduğu için /home eklemek için geçilen diske yanlış yönlendiriyordu.

## Kural (default_boot_device, saf + test edilebilir)

1. çıkarılabilir aygıt (ISO'nun USB'i) → ASLA hedef değil
2. kök diski dışında bölümü olan ilk dahili disk → mevcut OS diski
3. kök diski
4. selected_disk (son çare)

"İşletim sistemi kurulu"nun en ucuz ve en güvenilir göstergesi: kök
diski dışında hâlihazırda bölüm tablosu olan disk.

Tek diskli kurulumda 3. adım çalışır → davranış kök diskiyle aynı,
geriye dönük uyum bozulmaz.

## Tespit: alt süreç YOK

`disk_partition_count()` sysfs'ten okuyor
(`/sys/block/<disk>/<disk><N>` girdileri). `lsblk` çağırmak
`on_enter`'da bile gereksiz ve kare başına alt süreç yasağına
ayrık düşüyordu.

## UI

`boot_device_reason` aynı fonksiyonu çağırıp seçimin bu kurala
uyup uymadığını denetler; uyuyorsa gerekçe metni gösterilir. Böylece
sessiz bir varsayılan sürpriz olmaz ve **ikinci bir uygulama olmaz**.

## Testler (129 → 137)

bootloader.rs'de test modülü yoktu, eklendi (8 test):
- mevcut OS diski seçilir (kullanıcının senaryosu)
- tek disk → kök disk
- hiçbir disk bölümlü değil → kök disk
- kök disk "mevcut OS" sayılmaz
- birden çok adayda sıralı ilki seçilir
- kök disk bilinmiyorsa
- liste boşken kök disk kullanılır
- hiçbir şey bilinmiyorsa None

Bir test ilk yazımda yanlış beklenti koydu: liste boşken None bekliyordum,
doğrusu kök diske düşmek (liste yalnızca OS diski arayışı için gerekiyor).
Beklenti düzeltildi.

cargo check --all-targets : 0 hata, 0 uyarı
cargo test              : 137/137

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erkan IŞIK
2026-09-27 18:58:59 +03:00
parent c6a1d0fb6f
commit bd407adab3
5 changed files with 275 additions and 12 deletions
+1
View File
@@ -388,6 +388,7 @@ bootloader_description = "Önyükleyici (GRUB) ayarlarını yapılandırın."
bootloader_device_label = "Aygıta kur:"
bootloader_device_hint = "(varsayılan: hedef disk)"
bootloader_device_hint_dualboot = "Çift önyükleme yapacaksanız burada Windows'un kurulu olduğu diski seçin. UEFI modunda bu aygıtın bölümündeki Windows ESP'sinden \"Windows Boot Manager\" menüye eklenir; seçmezseniz açılışta Windows görünmez."
bootloader_device_why_existing = "Bu aygıt, üzerinde hâlihazırda işletim sistemi bulunduğu için seçildi: önyükleyici açılışta zaten okunan diske yazılmalıdır."
bootloader_timeout_label = "Bekleme süresi:"
bootloader_timeout_suffix = "saniye"
bootloader_password_label = "GRUB parolası (isteğe bağlı):"