作者 主題: 開機流程: lilo.conf, menu.lst, grub-install, MBR, superblock, firststage boot loader  (閱讀 15283 次)

0 會員 與 1 訪客 正在閱讀本文。

小徒兒

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 621
    • 檢視個人資料
BIOS (Basic Input Output System)
     |
     |     
Bootable Device :HD, Floppy, CD-ROM ?
     |
Hard Disk (MBR)
     |
MBR (Master Boot Record)
--Program code
--partition info
     |
Grub, Lilo, SPFdisk?
     |
< filesystem driver
     |
OS menu list: Windows (hide other WinOS partition), Linux ?

     |
     |
**Linux
--1.root : /boot partion location

--2.kernel filename

(在grub的/boot/grub/menu.lst中設定/boot檔案系統所在partition,是否與/在同一個partition,而寫不在同一partition,不用加/boot/vmxxx, 在同一partion,要加/boot,如
代碼: [選擇]
kernel /vmlinuz-2.4.20-8.1 root=/dev/hda6 )

(在lilo的/etc/lilo.conf中設定都要加/boot,如initrd=/boot/initrd-2.4.20-8.img)


--3.initrd 檔名及位置

     |
     |
kernel got the information of
--CPU,RAM
--Hardware (io,irq,DMA & driver name with options) </etc/conf.modules

>$(dmesg)

     |
initrd (put outside kernel module in Ram)

     |
     |
Linuxrc
     |
     |
init < /etc/inittab

     |
     |
/etc/rc.d/sysinit > tty# "Welcome to Linux"

     |
     |
/etc/rc.d/rc #

KxxxServicename Kill Service
SxxxServicename Start Service

--/etc/rc.d/init.d

     |
     |
/sbin/mingetty (prepare login)

     |
     |

/etc/rc.local

     |
     |
/etc/profile (during login)

     |
     |

~/.bash_prfile (after login, everytime login)

     |
     |
~/.bashrc (everytime start shell)

     |
     |
etc/bashrc

     |
     |

Now you see the prompt of $ or #

 :wink:  :wink:  :wink:  :wink:  :wink


若要更改shell prompt 請在~/.bashrc或~/.bash_profile改

代碼: [選擇]

# \A = current time HH:MM in 24-hour format
# \u = current user
# \h = hostname upt to the first "."
# \w = full path current working directory.
PS1="<\A \u@\h \w>$ "



當windows後灌,搶走mbr時:

-linux rescue
-mkdir /mnt/sysimg
-mount /dev/hda6 mnt/sysimg  #/dev/hda6 is where the /(root) location
-chroot /mnt/sys
-mount /dev/hda5 /boot #/dev/hda5 is where the /boot fs location
-lilo
-exit

-exit

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17340
    • 檢視個人資料
    • http://www.study-area.org
兩點修正一下:
1) /etc/services 似乎不是必需的.
2) /etc/profile 是在 login 後取得 shell 的時候執行.

小徒兒

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 621
    • 檢視個人資料
MBR
« 回覆 #2 於: 2004-08-17 17:26 »
MBR:

**size:512 Bytes (first sector of hd)
**Content:

--446bytes program code (to boot an operating system)
--64 bytes partition table with max 4 entries
--2 bytes "magic number" to check wheter the MBR is valid

小徒兒

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 621
    • 檢視個人資料
superblock
« 回覆 #3 於: 2004-08-17 17:28 »
superblock:

**First block of filesystem,several copties (at 8193, 16385)
**Contains general info on filesystem

 -- Last mounted time/place
 -- Block size (1024,2048,4096)
 -- Pointers to free inodes
 -- Pointer to free blocks
 -- Pointer to root of filesystem

小徒兒

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 621
    • 檢視個人資料
first stage boot loader
« 回覆 #4 於: 2004-08-17 17:29 »
A program prompt the user for the operation system to load and any options to pass to that operation system. Then it loads the selected operation system, passing the options as it starts it.

Anonymous

  • 訪客
引述: "小徒兒"
BIOS (Basic Input Output System)
/etc/bashrc (everytime start shell)

     |
     |
~/.bashrc
引用


我讀了歐萊理的bash shell那本書

書上寫的是

~/.bashrc是每次start a new shell才會執行的

實際去看了一下~/.bashrc

發現是
引用
if [ -f /etc/bashrc ]; then
         . /etc/bashrc
