grub etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
grub etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

23.12.2021

Manjaro grub güncelleme hatası

Manjaro'da update-grub kullanırken aşağıdaki gibi bir hata alıyordum:

/usr/share/grub/grub-mkconfig_lib: satır 288: printf: `$': biçim karakteri geçersiz

Bunun sonucunda da grub menüm güncellenmiyordu. Hatadan bir anlam çıkaramadım. Bu, sanıyorum sadece Türkçe olarak yüklenen Manjaro veya linuxlarda oluyor. Şurada çözüm olarak

$ sudo LC_ALL=C /bin/bash -c "grub-mkconfig -o /boot/grub/grub.cfg"

çalıştırmak önerilmiş. Komutun başındaki LC_ALL=C sistem yerelini geçici olarak basit bir karakter kümesine değiştiriyor. İşe yaradı.

---

[1] https://bbs.archlinux.org/viewtopic.php?id=267763

[2] https://www.technopat.net/sosyal/konu/arch-linux-grub-mkconfig-arizasi.1584960/#post-12110027

22.06.2020

Farklı dağıtımlardaki grub komutları

Grub komutları her dağıtımda farklılık gösterebiliyor. Örneğin Ubuntu'da

$ sudo update-grub
komutu ile grub menüsü güncellenebiliyor. Ama bakınca aslında grub-mkconfig'i kullanan basit bir script'ten başka birşey değil. İçeriği kabaca şöyle:

grub-mkconfig -o /boot/grub/grub.cfg

Hatta update-grub2 de, update-grub'a bir kısayol.

Grub diskin başına yazmak için kullanılan komutsa Ubuntu'da şöyle:

$ sudo grub-install /dev/sda
Fedora'da ise update-grub ya da update-grub2 gibi bir şey söz konusu değil. Grub menüsünü yeniden oluşturmak için kullanılacak komut şöyle:

$ sudo grub2-mkconfig -o /boot/efi/EFI/grub.cfg
Benzer şekilde grub'ı diskin başına yazmak için ise

$ sudo grub2-install /dev/sda
kullanılıyor.

Fedora'da grub menüsünü düzenlemek için kullanılan grubby adında diğer dağıtımlarda bulamadığım bir araç da var.

Yine Fedora'da rescue çekirdeği ve initramfs'i tutuluyor. Bunları silmeniz durumunda tekrar yaratmak için dracut kullanılıyor. Var olanların üzerine yazmak için --force parametresi kullanılabilir.

Arch / Manjaro'da da Ubuntu'ya benzer şekilde update-grub var ki o da arka planda grub-mkconfig'i kullanan bir script. Ama burada update-grub2 gibi bir kısayol söz konusu değil.

$ sudo update-grub
Grub'ı diskin başına yazmak içinse yine

$ sudo grub-install /dev/sda
kullanılıyor. Tüm grub-install'ları BIOS sistemler için yazdım. UEFI sistemlerde ise kullanılacak komut şöyle:

$ grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=manjaro --recheck

28.03.2019

GRUB kurtarma

Dual boot sistemler, Windows güncellemeleri ve daha bir çok etken sebebiyle grub bozulur. Bu normal.

Çoğu zaman düzeltmek için iki yol vardır:
  1. CD/USB gibi başka bir ortamdan açarak chroot ile grub'ı tekrar oluşturmak
  2. grub etkileşimli kabuğa (interactive shell) erişerek sistemi bir şekilde açtıktan sonra grub'ı tekrar oluşturmak
Elbette bazı terimleri açıklamak gerek. Artık 2 farklı sistem var. Birincisi eski ama hala var olan MBR diskler. Bunlar BIOS sistemler ile kullanılır. Diskin ilk sektöründe MBR olarak adlandırılan bir bölüm bulunur. Bu bölümün boyutu 512 byte'tır. MBR'nin ilk 446 byte'lık bölümü boot loader, geri kalan 66 byte ise disk bölümü tablosudur (partition table). Herşey yolundayken boot loader'ın (veya MBR'nin) yedeği alınabilir.
$ sudo dd if=/dev/sda bs=446 count=1 of=/root/backup.bin
Burada diskin sda olduğu varsayıldı. Yukarıdaki satır boot loader'ın yedeğini alarak /root klasörü altındaki backup.bin dosyasına kopyalar. Bu dosyanın uzantısı önemli değil. Uzantısı olmak zorunda bile değil. Sadece boot loader değil, bütün MBR'nin (partition table dahil) bir yedeğini almak için 446 yerine 512 yazılmalıdır. Zamanı geldiğinde bu yedeği kullanarak boot loader'ı tekrar oluşturmak için şu komut kullanılabilir:
$ sudo dd if=/root/backup.bin of=/dev/sda bs=446 count=1
Yine elimizde tüm 512 byte'lık bölüm varsa buradaki size parametresini de ona göre değiştirebiliriz. Eğer bilgisayar açılış sırasında aşağıdaki bir ekranda kaldıysa boot loader (ön yükleyici mi desek?) bozulmuş demektir. Yukarıdaki komutları uygulayabilmek için bilgisayarı bir CD veya USB bellek ile bir linux ortamına açmış olmak gerekir.


1. CD/USB ile açarak

Elimizde diskin ilk bölümünün bir yedeği yoksa burayı tekrar yazmak gerek. Bunun için bir linux CD'si veya USB canlı ortamıyla açmak gerek. İlk iş fdisk ile diskin bölümleri hakkında bilgi toplamak olabilir.

# fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sda1  *       2048  3999743  3997696  1.9G 82 Linux swap / Solaris
/dev/sda2       4001790 41940991 37939202 18.1G  5 Extended
/dev/sda5       4001792 41940991 37939200 18.1G 83 Linux


Benim test ortamımda yukarıda görülebileceği gibi linux sda5'te kurulu. sda1 ise swap bölümü.

Yapılacak iş, sda5'i mount etmek, ardından da şu anda açık olan canlı linux ortamındaki dev, sys ve proc klasörlerini sda5'in içindeki ilgili klasörlere bağlamak. Bunun için şu adımlar gerekli.
# mount /dev/sda5 /mnt
# mount --bind /dev/ /mnt/dev/
# mount --bind /sys/ /mnt/sys/
# mount --bind /proc/ /mnt/proc/
Bu aşamadan sonra chroot kullanılarak sda5'te kurulu linux ortamında sanal bir root oturumu oluşturuyorum:
# chroot /mnt/
Şimdi grub'ı tekrar yazabilirim:
# grub-install /dev/sda5

2. GRUB interactive shell

Açılış önyükleyicisinin çalıştığı ama linux çekirdeği veya initrd ile ilgili sorunların olduğu durumlarda aşağıdaki gibi bir ekran görüntülenir.


Bu durumda herhangi bir tuşa basıldığında yine grub boot menüsü görüntülenir, ama varsayılan boot menüsü girişinden bir sonuç alınamaz. "Advanced Boot Options" altında yer alan bir önceki çekirdek ile açma denenirse sonuç olumlu olabilir. Ama bunların hiçbiri işe yaramadıysa, veya yeni bir linux kurulumu sonrası önceki linuxa ait disk bölümü hiç algılanmadıysa grub boot menüsü görüntülendiğinde "e"ye basılarak boot menüsünü düzenleme moduna veya "c"ye basılarak etkileşimli grub kabuğuna (interactive shell) girilebilir. Örnek bir kurtarma şöyle olabilir:

Disklerin ve bölümlerin listelenmesi

grub> ls
(hd0) (hd0,msdos5) (hd0,msdos1)
Disk numaralama 0'dan başlar. Ama disk bölümü numaralama 1'den başlar. msdos5 yazdığı aslında ext4 bir dosya sistemi.

Bir bölümün içeriğinin listelenmesi

grub> ls (hd0,5)/
lost+found etc/ media/ bin/ boot/ dev/ ...
hatta boot klasörünün içeriğini görüntülemek
grub> ls (hd0,5)/boot/
vmlinux-4.18...
initrd.img-4.18...
Birden fazla linux kurulu olan bir diskte işlem yaparken hangi kurulumda olduğumuzdan emin olmak için birçok kurulumda var olan /etc/issue dosyasını kullanabiliriz:
grub> cat (hd0,5)/etc/issue
Ubuntu 18.10  \n \l
Emin olduktan sonra /boot/grub/grub.cfg dosyasının konumunu prefix ile belirleyebiliriz:
grub>  set prefix=(hd0,5)/boot/grub
Son olarak söz konusu linux kurulumu için kök disk bölümününü (root partition) belirleyebiliriz:
grub> set root=(hd0,5)
Bundan sonra normal modülünü yükleyerek sistemi tekrar başlatabiliriz.
grub> insmod normal
grub> normal

Son sözler

Grub menüsü gözüküyor mu?
  • Gözükmüyorsa grub2-install ile tekrar yazmalı.
  • Gözüküyor ama seçim yaptıktan sonra boot etmiyorsa grub.cfg ile ilgili sorun olabilir; grub2-mkconfig kullanılmalı.
Grub menüsünü hangi linux kurulumu yazmış olabilir? Grub menüsünde en üstte listelenen linux dağıtımı. Peki bu arkadaş hangi disk bölümündedir? Grub menüsünde o öğe seçiliyken e'ye basarak edit moduna girip öğrenebiliriz.

7.03.2019

Manjaro, Fedora e EFI disk bölümü

Bir bilgisayara önce Manjaro kurdum. Son zamanların favori dağıtımı. Benim de hoşuma gitti. Ama yetmedi, yanına bir de Fedora kurmak istedim. Manjaro'yu kurmadan önce live CD ortamında fdisk ile diski bölümlendirmiştim. Manjaro'yu kurdum, gayet güzel çalıştı, ama Fedora'yı kurma aşamasında sürekli aşağıdaki hatayı alıyordum.



Görüldüğü gibi Fedora, EFI bölümünün yapısından yakınıyor. Oysa Manjaro bu yapıyı kabul edip, kurumu tamamlayarak çalışmaya bile başladı. Acaba tam olarak neyi beğenmedi diye arattığımda şu reddit gönderisinde gdisk ile bölüm tipinin değiştirilmesinden bahsediyordu. Benim durumumda gdisk ile disk tablosuna baktığımda aşağıdaki gibi bir sonuçla karşılaştım:


Görüldüğü gibi Manjaro sda1 bölümünün tipi 0700 (Microsoft Basic Data, ki bu da FAT32 aslında) olarak görüyor.

Hemen

$ sudo gdisk /dev/sda

ile gdisk'i başlatıp t komutuyla bölüm tipini ef00 olarak seçtim, Fedora bundan sonra sorunsuz ilerledi.


Ama sanıyorum başka bir hatadan /boot/efi bölümünü bozduğumdan (galiba kuruluşta sda1'i biçimlendirdim) Fedora açılmasına rağmen Manjaro açılmadı.

Bunu da kısmen şuradaki adımları izleyerek düzelttim. Boot menümde Manjaro'nun fallback initramfs'i vardı ve onunla açıldı. Açıldıktan sonra da şu komut ile EFI kipindeki GRUB'ı tekrar yazdım:

$ sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=manjaro --recheck
$ sudo update-grub

Güncelleme 2019-03-11: Bundan sonra Fedora ile giriş yapmak istediğimde her şifre yazışımdan sonra tekrar giriş ekranına dönmeye başladı. Şurada sorunun sebebini anlatan arkadaş, bu işin sorumlusunun SELinux olduğunu, başka bir linux ile dual boot yapılan ve muhtemelen ortak bir /home disk bölümü kullanan Fedora'nın bu hataya yol açabileceğini yazmış, ki bu da tam olarak benim durumum. Çözüm olarak giriş (login) ekranındayken Ctrl+F2 ile grafik arayüzden çıkıp konsola giriş yapıp denemek için geçici olarak SELinux'u devre dışı bırakmayı

$ sudo setenforce 0

ardından eğer giriş yapmayı başarabildiysek tekrar GUI oturumumuzu sonlandırarak tekrar Ctrl+F2 ile konsola giriş yaparak önce SELinux'u tekrar etkinleştirmeyi

$ sudo setenforce 1

daha sonra da /home için varsayılan SELinux ayarlarına dönmeyi önermiş:

$ sudo restorecon -R /home

Bunun normal şartlar altında bir veri kaybına yol açmaması gerekiyor. Bu adımların sonucunda ben istediğim sonuca ulaştım.

---
https://bugzilla.redhat.com/show_bug.cgi?id=746895

12.02.2018

Fedora hakkında daha fazla

Bir zamanlar yaptığım Ubuntu Admin gibi Fedora için de sık kullanılan işlemlerin bir listesini yapmak istedim. Zamanla buraya daha fazla şey eklemem muhtemel.

Grub
En sık ihtiyaç duyduğum grub2 güncellemesi ile ilgili komutlar. Diyelim ki Fedora, sda3'te kurulu. Bu disk bölümünün başına grub2'yi yazmak için kullanılabilecek komut:
grub2-install /dev/sda3
Grub2 yapılandırmasını tekrar yapmak için (menüyü tekrar oluşturmak)
grub2-mkconfig -o /boot/grub2/grub.cfg
UEFI bir sistemde ise bu komut şöyle olmalı:
grub2-mkconfig -o /boot/efi/EFI/grub.cfg
Grub2'nin varsayılan ayarları /etc/default/grub dosyasındadır, menünün görüntülenme süresi, seçim yapılmaz ise varsayılan olarak menüdeki hangi öğe ile devam edileceği gibi. Örnek bir /etc/default/grub dosyası:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rhgb quiet"
GRUB_DISABLE_RECOVERY="true"


Görüldüğü gibi GRUB_DEFAULT=saved diye bir durum var. Saved hangisi diye düşünmeden şu komut ile bakabiliriz:
grub2-editenv list
ya da /boot/grub2/grubenv dosyası (UEFI sistemlerde /boot/efi/EFI/fedora/grubenv) dosyasının içinde yazar.

Özelleştirilebilen betikler de /etc/grub.d klasöründe bulunur.

Özellikle birden fazla işletim sisteminin yüklendiği durumlarda GRUB ile ilgili sorunlar yaşanabilir. Eğer açılışta grub menüsü görünmüyorsa
grub2-instsall /dev/sda
ile diskin başına grub stage 1'i yazmak gerekir. Eğer menü görünüyor, ama sonrasında bir hata alınıyorsa
grub2-mkconfig -o /boot/grub2/grub.cfg
ile grub yapılandırılması tekrar oluşturulmalıdır. Eğer o hata ekranında kaldıysak e'ye basarak düzenleme moduna girebilir, ya da c'ye basarak etkileşimli kabuğa (interactive shell) girmek olabilir. Etkileşimli kabuğa girdikten sonra ls ile mevcut disk bölümlerini görmek isteyebiliriz. Burada dikkat edilecek nokta, disklerin 0'dan, bölümlerin 1'den başlayarak numaralandırılmış olması. Hedef disk bölümünü seçtikten sonra
set root=(hd0,msdos3)
komutuyla /dev/sda3'e root olarak belirleyebiliriz. Bundan sonra da kernel ve initrd'yi belirlemek gerek. Bunun için de (yine sda3'de olduğunu varsaydığımız vmlinuz ve initrd için)
linux /boot/4.15.9-300.fc27.x86_64 root=/dev/sda3 rhgb quiet
initrd /boot/
Son aşama olarak sistemi tekrar açma komutu vermek gerek.
boot
Sistem açıldıktan sonra da grub'ı tekrar yazmak için
grub2-install /dev/sda
yazmayı unutmamak gerek [1], [2].

Bazen de bir CD/USB ya da diskteki ikincil durumda (grub açısından) bulunan linux kurulumundan grub'ı onarmak gerekebilir. Bunun için şu adımlar izlenebilir:

- Önce hedef disk bölümünü mount etmek gerek.
mount /dev/sda3 /mnt
Eğer /boot ayrı bir bölüm ise bunu da
mount /dev/sdaX /mnt/boot
ile bağlamak gerek.

- Ardından canlı sistemin (şu anda açık olan) /dev klasörü ile hedef sistemin /dev klasörü arasında bir bağ kurmak gerek
mount --bind /dev /mnt/dev
- Root'u geçici olarak /mnt olarak değiştirelim
chroot /mnt
- Şu anda grub'ı tekrar yazabiliriz
grub2-install /dev/sda
- İşimiz bittikten sonra önce chroot'tan çıkmak, sonra da mount edilen klasörleri unmount etmek gerek:
exit
umount /mnt/dev
umount /mnt/boot (ayrıca mount edildiyse)
umount /mnt
Repoları Yönetmek
Ubuntu'ya kıyasla varsayılan depolarında daha az yazılım var, Fedora'nın. Bunun sebebi de özgür yazılıma olan daha sıkı bağlılığı. Eğer özgür olmayan yazılımları da kurmak isterseniz Fedora'da bazı ek repository'leri eklemek gerek. Repoların bilgileri /etc/yum.repos.d klasöründe tutulur. dnf ile de bir depo listesi çekilebilir:
dnf repolist
kullanılabilir.Eğer repository'lerden birini geçici olarak kapatmak (kalıcı olarak silmek değil) istersek
dnf config-manager --set-disabled <repo-id>
kullanılabilir. repo-id, dnf repolist komutu ile elde edilen listenin ilk sütunundaki veri alanıdır. Tekrar etkinleştirmek için ise
dnf config-manager --set-enabled <repo-id>
kullanılabilir. Repository'yi tamamen silmek için ise /etc/yum.repos.d klasöründeki ilgili kaydı silmek gerekir.

Dnf-Makecache
Bilgisayarım her açıldığında software center, komut satırından yazdığım dnf check-update komutundan bağımsız olarak arka planda güncellemeleri kontrol ediyordu. Ben de güncellemeleri kendim kontrol takip ettiğimden, software center'ın (dnf-makecache adında bir hizmet) ayrıca takip etmesine gerek olmadığını düşünüp bu hizmeti kapattım:
sudo systemctl stop dnf-makecache.timer
sudo systemctl disable dnf-makecache.timer
Firewall
Güvenlik durumunun durumunu şu şekilde sorgulayabiliriz
$ firewall-cmd --state
running
Yapılandırma ile ilgili daha fazla bilgi için şu veya bu sayfalar güzel.

Çalışan uygulamanın sürecini bulmak
Çalışan bir uygulamaya (pencere) ait sürecin hangisi olduğunu bulmak için komut satırından önce:
$ xprop _NET_WM_PID
komutunu vererek seçiciyi başlatmak lazım. Seçici başlayınca farenin oku bir artı işaretine dönüşecek. Daha sonra tıkladığımız pencereye ait sürecin ID'si görüntülenecek. Örneğin XFCE masaüstünde boş masaüstüne tıkladığımda
_NET_WM_PID(CARDINAL) = 1384
çıktı. Sonra
$ ps -p 1384 -o pid,command

kullanarak 1384 pid'li sürecin hangisi olduğunu bulabilirim.

Alternatif olarak bir de şu sayfada önerildiği gibi xdotool kullanılabilir:

$ xdotool selectwindow getwindowpid

Bu da, tıklanan pencerenin pid'sin verecek. Bunlar X window manager için geçerli. Wayland'de xdotool yerine wtype kullanılabilir, denemedim. Ayrıca şu sayfada lg (looking glass) önerilmiş.

Açılış performans görüntüleme
Her bilgisayar yavaştır. Herkes bilgisayarını hızlandırmak ister. Açılışta bilgisayarın nerelerde zaman harcadığını incelemek için yapılabilecek:

$ systemd-analyze
Startup finished in 1.053s (kernel) + 4.058s (initrd) + 34.774s (userspace) = 39.885s
graphical.target reached after 28.225s in userspace
Buradan görüldüğü üzre bilgisayarımın kullanıma hazır hale gelmesi 39,885 saniye sürmüş. Bunun 34 küsur saniyesi benim kullanıcı seviyesindeki işlemlerim için harcanmış. Biraz daha fazla bilgi isteyip süreçler/hizmetlerden birini "suçlamak" için
$ systemd-analyze blame
Bu şekilde en çok zaman nereye harcanmış şu şekilde bir liste çıkar:
         12.888s firewalld.service
         11.540s accounts-daemon.service
          7.707s rtkit-daemon.service
          7.439s avahi-daemon.service
          7.410s systemd-logind.service
          7.397s abrtd.service
          7.380s livesys-late.service
          7.378s initial-setup.service
          7.156s NetworkManager-wait-online.service
          6.907s lvm2-monitor.service
Bunların azaltılması ve açılışın daha hızlı hale getirilmesi tamamen başka bir konu. Bu gibi konularda güzel bir kaynak olarak arch-wiki sayfası görülebilir. Ama genel olarak eğer kullanılmıyorsa şu hizmetler önce durdurulup sonra devre dışı bırakılabilir:

bluetooth.service (bluetooth cihazlara bağlantı)
ModemManager.service (bir modem üzerinden bağlantı oluşturma)
abrtd.service (hata bildirme hizmeti)
cupsd.service (yazıcı ve çıktı alma işleri)
accounts-daemon.service (kullanıcı hesabı işleri, bkz [3])
avahi-daemon.service (ağ sıfır yapılandırma hizmeti, bkz [3])

Örnek hizmet durdurma:
sudo systemctl stop bluetooth.service
Örnek hizmet devre dışı bırakma
sudo systemctl disable bluetooth.service

Bazı hizmetler başka hizmetler tarafından tekrar başlatılabilir. Hiçbir şekilde başlatılmasını istemiyorsak mask edilebilir:
sudo systemctl mask bluetooth.service
Ayrıca açılış sürecini grafiksel olarak değerlendirebilmek için [4]
systemd-analyse plot > plot.svg
Systemctl hakkında cheatsheat için [5] güzel bir kaynak.

Disk işleri
Önce sistemde hangi diskler var bulmak için:
$ sudo fdisk -l
Disk /dev/sda: 40 GiB, 42949672960 bayt, 83886080 sektör
Birimler: sektör'i 1 * 512 = 512 baytın
Sektör boyutu (montıksal/fiziksel): 512 bayt / 512 bayt
G/Ç boyutu (en düşük/en uygun): 512 bayt / 512 bayt
Disketikeri tipi: dos
Disk belirleyicisi: 0xa039b385

Aygıt      Açılış Başlangıç      Son   Sektör Boyut ld Türü
/dev/sda1  *           2048  2099199  2097152    1G 83 Linux
/dev/sda2           2099200 83886079 81786880   39G 8e Linux LVM

Disk /dev/mapper/fedora_localhost--live-root: 37 GiB, 39669727232 bayt, 77479936 sektör
Birimler: sektör'i 1 * 512 = 512 baytın
Sektör boyutu (montıksal/fiziksel): 512 bayt / 512 bayt
G/Ç boyutu (en düşük/en uygun): 512 bayt / 512 bayt

Disk /dev/mapper/fedora_localhost--live-swap: 2,1 GiB, 2202009600 bayt, 4300800 sektörBirimler: sektör'i 1 * 512 = 512 baytın
Sektör boyutu (montıksal/fiziksel): 512 bayt / 512 bayt
G/Ç boyutu (en düşük/en uygun): 512 bayt / 512 bayt
Kırmızı ile vurgulanan satırda görüleceği gibi sistemde sadece 40 GB'lık bir disk var (sda). Bunu ayrıca şu komutla da doğrulayabiliriz:
$ ll /dev/sd?
brw-rw----. 1 root disk 8, 0 Eki 31 17:08 /dev/sda
Bu diskin içindeki bölümler de mavi ile vurgulanan satırlarda görülen sda1 (1 GB) ve sda2 (39 GB). sda2'nin türünün LVM olduğuna dikkat! Kök (root) ve takas (swap) bölümleri bu ikisinden birisi de değil. sda2'nin içinde iki ayrı bölüm daha var; root (37 GiB) ve swap (2,1 GiB). Bu bilgiyi lsblk komutu ile de edinebiliriz:
$ lsblk
NAME                            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                               8:0    0   40G  0 disk
├─sda1                            8:1    0    1G  0 part /boot
└─sda2                            8:2    0   39G  0 part
  ├─fedora_localhost--live-root 253:0    0   37G  0 lvm  /
  └─fedora_localhost--live-swap 253:1    0  2,1G  0 lvm  [SWAP]
sr0                              11:0    1  1,3G  0 rom 
Biraz daha şekilli bir liste görebilmek için
$ lsblk -o NAME,KNAME,TYPE,SIZE,MOUNTPOINT
NAME                            KNAME TYPE  SIZE MOUNTPOINT
sda                             sda   disk   40G
├─sda1                          sda1  part    1G /boot
└─sda2                          sda2  part   39G
  ├─fedora_localhost--live-root dm-0  lvm    37G /
  └─fedora_localhost--live-swap dm-1  lvm   2,1G [SWAP]
sr0                             sr0   rom   1,3G
/dev/mapper klasörü altındaki dm-0 ve dm-1'i merak ettim:
$ ll /dev/mapper/
lrwxrwxrwx. 1 root root       7 Eki 31 10:17 fedora_localhost--live-root -> ../dm-0
lrwxrwxrwx. 1 root root       7 Eki 31 10:17 fedora_localhost--live-swap -> ../dm-1
Görüldüğü gibi fedora_localhost--live-root aslında /dev/dm-0'a kısayol, fedora_localhost--live-swap da /dev/dm-1'e kısayol.

Ayrıca dmsetup ile listeleme ile:
$ sudo dmsetup ls
fedora_localhost--live-swap    (253:1)
fedora_localhost--live-root    (253:0)
Bu bölümlerin herhangi biri hakkında daha fazla bilgiyi de dmsetup ile edinebiliriz:
$ sudo dmsetup info /dev/dm-1
Name:              fedora_localhost--live-swap
State:             ACTIVE
Read Ahead:        256
Tables present:    LIVE
Open count:        2
Event number:      0
Major, minor:      253, 1
Number of targets: 1
UUID: LVM-Bwl8Nw83iw3OjVwS9MVJZxXDm7WadBd1g5peulxJvJ3oSI9gbbpz1usck3vVNhKD
Aynı bilgiyi dmsetup info fedora_localhost--live-swap diyerek de alabilirdik.

Disk bilgileri /etc/fstab içinde bu şekilde geçiyor.

Fedora Administrator's Guide bir de partx komutunu vermiş:
$ sudo partx /dev/sda
NR   START      END  SECTORS SIZE NAME UUID
 1    2048  2099199  2097152   1G      a039b385-01
 2 2099200 83886079 81786880  39G      a039b385-02
Şu anda bağlanmış (mount) dosya sistemlerinin listesini almak için
$ findmnt
komutu kullanılabilir. Uzun bir ağaç verecek. Düz liste alabilmek için -l anahtarı kullanılabilir.

Disk bölümleri ne kadar kullanımda görmek için (-x ile tmpfs'i hariç tutarak):
$ df -h -x tmpfs
Dosyasistemi                              Boy  Dolu   Boş Kull% Bağlanılan yer
devtmpfs                                 972M     0  972M    0% /dev
/dev/mapper/fedora_localhost--live-root   37G  4,5G   30G   13% /
/dev/sda1                                976M  218M  692M   24% /boot


---

[1] https://fedoraproject.org/wiki/GRUB_2
[2] https://docs-old.fedoraproject.org/en-US/Fedora/26/html/System_Administrators_Guide/sec-Managing_DNF_Repositories.html
[3] https://www.linux.com/learn/cleaning-your-linux-startup-process
[4] http://0pointer.de/public/systemd-ebook-psankar.pdf
[5] https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet 

11.02.2018

Diskteki önyükleyiciyi bulmak

Bir diskin başında veya bir partition'ın başında önyükleyici var mı, yok mu nasıl anlarız? [1] ve [2]'de basit iki yöntem verilmiş.

Birincisinde dd komutunu kullanarak diskin ilk 512 byte'lık alanı okunuyor. Daha sonra bu alanın içeriği strings komutuna yönlendiriliyor:
# dd bs=512 count=1 if=/dev/sda 2>/dev/null | strings
Benim diskimin başında grub2 yüklüydü, şöyle bir çıktı verdi:

ZRr=
`|f   
\|f1
GRUB
Geom
Hard Disk
Read
 Error


