Informatyk to taki człowiek, który psuje systemy informacyjne, ale jest też w stanie je naprawić. Jako fan linuksa i użytkownik Windowsa po raz kolejny (win-lin i win-win) zabrałem się za dualbooting. Oto historia o tym jak zepsułem Windows i jak go naprawiłem.
Jak to się zaczęło…
Mam na komputerze trzy partycje. Na pierwszej był Windows 10, na drugiej pliki, a na trzeciej Windows 7. Jakoś się tak zdarzyło, że Dziesiątka przestała działać, więc postanowiłem na jej miejsce zainstalować Manjaro. Pobrałem obraz ISO i za pomocą Rufusa wgrałem go na pendrive’a. Instalacja Manjaro przebiegła pomyślnie (nie do końca ale o tym zaraz) ale po zrestartowaniu komputera na liście systemów do zabootowania w Grubie Windowsa nie widziałem.
Co się stało?
Otóż kiedy instalowałem siódemkę miałem już system na pierwszej partycji (ówcześnie był to XP, potem 8 i 10), więc wszystkie dane związane z bootowaniem były właśnie na tej pierwszej partycji. Kiedy ją sformatowałem, odciąłem sobie drogę do zabootowania siódemki.
Pierwsze próby - wpis Grub
Ponieważ nie przeczytałem wtedy jeszcze X artykułów o naprawianiu boot sektora, postanowiłem manualnie dodać wpis w grubie, aby do Windowsa się dostać. Połowa informacji w internecie jest już nieaktualna odkąd GRUB zaczął oznaczać GRUB2, a ten poprzedni dostał nazwę GRUB legacy. W końcu natrafiłem na informację aby edytować plik /etc/grub.d/40_custom/
. Chwilę się jeszcze naszukałem co wpisać i dlaczego, bo w internecie sporo ludzi rzuca przykładowymi wpisami bez żadnych obiaśnień. Otrzymałem
menuentry "Windows 7 on sda3" --class windows --class os {
insmod part_msdos
insmod ntfs
search --set=root --fs-uuid 4E5262E65262D26F
chainloader +1
}
Po krótce co i jak: menuentry
bierze string, nazwę do wyświetlania, oraz odpowiednie parametry klas (windows/gnu-linux/innny os, os/tool, itp). insmod part_msdos
mówi że korzystam z MBR z partycjami w standardzie msdos, a insmod ntfs
mówi o systemie plików tej partycji. Teraz, moglibyśmy ustawić źródło samemu przez set root='hd0,msdos3'
, co w tym przypadku oznacza pierwszy dysk i trzecią partycję, lub uruchomić wyszukiwanie. Ja wyszukuję po fs-uuid
, który można znaleźć poleceniem blkid
. Ostatnia linijka chainloader +1
ma chyba pomóc w bootowaniu przez załadowanie pierwszego pliku na wskazanej partycji.
Linux bez X
Wcześniej wspomniałem, że pojawił się problem z moją instalacją Manjaro. Kiedy uruchomiłem go w trybie graficznym (X server) dostałem dziwne rozmycie okien. Pomyślałem, że to wina sterownika karty graficznej więc go zmieniłem. I wtedy w ogóle X przestał się uruchamiać. Na szczęście na Linuxie istnieje ogrom narzędzi terminalowych. Szczególnie pomocny był w3m
- konsolowa przeglądarka internetowa, oraz transmission-cli
- klient sieci bit-torrent.
Tworzenie bootowalnego pendrive’a z win7
Z mojego przeszukiwania internetu winiknęło, iż najprościej naprawię swoją instalację Windowsa jeśli odpalę płytę/pendrive z instalacją i uruchomię opcję naprawiania systemu. Akurat tak się złożyło, że nie miałem pod ręką płyty, więc postanowiłem pobrać obraz z internetu i nagrać go na pendrive’a. Możliwe, że obrazy instalatorów Linuxa są spreparowane tak aby poleceniem dd
zapisać całego pendrive’a wraz z boot sektorem, ale obraz instalacji Windowsa tak nie miał. Kierując się odpowiedzią StackOverflow (albo SuperUser, nie mogę jej znaleźć) zrobiłem następujące kroki:
cfdisk /dev/sdb
- utworzyłem nową partycję typu 7 wraz z flagą bootmkfs.ntfs -f /dev/sdb1
- utworzyłem system plików NTFS na tej partycjisudo dd if=/usr/lib/syslinux/bios/mbr.bin of=/dev/sdb
- wpisałem boot sektor (potrzeba pakiet syslinux)sudo mkdir /mnt/iso && sudo mkdir /mnt/usb
- utworzyłem dwa foldery do montowania w następnych krokachsudo mount -o loop win7.iso /mnt/iso
- zamontowałem obraz instalacjisudo mount /dev/sdb1 /mnt/usb
- zamontowałem partycję na pendrive’iesudo cp -r /mnt/iso/* /mnt/usb
- przekopiowałem wszystkie pliki z obrazu na pendrive’async /dev/sdb1
- upewniłem się, że pisanie na pendrive’a zostało zakończone (kwestia cache’owania dysku)
Startup Repair i zakończenie
Teraz wystarczyło zrestartować komputer, zabootwać pendrive’a, uruchomić instalację Windows 7 w trybie naprawy i uruchomić Startup Repair. Gdyby to nie pomogło, byłem przygotowany na ręczne uruchamianie poleceń bootsect
, bcdboot
i bcdedit
. Koniec końców działa!