fix(bootloader): disk listesini sırala, boot medyasını hedeften ele

Kullanıcı sorusu: "önyükleme adımında ilk disk neyse o seçili olması
daha mantıklı değil mi."

## "İlk disk" neden doğru bir kural DEĞİL — iki bulgu

### 1. Liste sıralanmıyor

`list_block_devices` ne `lsblk` çıktısını ne `/sys/block` çıktısını
sıralıyor. Fallback yolunda liste `read_dir` sırasıyla geliyor, yani
**önyüklemeden önyüklemeye değişebilir**. "İlk disk" böylece ne
sıralı bir kavram ne de kararlı bir varsayılan.

### 2. ⭐ Boot medyası listede — ve hiçbir yerde filtrelenmiyor

`detect_drive_type` "USB" döndürüyor ama o değer **tek bir yerde bile
okunmuyor**. Canlı ISO'yu boot ettiğiniz USB `available_disks`'te
yer alıyordu.

"İlk disk" çok yaygın bir kurulumda boot medyasına denk gelir.
Önyükleyici hedefi olarak seçilirse BIOS modunda
`grub-install --target=i386-pc <usb>` MBR'yi oraya yazar: kurulum
biter, sistem AÇILMAZ.

## Düzeltme

- `sort_disks()`: çıkarılabilir aygıtlar SONA, dahililer ada göre.
  Artık "ilk disk" her zaman bir iç disk.
- `disk_sort_key`: bölüm numarası sayısal ayrıştırılır; ada göre
  sıralama `sda10 < sda2` derdi.
- Önyükleyici hedef listesinden çıkarılabilir aygıtlar **elenir**.
  Liste tamamen çıkarılabilir aygıt olursa eski davranışa düşülür
  (ComboBox boş kalmasın).
- UEFI modunda `bootloader_device_hint_dualboot` ipucu gösterilir:
  çift önyüklemede hangi aygıtı seçmek gerektiği ekranda hiç yazmıyordu.

## Test sırasında çıkan hata

İlk `base_disk_name` yazımı `trim_end_matches(is_ascii_digit)`'ı her
yola uyguluyordu: `nvme0n1` → `nvme0n`. Sonuç `/sys/block/nvme0n/
removable` aranıyor, NVMe disk çıkarılabilir sayılmıyordu — yani
filtre NVMe'de sessizce çalışmıyordu.

Aynı hata `installer::device_to_disk` içinde de var ama o işlev
BÖLÜM YOLU içindir ve şu an yalnızca test yardımcısından çağrılıyor;
canlı bir hatası yok. Yine de `base_disk_name` kendi ayrıştırıcısını
kullanıyor ve bu ayrım notla sabitlendi — "basitleştirilirse" NVMe'ler
çıkarılabilir sanılır.

## Testler (124 → 129)

- diskler ada göre sıralanır
- bölüm numaraları sayısal sıralanır (sda10 > sda2)
- NVMe/mmcblk/vda isimleri doğru ayrışır (çıplak + bölümlü)
- sıralama anahtarı her iki biçimi de doğru verir
- çıkarılabilir aygıtlar sona gider

Varsayılan seçimin KÖK diski olarak kalması korundu — bu konuda
kullanıcıyla konuşulacak, aşağıdaki soru gönderildi.

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

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erkan IŞIK
2026-09-27 18:48:44 +03:00
parent f150ab0002
commit c6a1d0fb6f
5 changed files with 221 additions and 2 deletions
+1
View File
@@ -387,6 +387,7 @@ bootloader_title = "Önyükleyici Yapılandırması"
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_timeout_label = "Bekleme süresi:"
bootloader_timeout_suffix = "saniye"
bootloader_password_label = "GRUB parolası (isteğe bağlı):"