Grub yüklü olmayan disk bölümlerinde hiçbir sonuç vermedi.

İkinci yöntemde ise file komutu ile diskin (veya bölümün) başı okunuyor. Benim bilgisayarımda şu çıktıyı verdi:

# file -s /dev/sda
/dev/sda: DOS/MBR boot sector
Bunların hiçbiri diskin (veya bölümün) başında çalışan bir önyükleyici bulunduğunun kanıtı olamaz. Yalnızca başarılı veya başarısız bir yükleme girişimi olmuş mu sorusunun yanıtı olabilir.
---
[1] https://serverfault.com/questions/61400/how-do-i-tell-if-grub-is-installed-on-a-device#289154
[2] https://superuser.com/questions/466086/how-can-i-discover-which-bootloader-is-installed-where

19.03.2010

Grub2 menüsünde değişiklik yapmak

Microsoft'a boot.ini'yi kaldırıp yerine bcd'yi koydu diye kızarken linux dünyasında da grub'dan grub2'ye geçiş oldu. Artık Linux'ta da boot menümüzü basit bir metin dosyasını düzenleyerek değiştiremeyeceğiz.

Şu anda Ubuntu kurulumunda v1.97beta4 aşamasında olan grub2 projesi, önceki sürüme göre bazı yenilikler içeriyor. Ayrıntılar için bu linke gözatabilirsiniz. Pratik olarak farklarına gelirsek, artık /boot/grub/menu.lst dosyası yok. Bu dosyanın artık elle değiştirilmemesi öneriliyor. Onun yerine şu tavsiye ediliyor:
Eski menu.lst'nin bazı bölümlerden oluştuğunu düşünelim. Bu bölümlerin her birini ayrı ayrı metin dosyalarında düzenleyeceğiz. Sonra da bunları derleyip /boot/grub/grub.cfg dosyası oluşturacağız. Ama bu dosyayı update-grub komutu bizim yerimize oluşturacak. update-grub'ı çalıştırmak için root yetkileri gerek. Ama root ile bile olsa grub.cfg'yi elle değiştirmememiz önemli. menu.lst'nin bazı bölümlerden oluştuğunu düşünelim demiştim. Bu bölümler /etc/grub.d altında şöyle sıralanmış:
  • 00_header
  • 05_debian_theme
  • 10_linux
  • 20_memtest86+
  • 30_os-prober
  • 40_custom
