[轉貼] GRUB 運作原理
: 先解釋一些東西。『MBR』是什麼?
: MBR就是每台硬碟第一個磁區(Sector,它的大小是512bytes)。
: 當我們一啟動電腦,BIOS作完一些基本的測試、初始化之後,
: 就會查詢你之前所設定的開機順序,
: 從開機順序決定要去哪個裝置讀取程式來載入作業系統。
: 比如說今天設定從一台硬碟機啟動,那麼BIOS就會去讀取這台硬碟上的第一個磁區,
: 也就是所謂的MBR。MBR裡通常存放者一些多重開機程式,例如grub、SPFdisk。
: 這些多重開機程式可以去硬碟上『裝有作業系統』的
: 『不同的分割區』上的第一個磁區(稱作boot sector,不要與MBR搞混)
: 啟動作業系統核心loader(例如:Windows XP的NT kernel loader)。
: 作業系統核心被成功啟動後,就可以使用作業系統了。
: 至於Linux的核心的loader就是grub。grub不能啟動Windows的kernel,
: 所以必須要去分割區上的第一個磁區找到Windows kernel的loader。
: 所以grub中會有一個指令叫作『chainloader +1』
: 就是去讀取一個Partition(分割區)的boot sector,
: 那個『+1』代表該Partiton的第一個Sector,『+2』代表第二個Sector、...依此類推。
: 但grub是一個功能強大的多重開機程式,
: 根本不可能把那麼多功能塞在一個512bytes的MBR上。
: 所以這個程式被切割成幾個部份:Stage 1、Stage 1.5、Stage 2。
: 這三個檔案可以在/boot/grub/底下找到。
: Stage1大小為512bytes,所以剛好可以存在MBR上。
: 當電腦一開機,BIOS啟動MBR上的grub Stage1,Stage 1會去啟動硬碟上的Stage 1.5。
: 可是有一個問題出現了,Stage 1是如何找到Stage 1.5的?
: Stage 1只有區區的512bytes,是沒有多餘的能力可以操縱分割區上的檔案系統,
: 所以沒有辦法用這個方法找到Stage 1.5。
: 而Stage 1其實是用一個方法找到Stage 1.5的檔案,就是當初在安裝grub到MBR時
: Stage 1.5所在硬碟上的那一個磁區的位置會被紀錄到MBR中,
: 所以Stage 1就會去指定的磁區位置找到Stage 1.5執行它。
: 那麼Stage 1.5是作什麼用的呢?Stage 1.5有很多個檔案,
: 分別是用來處理檔案系統(File System)用的。
: 像『fat_stage1_5』就是用來處理FAT Partition上面的檔案用的、
: 『e2fs_stage1_5』是用來處理Ext2、3的檔案系統用的。
: 所以grub到了Stage 1.5就可以由File System處理許多Partition上的檔案。
: 那麼接下來Stage 1.5會去啟動Stage 2。
: Stage 2就是grub的主要核心,幾乎大部分的功能都在裡面。
: 可是又有一個問題出現了,Stage 1.5是如何找到Stage 2的?
: 答案是:因為Stage 1.5已經可以辨識Partition上的File System,
: 所以自然有辦法找到Stage 2的檔案。
: Stage 2啟動後會去讀取menu.lst,然後grub的開機選單就呈獻在我們眼前。
: 還有一件事要注意的,就是我們開機啟動grub後,
: grub會對電腦上的每一台硬碟機命名。
: BIOS一開機時會在主記憶體初使化BIOS中斷服務(BIOS interrupts)。
: grub似乎是從BIOS的中斷服務得知電腦上的硬碟數量。
: 可是BIOS對每台硬碟機給的排序有一個特色(這一句話我不是很肯定),
: 就是可以用來開機的那一個硬碟機比較特殊,都是『第一個』硬碟機。
: 不管是用SATA、IDE、USB或SCSI硬碟開機,那一台硬碟就是『第一個』硬碟機。
: 其餘的硬碟機分別會依
: Primary IDE Master→Primary IDE Slave→Secondary IDE Master→
: Secondary IDE Slave→SCSI、USB或SATA
: 作排序。如果該插槽的硬碟機不存在就跳過排序。(光碟機不算在內)
: 然後grub會依照BIOS所給定的排序,分別給每一台硬碟機一個名稱--BIOS drive。
: 這個名稱的命名是從數字『0』開始
: (據說grub 2會改成從『1』開始。Partition的命名也是從『0』開始。),
: 第一台硬碟機就命名為『hd0』、第二台硬碟機就命名為『hd1』、
: 第三台『hd2』、...依此類推。
: 例如以下組合:
: [1] (『Primary IDE Slave HDD with grub』 + 『SATA HDD』),
: 從『Primary IDE Slave HDD with grub』開機
: → 『Primary IDE Slave HDD with grub=hd0』,『SATA HDD=hd1』
: [2] (『Primary IDE Master HDD』 + 『SATA HDD with grub』),
: 從『SATA HDD with grub』開機
: → 『Primary IDE Slave HDD=hd1』,『SATA HDD with grub=hd0』
: [3] (『Primary IDE Master HDD』 + 『Secondary IDE Master CDROM』 +
: 『Secondary IDE Slave HDD with grub』),
: 從『Secondary IDE Slave HDD with grub』開機 → 『Primary IDE Master HDD=hd1』
: ,『Secondary IDE Slave HDD with grub=hd0』
: 現在大概清楚grub的命名原理了吧。
: 那為什麼我會建議把grub灌到IDE硬碟上呢?
: 舉個例子:假設我們把Linux、grub灌在一台電腦的IDE HDD上的第3個分割區,
: 這台電腦還有一台SATA HDD。如果說今天改變主意,我們從IDE HDD啟動Linux,
: 然後我們在Linux中想把grub灌在SATA HDD上。
: 我們會執行以下指令:
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: # grub
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: 這樣grub Stage1是會被灌到SATA HDD上的MBR沒錯,
: 可是我們個Stage 1.5與Stage 2卻是在『(hd0)』的硬碟上,
: 也就是說『Stage 1.5』所在的硬碟hd0上某個磁區的位置會被紀錄到MBR中,
: 這樣才可以給Stage 1找到。被紀錄到MBR的不是只有Stage 1.5所在的磁區位置,
: 還有所在的硬碟代號--hd0。
: 如果現在就重新開機,並調整BIOS為從SATA HDD開機,就會出現失敗。
: 為什麼?因為之前說過,用來啟動grub的那一台硬碟是第一台硬碟,
: 本來我們從IDE HDD開機進Linux,那個時候的hd0指的是IDE HDD。
: 可是灌好grub到SATA HDD後,重新開機、調整BIOS開機順序後,
: hd0變為SATA HDD那一台。在開機的時候,
: SATA HDD上grub會去找hd0上某一處磁區的Stage 1.5。
: 可是我們知道Stage 1.5應該是在IDE HDD上才是,
: 並不存在SATA HDD上,所以會產生錯誤。
: 諸如此類的問題還有不少,所以我是建議把grub灌在IDE硬碟上。
: 如果沒有IDE硬碟,就不用擔心這個問題,就把它灌在SATA、SCSI、USB硬碟上。
: 其實上面的講法不夠好,更一般的說法是:
: 請按照
: Primary IDE Master→Primary IDE Slave→Secondary IDE Master→
: Secondary IDE Slave→SATA 1→SATA 2→....
: 的順序安裝在以上第一個出現的硬碟機上。
: 不過上面那個失敗的範例也是有解決的方法,
: 就是手動指定裝置檔對應到BIOS drive。可以使用grub的『device』指令。
: 指令如下,請自行意會:
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: # grub
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: 還有一個grub的問題就是裝置檔的問題。現在許多Linux Distribution使用
: udev來管理裝置檔(也就是/dev底下的那些檔案)。
: 可是udev在Linux核心開機後才會動態製作那些裝置檔,例如/dev/hda、/dev/sda。
: 我們常用Live CD去救援的時候,在chroot到我們要被救援的Linux partition後,
: 會發現grub抓不到任何硬碟。這是為什麼?
: 這是因為似乎grub在作業系統中執行的時候(就是不是在開機的時候執行),
: 是去/dev底下搜尋硬碟機的。
: 可是那個被救援的Linux partition的Linux核心並沒有被啟動,udev也沒有正常執行,
: 所以在chroot後的/dev底下沒有任何有關硬碟的裝置檔,
: 所以此時grub會找不到任何硬碟機。
: 解決的方法是用『mknod』這個指令手動創造裝置檔。
: 例如:
: # mknod /dev/hdc b 22 0
: 是用來創造hdc這個裝置檔到/dev底下。
: 那個『22』不是亂打的,它可以在Linux kernel Document查到
: /usr/src/linux/Documentation/devices.txt
: 而那個『0』指的就是/dev/hdc本身。
: 如果要創造/dev/hdc4這個裝置檔,可以用這個指令。
: # mknod /dev/hdc4 b 22 4
: 以下是一些常用的代號:
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: 3 block First MFM, RLL and IDE hard disk/CD-ROM interface
: 0 = /dev/hda Master: whole disk (or CD-ROM)
: 64 = /dev/hdb Slave: whole disk (or CD-ROM)
: 22 block Second IDE hard disk/CD-ROM interface
: 0 = /dev/hdc Master: whole disk (or CD-ROM)
: 64 = /dev/hdd Slave: whole disk (or CD-ROM)
: 8 block SCSI disk devices (0-15)
: 0 = /dev/sda First SCSI disk whole disk
: 16 = /dev/sdb Second SCSI disk whole disk
: 32 = /dev/sdc Third SCSI disk whole disk
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: 製作好裝置檔後,再執行grub就可以找到硬碟了。
: 記得裝完grub後要把手動製作的裝置檔rm掉,讓udev來管理裝置檔。
: (不刪掉應該也不會有什麼問題)
: (如有錯誤,歡迎指正)
推 好文一個
看我這篇文章的時候請先把上面的好文看玩
GRUB視一套開機管理程式
在此並不針對GRUB做詳細說明 因為上面講解的比我還要詳細許多
來說說今天發生的一件慘事
就是某位RD把GRUB安裝在/dev/hda1
(經由確認 電腦的XP是安裝在hda1 且為NTFS磁區 )
正常的情況下GRUB 都是裝在/dev/hda 即所謂MBR 或者是LINUX的BOOT磁區的第一軌
又或者是BOOT硬碟的第一個主要分割區
但是今天 他卻把GRUB裝在NTFS分割磁區的第一軌 而且那個磁區已經要資料在
這就發生了慘事 不但XP開不了機 連NFFS分割區上面的資料全毀
這個時候就會有人說 找硬碟救援軟體 如 FINALDATA EASYRECOVERY R-STUDIO
去救資料 這也行 因為它是刞ㄧ個SECTOR一個SECTOR去做掃描 來讀取 有人會問了
既然是把第一軌毀掉 那總可以重建八
是的 MFT可以重建 因為當初在設計NTFS 這個檔案系統的時候
就想過分割區的第一軌有可能會被病毒修改 而開不了機或者是
下面先列出位於 http://www.ntfs.com/ 的 一段話
How can we fix NTFS boot sector using standard Windows NT/2000/XP tools?
On NTFS copy of boot sector is stored at the middle or at the end of the Volume.
You can boot from startup floppy disks or CD-ROM, choose repair option during
setup, and run Recovery Console. When you are logged on, you can run FIXBOOT
command to try to fix boot sector
翻譯就是NTFS磁區的 Boot Sector 也放了一份複本在中間鬼與最後一軌
所以只需要把XP或是2000的安裝光碟放入 然後選擇修復主控台模式 打入FIXBOOT即可修復
哈 都是GRUB惹的禍
How to build grub 0.97 on Ubuntu 904
重建 GRUB 的步驟
如何重建 GRUB 的步驟如下:
- 使用原來的 linux 安裝光碟開機。現代的系統都是 live-cd,即開機光碟 boot 完就是可操作的系統。
- 開一個終端機程式,可以輸入命令。
- 執行
sudo grub
,回答密碼。 grub> find /boot/grub/stage1
,它會找原來裝 GRUB 的硬碟分區,例如 (hd1,0),即第二個硬碟的第一個分區。grub> root (hd1,0)
,告訴它 linux root 在哪裡。grub> setup (hd0)
,安裝 GRUB 在第一個硬碟的 MBR (Master Boot Record)。把 Windows 的 bootloader 蓋掉… 之後可以在 GRUB menu 中加入進 Windows 系統的選項,本文不討論這個。grub> quit
,結束,這樣就完成 GRUB rebuild,可以 reboot 了。
另一作法是把 GRUB 安裝在硬碟分區裡,例如 grub> setup (hd1,0)
,安裝 GRUB 在第二個硬碟的第一個分區,而不是 MBR。這種方法可以使用 Windows 的 boot loader 來作 dual system 啟動,我就是這麼作的,下回再來介紹。
[轉貼]【教學】MBR 主啟動磁區剖析
--------------------------------------------------------------------------------
了解開機流程:
在 IBM PC 相容系統上,電腦開機時第一個被執行的程式即是所謂的 BIOS (Basic Input/Output System),BIOS 指的其實是一顆 ROM IC (Read-Only Memory 唯讀記憶體 ), 堶捫N錄了提供電腦基本操作的服務程式,這種儲存於唯讀記憶體中的程式稱之為 Firmware (韌体)。
當 BIOS 開始執行時, 首先會對系統進行自我檢測 (POST, Power-On Self Test) 以確定硬體設備可以正常動作,當開機自我檢測結束時 BIOS 將嘗試讀入軟碟的第一個磁區 (Boot Sector 啟動磁區)。若沒有軟磁則嘗試讀入硬碟的第一個磁區 (Master Boot Record 主啟動磁區,一般簡稱 MBR) 。 MBR 將會被戴入到記憶體 0000:7C00 的位置開始執行,而後再戴入由作業系統提供的開機磁區( Boot Sector ),進入作業系統。
PS. 新的 BIOS 可以改變開機順序不由軟碟啟動,可以從直接硬碟啟動、光碟啟動、甚至由 USB 設備啟動。
在標準狀況下:
電腦開機→BIOS→POST→軟碟啟動磁區→硬碟主啟動磁區(MBR)->Boot Sector->OS
--------------------------------------------------------------------------------
MBR 結構:
MBR 指的是硬碟機最開頭的第一個磁區,位於硬碟第 0 面,第 0 軌,第 1 磁區的位置。每個磁區為 512 Bytes。
我們可以透過 BIOS 提供的 INT 13h 中斷服務常式來讀寫 MBR 磁區,如:
MOV AX,0201h MOV BX,200h MOV CX,0001h MOV DX,0080h INT 13h
MBR 磁區大致上分為 3 個區域
---------------------------- <-- 位移值 00H (0 Bytes) | | | | | Boot Partition Loader | | 這一小段程式用來將可啟動 | | 的作業系統分割區戴入 | | | | | | -----| <-- 位移值 1BEh (446 Bytes) |---------------------| | | Partition Table | | 硬碟分割表 -----| | |55AA| ---------------------------- <-- 位移值 200H (512 Bytes)
因為這段程式區是除了 BIOS 之外最先被電腦戴入執行的區域 (不考慮軟碟),所以像是多重開機管理程式、開機型病毒、軟體式硬碟密碼鎖等程式,大多都是利用這個域區在工作。
2. 第二個區域是資料區,即硬碟分割表所在區域。其範圍從 1BEh 到 1FDh,共 64 Bytes。
這 64 Bytes 又劃分成四個區域,代表 4 個硬碟分割表,其範圍分別為
位移值 01BE ~ 01CD <-- 第一分割表
位移值 01CE ~ 01DD <-- 第二分割表
位移值 01DE ~ 01ED <-- 第三分割表
位移值 01EE ~ 01FD <-- 第四分割表
也因為 MBR 磁區位置固定在硬碟第 0 面,第 0 軌,第 1 磁區的位置,萬一不幸硬碟機第 0 軌 (指 MBR)發生實體損壞時,這顆硬碟就報癈了。即使硬碟機其它磁軌都是好的也是一樣,原因當然就是因為作業系統讀不到 Partition Table 的關係。
3. 第三個區域只有 2 個 Bytes,位移值 1FE 固定 55h,位移值 1FF 則固定為 AAh。
沒什麼太特殊的意義,55AA 只是讓 BPL 程式用來驗証是否為 MBR 磁區而已。
一個完整的 MBR 磁區範例如下:
紅色部份為程式區 藍色部份為第一分割表 綠色部份為第二分割表 桃紅色部份為第三分割表 紫色部份為第四分割表 亮綠色部份為MBR標記
0000:7C00 33 C0 8E D0 BC 00 7C FB-50 07 50 1F FC BE 1B 7C 3.....|.P.P....| 0000:7C10 BF 1B 06 50 57 B9 E5 01-F3 A4 CB BD BE 07 B1 04 ...PW........... 0000:7C20 38 6E 00 7C 09 75 13 83-C5 10 E2 F4 CD 18 8B F5 8n.|.u.......... 0000:7C30 83 C6 10 49 74 19 38 2C-74 F6 A0 B5 07 B4 07 8B ...It.8,t....... 0000:7C40 F0 AC 3C 00 74 FC BB 07-00 B4 0E CD 10 EB F2 88 ..<.t........... 0000:7C50 4E 10 E8 46 00 73 2A FE-46 10 80 7E 04 0B 74 0B N..F.s*.F..~..t. 0000:7C60 80 7E 04 0C 74 05 A0 B6-07 75 D2 80 46 02 06 83 .~..t....u..F... 0000:7C70 46 08 06 83 56 0A 00 E8-21 00 73 05 A0 B6 07 EB F...V...!.s..... 0000:7C80 BC 81 3E FE 7D 55 AA 74-0B 80 7E 10 00 74 C8 A0 ..>.}U.t..~..t.. 0000:7C90 B7 07 EB A9 8B FC 1E 57-8B F5 CB BF 05 00 8A 56 .......W.......V 0000:7CA0 00 B4 08 CD 13 72 23 8A-C1 24 3F 98 8A DE 8A FC .....r#..$?..... 0000:7CB0 43 F7 E3 8B D1 86 D6 B1-06 D2 EE 42 F7 E2 39 56 C..........B..9V 0000:7CC0 0A 77 23 72 05 39 46 08-73 1C B8 01 02 BB 00 7C .w#r.9F.s......| 0000:7CD0 8B 4E 02 8B 56 00 CD 13-73 51 4F 74 4E 32 E4 8A .N..V...sQOtN2.. 0000:7CE0 56 00 CD 13 EB E4 8A 56-00 60 BB AA 55 B4 41 CD V......V.`..U.A. 0000:7CF0 13 72 36 81 FB 55 AA 75-30 F6 C1 01 74 2B 61 60 .r6..U.u0...t+a` 0000:7D00 6A 00 6A 00 FF 76 0A FF-76 08 6A 00 68 00 7C 6A j.j..v..v.j.h.|j 0000:7D10 01 6A 10 B4 42 8B F4 CD-13 61 61 73 0E 4F 74 0B .j..B....aas.Ot. 0000:7D20 32 E4 8A 56 00 CD 13 EB-D6 61 F9 C3 49 6E 76 61 2..V.....a..Inva 0000:7D30 6C 69 64 20 70 61 72 74-69 74 69 6F 6E 20 74 61 lid partition ta 0000:7D40 62 6C 65 00 45 72 72 6F-72 20 6C 6F 61 64 69 6E ble.Error loadin 0000:7D50 67 20 6F 70 65 72 61 74-69 6E 67 20 73 79 73 74 g operating syst 0000:7D60 65 6D 00 4D 69 73 73 69-6E 67 20 6F 70 65 72 61 em.Missing opera 0000:7D70 74 69 6E 67 20 73 79 73-74 65 6D 00 00 00 00 00 ting system..... 0000:7D80 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0000:7D90 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0000:7DA0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0000:7DB0 00 00 00 00 00 2C 44 63-01 00 00 00 72 20 80 01 .....,Dc....r .. 0000:7DC0 01 00 0B EF BF 1D 3F 00-00 00 A1 0B 7D 00 00 00 ......?.....}... 0000:7DD0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0000:7DE0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0000:7DF0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U.
--------------------------------------------------------------------------------
硬碟分割表的格式:
每個分表佔 16 Bytes, 其意義如下:
---------------------------------------------------------------------------- |位移值|大小 | 說明 | +------+-------------------------------------------------------------------+ | 00 |Byte | BOOT ID - 若為可開機的分割區則為 80h ~ FFh, 否則為 00h。 | | | | 80h = C, 81h = D, 82h = E ... 以此類推 | | | | 以 fdisk 來說,若第一顆硬碟的分割區設為 Active 則 ID = 80h。 | | | | 4 個分割表中, 只能有一個被設為可開機, 否則將會發生錯誤。 | +------+-----+-------------------------------------------------------------+ | 01h |Byte | 此分割開始之磁頭編號 | +------+-----+-------------------------------------------------------------+ | 02h |Byte | 此分割開始之磁區編號 (6 bits) | | | | 最高的 2 個 bits(bit6-7), 為磁柱編號的 bit8-9 | +------+-----+-------------------------------------------------------------+ | 03h |Byte | 此分割開始之磁柱編號 (10 bits) | | | | bit8-9 放在位移值 02h 的 bit 6-7 | +------+-----+-------------------------------------------------------------+ | 04h |Byte | 作業系統識別碼 | | | | 00 None | | | | 01 DOS FAT-12 bits | | | | 02 XENIX root | | | | 03 XENIX usr | | | | 04 DOS FAT-16 bits <> 32M | | | | 07 HPFS/NTFS | | | | 08 AIX | | | | 09 AIX bootable | | | | 0A OS/2 Boot Manager | | | | 0B DOS FAT-32 bits (Int 13h extensions) | | | | 0C DOS FAT Cylinder > 1024 (Int 13h extensions) | | | | 0E DOS FAT System (Int 13h extensions) | | | | 0F DOS BigExtended (Int 13h extensions) | | | | 20 SPF Boot manager | | | | 40 Venix 80286 | | | | 41 PPC PReP Boot | | | | 51 Novell | | | | 52 Microport | | | | 63 GNU HURD | | | | 64 Novell Netware | | | | 65 Novell Netware | | | | 75 PC/IX | | | | 80 Old MINIX | | | | 81 Linux/MINIX | | | | 82 Linux swap | | | | 83 Linux native | | | | 85 Linux extended | | | | 93 Amoeba | | | | 94 Amoeba BBT | | | | A5 FreeBSD | | | | A6 Open BSD | | | | A7 NETSTEP | | | | A9 NetBSD | | | | B7 BSDI fs | | | | B8 BSDI swap | | | | C7 Syrinx | | | | DB CP/M | | | | E1 DOS access | | | | E3 DOS R/O | | | | EB BeOS fs | | | | F2 DOS secondary | | | | FF BBT | +------+-----+-------------------------------------------------------------+ | 05h |Byte | 此分割結束之磁頭編號 | +------+-----+-------------------------------------------------------------+ | 06h |Byte | 此分割結束之磁區編號 (6 bits) | | | | 最高的 2 個 bits(bit6-7), 為磁柱編號的 bit8-9 | +------+-----+-------------------------------------------------------------+ | 07h |Byte | 此分割結束之磁柱編號 (10 bits) | | | | bit8-9 放在位移值 06h 的 bit 6-7 | +------+-----+-------------------------------------------------------------+ | 08h |DWord| 此分割區前之磁區總數 | +------+-----+-------------------------------------------------------------+ | 12h |DWord| 此分割之磁區總數 | +------+-----+-------------------------------------------------------------+
--------------------------------------------------------------------------------
FDISK /MBR 的作用:
Windows/DOS 作業系統提供的硬碟分割程式有一個隱藏參數 /mbr,許多人以為只要下 Fdisk /mbr 就可以重建硬碟分割表,其實這是錯誤的!Fdisk /mbr 主要功用在幫你重建 BPL (Boot Partition Loader),也就是 Fdisk 只會幫你重建程式區而已,如果硬碟分割表已經毀損 Fdisk /mbr 就沒用了。
也因為 /mbr 的功用在重建 BPL 程式區,而許多的多重開機管理程式或開機型病毒也是利用這區域在工作,所以執行 Fdisk /mbr 可能可以移除多重開機管理程式或開機型病毒。
--------------------------------------------------------------------------------
Boot Partition Loader 程式說明 (WinXP):
;首先要知道BIOS結束自我測試後,會將MBR戴入至記憶體0000:7C00位置,然後開始執行MBR程式區的程式
;為何會固定將 MBR 戴入至記憶體0000:7C00的位置呢? 沒什麼特別原因, 只因為以前 IBM 出的 x86 系統的 BIOS
;就是這麼做的, 所以後來大家都跟隨 IBM 的做法..
;MBR 程式第一部份
;設定堆疊並將MBR程式從 0000:7C00h 複製到 0000:0600h 位置
;
;將程式碼由 0000:7C00h 複製到 0000:0600h 的原因在於
;後續戴入的啟動磁動(Boot Secotr), 也必需被戴入到 0000:7C00h 的位址,
;如果沒進行搬移的動作, 將造成在記憶中的 MBR 程式被覆蓋, 造成當機
0000:7C00 33C0 XOR AX,AX 0000:7C02 8ED0 MOV SS,AX 0000:7C04 BC007C MOV SP,7C00 ; 設定堆疊 SS:SP (0000:7C00) 0000:7C07 FB STI 0000:7C08 50 PUSH AX 0000:7C09 07 POP ES 0000:7C0A 50 PUSH AX 0000:7C0B 1F POP DS ; DS = ES = AX = 0 0000:7C0C FC CLD 0000:7C0D BE1B7C MOV SI,7C1B 0000:7C10 BF1B06 MOV DI,061B 0000:7C13 50 PUSH AX ; AX = 0000 0000:7C14 57 PUSH DI ; DI = 061B 0000:7C15 B9E501 MOV CX,01E5 0000:7C18 F3 A4 REPZ MOVSB ; 將第二部份的程式與硬碟分割表複製到記憶體 0000:061Bh 位置 0000:7C1A CB RETF ; 跳到新位置繼續執行, 也就是 ; MBR 程式的第二部份起始點 (0000:061B) ;MBR 程式第二部份 0000:7C1B BDBE07 MOV BP,07BE ; BP = 07BEh = 第一個硬碟分割表位址 0000:7C1E B104 MOV CL,04 ; CL = 4, 最多共有 4 組
備份MBR與partition table
備份MBR與partition table:
$dd if=/dev/hda of=/path/name.mbr count=1 bs=512
指令cpio備忘
Server:~ # find /home/csliu | cpio -o > /root/csliu.cpio
Server:~ # find /home/csliu | cpio -oF /root/csliu.cpio
查看
Server:~ # cpio -t < style="letter-spacing: 0px; ">Server:~ # cpio -tF csliu.cpio
還原
Server:~ # cpio –i < style="letter-spacing: 0px; ">Server:~ # cpio -iF csliu.cpio
VBox share folder setting
cpio + gzip
昨天轉貼了一篇將Ubuntu 6.10 Edgy放進我們的隨身碟裡,但是那個方法有些麻煩,因為還要是下載一個 USBEdgy.zip的檔案,而這個檔案也蠻大的,也有六百多M,若是只要利用原本下載的ISO檔那不是頂好的,那就用昨天所講可能的第三種方式來安裝,這個方式的流程幾乎是一樣的,只是我們今天用的是Ubuntu 7.04 Feisty Fawn 這個新的版本,安裝步驟參考Pen Drive Linux網站的網頁USB Ubuntu 6.10 Edgy install,我們先打下載回來的ubuntu-7.04-desktop-i386.iso這個ISO檔解開(可用poweriso、winrar等可以解開ISO檔的工具都行)到我們自己新增名為ubuntu的目錄夾內和到Pen Drive Linux網站的開網頁內下載一個檔案fixu.zip(約2K)和解開將裡面的兩個syslinux.cfg 和fixu.bat這個批次檔放進剛才我們自己設的ubuntu目錄夾內,並點擊fixu.bat這個批次檔,按照螢幕所是執行就可以了。其他的步驟和昨天這篇將Ubuntu Linux 作業系統放進我們的隨身碟裡---我的隨身儲存工具及使用---軟體幾乎一樣。這裡就在重新整理一次。利用虛擬作業系統載入ubuntu-7.04-desktop-i386.iso檔執行,進到Ubuntu Linux作業系統裡,開啟終端機程式,其他步驟如下 :
首先看看USB隨身碟有多少partition
sudo fdisk -l
再來把這些partition全部 umount (退出)
sudo umount /dev/sdaX (X就代入你的分割區代號)
然後就是重新分割USB啦
sudo fdisk /dev/sda
將原本隨身碟內的partition刪除,然後新建一個FAT16和一個Linux的partition,FAT16這個partition至少要707MB,因為先前我們自己新增的ubuntu目錄夾和一些動作後的大小大概要那麼大,所以給partition 1(FAT16)約750MB的空間(+750M),其他的就給Linux的partition。
再來就是格式化partition
sudo mkfs.vfat -F 16 -n USB /dev/sdb1 或 sudo mkfs.vfat -F 32 -n USB /dev/sdb1
sudo mkfs.ext2 -b 4096 -L casper-rw /dev/sdx2
當格式化完後,移除我們的隨身碟,然後再重新插入我們的隨身碟,將會看到 USB 和 casper-rw 這兩個partition出現。
然後把開機需要的syslinux也灌進USB裡面,做這個之前要先裝syslinux和mtools
sudo apt-get install syslinux mtools
再來安裝syslinux
syslinux -sf /dev/sda1
最後就是把ubuntu目錄夾內的檔案全部移到 USB (也就是FAT16這個磁區內)裡去,重新開機,進到BIOS內把開機順序改由USB設備或該隨身碟為先,儲存後再重開機,當啟動進入Ubuntu的開機選單按F2選擇你要的語言,然後再選擇 "USB",就可以了。
附記 :
上一篇貼文 :將Ubuntu Linux 作業系統放進我們的隨身碟裡---我的隨身儲存工具及使用---軟體。
Powered by Zoundry
[轉載] Build xPUD with mkxpud
Build xPUD with mkxpud
This is a brief how-to on building xPUD with Ubuntu 9.04.
Download Rootfs and Modules
$ wget http://download.xpud.org/devel/jaunty-rootfs.tgz $ mkdir jaunty-xpud $ sudo tar zxvf jaunty-rootfs.tgz -C jaunty-xpud/
Internet connection inside build system
$ sudo chroot jaunty-xpud/rootfs/ mkdir -p /proc/net/dev/ $ sudo chroot jaunty-xpud/rootfs/ dhclient
Upgrade and Setting
$ sudo cp /etc/hosts jaunty-xpud/rootfs/etc/hosts $ sudo chroot jaunty-xpud/rootfs/ apt-get update $ sudo chroot jaunty-xpud/rootfs/ apt-get upgrade
Export mkxpud from Repository
$ sudo git clone git://github.com/penk/mkxpud.git jaunty-xpud/rootfs/mkxpud $ find jaunty-xpud/rootfs/mkxpud -name .git* -exec rm -rf {} \;
Build the xPUD Rootfs
$ sudo chroot jaunty-xpud/rootfs/ $ cd mkxpud/ $ ./tools/mkxpud all
That’s it, the default cookbook will work. :-)
Bonus: Creating Image
if you’re looking for a way to combine the kernel and rootfs, download the linux-source, and edit .config
to find this line:
CONFIG_INITRAMFS_SOURCE="/home/penk/snap-mkxpud/deploy/default/rootfs.cpio"
replace it with your absolute path pointing to the rootfs.cpio just created, then:
$ make bzImage
after compiling, the file will be put under
arch/x86/boot/bzImage
.