Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Abychom uměli správně zmigrovat systém, tak potřebujeme vědět alespoň nějakou minimální teorii o tom, jak funguje bootování v systému. Budou nás zajímat jen ty nejhlavnější věci. Neztrácejme čas a hrr do toho.
Po zapnutí PC BIOS provede základní detekci a případně diagnostku hardware. V BIOSu máme nastaveno, z jakého zařízení se má uskutečnit bootování.
BIOS se postará o zavedení boot sektoru, ve kterém je umístěn boot manager, jeho část, nebo jen odkaz na nějakou část disku, kde je zbytek boot manageru s velkou spoustou voleb a různých vychytávek. Mezi nejpoužívanější a nejznámější boot managery patři stařičké lilo, novější GRUB (nyní GRUB legacy), nejnovější GRUB 2 a minimalistický syslinux. Syslinux se spíše zaměřuje na bootování z různých medií, např. i flash disků. Lilo je už hodně staré, ale občas se ještě objeví nějaká aktualizace. Nejpoužívanější je v současné době asi GRUB (neboli grub1, či GRUB 0.9), proto se konfiguračně zaměříme na něj.
GRUB funguje tak, že je rozdělen do několika částí (stages):
stage1:
- jedná se o spouštěcí část, jenž je umístěna v mbr a stará se o zavedení stage2, což je kód (soubory) umístěný v /boot/grub/
stage1.5:
- jelikož stage2 se nachází na souborovém systému a stage1 je malý na to, aby se do něj vešel nějaký základní ovladač proc práci se souborovým systémem, tak se musí zavést ještě stage1.5, ten je umístěn mezi začátkem disku LBA0(MBR) a začátkem první partition LBA63.
stage2:
- v této fázi se už načítá vlastní kod grub umístěný v /boot/grub včetně konfiguračního souboru /boot/grub/menu.lst, s daty se již díky stage1.5 pracuje na úrovni souborového systému, tudíž nezáleží na tom, na kterých sektorech jsou přesně uloženy a můžeme je upravovat, aniž bychom potřebovali volat nějaký update jako třeba u lila.
Toto platí pro MBR, kdo používá GPT, tak tam LBA0 leží ladem a LBA1-33 obsahuje tabulku GPT. V takovém případě tedy není nikde místo pro stage1.5, který by umožnil práci s file systémem.
Můžeme si vytvořit „BIOS Boot partition„, která by sloužila pro uložení stage1.5, tato partition by měla mít flag “bios_grub".
Dobrý popis je třeba v článku u kolegů na Rootu: Na disky větší než 2 TB s GPT
V konfiguračním souboru grubu je definováno, z jaké partition se má načítat jádro, kde je root (/) oddíl apod.
Dříve se SATA disky označovaly /dev/sdx (sda,sdb apod.) a PATA disky /dev/hdx (hda, hdb apod.). Od nějaké verze jádra 2.6.2x se i pro PATA disky začal používat libata, takže se nyní všechny (PATA, SATA, USB) disky označují /dev/sdx. Od toho se pak odvíjí pojmenování a očíslování partition jako /dev/sda1, /dev/sda2, /dev/sdb1 apod. V konfiguračních souborech se pak uváděly cesty k těmto diskům/partition.
Část konfiguračního souboru grub, která definuje jednu položku v menu, může vypadat takto:
# (0) Arch GNU/Linux # komentář v grubu title Arch GNU/Linux # jméno položky v grubu root (hd0,0) # na jakém disku a partition se nachází kernel apod. kernel /boot/vmlinuz26 root=/dev/sda1 ro vga=795 # kernel, definice root oddílu, připojin jen pro čtení, rozlišení obrazovky initrd /boot/kernel26.img # initrd
root (hd0,0)
: říká, na jakém disku a na jaké partiton se nachází jádro a příslušné položky nutné pro boot. Označení disků není úplně tak přesně podle pořadí. „hd0“ je vždy disk, ze kterého se provádí boot (načítá se grub). Disk tedy můžeme na řadiči přehazovat jak je libo, ale pokud vždy v biosu zvolíme boot ze správného disku, tak se vždy dobře načte.
root=/dev/sda1
: je zase definice root oddílu.
/boot/kernel26.img
: v dnešní době jsou moduly/ovladače řadičů a filesystemů apod. obsaženy ve většině distribucí v initrd. Nejsou tedy zakompilovány přímo v jádře. Aby systém mohl nabootovat, tak se musí načíst initrd, který načte do paměti veškeré potřebné moduly a jádro pak uvidí disky, oddíly, rozpozná systém souborů atd. Do initrd se jen necpou moduly, ale v dnešní době i třeba takový udev. Součástí initrd jsou i skripty a další různé pomocné drobnosti, které se starají o sofistikovanější načítání.
Potom, co si to GRUB vyjasní, si to ještě musí vyjasnit /etc/fstab, který se stará o definici připojení jednotlivých partition.
# # /etc/fstab: static file system information # # <file system> <dir> <type> <options> <dump> <pass> devpts /dev/pts devpts defaults 0 0 shm /dev/shm tmpfs nodev,nosuid 0 0 /dev/sda1 / ext3 defaults 0 1 /dev/sda2 /home reiserfs defaults 0 0 /dev/sda3 swap swap defaults 0 0
Identifikovat disk/partition takovýmto označením není příliš šťastné. Toto označení je dynamické a závisí na tom, jak jsou disky za sebou zapojeny a na jakém řadiči se nacházejí.
Tento problém částečně řeší LABEL, což je popisek u filesystému. Podle druhu filesystému můžeme přiřazovat zcela libovolné popisky. Dost často se LABEL pojmenovává stejně jako přípojný bod (ale název si můžete zvolit jakýkoliv). Tzn., že v našem případě se sda1 přiřadí popiska root oddílu /, sda2 popiska home /home a sda3 popiska swap:
# ext2/3: e2label /dev/sda1 / # reiserfs: reiserfstune --label /home /dev/sda2 # swap: mkswap -L swap /dev/sda3
Zápis v GRUBu by pak vypadal takto:
# (0) Arch GNU/Linux title Arch GNU/Linux root (hd0,0) kernel /boot/vmlinuz26 root=LABEL=/ ro vga=795 initrd /boot/kernel26.img
A následný zápis ve fstab takto:
# # /etc/fstab: static file system information # # <file system> <dir> <type> <options> <dump> <pass> devpts /dev/pts devpts defaults 0 0 shm /dev/shm tmpfs nodev,nosuid 0 0 LABEL=/ / ext3 defaults 0 1 LABEL=/home /home reiserfs defaults 0 0 LABEL=swap swap swap defaults 0 0
Manipulace s LABEL je jednoduchá, názvy zapamatovatelné, ale jak jistě nemálo lidí napadlo, i toto není zcela ideální řešení. Můžeme přenést disk do jiného pc, kde bude další disk s některými shodnými popisky a začínají problémy. Z těchto důvodů je dobré, nevymýšlet obecné názvy, ale nějaké vlastní, unikátní. V příkladu jsem tedy uvedl ty nejhorší možné popisky, jaké jsem jen mohl .
Dalším řešením, jak pracovat s oddíly jednotlivých disků, je UUID (Universally Unique Identifier). UUID je náhodně generované číslo, které je přiřazeno k souborovému systému a zprostředkovaně i k oddílu. UUID lze vypsat pomocí příkazu „blkid“, který bývá součástí balíčku „util-linux“ nebo „e2fsprogs“.
Kernel UUID nerozumí (stejně jako LABELu), tudíž skripty v initrd se postarají o to, aby se UUID převedlo na správný název disku, které již jádru šmakují. Jeho jedinečnost je garantována v rámci stroje, na kterém je generováno. Za úplňku v kooperaci letící vážky a dalších okolností lze tedy teoreticky narazit na stejný UUID na jiném systému. Není to tedy také úplně 100% unikátní pojmenování jako s LABEL.
Příklad výpisu blkid:
/dev/sda1: UUID="14640e9e-d1c3-0960-5b02-06071eecbc2b" TYPE="ext3" /dev/sda2: UUID="b35303fe-6ece-491b-8661-ded90e2f0bf8" TYPE="reiserfs" /dev/sda3: UUID="ac7b118b-f394-46bb-8a1d-458ae32b9e38" TYPE="swap"
Nastavení grubu pak bude vypadat takto:
# (0) Arch GNU/Linux title Arch GNU/Linux root (hd0,0) kernel /boot/vmlinuz26 root=UUID=14640e9e-d1c3-0960-5b02-06071eecbc2b ro vga=795 initrd /boot/kernel26.img
A následný zápis ve fstab takto:
# # /etc/fstab: static file system information # # <file system> <dir> <type> <options> <dump> <pass> devpts /dev/pts devpts defaults 0 0 shm /dev/shm tmpfs nodev,nosuid 0 0 UUID=14640e9e-d1c3-0960-5b02-06071eecbc2b / ext3 defaults 0 1 UUID=b35303fe-6ece-491b-8661-ded90e2f0bf8 /home reiserfs defaults 0 0 UUID=ac7b118b-f394-46bb-8a1d-458ae32b9e38 swap swap defaults 0 0
V těchto /dev/disk/by* adresářích lze vidět, jak všelijak lze identifikovat oddíl/systém souborů:
/dev/disk/by-id/ /dev/disk/by-label/ /dev/disk/by-path/ /dev/disk/by-uuid/
"by-label" a „by-uuid“ již známe. Poté zde máme „by-path“, což je definice dle cesty k řadiči následně velice zajímavý „by-id“, což je definice typu disku a jeho seriového čísla. Toto by se tedy dalo považovat asi za nejunikátnější řešení. Příklad výpisu ls -l /dev/disk/by-id/:
ata-ASUS_DRW-1604P -> ../../sr0 ata-WDC_WD1502FAEX-007BA0_WD-WMAY02414063 -> ../../sda ata-WDC_WD1502FAEX-007BA0_WD-WMAY02414063-part1 -> ../../sda1 ata-WDC_WD1502FAEX-007BA0_WD-WMAY02414063-part2 -> ../../sda2 ata-WDC_WD1502FAEX-007BA0_WD-WMAY02414063-part3 -> ../../sda3 ata-WDC_WD1502FAEX-007BA0_WD-WMAY02414063-part4 -> ../../sda4 ata-WDC_WD1502FAEX-007BA0_WD-WMAY02414063-part5 -> ../../sda5 ata-WDC_WD1502FAEX-007BA0_WD-WMAY0241406
Takže třeba do fstab můžeme zapsat cestu k root oddílu takto:
# <file system> <dir> <type> <options> <dump> <pass> /dev/disk/by-id/ata-WDC_WD1502FAEX-007BA0_WD-WMAY02414063-part1 / ext3 defaults 0 1
Podle mně to je jedno. Nejvíce se používají LABEL a UUID. by-id je sice pěkné, ale na druhou stranu, někdy nemá zas tak moc smysl vázat software na konkrétní hardware, protože oproti LABEL nebo UUID se by-id váže na hardware (tedy konkrétní fyzický disk).
Já osobně dávám přednost UUID. Při instalacích je již vygenerován, nemusím nic vymýšlet, nemusím složitě nic popisovat, jen udělám copy-paste do fstab a menu.lst (grubu) a hotovo.
Z dnešního povídání bychom si mohli odnést tři drobnosti:
1) lehčí schema a pochopení bootu:
Bios -> HDD-> LBA0 [grub stage1]
-> LBA1-62 [grub stage1.5]
-> grub stage2 [ /boot/grub/menu.lst = ... root(hd0,0) ... root=UUID=....]
-> kernel -> rozbalení initramfs
-> skripty, jenž převedou UUID do čitelného názvu pro kernel
-> kernel připojí fs v ro režimu -> spouští inittab
-> udev -> generování /dev/ zařízení
-> zpracování fstab + remount / do rw režimu
-> dále se zpracovávají init scripty ...
2) Dále víme, že si musíme hlídat, jaké ovladače máme v initrd
3) V poslední řadě je třeba dávat si pozor, jak máme pojmenované disky v nastavení GRUBu /boot/grub/menu.lst a v /etc/fstab
Snad to bylo pro většinu dosti srozumitelné. Příště se podíváme na různé druhy migrace systému, výhody, nevýhody a zkušenosti. Taktéž nás čekají nějaké nejnovější informace o linuxovém RAIDu (novinky poslední doby a praxe).
A aby to bylo kompletní, tak ještě odkáži na jeden pěkný blog zde na ábíčku: UEFI nabootuje kernel bez GRUBu/LILO
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
mkinitcpio -k 3.2.12-1-ARCH -g /boot/initramfs-linux.imgDíky
VERB="-q" get_uuid() { sed -ne "\%^UUID=[-0-9a-f]\+\s\+$1\s%s/UUID=\([-0-9a-f]\+\)\s.*/\\1/p" < /etc/fstab } # backup root partition backup_root() { DEST=$1 if grep -q $DEST /proc/mounts ; then : ; else echo "Backup patition $DEST not mounted" exit 1 fi rsync $VERB -x -a --inplace --delete --delete-excluded --exclude-from /rsync-exclude / "$DEST" ROOT_UUID=`get_uuid /` BACKUP_ROOT_UUID=`get_uuid "$DEST"` # replace root partition in backup fstab, comment out backup root and swap sed -e " s%^UUID=$ROOT_UUID%UUID=$BACKUP_ROOT_UUID% t s%\(UUID=$BACKUP_ROOT_UUID.*\)%\#\\1% t s%\([^\#].*\sswap\s.*\)%\#\\1% t " < "$DEST"/etc/fstab > "$DEST"/etc/fstab.edited mv "$DEST"/etc/fstab.edited "$DEST"/etc/fstab sed -e " s%$ROOT_UUID%$BACKUP_ROOT_UUID% t " < "$DEST"/boot/grub/grub.cfg > "$DEST"/boot/grub/grub.cfg.edited mv "$DEST"/boot/grub/grub.cfg.edited "$DEST"/boot/grub/grub.cfg } backup_root /mnt/root-backup
Dobrý den. Dle mých zkušeností není UUID úplně optimální. Jak řešíte když je UUID zapsáno v initrd ? Respektive jak initrd přegenerujete, když nemáte po ruce funkční systém se stejným jádrem? Zatím jsem si na tom několikrát úspěšně vylámal zuby. děkujiJá tak úplně netuším v čem je problém, ani jsem na něj nikdy nenarazil.
snímek souborového systémuTohle se mi jednou vymstilo – systém pak po restartu nabootoval ze snapshotu místo z původního oddílu, docela průšvih… UUID je potřeba změnit resp. udržovat jedinečné.
Emil-II:~# ll /dev/disk/by-id/ | grep wwn lrwxrwxrwx 1 root root 9 Apr 24 20:24 wwn-0x50014ee0571cb58b -> ../../sdb lrwxrwxrwx 1 root root 10 Apr 24 20:24 wwn-0x50014ee0571cb58b-part1 -> ../../sdb1 lrwxrwxrwx 1 root root 9 Apr 24 20:24 wwn-0x50014ee057e7e8e6 -> ../../sdc lrwxrwxrwx 1 root root 10 Apr 24 20:24 wwn-0x50014ee057e7e8e6-part1 -> ../../sdc1 lrwxrwxrwx 1 root root 9 Apr 24 20:24 wwn-0x5e83a97f52f3f9cc -> ../../sda lrwxrwxrwx 1 root root 10 Apr 24 20:24 wwn-0x5e83a97f52f3f9cc-part1 -> ../../sda1 lrwxrwxrwx 1 root root 10 Apr 24 20:24 wwn-0x5e83a97f52f3f9cc-part2 -> ../../sda2 lrwxrwxrwx 1 root root 10 Apr 24 20:24 wwn-0x5e83a97f52f3f9cc-part3 -> ../../sda3 lrwxrwxrwx 1 root root 10 Apr 24 20:24 wwn-0x5e83a97f52f3f9cc-part5 -> ../../sda5 lrwxrwxrwx 1 root root 10 Apr 24 20:24 wwn-0x5e83a97f52f3f9cc-part6 -> ../../sda6 Emil-II:~#
Příklad výpisu:Výpisu čeho (jakého programu)? Věnovat se GRUBU Legacy je škoda. Jednak začíná být obsolete, druhak o něm už toho bylo napsáno moc a bylo by lepší popsat GRUB 2.
V "archaických časech" jsem LILO rovněž používal a pamatuji si, že následný přechod na GRUB mi přinesl více nevýhod, než-li výhod...
lilo
se umí chrootnou samo (parametr -r
), zmatek může být jenom v tom, jak se jmenují zařízení v /dev
a jak vypadají oblasti disků v /proc
(ale jejich absenci lilo
skousne).
PS: Když to srovnám s ostatními zavaděči Linuxu na ne-PC platformách, kde stačí většinou jen připravit jádro v učitém formátu a pak ho nahrát do první oblast bootovacího média, tak je i lilo
složité jak se s tím Airbusem, pardon grubem, vlastně lítáÚplně pro BFU to sice není, ale vzhledem k tomu, že tam funguje doplňování tabulátorem, tak se dá i s celkem minimálními znalostmi nabootovat, ten GRUB ti hodně pomáhá.
Grub mi ani tak nevadí, vadí mi, že pokud chci používat nějakou moderní distribuci, nemám možnost volby.Nevím, jestli je moje distribuce dostatečně moderní, ale někde jsem tam viděl volbu "pokračovat bez zavaděče" -- a pak tě to nijak neomezuje a ten systém si nabootuj, jak chceš -- někdo třeba bootuje v KVM přímo jádro bez zavaděče, někdo si tam dá LILO...
bzlilo
, kde se obraz jádra (pojmenovaný vmlinuz
) s případným initramdiskem překopíroval do /boot
(nebo do /
a symlinknul do /boot
) a pak se zavolalo lilo
. Dnes to jde teoreticky rešit přes cíl install
a skript /bin/installkernel
, který to automaticky spustí po překladu.
Takže pokud si často překládáte jádro, stačí si připravit tento skript a make
spouštět s parametrem install
.
/
, má ovladač v jádře. Protože nepoužívám initramdisk/initramfs, tak jádro před pokusem o jeho přijení vidí jen jediný disk a tudíž se nemůže poplést. Bohužel to u nových desek, kde je jen jediný SATA řadič, nejde použít.
Ve světě PC BIOS umí sdělit, ze kterého zařízení se bootovalo. Spolehlivě to ale funguje jen při bootu z ATA. LILO si dokonce při instalaci stěžuje, když se jej pokusíte nainstalovat do MBR jiného disku. Mám pocit, že UEFI je v tomto ještě lepší.
Údaj o bootu je ale k ničemu, když kořenový systém je ve virtuálním zařízení (například LVM). Pak se stejně musí použít nějaké umělé číslování.
za root zvolit partition na tom disku, z ktereho zavadec natahl jadro.Ale jakou partition?
za root zvolit partition na tom disku, z ktereho zavadec natahl jadroA o tom má jádro rozhodnout jako jak? Jádro je spustitelný blok kódu, který někdo (zavaděč) natáhne do paměti a spustí/nastartuje instrukcí JMP (V podstatě je to úplně obyčejný program akorát v reálném módu s exkluzivním během — teda ještě ho nikdo neplánuje, plánuje se samo, ale až na pár takových drobností je to úplně obyčejný ELF). Jádro neví nic o tom jak to vypadalo v systému před tím než bylo spuštěno. Samo si detekuje periferní zařízení na stroji na kterém bylo spuštěno a až má práci hotovou, tak je postaveno před nelehký úkol: Určit jak pokračovat. Většinou se to dělá tak, že pokračování nechá na Early User-Space a ten si dělá co chce (ten musí být v systému vždycky) a nech si pokračuje jak chce ten kdo si ho napsal. Disky a pole a takové věci jsou specifikum architektury x86. Na jiných architekturách může jádro klidně ležet pouze jako blok RAW-dat od adresy X do adresy Y na nějakém zařízení (to nemusí být ani disk), jiný systém ho natáhne do paměti a spustí jako běžný ELF (a nemusí to být ani jiná architektura — DOS-Grub pamatuje kdo?). Jak by mělo rozhodnout v takovém případě? Jádro se nepoužívá jen na Hi-Tech serverech s polema a loukama, ale jádro musí zůstat univerzální.
A o tom má jádro rozhodnout jako jak? Jádro je spustitelný blok kódu, který někdo (zavaděč) natáhne do paměti a spustí/nastartuje instrukcí JMP (V podstatě je to úplně obyčejný program akorát v reálném módu s exkluzivním během — teda ještě ho nikdo neplánuje, plánuje se samo, ale až na pár takových drobností je to úplně obyčejný ELF). Jádro neví nic o tom jak to vypadalo v systému před tím než bylo spuštěno.To je otazka boot protokolu mezi zavadecem a jadrem. Treba Multiboot predava informaci o disku a partition (i kdyz ve forme jeho BIOS identifikatoru, takze by mozna nebylo jednoduche z nej zjistit skutecny disk). Standardni linuxovy x86 boot protokol to asi (jak ted koukam) nepredava. Jak je to u jinych boot protokolu (treba OFI, UEFI) netusim, ale prekvapilo by mne, kdyby to tam nebylo.
Disky a pole a takové věci jsou specifikum architektury x86.No a? VGAcon je take vicemene x86 specifikum, a presto se defaultne hojne pouziva.