00_header ve 05_debian_theme'i geçip 10_linux'a gelelim. Bu kısım, mevcut linux kurulumuna ait açılış menüsü. Örneğin kernel 2.6.24 sürüm çekirdek ile kurup, ardından 2.6.26 güncellemesi yaptıktan sonra bu iki çekirdek sürümü de ekranda bu satır aracılığıyla gözükecek.
Bunun altındaki 20_memtest86+ satırı da grub menüsünde görünecek bellek testi satırı. Bunu görüntülemek istemiyorsanız bu dosyanın execute yetkilerini almak yeterli. Yani komut satırından
sudo chmod -x 20_memtest86+
ile bunu yapabiliriz. 30_os-prober ise, grub2'nin bilgisayarda kurulu diğer işletim sistemlerinden haberdar olmak için yaptığı taramanın sonucunda bulduğu bilgileri menüye eklemesi için. Bilgisyarınızda bir Windows kurulumu varsa bu kuruluma ait bir chainloader komutu muhtemelen grub2 menünüzde gözükecektir. Eğer gözükmesini istemiyorsanız aynı şekilde bu dosyanın da execute yetkilerini kaldırabilirsiniz. Ama örneğin Windows kurulumunun başlığını (menüde gözüken adını) değitşrimek istiyorsanız bunu 30_os-prober dosyasını düzenleyerek yapamazsınız. Çünkü bu dosyanın içi boş. Menüde gözüken Windows girdisi, update-grub'ı çalıştırdığınız anda oluşturulacak ve doğrudan /boot/grub/grub.cfg dosyasına yazılacak. Bu işi yapmak için 40_custom'a giriş yapmanız gerek.
Eğer os-prober'ın bulamadığı girişleriniz varsa, veya os-prober'ın bulduklarını beğenmiyor ve kendi girişlerinizi yapmak istiyorsanız bunları yazacağınız yer 40_custom dosyası. Biraz önceki örneğimize devam edelim. Mesela grub2 menüsündeki Windows girdisine ait başlığı beğenmedik ve Windows XP SP2 yazmasını istiyoruz. Bu durumda öncelikle 30_os-prober'ın execute yetkilerini kaldırmak, ardından da şuna benzer satırları 40_custom dosyasının sonuna eklemek gerek.
menuentry "Windows XP SP2" {
set root=(hd0,2)
chainloader +1
}
Dosyayı kaydedip kapattıktan sonra komut satırından
sudo update-grub
komutunu vererek /boot/grub/grub.cfg dosyasını güncellemek gerek.

