[轉貼] GRUB 運作原理

: 如果有多台硬碟,我通常會建議把grub優先灌在IDE硬碟上的MBR。為什麼?
: 先解釋一些東西。『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

1. Download grub-0.97.tar.gz
ftp://alpha.gnu.org/gnu/grub

2. Update grub-0.97 source code

Start by applying the following patch to allow for better drive detection, fix some GCC 4.x issues, and provide better SATA support for some disk controllers:

$patch -Np1 -i ../grub-0.97-disk_geometry-1.patch

By default, GRUB doesn't support ext2 filesystems with 256-byte inodes. Fix this by applying the following patch:


$patch -Np1 -i ../grub-0.97-256byte_inode-1.patch

2.
$./configure --prefix=/home/gary/XXX
$make
$make install

Ref:

重建 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 啟動,我就是這麼作的,下回再來介紹。

How to clear partition table !!

清空 partition table
dd count=1 < /dev/zero > /dev/sdz

[轉貼]【教學】MBR 主啟動磁區剖析

MBR (Master Boot Record) 主啟動磁區剖析

--------------------------------------------------------------------------------

了解開機流程:

在 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 磁區戴入到記憶體 200h 的位置。

MBR 磁區大致上分為 3 個區域

語法:
----------------------------  <-- 位移值 00H (0 Bytes) |                          | |                          | | Boot Partition Loader    | | 這一小段程式用來將可啟動 | | 的作業系統分割區戴入     | |                          | |                          | |                     -----|  <-- 位移值 1BEh (446 Bytes) |---------------------|    | | Partition Table          | | 硬碟分割表          -----| |                     |55AA| ----------------------------  <-- 位移值 200H (512 Bytes) 
1. 第一個區域是程式區,稱為 Boot Partition Loader, 也有人稱為 Pre-Loader 或 Pre-Boot。這一段小程式用來將可啟動的作業系統分割區戴入 (應該說戴入可啟動作業系統分割區的啟動磁區 Boot Sector),並將控制權交給啟動磁區。其範圍從 000h 到 1BDh,共 446 Bytes。
因為這段程式區是除了 BIOS 之外最先被電腦戴入執行的區域 (不考慮軟碟),所以像是多重開機管理程式、開機型病毒、軟體式硬碟密碼鎖等程式,大多都是利用這個域區在工作。

2. 第二個區域是資料區,即硬碟分割表所在區域。其範圍從 1BEh 到 1FDh,共 64 Bytes。
這 64 Bytes 又劃分成四個區域,代表 4 個硬碟分割表,其範圍分別為

語法:
位移值 01BE ~ 01CD  <-- 第一分割表 
位移值 01CE ~ 01DD  <-- 第二分割表 
位移值 01DE ~ 01ED  <-- 第三分割表 
位移值 01EE ~ 01FD  <-- 第四分割表 
因為硬碟分割表區域容量只有 64 Bytes,只能切成 4 個分割表,這也是為什麼在使用 FDISK 時最多只能切出 4 個主分割 (Parmary Partition) 的原因 (擴充分割 Extended 也算是主分割的一種)。
也因為 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

dd if=/dev/hda of=/path/name.mbr count=1 bs=512 /*------------備份------------*/
備份MBR與partition table:
$dd if=/dev/hda of=/path/name.mbr count=1 bs=512


/*------------還原------------*/

還原mbr與partition table:
# dd if=/path/name.mbr of=/dev/hda

指令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

* 客端作業系統為Windows時:當你在功能表列上選取裝置→安裝客端額外功能,他就會開始安裝,直到結束。他就會將相關的虛擬驅動程式安裝完成,定打開主客間很重要的資料夾分享的功能,在使用手冊上說明你可以在命令提示字元上輸入net use x: \\vboxsvr\sharename其中”x”代表網路磁碟機的代號,你可以自選,”sharename”為你自己所設定的分享資料夾的名字,但或許你可利用檔案管理員上得的工具→連線網路磁碟機上去做選擇可能會容易一些。

* 客端作業系統為Linux時:在功能表列上選取和按下裝置→安裝客端額外功能後,就會掛載上一個虛擬光碟,然後利用root的權限執行VBoxLinuxAdditions.run,就會將額外的功能來開啟。而在主客間的資料夾分享功能,在使用手冊上說明是mount -t vboxsf [-o OPTIONS] sharename mountpoint,其中”sharename”是你自訂分享資料夾的名字,”mountpoint”是在linux裡所要掛載對應的資料夾位置,例如: /mnt/share,而在/mnt下的”share”目錄夾,你可要用root的身份去自己建立,所以你也可以自行去命名,所以自行可用如”sudo mount -t vboxsf myz /mnt/zd“。

cpio + gzip

壓縮
$find folder1 | cpio -ocvB | gzip > folder1.cpio.gz
$dd if=/dev/sdan bs=4096 conv=notrunc,noerror | gzip > /path/image.gz
解壓縮
$gzip -dc folder1.cpio.gz | cpio -idv
$gzip -dc /path/image.gz | dd of=/dev/sdan bs=4096 conv=notrunc,noerror

昨天轉貼了一篇將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.cfgfixu.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

當格式化完後,移除我們的隨身碟,然後再重新插入我們的隨身碟,將會看到 USBcasper-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.

Build xPUD with mkxpud

This is a brief how-to on building xPUD with Ubuntu 9.04.

Step1:

虹光大成就-密教灌頂(一)