fi


所以每次start a new shell所執行的應該是~/.bashrc吧??@@

不知道我有沒有理解錯誤@@

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17340
    • 檢視個人資料
    • http://www.study-area.org
是的...
man bash 然後集中看 INVOCATION 那段就很清楚了...  ^_^

小徒兒

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 621
    • 檢視個人資料
#cat /etc/profile |grep "\."
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
for i in /etc/profile.d/*.sh ; do
        . $i

---------------/etc/profile----> ~/.bash_profile---------

# cat ~/.bash_profile |grep "\."
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
BASH_ENV=$HOME/.bashrc


--------------~/.bash_profile ---> ~/.bashrc-------


cat ~/.bashrc |grep "\." -A 2 -B 2
# .bashrc
 
# User specific aliases and functions
--
# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

-------------~~/.bashrc -----> /etc/bashrc-----


看了man bash關於invocation方面,發覺intera-active 跟non -interactive觀念還不是很清 哩 :o

唐小路

  • 活潑的大學生
  • ***
  • 文章數: 277
    • 檢視個人資料
引述: "小徒兒"
看了man bash關於invocation方面,發覺intera-active 跟non -interactive觀念還不是很清 哩 :o

我自己是這樣試的,先在/etc/profile  /etc/bashrc  ~/.bashrc  ~/bash_profile
都加上echo來看其執行
第一次login
引用

login as: super
Sent username "super"
super's password:***
Last login: Fri Aug 20 13:27:18 2004 from 192.168.100.10
/etc/profile
.bash_profile
.bashrc
/etc/bashrc
[super@database super]$

接著
引用

[super@database super]$ bash
.bashrc
/etc/bashrc
[super@database super]$ bash --login
/etc/profile
.bash_profile
.bashrc
/etc/bashrc
[super@database super]$

我的結論是:第一次login及用bash --login算是interactive,不知道對不對?表達的不好,就請各位老大們指點一下了
....

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17340
    • 檢視個人資料
    • http://www.study-area.org
簡單來說, 若你看到 shell prompt, 那就是 interactive,
反之, 就是 non-interactive, 如跑 shell script.

Anonymous

  • 訪客
引述: "小徒兒"
BIOS (Basic Input Output System)
     |
     |     
Bootable Device :HD, Floppy, CD-ROM ?
     |
Hard Disk (MBR)
     |
MBR (Master Boot Record)
--Program code
--partition info
     |
Grub, Lilo, SPFdisk?
     |
< filesystem driver
     |
OS menu list: Windows (hide other WinOS partition), Linux ?

     |
     |
**Linux
--1.root : /boot partion location

--2.kernel filename

(在grub的/boot/grub/menu.lst中設定/boot檔案系統所在partition,是否與/在同一個partition,而寫不在同一partition,不用加/boot/vmxxx, 在同一partion,要加/boot,如
代碼: [選擇]
kernel /vmlinuz-2.4.20-8.1 root=/dev/hda6 )

(在lilo的/etc/lilo.conf中設定都要加/boot,如initrd=/boot/initrd-2.4.20-8.img)


--3.initrd 檔名及位置

     |
     |
kernel got the information of
--CPU,RAM
--Hardware (io,irq,DMA & driver name with options) </etc/conf.modules

>$(dmesg)

     |
initrd (put outside kernel module in Ram)

     |
     |
Linuxrc
[/code]



各位先進,小弟對這邊有很大的疑惑,或許是很愚蠢的問題

若是使用SCSI card以及上面的 SCSI硬碟來開機, 因為kernel或者initrd-xxxx.img上面的SCSI驅動程式模組還沒載入,在這之前grub要如何能對SCSI硬碟讀取到/boot/grub/grub.conf這個檔案呢,不是因為讀了這個檔案才知道要去哪裡載kernel或者initrd-xxxx.img嗎?

而事實上就是開的起來,真的百思不解,到底是怎麼做到的? 這好像是雞生蛋、蛋生雞的問題。

還請各位幫忙解開小弟心中很久的大問題....感激不盡

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17340
    • 檢視個人資料
    • http://www.study-area.org
因為從 BIOS 導入 LOADER 所用的演算法,
與 kernel 載入 init 時用 file system 的方式是不一樣的.
詳細的, 要請熟 BIOS 的朋友來說了.