Örnek eski grub (grub legacy deniyor) ile yeni grub (grub2) menüsündeki öğeler arasındaki farkları aşağıdaki resim aracılığıyla gösterebiliriz sanırıım.


Bir nokta da grub2 menüsünün ayarları ile ilgili. Örneğin Ubuntu menüsünde gözüken recovery mode girdilerini görmek istemiyorsanız, bunu /etc/default/grub dosyasını root yekileriyle açıp en sondaki recovery ile ilgili satırın başındaki # karakterini silip şu şekilde bırakarak

GRUB_DISABLE_LINUX_RECOVERY=true

yapabilirsiniz. Veya menünün gösterilme zamanını (default 0)
GRUB_TIMEOUT=10
gibi bir satırla, veya menüdeki varsayılan girdiyi değiştirmeyi de
GRUB_DEFAULT=3
gibi bir satırla yapabilirsiniz.

17.03.2010

Dual boot Ubuntu ve Pardus (grub2 sorunu)

Ubuntu 9.10 sayesinde grub2 ile tanıştım. Ama birkaç kez denememe rağmen kurulum sonrasında Pardus'un açılmadığını gördüm. Önce vga mod parametresine takıldım. Şöyle bir hata mesajı ile boot sonlanıyordu:

vga=0x314 is deprecated. Use set gfxpayload=800x600x16 before linux command instead.
error: file not found


