歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

Lilo使用技術

  LILO是在x86體系下最常用的Linux裝入程序;下面我將使用Lilo代替LILO是因為我不喜歡使用大寫。這篇文章描述了一些典型的關於Lilo 的安裝。作為Lilo用戶的使用指南。我認為例子相當有用,即使你的情況與我的不太相同。我希望這可以幫助你解決問題。由於Lilo本身的文檔也是非常好的,如果有興趣,可以/usr/doc/lilo*找到。 --------------------------------------------------- 內容列表: 1、介紹 2、背景信息和普通的安裝 2.1 我將Lilo裝在什麼地方? 2.2 我如何設置我的IDE硬盤驅動器。 2.3 如何在啟動時交互操作 2.4 如果卸載Lilo 3、簡單的設置 3.1 如何處理大內核 3.2 另外的信息源 4、安裝hdc像hda一樣引導啟動,並且使用bios= 5、當BIO不能找到Root分區時,使用Lilo 6、當BIO不能訪問巨大磁盤時,如何解決 7、從一張恢復軟盤上啟動 --------------------------------------------------- 1、介紹 盡管在/usr/doc/lilo-version下找到的Lilo的文檔是非常完整的,但是一些Linux用戶在配置他們的/etc/lilo.conf文件時依然經歷一些問題。這個文檔則是通過描述5個例子來幫助他們: 第一個例子是經典的"Linux 和 其他系統"的共存安裝。 第二個例子是展示了如果將Lilo安裝在一個連接為/dev/hdc的硬盤驅動器上,它將作為/dev/hda啟動。 這些過程通常在你安裝了一個新的內核程序後都要經歷。當你的BIOS足夠新的情況下,它也會告訴你如果從SCSI磁盤上啟動。 第三個例子告訴你如果在BIOS不能訪問root分區時如何引導Linux系統。 第四個示例是用來告訴你如何訪問容量巨大的磁盤,這是在BIOS和DOS都不能訪問的情況下。 最後一個示例是告訴你如果恢復一個損壞的磁盤,如果是由於安裝了另一個操作系統而損壞的。 2、背景信息和普通安裝 當Lilo啟動了系統,它使用BIOS調用從磁盤上裝入Linux內核(IDE驅動器,軟盤或其它一些)。這樣的話,內核就必須存在於某些介質的某個地方,它可以被bios訪問。 在啟動時,Lilo沒有能力讀取文件系統的數據,以及在你寫入/etc/lilo.conf文件中的任何的路徑名。安裝的時候,程序建立了什麼扇區由什麼文件使用的表,從而引導系統。所有的這些文件必須在一個分區,它可以被BIOS訪問(這些文件一般情況下定位在/boot目錄下,這就意味著只有你的 Linux系統的root分區需要通過BIOS來訪問。) 另外的一個基於BIOS的問題就是你需要在每次修改了Lilo設置以後,重新安裝裝入程序(i.e.你需要調用/sbin/lilo)。當你重新編譯你的內核並且覆蓋你舊的映像時,你必須重裝Lilo。 2.1.我將Lilo裝在什麼地方? 操作符boot=在/etc/lilo.conf文件中告訴Lilo在什麼地方安裝了它的主引導器。一般情況下,你可以指定主引導記錄(/dev/hda)或你的Linux安裝的root分區(通常是/dev/hda1或/dev/hda2)。 如果你有另一個操作系統安裝在你的硬盤上的話,你最好將Lilo安裝在root分區上而不是MBR分區上。因此,你必須將這個分區標記為 "bootable",可以使用fdisk的"a"命令和cfdisk的"b"。如果你不覆蓋主引導扇區,你將發現如果必要,可以輕易地卸下Linux和 Lilo。 2.2. 如何設置我的IDE硬盤? 我個人不使用BIOS中的LBA和LARGE的設置(但是我運行Linux);在PC世界中,這是設計中的一個非常討厭的約束。 這就要求內核存放在第一個1024柱面之中,但是在你為你的硬盤分區並且將root分區作地很小時這並不是一個問題。 如果你的硬盤已經有了另一個操作系統,請不要修改BIOS的設置,否則舊的系統將不會工作。最近的Lilo的版本都能處理LBA和LARGE的磁盤設置。 注意在/etc/lilo.conf中的"linear"關鍵字可以處理一些問題。這個關鍵字使得Lilo使用線性的扇區編址而代替扇區/磁頭/柱面的尋址方式。轉換成3維的地址的方式雖然延遲了運行的時間,但是卻解決了這個磁盤尋址的幾何問題。 如果你有不只一個硬盤,並且只用於Linux而且不參與啟動過程,你可以告訴BIOS,它們沒有被安裝。你的系統將會較快地啟動並且Linux將立刻地自動檢測所有的硬盤。我經常在自己的計算機上切換硬盤,但不是通過BIOS的設置。 2.3 如何在啟動時交互操作 當你看見Lilo提示符時,你可以敲擊<Tab>鍵來查看可以選擇的項目。如果Lilo沒有被設置成可交互的,在"LILO"信息出現前,按下<Alt>或<Shift>鍵。 如果你選擇啟動一個Linux內核,在你可以在你選擇的系統名稱後加入命令行參數。內核接受許多命令行參數。所以的這些參數在“BootPrompt-HOWTO”中可以找到。一些命令行是非常重要的,所以這裡不得不提一下: root=:你可以告訴Linux內核t掛起一個不同的分區作為root分區。比如,我的系統有一個小分區,安裝了一個最小化的Linux,並且我沒有能力在錯誤地損壞了root分區之後再啟動系統。 init=:1.3.43以後的Linux內核能夠運行另一種命令,而代替/sbin/init,就是在命令行指定。如果你在啟動時遇到了問題,你可以通過指定init=/bin/sh來訪問一個裸系統(當你使用最喜歡的shell的提示符下,你需要掛起你的磁盤:"mount -w -n -o remount /: mount -a "並且記住在關機前"umount -a"。


一個數:在內核的命令行中指定一個數,你的操作將會進入一個特別的運行級別(默認值通過是3或2,根據你選擇的發布版本的不同)。建議看一個init的文檔。 2.4 我如何卸載Lilo? 當Lilo覆蓋了一個啟動扇區,它保存了一個備份在/boot/boot.xxyy,xxyy是設備的主與次的號碼,是用十六進制的。你可以看一看你的磁盤或分區的主次號碼:"ls -l /dev/device"。例如,在/dev/hda上的第一個扇區(主號3,次號0)將被存在/boot/boot.0300,安裝在/dev/fd0 上的Lilo建立/boot/boot.0200,安裝在/dev/sdb3(主號8,次號19)建立/boot/boot.0813。注意Lilo在已經有一個備份的情況下將不會建立文件,所以當你重新安裝Lilo後(比如,在重新編譯內核之後)你不需要但心。備份在/boot/中的文件總是在裝入 Lilo之前將當前環境記錄下來的。 如果你需要卸載Lilo(比如,由於某些不幸的理由,你需要卸載Linux),你只需要將原來的啟動扇區恢復一下就可以了。如果Lilo被安裝在 /dev/hda,只要輸入"dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1"(我個人只是輸入"cat /boot/boot.0300>/dev/hda",但這是不安全的,這也能重裝原先的啟動扇區,你也可以在此期間修改了它。這個命令比在dos 狀態正的"fisk/mbr",容易得多了:它允許你不需要啟動除Linux以外的任何系統就可以干淨地把Linux從磁盤上清楚。在刪除了Lilo之後,記住需要運行Linux的fdisk來除去每一個Linux分區(dos的fdisk有時不靈)。 如果你將Lilo安裝到你的root分區上(比如/dev/hda2),沒有什麼其它的特別需要做。只要運行Linux的fdisk來刪除Linux分區。你必須將Dos分區設置成可啟動的。 3、簡單的設置 大多數Lilo安裝過程都使用一個設置文件: boot = /dev/hda # 或者你的root分區 delay = 10 # 啟動時延遲多少時間,以秒記 vga = 0 # 可選取。使用vag=1設置成80x50 #linear # 嘗試"linear",由於以上提到的磁盤尋址問題。 image = /boot/vmlinux # 你的zImage文件 root = /dev/hda1 # 你的root分區 label = Linux # 標志 read-only # 將root掛起,並只讀 other = /dev/hda4 # 你的dos分區y table = /dev/hda # 當前的分區表 label = dos # 標志 如果需要,你可以有好幾個"image"和"other"的選項。有幾個內核的images在lilo.conf文件中並非不正常,至少對於經常開發內核的人來講。 3.1.如果處理大內核 如果你編譯一個"zImage"內核並且它大得超過512K,你需要建立一個“大內核”來代替它,使用:make bzImage 。啟動一個大的內核映像不需要指定其它特別的需要,但最好使用一個新版本的Lilo。如果你的安裝過程是舊的,你必須升級你的Lilo程序包。 3.2 另外的信息源 除了Lilo的文檔,這裡有許多mini-howto可以幫助你。這些都就做:“Linux+FoobarOS”,這些當中,都是講一些關於其它系統與Linux共存的內容。 4、安裝hdc像hda一樣引導啟動,並且使用bios= Lilo允許從一個磁盤上映射內核映像文件,並指定BIOS從另一個磁盤上調用它。比如,經常在一個磁盤上安裝Linux,並將其連接為hdc(第二控制器的主盤)這樣將另一台計算機上的主IDE控制器作為一個獨立的系統啟動。我將安裝軟盤復制到一個小分區上,所以我可以在虛擬控制台上運行並安裝hdc。這個文件可能是這樣的: # This file must be used from a system running off /dev/hdc boot = /dev/hdc # 覆蓋hdc的MBR disk = /dev/hdc # 告之hdc是什麼: bios = 0x80 # bios將其視為快速驅動器 delay = 0 vga = 0 image = /boot/vmlinux # 這是在/dev/hdc1上 root = /dev/hda1 # 但是當啟動時它就在hda1 label = Linux read-only 這個配置文件必須通過Lilo讀出的/dev/hdc1而被讀取。Lilo的映像寫入啟動扇區(/dev/hdc)時涉及在/boot(當前安裝的作為hdc)的這個文件;當這個磁盤被作為單獨的系統啟動時,這個文件將在hda之後被訪問。 我調用這個配置文件/mnt/etc/lilo.conf.hdc(/mnt是由於hdc在安裝的過程中被掛起。我通過調用"cd/mnt; chroot.sbin/lilo -C /etc/lilo.conf"安裝Lilo。如果你覺得這非常神奇,請查閱chroot的手冊。 在lilo.conf中的"bios="操作符被用來告訴Lilo,BIOS把你的設備認作什麼。BIOS通過一個數調用定義好的軟盤和硬盤:0x00和 0x01是軟盤驅動器,0x80和以下這些數是硬盤控制器(舊的BIOS只能訪問兩個硬盤)。bios=0x80的意思是,使用BIOS中的0x80作為 /dev/hdc。 這個操作符可以非常簡單地在其它情況下使用,比如,當你的BIOS從SCSI磁盤啟動,而不是IDE設備。當IDE和SCSI設備共存時,Lilo不能確定是否0x80指出了其中的一個,因為用戶可以在BIOS選擇菜單裡選擇它,並且BIOS在運行Linux時不能被訪問。

默認情況下,Lilo假定IDE磁盤被BIOS映射成第一個,但是這可以通過lilo.conf中指令: disk = /dev/sda bios = 0x80 而改變。 5、當BIO不能找到Root分區時,使用Lilo 我有兩個IDE磁盤,和一個SCSI磁盤。而SCSI設備不能被BIOS看見。Linux引導器,Lilo,使用BIOS調用,只能看見BIOS可以看見的。我的BIOS只能從A: C:啟動,我的root文件系統是在SCSI磁盤上的分區上的。 解決的方法需要內核,映象文件,和在第一個IDE驅動器上的Linux分區中的裝入程序。注意並不一定需要將你的kernel放在你的root分區上。 在我的第一IDE上的第二個分區(/dev/hda2,Linux用來啟動系統的分區)被掛起在/u2。這裡是我使用的lilo.conf # 將Lilo裝在第一個IDE的MBR上 boot = /dev/hda # /sbin/lilo (the installer) 從以下文件復制Lilo的啟動記錄到MBR install = /u2/etc/lilo/boot.b # # 我寫了一個詳細的啟動菜單。 message = /u2/etc/lilo/message #Lilo將建立以下文件。它告訴啟動程序哪裡是內核的塊。 map = /u2/etc/lilo/map compact prompt # 等10秒 timeout = 100 # 內核被存放在BIOS可以看見的地方: # cp -p /usr/src/linux/arch/i386/boot/zImage /u2/z1.2.1 image = /u2/z1.2.1 label = 1.2.1 # Lilo 告訴內核掛起第一個SCSI分區作為root。BIOS不能看見它。 root = /dev/sda1 #這個分區將被檢查並且通過/etc/rc.d/rc.S被重新掛起 read-only # 另一個內核 image = /u2/z1.0.9 label = 1.0.9 root = /dev/sda1 read-only #DOS分區 other = /dev/hda1 loader=/u2/etc/lilo/chain.b label = dos alias = m 6、當BIO不能訪問巨大磁盤時,如何解決 在我的辦公室裡的系統有一個1GB的IDE驅器。BIOS只能看見其中的504MB。(這裡MB是指2**10字節,而不是10**6字節。)所以我有在一個350MB/dev/hda1 並且我的Linux的root在一個120MB的分區上/dev/hda2 的分區上有一個MS-DOS。 當驅動器被刷新後,MS-DOS不能被正常安裝了。Novell DOS 7也有這個問題。 所以我使用Linux的fdisk做個分區表。MSDOS-6.2拒絕將其自己安裝到/dev/hda1下。它可能會顯示出: “this release of MS-DOS is for new installations. Your computer already has MS-DOS so you need to get an upgrade release from your dealer.” 所以我再一次運行Linux的fdisk並且將分區1從表中刪除。這樣就保證了MS-DOS 6.2可以精確地建立相同於剛才我已經刪除的分區1,並且正常安裝。MS-DOS 6.2在這個驅動器的寫上了MBR,但它不能啟動。 所幸我有一張有Slackware內核的軟盤(由Slackware的安裝程序做的),所以我啟動了Linux並且由Lilo覆蓋了MS-DOS的MBR。這個工作,這是我使用的lilo.conf文件。 boot = /dev/hda map = /lilo-map delay = 100 ramdisk = 0 # 在Slackware內核中關閉內存盤。 timeout = 100 prompt disk = /dev/hda # BIOS只能看見500MB bios = 0x80 # 指定第一個IDE sectors = 63 # 你的扇區數(從你的磁盤說明書上找) heads = 16 cylinders = 2100 image = /vmlinuz append = "hd=2100,16,63" root = /dev/hda2 label = linux read-only vga = extended other = /dev/hda1 label = msdos table = /dev/hda loader = /boot/chain.b 在我安裝了這些系統之後,我檢查到這些分區包括zImage,boot.b,map,chain.b並且信息文件在沒有"stackered或 doublespaced.”時,可以使用msdos文件系統,所以我可以作一個在/dev/hda1上的500MB的DOS分區。 7、從一張恢復軟盤上啟動 接下來,我在辦公室的機器上安裝Windows-95。它也損壞了我的Lilo MBR,但是它將我的Linux分區分開了。從軟盤上引導內核花費了很長時間,所以我使一個可工作的Lilo安放在軟盤上,它可以從IDE上啟動我的內核。我使用這個lilo軟盤: fdformat /dev/fd0H1440 # lay tracks on virgin diskette mkfs -t minix /dev/fd0 1440 # make file system of type minix mount /dev/fd0 /mnt # mount in the standard tmp mount point

cp -p /boot/chain.b /mnt # copy the chain loader over lilo -C /etc/lilo.flop # install Lilo and the map on the diskette. umount /mnt 注意,當你運行這個安裝過程時,軟盤必須被掛起,所以Lilo可能寫入它的map文件。這個文件是/etc/lilo.flop: # Makes a floppy that can boot kernels from HD. boot = /dev/fd0 map = /mnt/lilo-map delay = 100 ramdisk = 0 timeout = 100 prompt disk = /dev/hda # 1 GB 的硬盤, BIOS只能見到500 MB. bios=0x80 sectors = 63 heads = 16 cylinders = 2100 image = /vmlinuz append = "hd=2100,16,63" root = /dev/hda2 label = linux read-only vga = extended other = /dev/hda1 label = msdos table = /dev/hda loader = /mnt/chain.b 需要在辦公室的機器上安裝msdos 6.2,但我不想碰第一個驅動器。我加入了一個SCSI控制器和驅動器,使用Linux的mkdosfs加入一個msdos的文件系統,並且win95將其作為D:。當然msdos不能從D:啟動。當然如果你有Lilo這不是一個問題。我將以下內容加入lilo.conf: other = /dev/sda1 label = d6.2 table = /dev/sda loader = /boot/any_d.b 通過這個修改,msdos 6.2可以運行了,但是它把它認為在C:並且windows-95認為在D:



loader = /boot/any_d.b 通過這個修改,msdos 6.2可以運行了,但是它把它認為在C:並且windows-95認為在D:



通過這個修改,msdos 6.2可以運行了,但是它把它認為在C:並且windows-95認為在D:



Copyright © Linux教程網 All Rights Reserved