Press any key to continue...

Çaresiz grub2 ekranında "e" tuşuna basarak edit moduna girdim. Bahsettiği gibi gibi vga=0x314'ü silip, bir üst satıra yeni bir giriş yaparak set gfxpayload=800x600x16 yazdım. "Ctrl+x" ile tekrar boot etmeyi denediğimde ise bazı kodlarla birlikte

error: file not found

Press any key to continue...

hatası ile karşılaştım. Daha önceki bir single boot bir Pardus kurulumunun Grub'ı ile Ubuntu'nun Grub2'sini karşılaştırdığımda Grub2'de initrd'nin önünde gereksiz bir (hd0,3) bölümünün olduğunu gördüm. Bunu kaldırdığımda Pardus açılmaya karar verdi. Ama bu sefer de splash=silent konusu var. Pardus artık eskisi gibi şu şekilde değil
bu şekilde
açılıyor. Ne yaptıysam eski silent splash ekranıma dönemedim.

21.10.2008

Alternatif bir önyükleyici

Windows ile Linux'u aynı makineye kuranlar, başlangıçta hangi işletim sistemini kullanarak bilgisayarı açmak istediklerini GRUB kullanarak seçerler. Eskiden kullanılan LILO'nun yerini GRUB almaya başladı.

Windows önyükleyicisini kullanarak hem Windows'u hem Linux'u açmanın mümkün olduğunu öğrendiğimde şaşırmıştım. Bunu yapabilmek için Linux'un GRUB'ı diskin başına değil de, kurulu olduğu bölümünün başına yazması, ve bu kodun linux dd komut satırı programıyla bir dosyaya aktarılarak Windows System Partition'ına kopyalanması gerekir. Yapmak isteyenler için adım adım anlatayım.
  1. Linux kurulumu sırasında GRUB'ı diskin başına yazmayın; onun yerine kurulan bölümün başına yazın. Örnek olarak sda1'de Windows yüklü olsun. Siz de sda2'ye Linux'u kuruyorsunuz. GRUB'ı da /dev/sda2'ye yazın. Daha sonra sistemi linux CD'si ile açtıktan sonra (diske kurulan linux henüz açılabilir olmadığından) dd komutunu kullanarak GRUB'ı bir dosyaya yazın:
    $ dd if=/dev/sda2 of=linux.bin bs=512 count=1
  2. Bu dosyayı bir şekilde sda1'e atmak gerek. Disket, USB disk veya doğrudan Windows bölümünü linux'a mount ederek atabilirsiniz.
  3. Sonra Windows'a geçip (Windows 2000 veya Windows XP - Vista için adımlar bu yazının en sonunda) C:\Boot.ini dosyasını Notepad ile açın. Muhtemel içerik şu şekilde olmalı
    [boot loader]
    timeout=30
    default=multi(0)disk(0)rdisk(0)partition(3)\WINDOWS&
    [operating systems]
    multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
  4. Bu dosyanın sonuna gelerek aşağıdaki satırı ekleyin
    C:\linux.bin="Linux"
Eğer kullandığınız Windows sürümü XP değil de Vista ise yapılması gerekenler biraz daha farklı. Vista ile beraber artık boot.ini tarih oldu. Bunun yerine Boot Configuration Data (BCD) var. Tüm Microsoft ekibine de bize sadece komut satırı araçlarını sağladığı için her seferinde içten teşekkürlerimi (!) sunuyorum.

Neyse, konumuzda dönelim. Yukarıdaki adımları linux.bin dosyasını yaratana kadar tamamladıktan sonra şu komutları sırasıyla verin:

bcdedit /create /d "GRUB" /application BOOTSECTOR
Bu komut, Vista boot menüsünde GRUB isminde yeni bir girdi yaratır. Bunun yerine Linux, Ubuntu vs. de yazabilirsiniz. Bu komutun ardından { ve } parantezleri içinde sayılar verilecek. Parantezler de dahil olacak şekilde bu sayıyı kopyalayın. Sonraki adımlarda gerekecek. Bu sayıya şimdilik {LinuxID} diyelim. Sonkaki komut

bcdedit /set {LinuxID} device boot
Bu komut ise, linux.bin dosyasının boot partition'da olduğunu söylüyor (elbette bu aşamada bu dosyanın boot partition'a atılmış olması gerek. Alternatif olarak boot yerine partition=C: yazılarak bu dosyanın tutuluğu bölüm de belirtilebilir). Daha sonra

bcdedit /set {LinuxID} PATH \linux.bin
Komutu ile boot partition'daki linux.bin dosyasının adını veriyoruz. Ve bundan sonra da

bcdedit /displayorder {LinuxID} /addlast
komutu ile linux'u boot menüsünde son sıraya yerleştiriyoruz. Bundan sonra eğer menünün bekleme süresinin (varsayılan değer 30 sn) çok uzun olduğunu düşünüyorsanız bunu aşağıdaki komutla 10 sn'ye düşürebilirsiniz.

bcdedit /timeout 10
Bu şekilde Windows'un açılış menüsüne bir de Linux eklemiş olduk. Bu menü aracılığıyla bilgisayarınızı Windows veya Linux işletim sisteminden açılmasını sağyalabilirsiniz.